




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
error! no text of specified style in document. 炉温控制课程设计报告指导老师:王勇,邓萍学号:08001421姓名: 邹晶日期:2011年11月23日目 录目 录1引言3第1章 技术指标41.1基本功能要求:41.2 提高功能要求:41.3设计条件4第2章 系统设计方案62.1原理图设计62.2硬件设计672.3软件设计72.3.1软件设计方案72.3.2程序清单(含必要的注释)8第3章 单元电路设计263.1控制部分电路设计2632矩阵键盘电路设计263.3显示部分电路设计283.3.1数码管内部原理图293.4温度采集模块电路设计313.4.1 ds18b20通信程序373.5继电器电路设计39第4章 测试与调整404.1电源电路检测404.2显示电路测试404.3单片机控制电路测试404.4矩阵键盘电路检测404.5 控制信号输出电路检测404.6温度采集电路检测404.7控制电路检测414.7总体电路测试41第5章 加热炉温控系统使用方法425.1系统连接方法425.2系统使用方法42第6章 设计小节436.1 设计任务完成情况436.2 问题及改进436.3 心得体会43参考文献44引言随着计算机技术的发展和普及,以单片机为核心的小型嵌入式设备,已经在工业自动化、办公自动化等领域得到了日益广泛的应用 本课题对工业对象中主要的被控参数电阻炉炉温进行研究,设计了硬件电路和软件程序。硬件电路选用stc12c5a60s2单片机及ds18b20, 以stc12c5a60s2单片机为主体,构成一个能进行较复杂的数据处理和复杂控制功能的智能控制器,使其既可与微机配合构成两级控制系统,又可作为一个独立的单片机控制系统,具有较高的灵活性和可靠性。单片机根据输入的各种命令,进行智能算法得到控制值,输出控制和脉冲信号,从而加热电阻炉。软件程序脉冲采用中断方式。关键词单片机;温度控制;计算机仿真;第1章 技术指标1.1基本功能要求:内容:应用计算机的实时监控和温度测量技术,采用单片机、温度检测电路、温度控制电路等,实现电阻炉炉温的实时监控。要求: 1.1.1采用单片机及相应的组成部件完成电阻炉温度控制系统设计,包括硬件电路和软件程序设计; 1.1.2测温范围0100,使其系统控制的温度保温值的变化范围为3060; 1.1.3可根据按键设定目标温度,能够显示控温时的实际炉温和恒温时间等信息。 1.2 提高功能要求:1.2.1 对其主电路和控制电路设计相应的保护电路,使其安全可靠地工作;1.2.2对影响温度控制时间和精度的因素进行分析,改进相应的计算机控制算法,完成计算机控制高效的算法设计。1.3设计条件1.3.1电源条件:稳压电源5v可调,220v直流电源1.3.2测试条件:万用表1.3.2元件清单:如表1.1示。元件清单元件名称数量电热杯1个sl1型51单片机综合试验箱1个ds18b20温度传感器1片stc12c5a60s2单片机1片usb下载线1条单线固态继电器1个导线若干另有剪刀、镊子等工具表1-1第2章 系统设计方案2.1原理图设计根据设计要求设计原理图如2-1所示。图2-1原理图图2-12.2硬件设计该设计本系统由stc12c5a60s 单片机最小系统及其外围电路组成,单片机系统有自己的电源模块、显示模块、温度采集模块,如图2-1所示。根据实验箱设计电路图如图2-2所示。单片机最小系统显示按键控制信号输出驱动电路外围电路固态继电器温控炉温度采集电源模块图2-2硬件电路方框图2.3软件设计2.3.1软件设计方案为了更简单的完成温度控制的任务,采用如下算法控制继电器,程序的软件流程图如下:图2-3软件流程图首先在程序的开头先读取用户的按键命令,当没有按键时,数码管仅显示实际温度;若按下“b”键,则数码管显示用户的设定温度;按下“c”键,则进入设置温度子程序,用户通过19数字键就可以设置用户所需温度,这样就完成了用户的操作。接下来读取ds18b20的数据,并按格式装配成数码管可以显示的类型。最后根据当前的温度值控制继电器的通断。主程序就是以上述流程往复运行。2.3.2程序清单(含必要的注释)#include#include#define uchar unsigned char#define delay_time1 8#define uint unsigned intextern unsigned char keycounter;extern bit keyflag;extern bit setflag;extern bit disflag;extern bit showtimeflag;unsigned char data disdata2; /温度显示值unsigned char data setdata2; /温度设定值unsigned char keycounter; /设置温度位数计数器float rtvalue; /实际温度值unsigned char stvalue=50; /设置温度值unsigned char showtime3=0;/恒温时间值 unsigned int m;/定义粗略延迟变量unsigned int cc;/计数次数unsigned int countflag;unsigned int timecounter=0;/设置恒温时间计数器unsigned char code keycode16=0x77,0x7b,0x7d,0x7e, /1,2,3,a0xb7,0xbb,0xbd,0xbe, /4,5,6,b0xd7,0xdb,0xdd,0xde, /7,8,9,c0xe7,0xeb,0xed,0xee, /*,0,#,d;unsigned char code seg_table13 = 0xc0,/*0*/ 0xf9,/*1*/ 0xa4,/*2*/ 0xb0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xf8,/*7*/ 0x80,/*8*/ 0x90,/*9*/0x9c,/*10*/ /上框 代表实际温度 0xa3,/*11*/ /下框 代表设定温度 0xff/all off;unsigned char code pos_dis_buf5 = 0xef,0xdf,0xbf,0x7f,0xff;unsigned char digit3 = 0;bit showtimeflag=0;/是否显示恒温时间bit keyflag=0;/是否接收到有用键值 1有bit setflag=0;/是否设定键按下 1按下bit disflag=0; /1显示设定值 0显示实际值sbit beep = p35;sbit heat = p30;sbit dq=p31; /改成p30sbit segdin=p36; /显示数据高地位sbit segclk=p37; /数据显示时钟void initsys()tmod=0x01;/mode 1th0=(65536-50000)/256;tl0=(65536-50000)%256;ea=1; /开中断et0=1;/开定时器0中断p4sw=0xf0; /*函数:delay()功能:不精确延时参数:延时参数返回值:无*/void delay(unsigned int n)while(-n);void ds18b20_delay(int time)/延时时间为(time * 6 us) int i,temp;temp=time; for(i=0;i0;i-) dq = 0; /拉低总线 _nop_(); /至少维持了1us,表示写时序(包括写0时序或写1时序)开始 dq = dat&0x01; /从字节的最低位开始传输 /指令dat的最低位赋予给总线,必须在拉低总线后的15us内, /因为15us后ds18b20会对总线采样。 ds18b20_delay(10); /必须让写时序持续至少60us dq = 1; /写完后,必须释放总线, dat = 1; ds18b20_delay(1); /18b20读1个字节函数uchar readonechar(void)uchar i = 0;uchar dat = 0;for(i=8;i0;i-) dq = 0; /将总线拉低,要在1us之后释放总线 /单片机要在此下降沿后的15us内读数据才会有效。 _nop_(); /至少维持了1us,表示读时序开始 _nop_(); dat = 1; /让从总线上读到的位数据,依次从高位移动到低位。 dq = 1; /释放总线,此后ds18b20会控制总线,把数据传输到总线上 ds18b20_delay(1); /延时7us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分 if(dq) /控制器进行采样 dat |= 0x80; /若总线为1,即dq为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0 ds18b20_delay(8); /此延时不能少,确保读时序的长度60us。return (dat);float readtemperature(void)uchar n = 0; /存储符号unsigned int t;uchar a,b; /读出温度函 init_ds18b20(); /总线复位 writeonechar(0xcc); / 发skip rom命令 writeonechar(0xbe); / 发读命令a = readonechar(); /温度低8位b = readonechar(); /温度高8位init_ds18b20();writeonechar(0xcc); / skip romwriteonechar(0x44); / 发转换命令 t = (b 8) + a;return (t*0.0625);unsigned char key_scan() /返回的是keycode数组的位数unsigned char i,x,y;unsigned char keycode;p2 = 0x0f;if(p2 != 0x0f)delay(500);if(p2 != 0x0f)x = p2;p2 = 0xf0;if(p2 != 0xf0)y = p2;while(p2!=0xf0); /如果不松键 则一直停在这边keycode = x|y;elsekeycode = 0xff; for(i=0;i16;i+)if(keycode=keycodei)return i;return 255; unsigned char get_code()unsigned char i=0xff,j=0xff;i=key_scan();switch(i)case 0:j=1;keyflag=1;break;case 1:j=2;keyflag=1;break;case 2:j=3;keyflag=1;break;case 3:break; /acase 4:j=4;keyflag=1;break;case 5:j=5;keyflag=1;break;case 6:j=6;keyflag=1;break;case 7:break; /bcase 8:j=7;keyflag=1;break;case 9:j=8;keyflag=1;break;case 10:j=9;keyflag=1;break;case 11:break; /ccase 12:j=a;keyflag=1;setflag=1;keycounter=0;break;case 13:j=0;keyflag=1;break;case 14:j=b;keyflag=1;disflag=disflag;break;case 15:j=c;keyflag=1;showtimeflag=showtimeflag;break; /d /ddefault:keyflag=0;break;return j;/*函数:seg_display()功能:数码管在指定位置显示指定的数参数:pos 显示位置(0 1 2 3) ucdata (09)待显示的数字 point 为1则显示小数点,否则不显示返回值:无*/void bit_display(unsigned char pos, unsigned char ucdata, bit point)unsigned char i;unsigned char uctemp;uctemp = seg_tableucdata;/查段码表if(point)uctemp &= 0x7f; p4 = pos_dis_buf4;/关闭所有显示for(i = 0; i 8; i+)segdin = uctemp & 0x80;/*每次取最高位,最高位为1,则seg_din=1;反之亦然*/segclk = 0;segclk = 1; /*产生74164移位时钟上升沿*/uctemp = 1;p4 = pos_dis_bufpos;/使能位选/*函数:seg_display()功能:数码管上显示指定的数参数:uidata (09999)待显示的数字返回值:无*/void seg_display(float uidata)unsigned char i;digit0 = (unsigned int)(uidata/10)%10; /十位digit1 = (unsigned int)uidata%10; /个位digit2 = (unsigned int)(uidata*10)%10; /小数后一位for(i = 0; i 3; i+)if(i!=1)bit_display(i,digiti,0); /不显示小数点elsebit_display(i,digiti,1); /显示小数点delay(50);void main()unsigned char i,j,num,k;unsigned char counter=0; unsigned int htime=0;unsigned int stime=0;initsys();while(1) rtvalue=readtemperature(); /获取实际温度num=get_code();if(disflag=0&setflag=0)/显示实际温度for(j=0;j50;j+)/每次用循环显示 也许可以提高亮度for(i=0;i50;i+)bit_display(3,10,0); /上方框 表示实际温度seg_display(rtvalue);if(disflag=1&setflag=0)/显示设定温度for(j=0;j50;j+)/每次用循环显示 也许可以提高亮度for(i=0;i50;i+)bit_display(3,11,0);/下方框 表示设定温度seg_display(stvalue); if(timecounter=1000)timecounter=0;if(timecounter!=0)stime=timecounter;showtime0=stime/100;showtime1=(stime/10)%10;showtime2= stime%10;if(disflag=0&setflag=0&showtimeflag=1)/显示恒温时间for(j=0;j50;j+)/每次用循环显示 也许可以提高亮度for(i=0;i1)keycounter=0;setflag=0;stvalue=10*setdata0+setdata1;if(rtvalue(stvalue-5) beep=1; /不鸣叫heat=0; /加热if(stvalue-5)=rtvalue&rtvalue1)k=1;heat=k;if(stvalue-0.8)=rtvalue&rtvalue1)k=1;heat=k;if(stvaluertvalue&rtvalue(stvalue+0.5)if(countflag = 1)tr0=0;timecounter=0;countflag=0;beep=0;/鸣叫heat=1; /不加热while(counter=1000)counter=0; void timer0() interrupt 1th0=(65536-50000)/256;tl0=(65536-50000)%256;cc+;if(cc=20)cc=0;timecounter+;第3章 单元电路设计3.1控制部分电路设计控制部电路分即一个单片机最小系统板,如果需要,可以为单片机提供外部晶振电路和复位电路。如图3-1.图3-132矩阵键盘电路设计键盘用于外部输入,本设计采用4*3矩阵键盘。如图3-2示。弹性按键被按下时闭合,松手后自动断开。单片机检测按键的原理是:单片机的i/o口既可以作为输出也可作为输入使用,当检测按键时使用的是它的输入功能,把按键的一端接地,另一端与单片机的某一个i/o口相连,开始时先给i/o口赋一高电平,然后让单片机不断地检测该i/o口是否变成低电平,当按键闭合时,即相当于该i/o口通过按键与地相连,变成低电平,程序一旦检测到i/o口变为低电平则说明按键被按下,然后执行相应的指令。图4.4 按键按下时电压的变化从图4.4可以看出,理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动现象,抖动时间的长短和按键的机械特性有关,一般为510ms。通常我们手动按时都要加上去抖动操作,有专用的去抖动电路,也有专用的去抖动芯片,但通常我们软件延时的方法就能很容易解决抖动问题,而没有必要再添加多余的硬件电路。1. 按键检测流程图无论独立键盘还是矩阵键盘,单片机检测其是否被按下的依据都是一样的,也就是检测该键对应的i/o口是否为低电平。独立键盘有一端固定为低电平,单片机写程序检测时比较方便。而矩阵键盘两端都与单片机i/o口连接,因此在检测时需人为通过单片机i/o口送出低电平。检测时,先送一列为低电平,其余几列为高电平,然后然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平,就可以确定当前被按下的按键是哪一行哪一列的,用同样的方法轮流各列送一次低电平,再轮流检测一次各行是否变为低电平,这样既可检测完所有的按键。图3-2矩阵键盘3.3显示部分电路设计数码管的显示原理不论是共阴还是共阳,其基本原理是一样的,都是靠点亮内部的led来发光。一位数码管的引脚是十个,显示一个8字需要7个小段,另外还有一个小数点。3.3.1数码管内部原理图实际实验时,为了保证编程的方便和通常将数码管的数字所对应的八位数字记录在数组中,程序中直接使用查表的方法,可以提高程序的效率,也使程序的编写更加简单方便。符号编码符号编码00xc080x8010xf990x9020xa4a0x8830xb0b0xc740x99c0xc650x92d0xa160x82e0x8670xf8f0x8e我们实验箱中的led数码管是四位数码管,因此为了控制方便,四个数码管的“段选端”是连在一起的,他们的gnd或vcc端作为“位选端”来输入控制信号,这样单片机就可以通过程序来控制显示的字符。下图是实验箱开发板中的数码管电路图:2. 实验箱数码管电路数码管显示段选码:unsigned char code seg_table13 = 0xc0,/*0*/0xf9,/*1*/0xa4,/*2*/0xb0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xf8,/*7*/0x80,/*8*/0x90,/*9*/0x9c,/*10*/ /上框 代表实际温度 0xa3,/*11*/ /下框 代表设定温度 0xff/all off;3.4温度采集模块电路设计温度采集采用直接输出数字量的ds18b20;如图3-6示图3-6ds18b20的主要特征: 全数字温度转换及输出。 先进的单总线数据通信。 最高12位分辨率,精度可达土0.5摄氏度。 12位分辨率时的最大工作周期为750毫秒。 可选择寄生工作方式。 检测温度范围为55c +125c (67f +257f) 内置eeprom,限温报警功能。 64位光刻rom,内置产品序列号,方便多机挂接。 多样封装形式,适应不同硬件系统。 ds18b20芯片封装结构: ds18b20引脚功能: gnd 电压地 dq 单数据总线 vdd 电源电压 nc 空引脚 ds18b20工作原理及应用: ds18b20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18b20的内部存储器资源。18b20共有三种形态的存储器资源,它们分别是: rom 只读存储器,用于存放ds18b20id编码,其前8位是单线系列编码(ds18b20的编码是19h),后面48位是芯片唯一的序列号,最后8位是以上56的位的crc码(冗余校验)。数据在出产时设置不由用户更改。ds18b20共64位rom。 ram 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,ds18b20共9个字节ram,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户eeprom(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个eeprom的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的crc码。eeprom 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,ds18b20共3位eeprom,并在ram都存在镜像,以方便用户操作。 ram及eeprom结构图:图2我们在每一次读温度之前都必须进行复杂的且精准时序的处理,因为ds18b20的硬件简单结果就会导致软件的巨大开消,也是尽力减少有形资产转化为无形资产的投入,是一种较好的节约之道。 控制器对18b20操作流程: 1, 复位:首先我们必须对ds18b20芯片进行复位,复位就是由控制器(单片机)给ds18b20单总线至少480us的低电平信号。当18b20接到此复位信号后则会在1560us后回发一个芯片的存在脉冲。 2, 存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在1560us后接收存在脉冲,存在脉冲为一个60240us的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18b20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。 3, 控制器发送rom指令:双方打完了招呼之后最要将进行交流了,rom指令共有5条,每一个工作周期只能发一条,rom指令分别是读rom数据、指定匹配芯片、跳跃rom、芯片搜索、报警芯片搜索。rom指令为8位长度,功能是对片内的64位光刻rom进行操作。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。诚然,单总线上可以同时挂接多个器件,并通过每个器件上所独有的id号来区别,一般只挂接单个18b20芯片时可以跳过rom指令(注意:此处指的跳过rom指令并非不发送rom指令,而是用特有的一条“跳过指令”)。rom指令在下文有详细的介绍。 4, 控制器发送存储器操作指令:在rom指令发送给18b20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写ram数据、读ram数据、将ram数据复制到eeprom、温度转换、将eeprom中的报警值复制到ram、工作方式切换。存储器操作指令的功能是命令18b20作什么样的工作,是芯片控制的关键。 5, 执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。如执行温度转换指令则控制器(单片机)必须等待18b20执行其指令,一般转换时间为500us。如执行数据读写指令则需要严格遵循18b20的读写时序来操作。数据的读写方法将有下文有详细介绍。 若要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过rom指令、执行温度转换存储器操作指令、等待500us温度转换时间。紧接着执行第二个周期为复位、跳过rom指令、执行读ram的存储器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)。其它的操作流程也大同小异,在此不多介绍。ds18b20芯片与单片机的接口:图3图4如图所示,ds18b20只需要接到控制器(单片机)的一个i/o口上,由于单总线为开漏所以需要外接一个4.7k的上拉电阻。如要采用寄生工作方式,只要将vdd电源引脚与单总线并联即可。但在程序设计中,寄生工作方式将会对总线的状态有一些特殊的要求。图5ds28b20芯片rom指令表: read rom(读rom)33h (方括号中的为16进制的命令字) 这个命令允许总线控制器读到ds18b20的64位rom。只有当总线上只存在一个ds18b20的时候才可以使用此指令,如果挂接不只一个,当通信时将会发生数据冲突。 match rom(指定匹配芯片)55h 这个指令后面紧跟着由控制器发出了64位序列号,当总线上有多只ds18b20时,只有与控制发出的序列号相同的芯片才可以做出反应,其它芯片将等待下一次复位。这条指令适应单芯片和多芯片挂接。 skip rom(跳跃rom指令)cch 这条指令使芯片不对rom编码做出反应,在单总线的情况之下,为了节省时间则可以选用此指令。如果在多芯片挂接时使用此指令将会出现数据冲突,导致错误出现。 search rom(搜索芯片)f0h 在芯片初始化后,搜索指令允许总线上挂接多芯片时用排除法识别所有器件的64位rom。 alarm search(报警芯片搜索)ech 在多芯片挂接的情况下,报警芯片搜索指令只对附合温度高于th或小于tl报警条件的芯片做出反应。只要芯片不掉电,报警状态将被保持,直到再一次测得温度什达不到报警条件为止。 ds28b20芯片存储器操作指令表: write scratchpad (向ram中写数据)4eh 这是向ram中写入数据的指令,随后写入的两个字节的数据将会被存到地址2(报警ram之th)和地址3(报警ram之tl)。写入过程中可以用复位信号中止写入。 read scratchpad (从ram中读数据)beh 此指令将从ram中读数据,读地址从地址0开始,一直可以读到地址9,完成整个ram数据的读出。芯片允许在读过程中用复位信号中止读取,即可以不读后面不需要的字节以减少读取时间。 copy scratchpad (将ram数据复制到eeprom中)48h 此指令将ram中的数据存入eeprom中,以使数据掉电不丢失。此后由于芯片忙于eeprom储存处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持10ms,来维持芯片工作。convert t(温度转换)44h 收到此指令后芯片将进行一次温度转换,将转换的温度值放入ram的第1、2地址。此后由于芯片忙于温度转换处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持500ms,来维持芯片工作。 recall eeprom(将eeprom中的报警值复制到ram)b8h 此指令将eeprom中的报警值复制到ram中的第3、4个字节里。由于芯片忙于复制处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。另外,此指令将在芯片上电复位时将被自动执行。这样ram中的两个报警字节位将始终为eeprom中数据的镜像。 read power supply(工作方式切换)b4h 此指令发出后发出读时间隙,芯片会返回它的电源状态字,“0”为寄生电源状态,“1”为外部电源状态3.4.1 ds18b20通信程序ds18b20测温原理为图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。转化后得到的12位数据,存储在18b20的两个8比特的ram中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07d0h,+25.0625的数字输出为0191h,-25.0625的数字输出为ff6fh,-55的数字输出为fc90h 。根据ds18b20的通讯协议,主机(单片机)控制ds18b20完成温度转换必须经过三个步骤:每一次读写之前都要对ds18b20进行 复位操作,复位成功后发送一条rom指令,最后发送ram指令,这样才能对ds18b20进行预定的操作。复位要求主cpu将数据线下拉500微秒,然后 释放,当ds18b20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主cpu收到此信号表示复位成功。 图6 ds18b20使用方法3.5继电器电路设计本系统采用单相固态继电器ssr/1p-10a,当单片机给继电器供5v电压时,继电器导通。可以通过这个原理将加热炉的电源线火线分别接入继电器两端,所以单片机的i/o口供给低电平,继电器就可以导通,这样就可以控制加热炉的加热了。如图所示:3. 继电器结构由于考虑到单片机引脚的驱动能力可能不足,因此制作了驱动电路,放大驱动电流,并在继电器两端加上续流二极管保证加热时间够长。电路如下:6 驱动电路第4章 测试与调整4.1电源电路检测测试用仪表:万用表等测试方法:接上电源后,首先万用表10v档测量电源输出电压,5v说明电源电路正确。可能出现问题:1:电路连接中电源高与地短接的情况,使用不当可能导致芯片被烧毁。这点要求在各个模块连接时注意,可在电源和地之间接一发光二极管,上电后若灯不亮,立即断电,检测原因所在。4.2显示电路测试按照电路图正确写一个简单的显示函数,如果能够正确显示,则说明显示模块正确。若不能正确显示,则从两方面进行检查;一是硬件电路,而是软件驱动。硬件电路可以通过对照电路图,借助万用表逐脚校正。至于软驱动,则通过proteus软件仿真进行测试。4.3单片机控制电路测试将单片机接上电源后,用万用表电压档分别测单片机的40脚和20脚,如果显示电压为5v,及说明单片机通电良好,在用万用表测31引脚,电平为高即正确。单片机系统版进行下载,如果下载成功即说明单片机最小系统能正常工作。4.4矩阵键盘电路检测检测方法同显示电路德检测方法,从软硬件两方面进行排查。4.5 控制信号输出电路检测通过过软件改变时间,再接个二极管,观察输出信号是否与预期的一致。4.6温度采集电路检测温度采集硬件电路很简单,主要是软件驱动,需要通过对照ds18b20时序图进行驱动编写,然后将当前温度显示在led上,采集温度与当前温度差不多即说明驱动正确,可以通过加热或冷却进一步测试
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 九年级化学上册 第1单元《课题1 物质的变化和性质》教学设计 (新版)新人教版
- 五年级信息技术上册 孙悟空变变变教学设计 冀教版
- 上册教案(教案)-2024-2025学年三年级上册劳动浙教版
- 人教部编版九年级下册12 词四首综合与测试教学设计
- 初中主题班会“文明礼仪伴我行”教学设计
- 防性侵安全教育主题
- 五年级品德与社会上册 请你相信我 1教学设计 人教新课标版
- 财务咨询公司业务培训
- 2024中铝智能科技发展有限公司面向社会公开招聘5人(第十五批)笔试参考题库附带答案详解
- 2024中铁大桥局集团武汉置业发展有限公司春季校园招聘笔试参考题库附带答案详解
- 幼儿园 小班健康《汉堡男孩》
- 2023年江西省赣州市寻乌县残联公务员考试《行政职业能力测验》历年真题及详解
- 古代小说戏曲专题-形考任务2-国开-参考资料
- 人教版九年级化学《溶液的形成》课件
- 《4.1 免疫系统的组成和功能》参考课件1
- 2025年广东省东莞市中考数学模拟考试试卷及答案解析
- 新疆维吾尔自治区新2024年中考数学模拟试卷附答案
- 零星工程施工合同2024年
- 16《海上日出》 任务型教学设计
- NB-T47013.3-2015承压设备无损检测第3部分:超声检测
- 大学《军事理论》考试题库及答案解析(10套)
评论
0/150
提交评论