
基于STM32F103C6T6和光耦可控硅的可控温加热台
简介
220V可控温加热台。拥有LCD屏幕显示工作状态,可通过按钮设定目标温度。
简介:220V可控温加热台。拥有LCD屏幕显示工作状态,可通过按钮设定目标温度。开源协议
:MIT License
(未经作者授权,禁止转载)描述
基于STM32F103C6T6和光耦可控硅的可控温加热台
【安全警示】本项目包含高压电单元,存在触电、烫伤、起火等安全风险。如有实际使用需求,建议您选用具有品质保障的商用加热台。
【免责声明】本项目仅供理论学习交流,设计资料按“现状”提供,不保证无缺陷或故障。您应自行评估项目的适用性,对复刻行为的风险和产生的后果负责。作者不对您复刻项目导致的直接、间接损害承担责任。
目录:1.简介→2.功能描述→3.电路原理(光耦电路计算)→4.代码说明→5.烧录与组装→6.附件
1. 简介
这是一个室温~270℃的可控温加热台。单环PID控温,恒温状态下温度波动±5℃。220V供电,最大功率300W,可设置最大加热功率避免跳闸。可满足作者日常低频率折腾电路板的需求。
特色:
玲珑小巧。长宽高10 * 7.3 * 7 cm,外壳由防水盒与六角螺柱组装;
操作简单。LCD屏幕显示当前温度,四个按键的交互逻辑与常用加热设备相似;
成本压制。电路元件、外壳和电源线,共约70元(不含工具与人工成本);
适度创新。相比同类设计,本项目无晶振和复位按钮,使用STM32内部Flash保存设置。
原理:用光耦和可控硅控制电源的通断,调节PTC加热板的加热功率以保持特定温度。温度由热电偶采集。
兼容提示:组装过程具有一定复杂度,需要在防水盒上挖槽和钻孔,以及焊接连接显示面板的10根飞线!工程代码在IAR (v9.30)上开发,Keil用户需自行移植。

2. 功能与按键
有限制加热台的最大加热功率的功能,可应对工位限电的情况。

3. 电路原理分析
3.1. 原理图
请见附件。
3.2. 光耦可控硅电路设计
▶ 光耦与继电器的比较
继电器和光耦都能做到强电弱电隔离、以小电流控制大电流,那为什么要用光耦可控硅呢?如果只是控制开和关,完全可以使用继电器。比如拆解家里的小熊牌电炖盅,里面用的是Ronway继电器。我认为用继电器也完全没问题,成本也更低,但是存在以下问题①继电器约具有十万次开关寿命;②继电器弹簧片的释放和吸合具有10 ms的延时,所以调控功率的PWM信号频率不能过高;③如果在交流峰值处闭环或断开,容易产生电火花,电路噪音更大。所以从使用寿命、控制精度等角度考虑,使用光耦可控硅方案。
▶ 过零光耦+双向可控硅工作原理
电路中,光耦负责强弱电电气隔离,双向可控硅负责大功率负载通断。
控制加热开启的过程可分为3个步骤。初始状态下,PWM为低电平,后级电路都为关断状态。①PWM转为高电平,三极管S8050导通,使光耦导通。相比于普通光耦,过零光耦CT3063的导通或截止状态只会在交流电电压过零点时改变,避免了产生电火花。②交流电在过零导通后,电压从0V逐渐上升,此时可控硅BT138并未导通,导电路径为图中黄色箭头曲线:从火线出发、R3、可控硅Q1的G脚流向T1脚,经过加热片从PTC_L到PTC_N,流入零线。③当R7上的电压超过可控硅的门极触发电压(V_GT>0.8 V,或触发电流I_GT>10 mA)后,可控硅BT138导通(相当于T1和T2短路,导电路径变为图中蓝色的箭头),交流电就主要从晶闸管上流向加热片了,R3和R7上的电压降为0。
PWM低电平时,光耦在下一次过零时断开断开,导通的可控硅也随之断开,流向加热片的电流中断。

光耦选型,需要考虑峰值击穿电压(Peak Breakdown Voltage),也称为断态输出端电压V_DRM(Off-State Output Terminal Voltage),CT3063击穿电压为600V,大于市电波幅1.414*220V=310V,符合要求。
双向可控硅选型,也需要考虑重复峰值阻断电压V_DRM,和最大通态电流I_T(RMS)。BT138-800E的阻断电压800V,最大电流12A,满足加热台功率要求。
▶ R5计算
R5为光耦LED限流电阻,其取值范围详见原理图中的标注。假如忽略三极管S8050的压降V_CE,则R5=(VCC -V_F)/I_FT,式中包含如下重要参数:
输入触发电流I_FT(Input Trigger Current):只有电流大于该值,光耦才能稳定的触发。虽然STM32的引脚能够承受直接输出5mA的电流,但还是建议通过一颗三极管转接一下,以减小主控芯片的发热。

最大输入电流I_F:在Absolute Maximum Rating中可以找到该参数。输入电流也不得大于该值。
![]()
正向压降V_F:在光耦内LED上会有一定的压降

根据以上值,可以计算出限流电阻R5的取值范围。
▶ R3计算

R3的作用也是限流电阻,其取值由 峰值重复浪涌电流I_TSM(Peak Repetitive Surge Current) 决定。R3=交流电网电压峰值/I_TSM = 310V/1A = 310Ω,但由于买的电阻包中通常不包含该阻值,所以选取最近的300Ω或360Ω。

▶ R7的取值
R7是防止可控硅误触发的电阻,可断开不接。如果断开R7,当可控硅关断时,因负载电流滞后电压,可能传递一个小阶跃电压到G脚上,使可控硅误触发,结果是可控硅后的负载一直工作、无法停下。添加了R7后,相当于把G脚下拉到T1脚上了,可控硅就不那么敏感了。R7的取值比较灵活,网上方案中大到1kΩ的都有。为了少买物料,可以用和R3相同的阻值。
R3和R7电阻阻值会影响系统的电磁干扰(EMI),当R3电阻分压较大时,可控硅导通前需要T1和T2两脚之间的电压更大,电路噪声更大。
在正常工作时,R3和R7上经过的平均功率较小,但电阻需要能承受高压。所以建议选择插件电阻,或把多个贴片电阻串联。我实际测试中使用的2512封装,长时间工作后R3会有较明显的发热,R7和可控硅没有明显发热。
(以上R3、R7等计算我也不是很清楚,最好还是有机会了测一下可控硅后的信号看看取值的影响。)
▶ RC电路
若被控制的电压变化dV/dt过快,超过了可控硅的断态电压临界上升率(Critical rate of rise of off-state voltage),也会使可控硅误触发。并联的RC支路可以起到缓冲的作用。由于PTC加热板几乎是阻性负载,所以也可以不添RC吸收回路。RC串联的复阻抗Z = R-j*[1/(2πfC)],由于电容值非常小,故交流电不会通过电容短路。
▶ 参考文献:
[1] 曹晓伟. MOC3061系列光电双向可控硅驱动器[J].国外电子元器件,1996,(12):2-4.
[2] Parameter list for SCRs, Triacs, AC Switches, and Diacs
3.3. 控温设计
▶ K型热电偶特性与温度采集
K型热电偶中,正极通常为镍铬合金,负极通常为镍硅合金,在两种金属连接点处存在温度差时,会产生热电势。由于该电势值非常小,选用专用芯片MAX6675减少麻烦,直接读12位数字量,精度为0.25℃。
MAX6675内部自带冷端补偿,焊接时不要让芯片烫太久。我刚焊上去后几天试着测室温竟是40℃,过了半个月后测温度又正常了,非常神奇。由于没有温度计进行测量和校准,先暂且相信MAX6675的读出结果。

▶ PID控温调参建议
由于从加热到热量传递到加热片表面具有5s左右的延迟,属于高延迟系统。因此,初始的p,i,d都设为0,先调节p至能较快速达到目标温度而不强烈震荡,然后调大d值减小震荡。i值可以不用调,i过大会加剧温度的波动。
▶ 加热模型与改进方向
本项目目前使用的是经典的PID算法,恒温工作时,温度波动在±5℃,首次升温会有10℃的过冲。为了提高控温精度,后期打算进一步改进(咕咕咕),使用从模糊PID控制算法。
本加热台的物理模型基本符合带纯延迟的一阶惯性对象,温度G关于时间s的函数满足公式:![]()
式中,K为系统增益、T为惯性时间常数、τ为纯滞后时间常数。通过测量加热台的温度随时间变化的曲线,可以确定这三个参数,打算参考相关文献使用模糊PID控制算法,对温度进行分段控制。

3.4. 电源

使用HLK-PM03模块,将220V转为3.3V给单片机供电。注意加装保险丝,R1为压敏电阻,防雷击。R2防输出端短路。由于对电压稳定性没有太高要求,所以未加上安规电容和共模电感。
4. 代码架构与问题记录
4.1. 代码整体思路
由于加热台的功能过于简单,直接裸机编程,中断逻辑设计如图。让定时器TIM1每隔1s产生一个中断,测量一次温度。温度测完后,将新的温度值在液晶屏上显示出来,并计算一次PID控温,然后修改定时器TIM2输出PWM的占空比。最后MCU回到低功耗。当按钮按下后,也产生中断使MCU进行液晶屏界面更新。
PWM设置的频率与中断频率相同,为1 Hz,占空比在在0%~100%之间调节。

为保证温度测量准确,定时测温的中断拥有最高优先级,与MAX6675通信过程在中断函数中完成。而屏幕更新所需的时间较长,故在中断函数中只标记“需要更新液晶显示”这个中断标志位,屏幕具体切换到那个页面放在中断函数外执行,这样也避免了屏幕在页面更新时又进行另一个页面更新,而使屏幕卡住。
按键并联了电容进行消抖,同时软件上也用中断实现了一个非阻塞性的冷却时长,避免灵敏的“温度+/-”按键与使用者的内心预期产生较大差距。
4.2. 工程文件说明
这是工程文件夹,真正需要用到的只有下图方框中四个文件夹内的代码,其它的是IAR和VSCode生成的文件。如果用IAR可以直接打开工程;如要移植到Keil,需要将四个文件夹中的代码创建一个工程,并将core_cm3.c和.h文件为替换Keil环境支持的。

4.3. 使用STM32的内部时钟
由于未连接晶振,故STM32自动使用内部高速时钟HSI,频率8MHz。项目代码中将HSI通过PLL倍频为64MHz,作为系统的时钟源。
4.4. 使用内置Flash保持设置
项目代码中将设置的数据,循环写入在STM32C6T6内置flash的第30扇区(倒数第2个扇区)中了,可以下电后内容不丢失。循环写入能减少擦除次数,延长Flash的寿命。如果修改本项目的代码请留意不要在该扇区储存程序。
5. 烧录与组装
5.1. 烧录
IAR编译好的固件“HeaterC6T6.hex”在“./Debug/Exe/”路径下。
断开220V市电,连接好ST-Link的3V3、GND、SWCLK、SWDIO四根线,插到电脑上。可能是由于代码中开启了中断服务函数,所以烧录一次后,第二次就烧不进去了。本加热台为节省物料,电路中没有给stm32留复位按钮,所以网上的“点击烧录后短按一下复位按钮”的方法就用不了了。找到的解决方法是:在ST-Link插上电脑后,赶在程序进入中断前(main中第一句delay()给大家留了充分的时间),把程序给烧进去或把flash给擦了。
若在IAR上烧录,发现工程的Reset方法得设置为Core(默认为system(default))。不然会报错“fatal error: initial reset failed, please check project settings”。

若使用“STM32 ST-LINK Utility”软件进行烧录:ST-LINK插上电脑后赶紧点击“Target - Erase Sectors...”把程序擦除了。如果擦除不了就点“Target - Option Bytes...”,先把flash的readOnly解锁,如果一次解锁不了就再解锁一遍,然后再擦。之后烧录就不会报错了。
5.2. 零件成本

物料成本约70元,并且还会多出很多料。电烙铁、电钻、锉刀、剪钳等加工工具约需100元。
PTC发热片、螺柱螺母、电源线、220V转3V3模块等占据了加热台的主要成本,这些可在tb买。阻容等在立创商城买更合算。
5.3. 组装中遇到的问题记录
- 热电偶固定:我选择将裸露的热带偶金属丝用高温胶带直接粘到加热台反面,所以测得的是下表面的温度。热电偶多出来的线被卷起来塞在第一层盖板上的空间。热电偶也会将很多热量传递到下面。
- 焊盘调整:接加热台和电源线的焊盘的孔要调大一点!
- 防水盒挖槽孔:使用了60W冲击钻3~5mm的钻头钻孔,先钻出一个大致的形状,再用电子剪钳剪断,用锉刀把槽孔搓光滑。
- 翘板开关:防水盒3mm太厚了点,翘板开关后的夹片得稍微剪短一点。有的翘板开关是带灯的,需要将零线连接到开关的第三个脚上才能亮,本设计中的开关只用了两个引脚,故开关上的灯不亮。
- 液晶屏:淘宝上有的屏幕是BGR的,代码中得反着设置成BGR才会显示成RGB。
- 显示面板的飞线:焊接要耐心一点,铜线上好锡后再去焊到焊盘上。任意一根线没焊牢,最终都会出问题。
- 按键按着后陷入外壳内:在面板后垫一个纸方块,防止面板变形位移。
- 紧固件:可用铁制的六角螺柱,比铜传热性差一些。螺柱、螺钉、螺母都是M3的。
- 绝缘:给加热板的电源线套一层热缩管,加热台面可以再贴一层耐高温胶带

从工作量上来看:不如淘宝上直接买一个80元的加热台。
如果加热20min,短期内下层盖板的温度几乎不变。若连续加热3h,下层盖板中心的温度上约能升到60℃,摸上去有点小烫,上层盖板温度更高。目前加热台能够在高温长期工作,但散热还需改善。
6. 致谢
感谢嘉立创2024年星火计划提供了80元的元器件支持!让我第一次尝试打造了一个完整的作品。项目中存在许多错误和不规范的地方,还请大家指正。

[易于收纳和打包带走]
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










