PWM控制加热.docx
- 文档编号:485042
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:38
- 大小:1.70MB
PWM控制加热.docx
《PWM控制加热.docx》由会员分享,可在线阅读,更多相关《PWM控制加热.docx(38页珍藏版)》请在冰点文库上搜索。
PWM控制加热
PWM控制加热
PWM控制加热
摘要:
介绍了以STC89C52单片机为核心,使用PWM技术和闭环系统实现对温度的自动或手动控制的系统。
系统通过温度芯片DS18B20采集温度信号,并将温度信号传送给单片机。
并由单片机进行相应处理,根据目标温度与实测温度关系决定是加热占空比高还是停止加热占空比高,从而实现对温度的闭环控制的目的。
系统还加入LCD液晶显示电路,使得整个设计更加完整,更加灵活。
系统可通过键盘设定温度,LCD显示设定温度值及当前温度值。
关键词:
STC89C52单片机;温度控制;PWM;DS18B20;LCD液晶显示
1引言
温度是众多行业生产中的基础参数之一,随着社会的进步、工业的发展,温度控制技术也不断革新,但其还处于初级发展阶段,很多领域对温度控制有着更高的要求。
因此,温度控制是生产工艺流程中极为重要的一个环节,尤其在电力、航天、交通、造纸、装备制造、食品加工等行业有广泛的应用。
利用单片机来对温度进行控制,不仅能够有效地提升控制能力与生产的自动化,而且还有可能尽早实现智能化的目标。
和传统的温度控制相比,基于单片机实现PWM的温度控制可以降低能源消耗。
因为传统的温度控制都是通过电阻限流的方式到达的温度控制,这样虽然加热器的热量小了,但是整体的功率并没有根本性的改变,造成了能源的浪费。
而PWM是通过占空比实现的并没有限流的损失,这样就会大大节约能源。
本文主要研究的就是利用单片机的PWM技术而设计的温度控制系统。
2理论分析
2.1PWM
PWM是英文“PulseWidthModulation”的缩写,即脉冲宽度调制,简称脉宽调制。
它是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PWM是开关型稳压电源中的术语。
这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。
脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
其中方波高电平时间跟周期的比例叫占空比,例如1秒高电平1秒低电平的PWM波占空比是50%。
PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换,PWM相对于模拟控制的另一个优点是增强对噪声抵抗的能力
。
2.2PWM控制技术
PWM(PulseWidthModulation)控制技术就是对脉冲的宽度进行调制的技术,即通过对一系列脉冲的宽度进行调制,来等效的获得所需要的波形(含形状和幅值);(冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。
按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。
)而控制方法有:
为了克服PAM法方波电压而不能调压这个缺点发展而来的等脉宽PWM法;为了减少电机绕组的电磁噪音及谐波造成的振动而发展而来的随机PWM方法;以采样控制理论中的一个重要结论为理论基础而产生的SPWM法;把SPWM法原理直接阐释成为等面积法;为计算繁琐的缺点而提出的硬件调制法;由于用软件生成SPWM波形变得比较容易而提出的软件生成法;使所得SPWM波形最接近正弦波而提出的自然采样法;对自然采样法的改进而成为规则采样法;以消去PWM波形中某些主要的低次谐波为目的的方法而成为低次谐波消去法;为了提高直流电压利用率提出了梯形波与三角波比较法;对于像三相异步电动机这样的三相无中线对称负载提出了线电压控制PWM,其中包括马鞍形波与三角波比较法和单元脉宽调制法;以把希望输出的电流波形作为指令信号的基本思想而提出了电流控制PWM,其中包括滞环比较法、三角波比较法以及预测电流控制法;以三相波形整体生成效果为前提,以逼近电机气隙的理想圆形旋转磁场轨迹为目的而提出了空间电压矢量控制PWM(SVPWM)等等。
PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。
PWM控制技术主要应用在电力电子技术行业,包括风力发电、电机调速、直流供电等领域。
总之,PWM既经济、节约空间、抗噪性能强,是一种值得广大工程师在许多设计应用中使用的有效技术
。
3系统设计
硬件电路主要分为电源电路、复位电路、时钟电路、按键电路、LCD显示电路和温度采集电路六部分。
采用集成的单片机作为主控,通过温度传感器采集数据信息,将结果传送到单片机控制的主控器,数据通过显示器显示。
通过按键改变设定温度,从而改变运行操作程序。
系统整体结构如图1所示。
图1系统整体结构
3.1设计方案比较和论证
3.1.1单片机系统
单片机种类很多,刚开始想到ATMEL公司的51系列单片机,但翻阅资料后发现STC89C52单片机:
处理速度快;价格低;加密性强;超强抗干扰;超低功耗;在系统可编程,无需编程器,无需仿真器。
3.1.2温度传感器
温度传感器种类繁多,按照测量方式可以分为接触式和非接触式两大类;按照传感器材料以及电子的元件特性可分为热电阻和热电偶两类。
传统的温度检测多数情况下以热敏电阻为传感器,但热敏电阻可靠性差、测量温度准确率低,且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。
而DS18B20能够直接读出被测温度并且可以根据实际要求通过简单的编程实现9~12位的数字值读数;以其独特的一线接口方式,实现多点能力;无需连接外部元件,就可用数据总线供电,电压范围为3.0V至5.5V;测量温度范围为-55°C至+125℃,其中-10°C至+85°C范围内精度为±0.5°C,最大分辨率可达0.0625℃,可实现高精度测量。
所以,在本设计中选择DS18B20温度传感器
。
3.1.3显示电路
通常显示电路主要有两类:
数码管(LED)显示和液晶(LCD)显示。
液晶显示屏(LCD):
低压微功耗、平板型结构、显示的信息量大、无电磁辐射、使用寿命长等优点,但本设计要求显示的数据量小,不能发挥其显示内容丰富的优点,同时占用I/O口线较多。
数码管显示(LED):
采用LED数码管显示,该方案具有实现容易、发光亮度大、驱动电路简单等优点,但是显示内容单一。
所以,通过比较之后,我选择液晶显示屏来显示温度。
本设计选择LCD1602,用来满足一定的视觉要求。
3.1.4PWM信号
脉冲宽度调制信号的形成电路有4种:
(1)可用电压-脉宽变换器产生,即硬件产生脉宽调制信号;
(2)由软件定时产生,由定时器定时,定时时间受软件控制,并从脉宽信号的输出口P1.0或其他口输出脉宽可调信号;(3)由单片机控制外接定时/计数器(如8253)硬件电路产生脉宽调制信号,只需用两个计数器分别工作于方式1和方式2,通过硬件连接便可以产生脉宽调制信号;(4)软件延时模拟。
其中,第一种是硬件电路实现,电路复杂。
第二种使用定时器T0,但由于系统计数器不足,必须扩展。
第三种是利用8253需要额外开销,所以我们选用软件延时非常方便,于是本系统选用了第四种方式进行PWM调制
。
4系统硬件设计
硬件电路主要由八大块构成,分别是:
复位电路、时钟电路、P0口上拉电阻电路、按键电路、LCD1602显示电路、DS18B20测温电路、电源电路、温度控制电路。
4.1复位电路
复位电路是单片机系统最基本的组成部分,可靠的复位设计是保证系统可靠运行的前提。
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。
复位电路可以用很多方法来实现,但是从功能上一般分为两种:
一种是电源复位,即外部的复位电路在系统通上电源之后直接使单片机工作,是用电源来控制单片机的开始与停止;另外一种是按键复位,就是在复位电路中设计按键开关,通过按键开关触发复位电平,控制单片机的复位
。
经过比较,本设计采用电源复位,设计电路如图2所示。
图2单片机复位电路
4.2时钟电路
时钟是单片机内部电路工作的基础,也是CPU工作时序的时间基准。
时钟电路用于产生单片机工作所需的时钟信号。
单片机内部有一个高增益反相放大器,用于构成振荡器。
其输入端接至单片机的内部,即XTAL1引脚,其输出端接至单片机的外部,即XTAL2引脚。
在XTAL1和XTAL2两端跨接一个晶振,两个电容,构成一个稳定的自激式振荡电路。
电容C1、C2起稳定振荡频率、快速起振作用,容量的选择范围为5~30PF,通常选择30pF。
振荡频率的选择范围为1.2~12MHz,本设计选择12MHZ,时钟周期为(1/12)μs。
如图3所示是单片机内部时钟方式的振荡电路。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号
。
图3片机内部时钟电路
4.3P0口上拉电阻电路
STC89C52单片机P0口内无上拉电阻,单片机对端口的输出是通过控制内部的场效应管导通或截止实现的,如果没有上拉电阻,虽然单片机输出1通过锁存器反相使场效应管截止,但单片机的端口还是无法得到高电平(输出0不影响),因此P0口处需加上拉电阻。
如图4所示。
图4P0口上拉电阻电路
4.4按键电路
按键有二个,分别是S2和S3,其中S2作为加按键,S3作为减按键。
通过两个按键,可以用来设定目标温度程序,加按按键和减按键,用来增加或者减少设定的目标温度。
如图5所示。
图5按键电路
4.5LCD1602显示电路
LCD1602采用标准的16脚接口,字符型LCD通常有14条引脚线(市面上也有很多16条引脚线的LCD,多出来的2条线是电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样)。
其中第3脚接一个10K的电位器可以用来调整液晶显示屏的对比度。
其内部的驱动器为HD44100和控制器HD44780,都采用低功耗CMOS技术。
采用并行8位数据线的传送方式,当然使用者也可以通过软件设计,使用四条数据线来控制液晶显示屏。
目前市面上的字符型液晶绝大多数是基于HD44780液晶芯片的,所以控制原理是完全相同的,为HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶
。
本系统液晶显示屏主要显示设定的目标温度和当前目标温度,如图6所示。
图6LCD1602显示电路
4.6DS18B20测温电路
DS18B20是美国DALLAS半导体公司生产的单总线数字温度传感器,它可以实现数字化的输出和测试。
每一个DS18B20包含一个唯一的64位长的序号,该序号值存放在DS18B20内部的ROM(只读存储器)中。
DS18B20的1管脚接地,2管脚为数字输入/输出脚需要连接上拉电阻到电源并接至单片机端口,3管脚接电源
。
如下图7所示。
图7测温电路
4.7电源电路
单片机系统电源主要运用220V的电压通过电路来实现芯片所需的+12V电源。
如图8所示,该电源电路主要通过变压器把220V电压降压,经电桥整流、电容C1滤波产生24V电压,再利用7805集成芯片稳压输出+12V直流电压。
输入电容C1是用来改善纹波和抑制过电压,C2是用来改善负载瞬态响应
。
图8电源电路
4.8温度控制电路
本设计中采用PWM来控制温度,此模块电路是为调节温度的PWM脉冲设计的。
单片机控制Q3有两种状态:
1.Q3的基极为高电平,PNP截止此时Q2由于基极有下拉电阻NPN也处于截止,Q1有4.7K上拉电阻Q1场效应管不导通,此时PTC不通电不加热;2.Q3基极为低电平,PNP导通,此时Q2也导通,场效应管也处于导通PTC有电流处于加热状态。
PWM脉冲主要是数字电路的0与1的表现,当脉冲为0时,Q3的PNP型三级管导通,由Q2电路可知Q2也会跟着Q3一起导通,这样场效应管就跟着导通接入12V电源PTC开始加热;当脉冲为1时Q3截止,由于Q2有下拉电阻于是Q2也跟随截止,导致场效应管断开,即PTC停止加热。
当DB18B20所获得温度大于60度时,系统会减小加热时间使温度下降,直至低于60度时,系统会再次提高加热占空比使温度上升,使得系统维持在60度。
此时,单片机产生一定占空比的PWM脉冲,就会使PTC功率控制在一定范围内处于恒温,也就是所谓的温度控制
。
如图9所示。
图9温度控制电路
5系统软件设计
软件编写的语言一般情况下,有汇编语言和C语言两种,两种语言各有优劣。
用C语言编写程序的优点是:
编写简单,容易上手,网上有许多已编写好的子程序,可以通过学习再结合自己想要实现的功能,从而编写相关的程序,因此开发程序所需时间也相对短。
而用汇编语言编写则相对要求高一些,它要求对硬件有足够的了解和认识,在此基础上,严格地对照各部件的时序图,进行程序的编写,而且读起来相对繁琐
。
通过两种语言的比较,C语言学起来很快,所以我选择采用C语言编写。
5.1PWM控制加热软件的主程序及流程图
程序的最基本思路流程图如图10所示。
图10主程序流程图
//主函数
voidmain()
{
uintX1,X2,CT=0,XCT=0;
Init1602();//液晶初始化
LCDdelay(10000);
Display_T_Init();
tmpchange();
NT=tmp();
Display_T_Init();
while
(1)//无限期循环
{
tmpchange();//数字型温度传感器,温度转换,模拟信号转数字
NT=tmp();
Display_T(NT,MMT);//NT实际温度,MMT目标温度
//控制加温
X1=NT/10;//因为温度放大了10倍,所以要除上10
X2=MMT/10;
if(X1 { JR=0;//单片机P1.7口为低电平,开始加热 if(X2-X1>3)//目标温度-实际温度>3度 { if(X2>80)//目标温度-实际温度>3度,目标温度大于80度 { CT=100; XCT=0; } Else//目标温度-实际温度>3度,目标温度小于80度 { CT=50; XCT=100; } } Else//目标温度-实际温度≤3度 { CT=50; XCT=100; } LCDdelay(CT); //通过延时长度不同,来控制恒温;CT为加热时间,CT等于多少,就加热多少;如果CT=0,那么刚刚拉低,又拉高,等于没有加热,延时为0 JR=1;//单片机P1.7口为高电平,不加热 LCDdelay(XCT); } //++ if(K1==0)//按键1按下 { LCDdelay(100);//屏幕以μs级的延迟 while(K1==0); MMT=MMT+10;//目标温度加1度 if(MMT>=1210)//当目标温度加热到超过或等于121度时 MMT=0; } //-- if(K2==0)//按键2按下 { LCDdelay(100); while(K2==0); MMT=MMT-10;//目标温度减1度 if(MMT>=0xff00)//目标温度≥-10度 MMT=1200;//目标温度为120度 } } } 5.2LCD1602显示子程序 显示数据子程序的主要功能就是把测温后的结果经单片机处理完毕后显示在LCD液晶显示屏上。 显示数据子程序流程图如图11所示。 图11显示数据子流程图 //写命令 voidwrite_com(ucharcom) { LCDRS=0;//单片机P2.7为低电平 P0=com; LCDdelay(10); LCDEN=1;//单片机P2.6为高电平 LCDdelay(10); LCDEN=0;//单片机P2.6为低电平 } //写数据 voidwrite_data(uchardate) { LCDRS=1;//单片机P2.7为高电平 P0=date; LCDdelay(10); LCDEN=1;//单片机P2.6为高电平 LCDdelay(10); LCDEN=0;//单片机P2.6为低电平 } //1602初始化 voidInit1602() { uchari=0;//定义一个i write_com(0x38);//屏幕初始化 write_com(0x0C);//打开显示无光标无光标闪烁 write_com(0x06);//当读或写一个字符是指针后一一位 write_com(0x01);//清屏 write_com(0x80);//设置位置 for(i=0;i<16;i++) { write_data(Init1[i]);//显示init1数组中的内容 } write_com(0x80+40);//设置位置//跳到下一行 for(i=0;i<16;i++) { write_data(Init2[i]);//显示init2数组中的内容 } } voidDisplay_T_Init() { uchari=0; write_com(0x38);//屏幕初始化 write_com(0x0C);//打开显示无光标无光标闪烁 write_com(0x06);//当读或写一个字符是指针后一一位 write_com(0x01);//清屏 write_com(0x80);//设置位置 for(i=0;i<16;i++) { write_data(Init3[i]);//显示init3数组中的内容 } write_com(0x80+40);//设置位置//跳到下一行 for(i=0;i<16;i++) { write_data(Init4[i]);//显示init4数组中的内容 } } //温度显示 voidDisplay_T(uintT,uintJT) { write_com(0x80+0x40+9);//设置位置//加9表示空9格 write_com(0x80+0x40+9);//设置位置 LCDdelay(10); write_data('0'+T/1000);//显示千位 write_data('0'+T/100%10);//显示百位 write_data('0'+T/10%10);//显示十位 write_data('.');//显示小数点 write_data('0'+T%10);//显示个位 write_data(0xDF);//显示° write_data('C');//显示“C” write_com(0x80+0x40+1);//设置位置//加1表示空1格 write_com(0x80+0x40+1);//设置位置 LCDdelay(10); write_data('0'+JT/1000); write_data('0'+JT/100%10); write_data('0'+JT/10%10); write_data(0xDF); write_data('C'); } 1602程序流程图如图12所示。 图121602程序流程图 //readabytedate读一个字节 uchartmpread(void) { uchari,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit(); //读出的数据最低位在最前面,这样刚好 //一个字节在dat里 dat=(j<<7)|(dat>>1); } //将一个字节数据返回 return(dat); } //writeabytetods18b20 //写一个字节到DS18B20里 voidtmpwritebyte(uchardat) { uinti; ucharj; bittestb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb)//write1 { DS=0; i++;i++; DS=1; i=8;while(i>0)i--; } else { DS=0;//write0 i=8;while(i>0)i--; DS=1; i++;i++; } } //温度显示 voidDisplay_T(uintT,uintJT) { write_com(0x80+0x40+9);//设置位置//加9表示空9格 write_com(0x80+0x40+9);//设置位置 LCDdelay(10); write_data('0'+T/1000);//显示千位 write_data('0'+T/100%10);//显示百位 write_data('0'+T/10%10);//显示十位 write_data('.');//显示小数点 write_data('0'+T%10);//显示个位 write_data(0xDF);//显示° write_data('C');//显示“C” write_com(0x80+0x40+1);//设置位置//加1表示空1格 write_com(0x80+0x40+1);//设置位置 LCDdelay(10); write_data('0'+JT/1000); write_data('0'+JT/100%10); write_data('0'+JT/10%10); write_data(0xDF); write_data('C'); } 5.3LCD延时子程序 LCD延时程序流程图如图13所示。 图13LCD延时程序流程图 //LCD延时 voidLCDdelay(uintz)//定义Z { uintx,y; for(x=z;x>0;x--)//延时多久,在括号里填一定的数值Z for(y=10;y>0;y--); } 5.4数字式温度传感器DS18B20子程序 DS18B20程序流程图如图14所示。 图14DS18B20程序流程图 //DS18B20beginchange发送温度转换命令 voidtmpchange(void) { dsreset();//初始化DS18B20 delaySS(1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PWM 控制 加热