1、华科单片机课设直流电机转速测量与显示单片机原理及应用课程设计报告设计题目:直流电机转速测量与显示摘要:本系统采用SST89E58单片机智能控制,结合外围电子电路,设计的测量直流电动机转速系统。在软件设计上采用了单片机的汇编语言设计,通过单片机内部定时/计数器同时动作,通过测量给定实验装置的正弦波信号简介测量电动机转速。测量结果在四位七段式数码管上输出显示,结果精确到整数位。软件设计简单明了,适用于测量频率从19999Hz的脉冲信号。关键词:单片机;信号;频率;比较器。一、系统总体方案及硬件设计用示波器测量给定的电动机装置的信号发现此信号是一个300Hz左右的类似正弦波的波形,因此设计的实验装置
2、只要能测量出此正弦波的频率即为电机转速。此方案先将正弦波信号转变为方波信号,然后采用1S测信号脉冲次数,用一个定时计数器做定时中断,定时1S,另一个定时计数器仅做计数器使用,初始化完毕后同时开启两个定时计数器,直到产生1S后立即关闭T0和T1(起保护程序和数据的作用)取出计数器寄存器的值就是1S内检测信号的下边沿次数即待测信号的频率。待数据处理显示完成后开始下一次测量。原理图如图1所示。图1根据该实验原理待测信号的频率不应大于计数器的最大值65535,足以满足设计要求。这个方法误差比较均衡,且易于扩大量程,且可测量任意占空比的方波信号,但由于单片机的限制频率越高误差表现更明显。LM339比较器
3、电路将正弦波变成正方波,输入到单片机的P3.5(T1)口,计数器T1计数。选用4个共阴极数码管,复用单片机P0口,选用两片74HC574分别锁存位选和段选信号用来显示结果。系统电路图见附录一(用正弦信号代替电机)。二、软件设计主程序流程图:显示子程序流程图:数据处理子程序:定时器T0中断子程序:软件代码见附录二。结束语本次设计将模拟电子电路和单片机的知识相结合,对自己所学知识试一次很好的实践机会。因为我自己对这两门课都比较熟,而且也有相关经验,器件选择没有任何困难,实验室给我们创造了很好的硬件条件,电路板元件齐全。程序上我们尽量多的借鉴了现有的子程序,节省了大量时间,主要的精力都放在对程序时序
4、的调节和硬件调试上面,最终顺利完成设计,测试的时候能随着频率的变化实时显示,误差在1Hz左右。在此次的设计的过程中更进一步地熟悉了芯片的结构及掌握了各种硬件电路的工作原理和其具体的使用方法。也锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。还有一个很大的收获就是接触了Proteus这个非常方便的用来仿真单片机的软件,极大地方便了我们的设计,不用一直呆在实验室,不用担心硬件的问题。这次实验设计题目较为简单,虽然完成了要求,但是还是留下了一点遗憾。在程序编写过程中,关于数据处理的部分用汇编语言编写繁复冗长,远远不如用C51简明,体会到了C51的优点。可惜自己从来没用过C51,希望以
5、后能多加学习。最后感谢帮助我解决问题的老师和同学,真诚的说声谢谢!参考文献1康华光主编.电子技术基础(第四版).北京:高等教育出版社,19992汪建.单片机原理及应用技术.武汉:华中科技大学出版社,2012附录一:附录二:D_DAT0 EQU 50HD_DAT1 EQU D_DAT0+1D_DAT2 EQU D_DAT1+1D_DAT3 EQU D_DAT2+1H_DAT0 EQU D_DAT3+1H_DAT1 EQU H_DAT0+1 ORG 0000H AJMP MAIN ORG 000BH AJMP INT_T0 ORG 0080HMAIN: MOV SP,#30H ;初始化堆栈指针 M
6、OV P0,#0 CLR P1.1 ;初始化有关I/O口 CLR P1.2 MOV R0,#00H ;初始化显示指针寄存器 ;R0指向第一位显示数字 MOV R1,#01H ;初始化需点亮数码管位置代码 MOV R2,#14H ;定时20个0.05秒 MOV TMOD,#51H MOV TH0,#3CH ;置定时器初值 MOV TL0,#0B0H MOV TH1,#00H ;置计数器初值 MOV TL1,#00H SETB TR0 ;启动定时 SETB TR1 ;启动计数 SETB ET0 SETB EADISPLAY: MOV R0,D_DAT3 ;逐位显示 MOV R1,#01H LCAL
7、L DISP MOV R0,D_DAT2 MOV R1,#02H LCALL DISP MOV R0,D_DAT1 MOV R1,#04H LCALL DISP MOV R0,D_DAT0 MOV R1,#08H LCALL DISP AJMP DISPLAY ;循环执行显示;*;通过574显示6位数字子程序;*DISP: MOV A,R1 ;取位代码 MOV P0,A ;位代码送P0口 SETB P1.2 NOP CLR P1.2 ;产生一个锁存脉冲,锁存位代码 MOV A,R0 ;取需显示的数字 MOV DPTR,#DISPD ;装载笔画编码表首地址 MOVC A,A+DPTR ;取需显示
8、数字笔画代码 MOV P0,A ;笔画代码送到P0口 SETB P1.1 NOP CLR P1.1 ;产生一个锁存脉冲,锁存笔画代码DELAY: MOV R7,#40HDELY1: MOV R6,#0FHDELY2: DJNZ R6,$ ;$代表当前行 DJNZ R7,DELY1 RET HTD: MOV D_DAT3,#00H ;将结果千位清0 MOV D_DAT2,#00H MOV D_DAT1,#00H MOV D_DAT0,#00HH1000: CLR C ;进位位C清0 MOV A,H_DAT0 ;源数据低位装载到累加器A中 MOV R6,A ;备份源数值低位到寄存器R6中 SUBB
9、 A,#0E8H ;源数值低位减去1000的低位0E8H MOV H_DAT0,A ;余数存回到源数值低位存储单元 MOV A,H_DAT1 ;源数值高位装载到累加器A中 MOV R7,A ;备份源数值高位到寄存器R7中 SUBB A,#03H ;源数值高位带借位减1000的高位03H MOV H_DAT1,A ;余数存回到源数值低位存储单元 INC D_DAT3 ;千位增1 JNC H1000 ;如果没有借位则利用余数循环再减 ;有借位表明为最后一次无效减 ;程序顺序执行,应还原最后一次修改值 MOV H_DAT0,R6 MOV H_DAT1,R7 ;用备份值作为新的源数值(余数) DEC
10、D_DAT3 ;千位数减1,去掉最后一次无效减的影响H100: MOV A,H_DAT0 ;源数值低位装载到累加器A中 MOV R6,A ;备份源数值低位到寄存器R6中 CLR C ;清0进位位C SUBB A,#100 ;减去100 MOV H_DAT0,A ;存回余数低位 MOV A,H_DAT1 ;取源数值高位 SUBB A,#00H ;减100的高位0,实际上是减去借位位 MOV H_DAT1,A ;存回余数高位 JC H10 ;有借位则跳到下一步继续运算 INC D_DAT2 ;没有借位,百位增1 AJMP H100 ;没有借位继续减 ;注意本轮循环中最后一次减时百位未增1 ;所以不
11、存在还原的问题 ;进入下一轮时,源数值(余数)都在R6中H10: CLR C MOV A,R6 ;源数值(低位)装载到累加器A中 ;到此源数值高位已经为0,不用再参加计算 MOV D_DAT0,A ;存回源数值低位 ;如果是最后一次减,则此值即为个位 SUBB A,#10 ;减去10 MOV R6,A ;保存余数 JC H1 ;有借位,运算结束 INC D_DAT1 ;没有借位,十位增1 LJMP H10 ;没有借位继续减H1: RET INT_T0: MOV TH0,#3CH ;置定时初值 MOV TL0,#0B0H DJNZ R2,RETURN ;R2不等于0则转移 MOV R2,#14H CLR TR1 ;停止计数 CLR TR0 MOV H_DAT0,TL1 ;TL1值送累加器A MOV H_DAT1,TH1 ;TL1值送累加器A LCALL HTD MOV TH1,#00H ;置计数器初值 MOV TL1,#00H SETB TR0 ;启动定时 SETB TR1 ;启动计数RETURN: RETI;数字笔画代码表; 0 1 2 3 4 5 6 7 8 9 熄DISPD: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0 END
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1