《单片机课程设计实验报告_3.docx》由会员分享,可在线阅读,更多相关《单片机课程设计实验报告_3.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机课程设计实验报告一、前言课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的详细训练和考察经过.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中能够讲得是无处不在。因而作为二十一世纪的大学来讲把握单片机的开发技术是特别重要的。为了使大学生更好的将理论学习与实践相结合,同时增加大学生对所学知识的感性认识,提升大学生的动手能力,在每学期末各高校十分是工科专业均开设了“课程设计。在数控系统中,检测是不可或缺的一个重要环节。最关键的检测环节之一便是电动机的测速。测速的方法多种多样,并且与选择的传感器类
2、型有关。本设计利用旋转编码器实现电动机的测速。二、设计要求与设计方案设计要求:1设计驱动电路,实现对直流电机控制,可实现电机的启动、加减速、匀速、制动停机及正、反转等功能。2采用旋转编码器测量电机的转速,以十进制数电机显示转速转/分钟,用数码管或其他类型的显示器。3实验测试时,采用改变直流永磁电机电枢两端电压的形式改变转速及切换其极性改变电机转动方向,测量系统能够实时测量和显示电机的转速和转向。4当测速系统不测量转速期间,测量显示测试现场温度。5每次测量完成后,把测量时间、测量值等信息通过串口传递到监控器上。信息提示形式“时分秒:转速:可用字符或编码。扩大功能:1转速超限报警,通过LED显示器
3、和蜂鸣器报警。可把报警信息通过串口传递到监视器上。2温度超限报警,通过LED显示器和蜂鸣器报警。可把报警信息通过串口传递到监视器上。3当测速系统不测量转速时,可作为钟表和温度计使用,分时显示时间和温度。方案:通过单片机实现电机启动、停止、正转、反转的控制,调速利用与电机串联在一起的电位器控制。正反转由H桥电路实现。电路图如下:图1-1本设计中采用的旋转编码器,电机每转动一周,输出1024个脉冲。通过统计脉冲个数,经过一系列计算,得出电机转速,并显示在LED数码管上。本设计中,基准时间为1ms,记脉冲周期为7ms,T0为计数器工作形式,TH0、TL0内存储脉冲个数N。转速n与脉冲N转换公式为:n
4、=N*1000*60/7*1024=8.37*N注:记脉冲周期7ms实现经过为调用七次基准时间,单片机执行程序也会消耗一部分时间,经折中后,n约等于8N,误差在允许的范围内。显示经过,现将TH0、TL0中数暂存,转换为BCD码,调用显示程序显示BCD码。电机在24V全电压下运行,转速为800r/min。所以显示经过中,只需利用LED数码管后三位。第6位显示正负,以表示正反转。改变转速利用电位器,改变电机转动方向利用H桥,见图1-1.实现实时显示是利用:经过转速的处理程序,转速存储在特定单元,判定键盘输入值,当按下四键值时,使程序跳到转速显示模块,显示特定单元的值,进而显示实时转速。不测量转速时
5、,调用DS18B20测温程序,将温度显示到LED数码管上。判定键值,假如按下五键,则调用串口显示程序,经过SBUF将数值按字符形式显示在显示器上。设置上限转速800r/min,将T0中记出的数与上限相比,没有超出上限时,系统正常工作,超出上限,蜂鸣器报警,并调用串口程序,将“OVERSPD!传递到显示器上。设置下限温度2度及上限温度35度,当温度超限时,蜂鸣器报警,并将OVERTTMP!传递到显示器上。设计方案:单片机控制电机启动、停止。利用H桥实现电机正反转控制。利用旋转编码器实现电动机转速测量。单片机、LED、按键等部分原理见图1-2。电机控制图见图1-1。实物图见图1-3程序代码:FLA
6、G1BIT00HSIGNBITP3.7SIGN0BITP3.3DQBITP1.3TPHDATA3AHTPLDATA3BHFUHAOEQU20HWANEQU21HQIANEQU22HBAIEQU23HSHIEQU24HGEIEQU25H;转速存储单元MIAOEQU26HFENEQU27HHOUREQU28H;时间存储单元MIAO1EQU29HMIAO2EQU2AHFEN1EQU2BHFEN2EQU2CHHOUR1EQU2DHHOUR2EQU2EH;时间调整字符ORG0000HLJMPSTARTORG0003HLJMPJI_SHIORG001BHLJMPP_T1;基准时间1ms中断ORG0030H
7、START:MOVSP,#70HMOVTMOD,#00010101B;计时初始化MOVTH1,#0FCHMOVTL1,#18H;1ms初值MOV33H,#20MOV34H,#50SETBEASETBET1SETBTR1SETBPT1SETBIT0CLREX0SETBEACLRPX0SETBP3.5SETBP3.6;关电机CLRP3.7CLRP3.3MAIN:LCALLKEYJNBSIGN0,NEXTPLJMPJI_SHINEXTP:LCALLWENDUSJMPMAIN;*;计时中断;*P_T1:PUSHACC;中断程序计时PUSHPSWCLRSIGNMOVTH1,#0FCHMOVTL1,#18
8、HDJNZ34H,LOOPMOV34H,#50DJNZ33H,LOOP;判定能否过完一秒MOV33H,#20INCMIAOMOVA,MIAOCJNEA,#59,LOOPMOVMIAO,#0INCFENMOVA,FENCJNEA,#59,LOOPMOVFEN,#0MOVMIAO,#0INCHOURMOVA,HOURCJNEA,#24,LOOPMOVHOUR,#0MOVFEN,#0MOVMIAO,#0LOOP:POPPSWPOPACC;恢复现场RETI;*;按键处理部分;*KEY:ACALLKEY_SCANMOVA,R5CJNEA,#01H,NEXT1CLRP3.5SETBP3.6MOVFUHAO
9、,#0BHRET;按一处理NEXT1:CJNEA,#02H,NEXT2CLRP3.6SETBP3.5MOVFUHAO,#0AHRET;按二处理NEXT2:CJNEA,#03H,NEXT3SETBSIGN0RET;按三处理NEXT3:CJNEA,#04H,NEXT4CLRSIGN0RET;按四处理NEXT4:CJNEA,#05H,NEXT5LCALLSHI_JIANLCALLCHUANKOURET;按五处理NEXT5:RET;*;温度;*WENDU:MOVR4,#01HWENDU1:LCALLD1820LCALLTEMPDISP;温度显示RETD1820:CALLDS18B20_Reset;设备
10、复位MOVA,#0CCH;跳过ROM命令CALLDS18B20_WriteByte;送出命令MOVA,#044H;开场转换CALLDS18B20_WriteByte;送出命令JNBDQ,$;等待转换完成CALLDS18B20_Reset;设备复位MOVA,#0CCH;跳过ROM命令CALLDS18B20_WriteByte;送出命令MOVA,#0BEH;读暂存存储器CALLDS18B20_WriteByte;送出命令CALLDS18B20_ReadByte;读温度低字节MOVTPL,A;存储数据CALLDS18B20_ReadByte;读温度高字节MOVTPH,A;存储数据CALLTEMP_R
11、EVERSERETDelayX0us:NOP;2当改用1T的MCU时,请调整此延时函数NOP;1NOP;1NOP;1NOP;1NOP;1NOP;1NOP;1DJNZ3DH,DelayX0us;2RET;2DS18B20_Reset:CLRDQ;送出低电平复位信号MOV3DH,#48;延时至少480usCALLDelayX0usSETBDQ;释放数据线MOV3DH,#6;等待60usCALLDelayX0usMOVC,DQ;检测存在脉冲MOV3DH,#42;等待设备释放数据线CALLDelayX0usJCDS18B20_Reset;假如设备不存在,则继续等待RETDS18B20_ReadByte:CLRAPUSH0MOV0,#8;8位计数器ReadNext:CLRDQ;开场时间片NOPNOPSETBDQ;准备接收NOPNOPMOVC,DQ;读取数据RRCAMOV3DH,#6;等待时间片结束CALLDelayX0usDJNZ0,ReadNextPOP0RETDS18B20_WriteByte:PUSH0