还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
单片机课程设计设计题目智能电风扇控制器设计neuq目录序言
一、设计实验条件及任务…………………………………………..…
21.
1、设计实验条件
1.
2、设计任务………………………………………………………2
二、小直流电机调速控制系统的总体方案设计………………….….
32.
1、系统总体设计…………………………………………….......
32.
2、芯片选择……………………………………………….…......
32.
3、DAC0832芯片的主要性能指标……………………….…....
32.
4、数字温度传感器DS18B20………………………………..…3
三、系统硬件电路设计…………………………………..…….…..….
43.
1、AT89C52单片机最小系统………………………….…….….
53.
2、DAC0832与AT89C52单片机接口电路设计….…………...
63.
3、显示电路与AT89C52单片机接口电路设计….………….…
73.
4、显示电路与AT89C52单片机电路设计……………...…...…8
四、系统软件流程设计…………………………………………….….7
五、调试与测试结果分析…………………………..……...………….
85.
1、实验系统连线图………………………………………....……
85.
2、程序调试………………………………………….……...…...
85.
3、实验结果分析……………………………………..……....…..8
六、程序设计总结……………………………………………...……..10
七、参考文献……………………………………..……………………11附录…………………………………………………………..…......…...
一、设计实验条件及任务
1.
1、设计实验条件单片机实验室
1.
2、设计任务利用DAC0832芯片进行数/模控制,输出的电压经放大后驱动小直流电机的速度进行数字量调节,并显示运行状态DJ-XX和D/A输出的数字量巩固所学单片知识,熟悉试验箱的相关功能,熟练掌握Proteus仿真软件,培养系统设计的思路和科研的兴趣实现功能如下1系统手动模式及自动模式工作状态切换2风速设为从高到低9个档位,可由用户通过键盘手动设定3定时控制键实现定时时间设置,可以实现10小时的长定时4环境温度检测,并通过数码管显示,自动模式下实现自动转速控制5当温度每降低1℃则电风扇风速自动下降一个档位,环境低于21度时,电风扇停止工作6当温度每升高1℃则电风扇风速自动上升一个档位环境温度到30度以上时,系统以最大风速工作7实现数码管友好显示
二、小直流电机调速控制系统的总体设计方案
2.
1、系统硬件总体结构图
2.1系统硬件总体框图
2.
2、芯片选择
1、AT89C52芯片选用该单片机作为智能电风扇控制部件,用来实现电风扇调速核心功能
2、74LS245芯片用来驱动数码管
3、74LS373芯片锁存器,用来锁存输出的信号
4、74LS240芯片八单线驱动器,缓冲输出的信号
5、DAC0832芯片片选地址是FF80H,AOUT1插孔作为模拟量的输出
6、8255芯片可编程并行I/O接口芯片,用以扩展单片机的IO口
7、LED数码显示管用来显示电机旋转的速度是加速还是减速
8、741运算放大器
9、9014NPN型三极管
2.
3、DAC0832的主要性能指标 D/A转换的基本原理是应用电阻解码网络,将N位数字量逐位转换为模拟量并求和,从而实现将N位数字量转换为相应的模拟量其性能指标为(1)分辨率相对分辨率=1/2N,N越大,分辨率越高(2)线性度(3)转换精度(4)建立时间(5)温度系数DAC0832引脚功能图如图
2.2图
2.2数模转换DAC0832引脚功能
1、DI0~DI78位数字信号输入端;
2、!CS片选端;ILE数据锁存允许控制端,高电平有效;
3、!WR1输入寄存器写选通控制端当!CS=
0、ILE=
1、!WR1=0时,数据信号被锁存在输入寄存器中
4、!XFER数据传送控制
5、!WR2DAC寄存器写选通控制端当!XFER=0,!WR2=0时,输入寄存器状态传入DAC寄存器中
6、IOUT1电流输出1端,输入数字量全“1”时,IOUT1最大,输入数字量全为“0”时,IOUT1最小
7、IOUT2D/A转换器电流输出2端,IOUT2+IOUT1=常数
8、RFB外部反馈信号输入端,内部已有反馈电阻RFB根据需要也可外接反馈电阻
9、VCC电源输入端,可在+5V~+15V范围内
10、DGND数字信号地
11、AGND模拟信号地
2.
4.数字温度传感器DS18B20DS18B20“一线总线”数字化温度传感器支持“一线总线”接口测量温度范围为-55~+125℃在-10~+85℃范围内精度为±
0.15℃现场温度直接以“一线总线”的数字方式传输大大提高了系统的抗干扰性适合于恶劣环境的现场温度测量如:环境控制、设备或过程控制、测温类消费电子产品等DS18B20可以程序设定9~12位的分辨率精度为±
0.15℃温度采集具有准确性、实时性DS18B20的管脚排列如下:DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端在寄生电源接线方式时接地如图
2.3所示图
2.3数字温度传感器DS18B20引脚图DS18B20检测的温度高于一定值时单片机引脚输出高电平打开电风扇当温度低于一定值时单片机引脚输出低电平控制电风扇停止转动在此区间,每升高一度,风扇转速档位加一,风扇转速与档位的关系如表
2.1所示表
2.1风扇转速与档位的关系环境温度℃低于
21.
021.0-
21.
922.0-
22.
923.0-
23.
924.0-
24.9转速档位01234环境温度℃
25.0-
25.
926.0-
26.
927.0-
27.
928.0-
28.
929.0以上转速档位56789
三、系统硬件电路设计
3.
1、AT89C52单片机最小系统AT89C52已包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统整个系统结构紧凑,抗干扰能力强,性价比高图
3.1为AT89C52芯片最小系统一方面,单片机要通过I/O口中接收输入信号,另一方面要通过I/O口控制数码管的初始化、显示方式以及要显示的字符因此,设计必须以单片机为核心,显示器为外围设备硬件上,单片机通过电路板电路与液晶显示电路相连;软件上,单片机要下载完整的程序对二者进行适时的控制图
3.1AT89C52芯片最小系统图
3.
2.系统程序电路主程序CUP电路图AT89C52单片机P
0、P2口扩充电路图如图
3.2图
3.2AT89C52系统管脚扩充图
3.
3、DAC0832与AT89C52单片机接口电路设计实验电路使用逻辑器件实现地址译码,地址FF80H接入数模转换器DAC0832片选段,通过数模转换后的模拟量通过运放放大驱动电机驱动,其电路图如图
3.3所示图
3.2DAC0832与AT89C52单片机接口及电机控制电路
3.
4、显示电路与AT89C52单片机电路设计实验电路使用IO扩充芯片8255及锁存芯片74LS245对六个数码管选通控制显示显示部分电路图如图
3.3所示图
3.3数码管显示部分电路图
四、系统程序流程设计
4.
1、系统程序流程框图如图
4.1图
4.1程序流程图
五、调试与测试结果分析
5.
1、实验系统连线图a、P
3.
0、P
3.
1、P
3.
2、P
3.3分别连按键K
1、K
2、S
1、S2b、DS18b20数据线连P
3.4c、将DAC0832驱动电路AOUT接至直流电机d、将P0口接至DAC0832数字输入端e、将地址译码器电路(FF80H)接至DAC0832片选端
5.
2、程序调试程序上电时,直流电机默认以中档5档工作,系统默认工作在手动模式下数码管显示当前环境温度和电机运行档位当按下按键S1(P
3.2)时,直流电机以加速转动,同时数码管显示档位速度,当速度达到最大时,继续按下键S1第5个数码管会显示“—”表示系统已达到最大风速当按下按键S2(P
3.2)时,直流电机以减速转动,同时数码管显示档位速度,当速度达到最小时,继续按下键S2第5个数码管会显示“—”表示系统已达到最小风速当按下系统模式控制切换键k1可以实现模式的切换,在自动模式下,数码管第一位显示“A”字样,表示工作于自动模式下,此时电机的转速由环境温度决定并且显示环境温度和当前温度下电机运行档位当按下定时键K2时,数码管闪烁的显示“000”,当按S1时,定时时间增加,数码管闪烁显示定时时间按S2键时,定时时间减少,同时数码管也闪烁显示定时时间再次按下K2键后,闪烁停止,定时开始,数码管显示定时剩余时间
5.
3、实验结果分析电机运行正常时即可实现调速现象,按键的消抖使得调速现象更加明显按键S1实现电风扇加速运行,按键S2实现电风扇减速运行系统模式控制切换键k1可以实现模式的切换定时键K2实现定时设定和定时确定适当的控制按键,就可以实现所需要的效果
六、程序设计总结两周的单片机课程设计让我受益匪浅,无论从知识技能上还是团队合作方面上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味但在课程设计使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平在这次课程设计中又让我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,我们就会在QQ群里讨论或者是同学之间相互帮助团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感我们组的题目是智能电风扇控制器设计,基本要求是实现电机速度的控制,并且通过数码管显示出来由于我在学院的创新实验室有过一年多的编程经验,因此在实验箱上实现基本功能并没有很大难度,基本功能实现后,我们组想到了使设计更加智能化和多功能化,于是我们加入了数字温度传感器温度采集和自动控制,以及定时功能并通过程序设计,实现比较人性化的数码管显示在整个程序设计和电路设计调试过程中,遇到了不少问题,最终也和组员共同解决了主要的问题有仿真和实际的电路调试有一定的出入,在仿真上按键能够很好的工作,但是在实际的电路调试过程中,按键往往不大灵敏,常出现按一下,系统反应多次的问题,最后通过延时时间的调整,使得按键较好的工作由于数码管采用动态显示方式,延时扫描时间的不恰当使得数码管显示出现跳动或者不稳定的问题,通过延时时间的正确设置和对整体程序的分析,使数码管的显示稳定正常随着系统功能的增加,程序变的复杂,调试起来对程序的分析带来了一定的难度,最后通过功能函数的模块化使得程序更加清晰和易更改将数字温度传感器的函数单独设在一个C文件中,采用多文件编译的方式,也增加了程序的易移植性程序的要完全运行正确,不仅要弄清楚电路图,尤其是各接口的接法,还要注重每个小的细节,因为往往一个很小的错误,使得程序出现一些无法预料的结果,在程序的调试过程中,我们组出现了将‘=’错写为了‘==’,结果当然运行不出来 单片机是很重要的一门课程,学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习
七、参考文献
[1] 陈海宴.51单片机原理及应用.北京北京航空航天大学出版社
2012.
[2] 郭天祥.51单片机C语言教程.北京电子工业出版社
2005.
[3] 胡启明,葛祥磊.Proteus从入门到精通.北京电子工业出版社
2012.
[4]张兆明.基于AT89S52单片机的自动温控电风扇设计.测控技术
200903210820.附录1系统程序系统主函数/********************************************************************************************************************************************@@设计题目智能电风扇控制器设计@@设计者@@设计功能
1.系统分为自动模式和手动模式,通过自动控制手动控制切换键K1P
3.1可以实现电机转速控制,并用数码管显示其工作在何种状态
2.手动状态可以通过S
1、S2P
3.2加,P
3.3减实现9级风速增减调速,并通过数码管显示
3.通过DS18B20可以实现风扇附近环境温度的检测,温度精确到
0.1摄氏度,并通过数码管可以显示实时温度当系统工作切换到自动控制状态时,系统根据环境温度自动控制转速的快慢
4.两种工作状态下,均可以通过定时设置功能键K1P
3.0可以实现风扇定时工作,通过时间增减键(P
3.2加,P
3.4减)实现定时时间设定时间到后风扇停止工作@@系统连线P
3.
0、P
3.
1、P
3.
2、P
3.3分别连按键K
1、K
2、S
1、S2DS18b20数据线连P
3.4@@系统参数
1.转速档位(本参数为仿真参数)共分为9个档位,从低到高为1-9档,通过数码管显示,对应电机两端电压分别为
1.31V、
2.62V、
3.93V、
5.24V、
6.55V、
7.86V、
9.17V、
10.5V、
11.8V
2.温度参数系统使用的DS18b20可以实现
0.0625摄氏度的精度通过四舍五入,数码管显示可以实现
0.1摄氏度的精度
3.自动模式下环境温度与转速关系环境温度范围与转速关系为21以下,停止;21-221档;22-232档;23-243档;24-254档;25-265档;26-276档;27-287档;28-298档;29以上,9档
4.定时时间参数系统共设置7个定时时间,分别为1min5min10min30min1h2h5h********************************************************************************************************************************************/#includereg
51.h#includeds18b
20.h#includeabsacc.h//用于访问绝对地址#includemath.H#defineucharunsignedchar#defineuintunsignedint#defineON1#defineOFF0#defineConfirm2#defineTimeGrade11//定时等级分别设置为1分钟,5分钟,10分钟,30分钟,1小时,2小时,5小时#defineTimeGrade25#defineTimeGrade310#defineTimeGrade430#defineTimeGrade560#defineTimeGrade6120#defineTimeGrade7300#defineaddXBYTE[0xff23]//控制寄存器#definePAXBYTE[0xff20]//位选为8255,A口#definePBXBYTE[0xff21]//段选为8255,B口#defineDAXBYTE[0xff80]//P0对应的地址unsignedchartflag;//定时器时间标志unsignedcharTimeGrade;//风扇定时等级unsignedintTimeGoTIMEt1flag;//风扇定时时间标志位inttemp_Ttemp_T_A;//采集温度值以及采集的温度绝对值uintvolt_d=140volt_a;bitsecflag=0;bitAuto=OFF;//定义自动控制允许位ucharTC=OFF;//定义定时功能允许位bitCh_Full=0;//定义调档以最大或者最小标志位bitTBZF=0;//定义温度低于0时标志位ucharcodetable[]={0xc00xf90xa40xb00x990x920x820xf80x800x900x400x790x240x300x190x120x020x780x000x100x880x8b0xbf0xff};//共阳数码管编码表ucharcodewei[]={0x010x020x040x080x100x20};voiddelayMSuintz;voidInitialvoid;voidTime_Setvoid;voiddisplayucharaaucharbb;voidHandle_displayvoid;voidKey_checkvoid;voidAnto_Control_speedvoid;voidTempTransvoid;voiddelayMSuintz//延时函数{ucharxy;forx=z;x0;x--fory=110;y0;y--;}voiddisplayucharaaucharbb//显示子程序{PA=~wei[aa];//位选PB=table[bb];//段选delayMS2;}voidInitialvoid{EX0=1;//开外部中断0EX1=1;//开外部中断1EA=1;//开总中断IT0=1;//下降沿触发中断0IT1=1;//下降沿触发中断1TMOD=0x11;TH0=65536-20000/256;TL0=65536-20000%256;TH1=65536-50000/256;TL1=65536-50000%256;ET0=1;TR0=1;ET1=1;}voidHandle_displayvoid//操作时数码管显示,包括温度,档位,定时时间和剩余时间{ucharij;volt_a=volt_d/28;display0volt_a;//数码管输出档位ifTC==OFF//为设置时间时初始状态{ifTBZF==1display522;//在数码管1显示温度为负display4temp_T_A/100;//数码管输出模拟量十位display3temp_T_A%100/10+10;//数码管输出模拟量个位display2temp_T_A%100%10;//数码管输出模拟量一位小数}else{Time_Set;forj=80;j0;j--{display4TIME-TimeGo/100;//数码管输出模拟量十位display3TIME-TimeGo%100/10;//数码管输出模拟量个位display2TIME-TimeGo%100%10;//数码管输出模拟量一位小数display0volt_a;}ifTC==ONfori=100;i0;i--{display423;//数码管输出模拟量十位display323;//数码管输出模拟量个位display223;//数码管输出模拟量一位小数display0volt_a;}}}voidKey_checkvoid//按键扫描函数{unsignedchartemp;temp=P30x03;iftemp!=0x03delayMS30;iftemp!=0x03//当P
3.4和P
3.5按下时{iftemp==0x01//模式设置键被按下Auto=~Auto;elseiftemp==0x02//定时设置键被按下{TC++;ifTC==3TC=0;}}}voidTempTransvoid{ifsecflag==1{secflag=0;temp_T=rd_temperature/10;iftemp_T0{temp_T_A=65536-temp_T;//温度为负数时,温度的绝对值为65536与温度的差TBZF=1;}else{temp_T_A=temp_T;//温度为负数时,温度的绝对值即为温度TBZF=0;//当值为正值,不显示负温度标志}}}voidAnto_Control_speedvoid//根据温度实现温度与转速自动控制子函数{switchtemp_T/10{case29:volt_d=252;break;case28:volt_d=224;break;case27:volt_d=196;break;case26:volt_d=168;break;case25:volt_d=140;break;case24:volt_d=112;break;case23:volt_d=84;break;case22:volt_d=56;break;case21:volt_d=28;break;default:volt_d=0;}iftemp_T=300volt_d=252;}voidTime_Setvoid{ifTC==ON{switchTimeGrade{case0:TIME=0;break;case1:TIME=TimeGrade1;break;case2:TIME=TimeGrade2;break;case3:TIME=TimeGrade3;break;case4:TIME=TimeGrade4;break;case5:TIME=TimeGrade5;break;case6:TIME=TimeGrade6;break;case7:TIME=TimeGrade7;break;}}elseifTC==Confirm{TR1=1;display522;}else{TIME=0;TR1=0;//关闭定时器2TimeGo=0;}ifTimeGo=TIMETC==Confirm//定时时间到{TC=OFF;//关闭时间显示标志TR1=0;//关闭定时器2TimeGo=0;//定时后已运行时间清零volt_d=0;//定时时间到后,风扇停止转动}}voidmain{Initial;while1{TempTrans;ifAuto==OFF//当系统为手动控制时子函数{ifCh_Full==1display122;//在数码管1显示一横线,表示档位已经最大或者最小DA=volt_d;//把数字量赋给数模转换器Handle_display;}ifAuto==ON//系统为自动控制时函数{display520;//显示自动控制允许标志DA=volt_d;Anto_Control_speed;Handle_display;}}}voidex0interrupt0//外部中断0子程序{delayMS200;ifTC==OFF||TC==Confirm//如果不是时间设置时,实现风扇调速{ifvolt_d250{Ch_Full=0;volt_d+=28;}elseCh_Full=1;}else//如果时间设置标志位打开,则定时设置{TimeGrade++;ifTimeGrade==8TimeGrade=0;}}voidisr_t0voidinterrupt1{TH0=65536-20000/256;TL0=65536-20000%256;tflag++;iftflag==10//定时为1秒每1秒采集一次温度{tflag=0;secflag=1;Key_check;//每过200ms扫描按键状态}}voidex1interrupt2//外部中断1子程序{delayMS200;ifTC==OFF||TC==Confirm//如果不是时间设置时,实现风扇调速{ifvolt_d0{Ch_Full=0;volt_d-=28;}elseCh_Full=1;}else//如果时间设置标志位打开,则定时设置{TimeGrade--;}}voidisr_t1voidinterrupt3{TH1=65536-50000/256;TL1=65536-50000%256;t1flag++;ift1flag==1200{t1flag=0;TimeGo++;}}数字温度传感器DS18B20部分头文件#ifndef_DS18B20_H#define_DS18B20_H#includereg
51.h#includeintrins.hsbitDQ=P3^4;bitinit_ds18b20void;voiddelayunsignedintt;voidwr_ds18b20unsignedcharbyt;unsignedcharrd_ds18b20void;intrd_temperaturevoid;#endif数字温度传感器DS18B20部分C文件#includeds18b
20.h#includemath.hvoiddelayunsignedintt{whilet--;}//DS18B20初始化函数bitinit_ds18b20void{bitinitflag=0;DQ=1;delay12;DQ=0;delay80;//延时大于480usDQ=1;delay10;//14initflag=DQ;//initflag等于1初始化失败delay5;returninitflag;}//通过单总线向从器件写一个字节voidwr_ds18b20unsignedcharbyt{unsignedchari;fori=0;i8;i++{DQ=0;DQ=byt0x01;delay5;DQ=1;byt=1;}delay5;}//通过单总线从从器件读一个字节unsignedcharrd_ds18b20void{unsignedchari;unsignedcharbyt;fori=0;i8;i++{DQ=0;byt=1;DQ=1;ifDQ{byt|=0x80;}delay5;}returnbyt;}//温度转换、读取及数据处理器函数intrd_temperaturevoid{unsignedcharlowhigh;unsignedinttmpvalue;intvalue;//存放温度数值floatt;init_ds18b20;wr_ds18b200xCC;wr_ds18b200x44;//启动温度转换delay200;init_ds18b20;wr_ds18b200xCC;wr_ds18b200xBE;//读取寄存器low=rd_ds18b20;//低字节high=rd_ds18b20;//高字节tmpvalue=high;tmpvalue=8;tmpvalue|=low;value=tmpvalue;//使用DS18B20的默认分辨率12位精确度为
0.0625度即读回数据的最低位代表
0.0625度t=value*
0.0625;//将它放大100倍使显示时可显示小数点后两位并对小数点后第三进行4舍5入//如t=
11.0625进行计数后得到value=1106即
11.06度//如t=-
11.0625进行计数后得到value=-1106即-
11.06度//value=t*100+value
00.5:-
0.5;//大于0加
0.5小于0减
0.5value=t*100/
1.25+value
00.5:-
0.5;returnvalue;}附录2实验原理图数字温度传感器电机驱动及电机执行电路DAC0832AT89C52调速调时S1键调速调时S2键LED数码管显示模式切换键K1定时功能键K2。