单片机课程设计实验报告-3_第1页
单片机课程设计实验报告-3_第2页
单片机课程设计实验报告-3_第3页
单片机课程设计实验报告-3_第4页
单片机课程设计实验报告-3_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理与接口技术直流电机测速系统课程设计报告学院:专业:学生姓名:学号:指导教师:时间:一、前言课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。为了使大学生更好的将理论学习与实践相结合,同时增加大学生对所学知识的感性认识,提升大学生的动手能力,在每学期末各高校(特别是工科专业)均开设了“课程设计”。在数控系统中,检测是不可或缺的一个重要环节。最关键的检测环节之一便是电动机的测速。测速的方法多种多样,并且与选择的传感器类型有关。本设计利用旋转编码器实现电动机的测速。二、设计要求与设计方案设计要求:(1)设计驱动电路,实现对直流电机控制,可实现电机的启动、加减速、匀速、制动停机及正、反转等功能。(2)采用旋转编码器测量电机的转速,以十进制数电机显示转速(转/分钟),用数码管或其他类型的显示器。(3)实验测试时,采用改变直流永磁电机电枢两端电压的形式改变转速及切换其极性改变电机转动方向,测量系统能够实时测量和显示电机的转速和转向。(4)当测速系统不测量转速期间,测量显示测试现场温度。(5)每次测量完成后,把测量时间、测量值等信息通过串口传递到监控器上。信息提示模式“××时××分××秒:转速:××”(可用字符或编码)。扩充功能:(1)转速超限报警,通过LED显示器和蜂鸣器报警。可把报警信息通过串口传递到监视器上。(2)温度超限报警,通过LED显示器和蜂鸣器报警。可把报警信息通过串口传递到监视器上。(3)当测速系统不测量转速时,可作为钟表和温度计使用,分时显示时间和温度。方案:通过单片机实现电机启动、停止、正转、反转的控制,调速利用与电机串联在一起的电位器控制。正反转由H桥电路实现。电路图如下:图1-1本设计中采用的旋转编码器,电机每转动一周,输出1024个脉冲。通过统计脉冲个数,经过一系列计算,得出电机转速,并显示在LED数码管上。本设计中,基准时间为1ms,记脉冲周期为7ms,T0为计数器工作模式,TH0、TL0内存储脉冲个数N。转速n与脉冲N转换公式为:n=(N*1000*60)/(7*1024)=8.37*N注:记脉冲周期7ms实现过程为调用七次基准时间,单片机执行程序也会消耗一部分时间,经折中后,n约等于8N,误差在允许的范围内。显示过程,现将TH0、TL0中数暂存,转换为BCD码,调用显示程序显示BCD码。电机在24V全电压下运行,转速为800r/min。所以显示过程中,只需利用LED数码管后三位。第6位显示正负,以表示正反转。改变转速利用电位器,改变电机转动方向利用H桥,见图1-1.实现实时显示是利用:经过转速的处理程序,转速存储在特定单元,判断键盘输入值,当按下四键值时,使程序跳到转速显示模块,显示特定单元的值,从而显示实时转速。不测量转速时,调用DS18B20测温程序,将温度显示到LED数码管上。判断键值,如果按下五键,则调用串口显示程序,经过SBUF将数值按字符形式显示在显示器上。设置上限转速800r/min,将T0中记出的数与上限相比,没有超出上限时,系统正常工作,超出上限,蜂鸣器报警,并调用串口程序,将“OVERSPD!”传递到显示器上。设置下限温度2度及上限温度35度,当温度超限时,蜂鸣器报警,并将”OVERTTMP!”传递到显示器上。设计方案:单片机控制电机启动、停止。利用H桥实现电机正反转控制。利用旋转编码器实现电动机转速测量。单片机、LED、按键等部分原理见图1-2。电机控制图见图1-1。实物图见图1-3图1-2图1-3三、框图及程序介绍1、整体框图开始主程序开始初始化初始化初始值设定调用键值和处理程序调用key程序调用键值和处理程序键值存在R5判断是否要测转速?判断是否要测转速?调用测速程序调用温度程序调用测速程序调用温度程序2、键值处理程序开始开始调用键值扫描调用键值扫描键值为1?启动电机键值为1?启动电机启动电机(反转)键值为2?启动电机(反转)键值为2?调入测速模式键值为3?调入测速模式键值为3?调入测温模式键值为4?调入测温模式键值为4?传入串口指令键值为5?传入串口指令键值为5?结束结束3、测温程序开始开始18B20初始化18B20初始化串行接收温度串行接收温度显示温度显示温度串行输出报警温度<2?串行输出报警温度<2?报警串行输出温度>35?报警串行输出温度>35?结束结束4、中断计时开始开始初始化计时器初始化计时器1ms中断1ms中断达到1000次?达到1000次?秒加1秒加1秒>60?秒>60?分加1分加1NN分>60?分>60?时加1Y时加1Y结束结束开始5、测速程序开始初始化计数器初始化计数器1ms中断?1ms中断?启动定时启动定时1ms中断?1ms中断?存储计数值存储计数值符号位位置置“-”符号位位置为“+”?符号位位置置“-”符号位位置为“+”?显示转速显示转速串行输出调用报警转速>800?串行输出调用报警转速>800?结束结束程序代码:FLAG1BIT00HSIGNBITP3.7SIGN0 BIT P3.3DQBITP1.3TPHDATA3AHTPLDATA3BHFUHAOEQU20H WANEQU21H QIANEQU22H BAIEQU23H SHIEQU24H GEIEQU25H;转速存储单元 MIAO EQU26H FENEQU27H HOUREQU28H;时间存储单元 MIAO1 EQU29H MIAO2EQU2AH FEN1EQU2BH FEN2EQU2CH HOUR1EQU2DHHOUR2EQU2EH;时间调整字符ORG0000HLJMPSTARTORG0003HLJMPJI_SHIORG001BHLJMPP_T1;基准时间1ms中断 ORG0030HSTART:MOVSP,#70HMOVTMOD,#00010101B ;计时初始化MOVTH1,#0FCH MOVTL1,#18H;1ms初值 MOV33H,#20 MOV34H,#50 SETBEA SETBET1 SETBTR1SETBPT1 SETBIT0 CLREX0 SETBEA CLRPX0 SETBP3.5 SETBP3.6;关电机 CLRP3.7 CLRP3.3 MAIN:LCALLKEYJNBSIGN0,NEXTP LJMPJI_SHINEXTP:LCALLWENDU SJMPMAIN;********************************************;计时中断;******************************************** P_T1:PUSHACC ;中断程序计时PUSHPSW CLRSIGNMOVTH1,#0FCH MOVTL1,#18H DJNZ 34H,LOOP MOV34H,#50 DJNZ33H,LOOP ;判断是否过完一秒MOV33H,#20 INCMIAO MOVA,MIAO CJNEA,#59,LOOP MOVMIAO,#0 INCFEN MOVA,FEN CJNEA,#59,LOOP MOVFEN,#0 MOVMIAO,#0 INCHOUR MOVA,HOUR CJNEA,#24,LOOP MOVHOUR,#0 MOVFEN,#0 MOVMIAO,#0 LOOP:POPPSWPOPACC ;恢复现场RETI;**************************************************************** ;按键处理部分;****************************************************************KEY:ACALLKEY_SCANMOVA,R5 CJNEA,#01H,NEXT1 CLRP3.5 SETBP3.6 MOVFUHAO,#0BH RET;按一处理 NEXT1:CJNEA,#02H,NEXT2 CLRP3.6 SETBP3.5 MOVFUHAO,#0AH RET;按二处理 NEXT2:CJNEA,#03H,NEXT3 SETBSIGN0 RET;按三处理 NEXT3:CJNEA,#04H,NEXT4 CLRSIGN0 RET;按四处理 NEXT4:CJNEA,#05H,NEXT5 LCALLSHI_JIAN LCALLCHUANKOU RET;按五处理 NEXT5:RET ;****************************************************************;温度;*************************************************************** WENDU:MOVR4,#01HWENDU1:LCALLD1820LCALLTEMPDISP ;温度显示RETD1820:CALLDS18B20_Reset;设备复位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_REVERSERETDelayX0us: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:PUSH0MOV0,#8;8位计数器WriteNext:CLRDQ;开始时间片NOPNOPRRCA;输出数据MOVDQ,CMOV3DH,#6;等待时间片结束CALLDelayX0usSETBDQ;准备送出下一位数据DJNZ0,WriteNextPOP0RET TEMP_REVERSE:MOVA,TPH ;将TPH,TPL转换为无符号数,并存放于3CH ANLA,#0FH ;保留低四位,其最高位为符号位SWAPAMOV3CH,AMOVA,TPLANLA,#0F0H;保留高四位,丢弃小数部分SWAPAORLA,3CHMOV3CH,AMOV2FH,A RETTEMPDISP:JB2FH.7,FUWENDU;高位为1时温度为负JMPDISP_TEMPZ;正温度FUWENDU:CPLAADDA,#01MOV3CH,ALCALLDISP_TEMPMOVDPTR,#TABLEMOVA,#12MOVCA,@A+DPTRMOVP1,#02 MOVP0,A;显示负号LCALLDL1MSCLRCMOVA,3CHSUBBA,#10 ;低温报警值JCDISP_TEMPMOV50H,#0FHDREBAO:MOVP1,#06H;低温声光报警LCALLDL1MSMOVP1,#07HLCALLDL1MSDJNZ50H,DREBAOLJMPDISP_TEMPDISP_TEMPZ:CLRCMOVA,3CHSUBBA,#35;高温报警值JCDISP_TEMPMOV50H,#0FHGREBAO:LCALLCHUANKOU1 MOVP1,#06H;高温声光报警LCALLDL1MSMOVP1,#07HLCALLDL1MSDJNZ50H,GREBAOLJMPDISP_TEMPDISP_TEMP:MOVA,3CH ;温度暂存储MOVDPTR,#TABLE1;查表获得十进制温度 MOVCA,@A+DPTR MOV3CH,A ;十进制温度存储于3CH单元ANLA,#0F0H ;分离温度的十位数 SWAPAMOVDPTR,#TABLEMOVCA,@A+DPTR ;取十位数字型码 MOVP1,#03 ;显示位置 MOVP0,ALCALLDL1MS ;延时MOVA,3CH ;ANLA,#0FH ;分离温度的个位数MOVDPTR,#TABLEMOVCA,@A+DPTR ;取个位字型码MOVP1,#04H ;显示低位MOVP0,ALCALLDL1MS MOVA,#11 MOVCA,@A+DPTR ;取C的字型码MOVP1,#05;显示C,表示摄氏度MOVP0,A LCALLDL1MSRET;****************************************************** ;键盘扫描程序;******************************************************KEY_SCAN:MOVP2,#0F0H;置P2.4~P2.6为入口MOVA,P2;读P2口状态ANLA,#0F0HXRLA,#0F0HJZNO_KEY;没有键按下LCALLDL10MS;稳定MOVA,P2ANLA,#0F0H;重读键值XRLA,#0F0HJZNO_KEY MOVR2,#11110111B;行扫描,从第三行开始SCAN:MOVA,R2MOVP2,A;再次给P2口赋值MOVA,P2;读P2口状态ANLA,#11110000BMOVR3,ACJNEA,#0F0H,KEY_PRSD;有键按下MOVA,R2RRA;产生下次的行线输出MOVR2,AXRLA,#01111111B;检测完否JNZSCANNO_KEY:MOVR5,#09H;存放键值RETKEY_PRSD:MOVA,R2;取行扫描值ANLA,#00001111B;计算行特征值ORLA,R3;计算行特征码MOVR4,A;暂存MOVR5,#01H;置按键键值初值MOVDPTR,#KEY_TAB;特征码表首地址JIANCE:MOVA,R5MOVCA,@A+DPTRXRLA,R4JZFIXED;键值已经找到INCR5MOVA,R5CJNEA,#07H,JIANCE;七个键是否全部检测完AJMPNO_KEYFIXED:MOVP2,#0F0HMOVA,P2;判断键是否释放ANLA,#0F0HXRLA,#0F0HJNZFIXEDLCALLDL10MS;延时消抖MOVA,P2ANLA,#0F0HXRLA,#0F0HJNZFIXEDRET;****************************************************;报警程序;****************************************************FENGMING:MOVP1,#00000111B;蜂鸣器ACALLDELY MOVP1,#00000110B;亮灯ACALLDELYDELY:MOVR3,#100DEL6:MOVR4,#100DEL7:NOPNOPNOPDJNZR4,DEL7DJNZR3,DEL6RET;****************************************************;显示程序;****************************************************DIS:MOVR0,#20HMOVR2,#06H MOVR3,#00H ;地址和输出初始化 RED0:MOVDPTR,#SEG_TAB MOVA,@R0 MOVCA,@A+DPTR MOVP0,A MOVA,R3 MOVP1,A ACALLDL10MS INCR0 INCR3 DJNZR2,RED0 ;从高位循环到低位显示 RET ;****************************************************;延迟函程序;**************************************************** DL1MS:MOVR0,#20DEL1:MOVR7,#10DEL0:NOPNOPNOPDJNZR7,DEL0DJNZR0,DEL1RETDL10MS:MOVR7,#0C9H DLMS:NOPNOPNOPDJNZR7,DLMSSTOP:RET DL50MS:MOVR6,#04H DLMS1:MOVR7,#0C9H DLMS0:NOPNOPNOPDJNZR7,DLMS0 DJNZR6,DLMS1 RETDL100MS:MOVR6,#2 DLMS11:MOVR7,#0C9H DLMS00:NOPNOPNOPDJNZR7,DLMS00 DJNZR6,DLMS11 RETDL500MS:MOVR0,#250DELY1:MOVR7,#250 DELY2:NOP NOP NOP NOP NOP NOP DJNZR7,DELY2 DJNZR0,DELY1 RETSEG_TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,3FH,39H,5EH,79H,71H ;转速数据编码表SEG_TAB1:DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFHKEY_TAB:DB00H,77H,07BH,7DH,0B7H,0BBH,0BDH,0D7H;按键键值表,1~7七个键值TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,39H,40HTABLE1:DB00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12HDB13H,14H,15H,16H,17H,18H,19H,20H,21H,22H,23H,24H,25HDB26H,27H,28H,29H,30H,31H,32H,33H,34H,35H,36H,37H,38HDB39H,40H,41H,42H,43H,44H,45H,46H,47H,48H,49H,50H;**************************************************************; 计数部分(查询方式记脉冲,每7ms记录一次脉冲数);**************************************************************JI_SHI:NOP NW0:MOVTH0,#00H MOVTL0,#00H SETBSIGNNW2: JNBSIGN,NW3 AJMPNW2 NW3:SETBTR0 MOVR1,#07 NW7:SETBSIGN NW4:JNBSIGN,NW5 AJMPNW4NW5:DJNZR1,NW7 CLRTR0 MOV60H,TL0 MOV61H,TH0 ;存储计数结果 LCALLYOUYI LCALLYOUYI LCALLYOUYI LCALLYOUYI LCALLJISUAN;调整计数乘以八 MOVR1,#20 NW6:LCALLDIS LCALLPANDUAN LCALLDL100MS DJNZR1,NW6 NOP LJMPMAIN;循环显示转速PANDUAN:MOVA,BAICJNEA,#8,STOPP LCALLFENGMING LCALLCHUANKOU0 STOPP:RET;***************************************************;数据处理;***************************************************YOUYI:CLRCMOVA,60H RLCA MOV60H,A MOVA,61H RLCA MOV61H,A CLRC RET;八位数乘以2JISUAN: CLRA MOVR3,#00H MOVR4,#00H MOVR5,#00H MOVWAN,#00H MOVR2,#10H CLRCHB:MOVA,60H;八位2进制转BCDRLCA MOV60H,A MOVA,61H RLCA MOV61H,A MOVA,R5 ADDCA,R5 DAA MOVR5,A MOVA,R4 ADDCA,R4 DAA MOVR4,A MOVA,R3 ADDCA,R3 DAA MOVR3,A DJNZR2,HB; MOVA,R5 ANLA,#0FH MOVGEI,A MOVA,R5 SWAPA ANLA,#0FH MOVSHI,A MOVA,R4 ANLA,#0FH MOVBAI,A MOVA,R4 SWAPA ANLA,#0FH MOVQIAN,A RET;****************************************;时间调整;****************************************SHI_JIAN:MOVA,MIAODAA MOVMIAO1,A MOVA,FENDAA MOVFEN1,AMOVA,HOUR DAA MOVHOUR1,AMOVA,MIAO1 ANLA,#0F0H SWAPA MOVMIAO2,A MOVA,MIAO1 ANLA,#0FH MOVMIAO1,A MOVA,FEN1ANLA,#0F0H SWAPA MOVFEN2,A MOVA,FEN1 ANLA,#0FH MOVFEN1,A MOVA,HOUR1ANLA,#0F0H SWAPA MOVHOUR2,A MOVA,HOUR1 ANLA,#0FH MOVHOUR1,A;将时间数据调整为BCD码 ;****************************************;串口助手;****************************************CHUANKOU:CLREAMOVTMOD,#20H MOVTH1,#0FDH MOVTL1,#0FDH MOVSCON,#40HMOVPCON,#00H SETBTR1;串口初始化 MOVDPTR,#SEG_TAB0 MOVR2,#05 LOOP00:MOVA,#00HMOVCA,@A+DPTR MOVSBUF,AWAIT00:JBCTI,NEXT00 SJMPWAIT00NEXT00:INCDPTRDJNZR2,LOOP00 MOVR0,#2EHMOVR2,#06H RED11:MOVA,@R0 ADDA,#30H MOVSBUF,AWAIT11:JBCTI,NEXT11 SJMPWAIT11 NEXT11: DECR0 DJNZR2,RED11 MOVDPTR,#SEG_TAB2 MOVR2,#05 LOOP33:MOVA,#00HMOVCA,@A+DPTR MOVSBUF,AWAIT33:JBCTI,NEXT33 SJMPWAIT33NEXT33:INCDPTRDJNZR2,LOOP33 MOVR0,#20HMOVR2,#06H RED22:MOVA,@R0 ADDA,#30H MOVSBUF,AWAIT22:JBCTI,NEXT22 SJMPWAIT22 NEXT22: DECR0 DJNZR2,RED22 ;传递数据到显示器上 MOVTMOD,#00010101B MOVTH1,#0FCH MOVTL1,#18H SETBEA RETSEG_TAB0:DB'T','I','M','E',':'SEG_TAB2:DB'','S','P','D',':';字符表 CHUANKOU0: CLREAMOVTMOD,#20H MOVTH1,#0FDH MOVTL1,#0FDH MOVSCON,#40HMOVPCON,#00H SETBTR1 MOVDPTR,#SEG_TAB4 MOVR2,#10 LOOP44:MOVA,#00HMOVCA,@A+DPTR MOVSBUF,AWAIT44:JBCTI,NEXT44 SJMPWAIT44NEXT44:INCDPTRDJNZR2,LOOP44;传递数据到显示器上 RETSEG_TAB4:DB'O','V','E','R','','S','P','D','','!'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论