一、项目介绍
加热台的用途,在烤肉煮面外,还有电路板焊接。淘宝网上有9.9包邮的加热台,然而其工作电压为220v,我感觉有一定安全风险,因此制作一个低压加热台是有必要的。
加热台围绕电子森林规定的STM32G0模块开展设计,使用24v直流供电,采用网上的开源的5欧姆铝基加热板,实现183°C中温锡浆的加热焊接功能。加热台的OLED显示屏上显示预设温度、当前温度和NMOS PWM占空比。通过按键大致调节加热台预设温度,加热启动后蜂鸣器持续报警。
二、设计思路
首先使用STM32CubeMX配置芯片。这一软件从MCU/MPU选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置,它给STM32开发者们提供了一种简单,方便,并且直观的方式来完成这些工作。所有的配置完成后,它还可以根据所选的IDE生成对应的工程和初始化C代码。
然后使用Keil5完成嵌入式软件的开发工作。CubeMX生成的代码须使用HAL库进行开发。通过查阅例程学习PWM、ADC、GPIO等外设的使用,通过查阅csdn、github等平台学习0.96/0.91寸OLED屏幕的使用。软件编写完成后,飞线引出STM32G0模块的调试引脚,使用JLink-OB调试器下载调试。
硬件方面,依然使用kicad设计PCB。确定加热台的预期功能后,在淘宝和立创商城查找相关元件,挑选性价比高的购买;利用立创eda查找各类器件的封装然后用插件直接下载,减轻手动画封装库的工作量。不过,STM32G0模块没找到现成资料,只好自己手动画封装库了。准备好相关元件库,随即开始原理图、PCB线路图的设计。
铝基加热板在立创开源平台有免费打样的方案,我直接用了https://oshwhub.com/nanxiangxiao/mini-jia-re-tai_copy上边的5欧姆铝基加热板(感谢该项目的作者!)。本项目的主要目的是设计制作一个加热台控制器,加热板的设计不在讨论范围之内。
三、搜集素材的思路
上立创开源平台搜索加热台,参考各种低压加热台的设计。考虑手上只有1个24V 4.5A的开关电源,最终确定加热板的电阻为5欧姆。另外,考虑到加热板和控制板一体化的设计(加热板叠放在控制板上)可能存在隔热问题,因此我将这两者分离后,通过1平方的电线供电。
四、各种问题
1. 模块供电
STM32G0模块没有引出5V引脚,初步计划是从5V转3.3V芯片的5V输入引脚处飞线引出。然而,模块上的空间狭小,USB插座严重阻挡电烙铁的操作;使用热风枪拆下USB插座后发现两个按键的塑料按钮融化已无法使用,模块报废……原定计划无法实施。
可行的两种方案为:STM32G0模块从USB接口专门外接5V电源供电,或者焊接1个5V转3.3V模块直接为STM32G0提供3.3V电源。两种方案各有优缺。为了第一个方案,所以我将屏幕接口的位置通过1个小型面包板移动到了加热控制板外部;考虑再三,我还是决定焊接1个5V转3.3V模块为好,使用时更方便。
2. 加热板安装
本来想用拆机耳机盒的弹簧探针来供电,但是PCB设计出现问题,开孔直径太小无法安装。综合考虑手上M2螺丝螺柱的长度后,我转而使用普通的排针进行供电。将排针焊接后,用肩头镊子拆除其下方的黑色塑料,然后用M2螺丝将加热板紧密压在排针上,与下方的支架PCB固定。
加热板支架和主板的PCB手动拼板在了一起(嘉立创不限eda打样券数量有限),使用前请沿中间缝隙切开。
五、效果展示
OLED屏幕显示:加热板预设温度、当前温度,以及系统工作状态。“IDLE”表示加热台待机,“RUNNING”表示正在加热,右侧的数字为输出到驱动电路的PWM占空比。加热板最低设置温度为20°C,温度设置步进幅度10°C。
整体效果请看页面上方的视频。加热台轻松融化183°C锡浆。对了,蜂鸣器焊接好发现接触不良所以两个引脚上并联了一个电阻,然后接触良好。真奇怪。
六、关键代码
STM32提供给驱动电路的PWM所用定时器的设置如下。请注意,“CH Polarity”设置为“High”,在占空比为0时输出高电平,此时8050导通,让后边MOS管栅极保持低电平,不导通。
温度控制,没有用PID,以后考虑加入。
if(status==1){
if((int)current_temp>desired_temp+5) duty_cycle-=9;
else if((int)current_temp<desired_temp-5) duty_cycle+=9;
if(duty_cycle>99) duty_cycle=99;
else if(duty_cycle<0) duty_cycle=0;
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, duty_cycle);
}
else{
引脚中断函数。
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin==BTN_INC_Pin){
desired_temp+=10;
}
else if(GPIO_Pin==BTN_DEC_Pin){
desired_temp-=10;
}
else if(GPIO_Pin==BTN_ON_Pin){
if(status==0){
//HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim14, TIM_CHANNEL_1);
__nop();
}
else{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, 0);
HAL_TIM_PWM_Stop(&htim14, TIM_CHANNEL_1);
}
status=!status;
}
if(desired_temp>=250) desired_temp=250;
else if(desired_temp<20) desired_temp=20;
}
MAX6675和OLED的驱动代码在网上很容易找到,这里不作展开。
七、STM32G031核心模块的优势与局限
优势:集成度高,半孔设计,可以快速开展设计验证。
局限:没有引出5V引脚 : (
调试接口只有测试点,使用jlink调试代码不太方便。
对于本项目,我认为使用不带下载器的电子森林STM32G0最小系统模块可能更合适,因为加热台没有和电脑开展串口通信的需求。不带下载器的STM32G0模块需要通过外部电路提供3.3V电源,在设计时需要注意。