
1、 引言
电磁炉是家用电器的主要菜肴厨具电磁炉电源板电路图讲解,无需明火以电磁感应加热方法直接烘烤锅具底部,是一种安全高效卫生的加热器具。目前有许多文章介绍电磁炉加热原理及其一些保护原理,本文详细表明怎样用单片机输出正确的时序来测量电磁炉是否有锅具以及怎样加热。
2、 电磁炉检锅
2.1检锅的工作原理

1
上图给出了电磁炉原理图,主要组件:主回路、同步振荡电路、驱动电路、单片机、开关电源、浪涌保护电路、电压测量、电流测试电路、测温模块、风扇模块等。正常工作的机理:线圈盘与电容C6谐振的每个周期,通过同步电路测试在IGBT的C极电压为零时,开通IGBT对线盘充电。

电磁炉在正常工作前,需要进行检锅,判断是否有锅以及锅具的大小是否适合。图2是为无锅时序图,图3为有锅时序图。启动时,PWM输出占空比为百分之五十,比较器脚⑤电压为2.5V,首先OFF_IGBT为低电平打开驱动模块,单片机给START口一个约8us的低电平,此时比较器脚⑥为一个三角波与脚⑤比较,则脚⑦输出一个高脉冲打开IGBT,接着立即将OFF_IGBT置高关闭驱动模块,同时将START口设定成输入口,在接下来大概280us的时间内测试START口电平翻转的次数,若有锅,则数量超过10次,若无锅,则有150次以上(根据实际检测调整),这样就可以判定是否有锅。

图2 无锅时序图

图3 有锅时序图
如无锅具或锅具不合适则等待3秒后再次测试锅具;如检查有锅具,则START口再次输出一个8us的低电平脉冲,而这时OFF_IGBT口不再关闭,如图3所示,主回路则连续振荡且每个周期充电。
2.2检锅的程序代码分析

根据之前的时序,下面给出了详细的C语言单片机代码。编程时需留意以下几点:
a、检锅为计数为关键代码,如被计数时被中止,则妨碍检锅计数值,所以在这之前需关闭总中断。
b、START口的高低电平的总量,是通过每1us检测START口的状况,高电平的变量j加1,低电平变量k加1。如必须最准确的计数,则能借助计数器计数。
c、代码中包括了电磁炉正常工作时的移锅检测,电流突然变小,则觉得锅具移除,设置无锅具标志。
void PAN_Detect(void){unsigned char i = 0;unsigned char j = 0;unsigned char k = 0;if(Test_NoHANDLE) return; //如果进入禁止控制状态,则不检锅if(Test_NoPan) //无锅检测{ if(Delay_3s == 0) //判断等待3秒是否未至{PWM3DCH = PWM50DUTY; //PWM0的占空比为50% ((64-32)/64)Output_PanCheck; //START口设置为输出口Set_IGBTOff; //关IGBTSet_PanCheck; //锅具检测START口置高Delay_8us(); //等待8usDelay_3s = 3; //3秒变量重置DisableInterrupts(); //关总中断Clr_IGBTOff; //开IGBTClr_PanCheck; //START口置低Delay_8us(); //等待8usSet_PanCheck; //START口置高Input_PanCheck; //START口更改为输入口Set_IGBTOff; //OFF_IGBT口关闭for(i = 0; i < 255; i++) // 计数START口的高低电平数量(280us){Delay_1us();if(Test_PanCheck) j++;else k++;}EnableInterrupts(); //打开总中断if(k < 31) //低电平数量大于31,判断为有锅具{Output_PanCheck; //START口设置为输出口Clr_NoPan; //清除无锅标志Clr_IGBTOff; //开OFF_IGBT口DisableInterrupts(); //关闭总中断Clr_PanCheck; // START口置低Delay_8us(); //等待8usSet_PanCheck; // START口置高EnableInterrupts(); //开总中断Input_PanCheck; //START口更改为键入口}else //低电平数量多于等于31,判断为无锅Warn_Flag = ERC_NOPAN; //警告变量设置为无锅}}else //有锅检测{if((Delay_3s == 0)&&(Sys_Current < 4)) //3秒等待未至,且采样电流值小于4{ Set_NoPan; //设置无锅标志Set_IGBTOff; // OFF_IGBT口关闭} }}
3、 电磁炉功率调整
3.1功率调整的工作原理


图4 比较器引脚电阻图
如图4,电磁炉正常工作时,比较器脚⑥电压为三角波,与脚⑤电压比较后,生成脚⑦驱动波形。脚⑥电压为同步电路经过电阻造成的,脚⑤电压为单片机PWM口输出波形,经过RC滤波形成直流电流。所以PWM的信噪比升高,则电磁炉功率减小,占空比降低,则电磁炉功率增加。
3.2功率调整的代码分析
下列为电磁炉功率调整代码,Sys_Current为系统实际电流变量,Set_WorkCurrent为设定电流变量,PwmData为目标占空比变量,PWM3DCH为单片机实际占空比。以设定电流值与实际功率值做相当,来微调目标占空比变量PwmData。再用PwmData来微调单片机实际占空比的解释器PWM3DCH。需要切记的是,PwmData需要设定上下限,防止电磁炉功率降低或偏低。
void IH_AdjustPower(void){unsigned int sysvolt; if(Test_NoPan||Test_NoHANDLE) return; //无锅或进入禁止控制状态,则不予处理if(Sys_Current < Set_WorkCurrent-3) //工作电流大于设置电流PwmData++; // PwmData加1else if(Sys_Current > Set_WorkCurrent+3) //工作电流小于设置电流PwmData--; // PwmData减1if(PwmData > PWM90DUTY) // 防止PwmData过大PwmData = PWM90DUTY;else if(PwmData < PWM40DUTY) // 防止PwmData过低PwmData = PWM40DUTY;DisableInterrupts(); //关闭总中断if (PWM3DCH > PwmData) PWM3DCH--; // PWM3DCH调整else if (PWM3DCH < PwmData) PWM3DCH++; EnableInterrupts(); //打开总中断}
4、 电磁炉工作主流程

4.1主函数流程
电磁炉的整个工具流程图如图5, 初始化完成后,进入大循环。先10ms时基处理,再检测系统电压、IGBT温度、系统电压,最后100毫秒和1秒时基处理。
当系统电压或IGBT温度有异常,则中止加热,重新开启循环。所以重要的程序要放在10ms时基函数中,如与显示板的通讯程序。将检锅函数跟电压调整变量放在100ms时基方程中,在1s时基函数中放在时间规定不高的程序电磁炉电源板电路图讲解,如风扇、计时等。

图5 主程序流程图
4.2主函数程序的代码分析
通过上面的流程图,写出相应的代码如下。
void main(void){System_Init(); //初始化while(1){ if(Test_10mSedA) //10ms时基处理{Clr_10mSedA;T10mSCheck (); //10ms函数调用} SystemVoltageCheck(); //系统电压检测if(Err_Flag) {IH_NormalStop();continue;} //异常则中止加热,并再次循环IGBTTempCheck(); //IGBT温度检测if(Err_Flag) {IH_NormalStop();continue;} //异常则中止加热,并再次循环SystemCurrentCheck(); //系统电流测量if(Test_100mSedA) //100ms时基处理{Clr_100mSedA; if(Test_IHOnOff&&(Err_Flag== 0)) //检查电磁炉开标志和故障标志{if(!Test_NoHANDLE) //无禁止控制{PAN_Detect(); //检锅子函数if(!Test_NoPan) //有锅具{IH_AdjustPower(); //功率调整变量}}else //有禁止控制{IH_NormalStop(); //停止加热}else //电磁炉关或有故障{if(!Test_IHOnOff) Err_Flag = 0; //如电磁炉关,清除故障变量IH_NormalStop(); //停止加热}}if(Test_OneSedA) //1S时基处理{ Clr_OneSedA;T1sCheck();}}}
5、结论
本文详细讲解了基于单片机的电磁炉控制原理,详细预测了电磁炉检锅时序,功率调整的方式或者主程序控制步骤,同时帮了完整的程序代码。只需基于上面的加热控制核心代码,在固定的时基内添加一些附加功能代码或显示代码,即可以成为一个完善的电磁炉程序。
此帖出自微控制器 MCU论坛
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/dianqi/article-141679-1.html
对于美舰来说这是在闯鬼门关
说的真好
当然美国侵入