单片机控制电机转速并在LCD上显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
随着科技的发展,单片机的应用随处可见,大到工业控制,小到小型玩具。
它的应用越发广泛,而我的题目就是单片机控制LCD显示直流电动机的转速。
在这次实验中,对敦煌实验箱的正确应用是一反面,同时对LCD芯片的应用和编程也是比较关键的一点,最后实验的调试和对单片机相应基础知识的巩固也是本实验的主要目的之一。
关键词:单片机;LCD;直流电机
目录
1、前言 (1)
2、整体方案设计 (1)
3、硬件设计布线图 (2)
3.1硬件说明 (2)
3.2 外形尺寸图 (3)
3.3 模块引脚说明 (3)
3.4 资料传输与接口时序 (4)
3.4.1串行接口与串行传输资料 (4)
3.4.2 串行接口时序图 (5)
3.4.3串行接口特性 (5)
3.5显示步骤 (6)
3.6直流电机的组成结构及工作原理 (7)
3.7 光电耦合器的组成及工作原理 (7)
4、软件程序流程图 (8)
5、程序调试 (9)
5.1速度转换公式 (9)
5.1.1 数字测速M法 (9)
5.1.2 数字测速T法 (9)
5.1.3数字测速M/T法 (10)
6、调试中的问题并解决 (10)
7、课设总结 (11)
参考文献 (12)
附录Ⅰ (12)
单片机课程设计
1、前言
单片机全名为单片微型计算机,是微型计算机家族中的一个分类,是将CPU、存储器、总线、I/O接口电路集成在一片超大规模集成电路芯片上。
而本实验要做的是单片机控制LCD和直流电动机。
LCD的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
是现在显示器的主流产品。
2、整体方案设计
由于都念到了大四所以对做实验都有了一定的认识,所以在刚开始时就得做好对实验的整体设计,使自己在做实验的过程中不至于盲目耗费时间。
整体设计方案图如图示2-1。
图1-1整体思路
3、硬件设计布线图
硬件的设计最主要的就是用Pretues进行硬件的仿真搭接,如下图示3-1。
用脉冲形式代替光电耦合管测取转速。
图2.1硬件电路图
3.1硬件说明
LCD系列中文模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。
提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。
所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,只要一个最小的微处理系统,就可以方便操作模块。
内置2M-位中文字型ROM (CGROM) 总共提供8192 个中文字型(16x16 点阵),16K-位半宽字型ROM (HCGROM) 总共提供126 个符号字型(16x8 点阵),64 x 16-位字型产生RAM (CGRAM),另外绘图显示画面提供一个64x256点的绘图区域(GDRAM),可以和文字画面混和显示。
提供多功能指令:画面清除(Display clear)、光标归位(Return home)、显示打开/关闭(Display on/off)、光标显示/隐藏(Cursor on/off)、
显示字符闪烁(Display character blink)、光标移位(Cursor shift)、显示移位(Displayshift)、垂直画面卷动(Vertical line scroll)、反白显示(By_line reverse display)、待命模式(Standbymode)。
本次课设所用OCMJ4X8C的功能有显示中文字型、数字符号。
主要参数:
1、工作电压(VDD):4.5~5.5V
2、逻辑电平:2.7~5.5V
3、LCD 驱动电压(Vo):0~7V
4、工作温度(Ta):0~55℃(常温)/-20~75℃(宽温)保存温度(Tstg):-10~65℃(常温)/-30~85℃(宽温)。
3.2 外形尺寸图
3.2.1 OCMJ4X8C外形图说明资料如图2-2所示。
图2.2 OCMJ4X8C外形尺寸图
3.3 模块引脚说明
3.3.1 便于使用 OCMJ4X8C(128X64)引脚,做了如表1所示说明。
表一引脚接线图
注:OCMJ4X8C_3/_6为减少背光电源对模块的干扰作了特别处理,背光电源焊盘(20、21 脚)与17 脚间留了2 个焊盘(18、19 脚)位置但并无焊盘和引脚引出;背光电源的2 条走线与其他走线间的间隔距离至少保留了2mm的爬电间隔。
3.4 资料传输与接口时序
3.4.1串行接口与串行传输资料
当PSB脚接低电位时,模块将进入串行模式。
从一个完整的串行传输流程来看,
一开始先传输启始字节,它需先接收到五个连续的〝1〞(同步位字符串),在启始字节,此时传输计数将被重置并且串行传输将被同步,再跟随的两个位字符串分别指定传输方向位(RW)及寄存器选择位(RS),最后第八的位则为〝0〞。
在接收到同步位及RW和RS资料的启始字节后,每一个八位的指令将被分为两个字节接收到:较高4位(DB7~DB4)的指令资料将会被放在第一个字节的LSB部分,而较低4位(DB3~DB0)的指令资料则会被放在第二个字节的LSB部分,至于相关的另四位则都为0。
3.4.2 串行接口时序图
MPU写资料到模块如图2-3所示。
图2.3 串行接口时序图
3.4.3串行接口特性
为了更好的了解LCD的工作特性我们可以从如图2-4所示。
图2.4 串行接口特性
3.5显示步骤
3.5.1显示资料RAM(DDRAM)
显示数据RAM 提供64x2 个字节的空间,最多可以控制4 行16 字(64 个字)的中文字型显示,当写入显示资料RAM时,可以分别显示CGROM,HCGROM 与CGRAM 的字型;本系列模块可以显示三种字型,分别是半宽的HCGROM 字型、CGRAM 字型及中文CGROM 字型,三种字型的选择,由在DDRAM 中写入的编码选择,在0000H~0006H 的编码中将选择CGRAM 的自定字型,02H~7FH 的编码中将选择半宽英数字的字型,至于A1 以上的编码将自动的结合下一个字节,组成两个字节的编码达成中文字型的编码BIG5(A140~D75F) GB(A1A0~F7FF),详细各种字型编码如下:
1. 显示半宽字型:将8 位资料写入DDRAM 中,范围为02H~7FH 的编码。
2. 显示CGRAM 字型:将16 位资料写入DDRAM 中,总共有0000H,0002H,0004H,0006H 四种编码。
3. 显示中文字形:将16 位资料写入DDRAM 中,范围为A140H~D75FH 的编码(BIG5) , A1A0H~F7FFH 的编码(GB)。
将16 位资料写入DDRAM 方式为透过连续写
入两个字节的资料来完成,先写入高字节(D15~D8)再写入低字节(D7~D0)。
3.6直流电机的组成结构及工作原理
直流电动机的组成结构是由直流电源、直流电机、控制开关和调速器。
直流电机的工作原理不外乎就是一直流电源为驱动电机旋转,通过三极管的截止与导通起到开关和调速的作用。
具体操作为当直流电动机接上直流电源时,使用电位器旋转按钮控制三极管集极的电压。
当集极的电压小于死区电压时三极管截止;当集极电压大于死区电压时三极管导通;由于集极的电压大小不一样所以三极管的电压放大倍数也不一样从而起到调速作用改变直流电动机的旋转速度。
在选择控制三极管集电极与发射极之间电压放大倍数时,我也进过两种方案的比较。
第一种方案是用电位器直接对三极管进行控制;第二种方案是通过PWM进行控制。
对于后者是对高电压的导通时间与截止时间进行控制,属于间断性控制。
但这种方案对直流电机有损害影响,减少电机使用寿命。
所以最后选择直接用电位器控制电机的转速。
如图2-5所示电路图。
图2.5 直流电机电路图
3.7 光电耦合器的组成及工作原理
光电耦合器的组成是用一个发光二极管和一个光敏三极管构成。
光电耦合器的工作原理就是使发光二极管导通与截止状态进行发射红外线与不发射,让光敏三极管导通与截止。
具体过程为当发光二极管的两端电压大于死区电压时二极管发射出红外线同时光敏三极管栅极有驱动三极管导通的电压,使得三极管的源级电压降低由原来的高电平变为低电平,进而产生一个脉冲的形式转送给单片机。
通过单片机的外部中断
进行计数脉冲个数从而得到直流电动机的旋转速度。
光电耦合器的电路图为2-6所示。
图2.6光电测速电路
4、软件程序流程图
根据现有的硬件进行软件设计,从而可以达到课程设计所需的要求,编写程序的思路如图3-1 所示。
图3.1 软件流程图
5、程序调试
在本次课设所用程序中需要使用到速度测取和计算问题。
因此为了能更加准确测得直流电动机的旋转速度,特意运用了我们所了解数字测速法来换算速度。
在此对在这几种测速方法进行比较。
这样就可以得到此次课程设计所要选择的最佳方案。
5.1速度转换公式
在电力拖动自动控制系统—运动控制系统中我们学习过如何测取直流电动机的旋转速度。
可以采用旋转编码器的数字测速方法来解决这个问题。
数字测速方法目前有比较常用的三种:M 法、T 法和T M 法。
5.1.1 数字测速M 法
M 法的测速原理为在一定时间T 内测取旋转编码器输出的脉冲个数M ,用以计算这段时间内的平均转速。
把M 除以T 就可得到旋转编码器输出脉冲的频率T M f =,所以又叫频率法。
电动机每转一圈共产生Z 个脉冲(Z=倍频系数⨯编码器光栅数),把f 除以Z 就得到电动机的转速。
在习惯上,时间T 以秒为单位,而转速是以每分钟的转速r/min 为单位,则电动机的转速为
ZT
M n 60=…………………………………………………(1) 在上式中,Z 和T 均为常值,因此转速n 正比于脉冲个数M 。
高速时M 大,量化误差小,随着转速的降低误差增大,转速过低时M 将小于1,测速装置便不能正常工作。
所以M 法测速只适用于高速段。
5.1.2 数字测速T 法
T 法的测速原理为在编码器两个相邻输出脉冲的间隔时间内,用一个计数器对已知频率为f 的高频脉冲进行计数,并由此来计算转速。
在这里,测速时间缘于编码器
输出脉冲的周期,所以又称周期法。
在T 法测速中,准确的测速时间T 是用所得的高频时钟脉冲个数M 计算出来的,即f M T =,则电动机转速为
ZM
f n 60=………………..…..……………………………..(2) 高速时M 小,量化误差大,随着转速的降低误差减小,所以T 法测速适用于低速段与M 法恰好相反。
5.1.3数字测速M/T 法
把M 法和T 法结合起来,既检测T 时间内旋转编码器输出的脉冲个数M ,又检测同一时间间隔的高频时钟脉冲个数M,用来计算转速,称作T M 法测速。
设高频时钟脉冲的频率为f ,则准确的测速时间f M T =,而电动机转速为
2
160ZM f M n =…..……………..…………………………….(3) 采用M 法测速时,应保证高频时钟脉冲计数器与旋转编码器输出脉冲计数器同时开启与关闭,以减小误差,只有等到编码器输出脉冲前沿到达时,两个计数器才同时允许开始或停止计数。
由于T M 法的计数值M 1和M 2都随着转速的变化而变化,高速时,相当于M 法测
速,最低速时,M 1=1,自动进入T 法测速,因此,T M 法测速能适用的转速范围明显
大于前两种,是目前广泛应用的一种测速方法。
通过这几种方案的对比,我们可以很好的得出我们想要的最佳方案。
由于直流电动机的旋转速度很快,所以我们选用的方案是用M 法进行测取电机的旋转速度。
6、调试中的问题并解决
任何事情都不太可能风雨无阻,我也不例外在此次课程设计中同样遇到了很多的困难。
第一就是硬件的工作原理不知道,只能通过自己去查阅相关的资料,只有充分
理解硬件是怎么工作才能进行编写相关的程序。
起初对控制直流电动机的器件选取不是很清楚,刚看实验箱第一反应就觉得不可能进行对电机的控制作用。
而老师跟我说能控制,要我自己去摸索实验箱内部电路的具体接线。
本着老师能控制我也能控制的想法,经过一番自己的勘察,恍然大悟发现还真能进行控制转速。
原因在于自己当初并没有仔细分析各个元器件的工作原理。
比如电位器控制三极管的作用。
刚开始只想到它的开关作用,后来再回去查了查资料才发现自己少想了它还有放大的作用,通过改变集极的电压就可以改变集电极与发射极电压的放大倍数进而改变直流电动机的旋转速度。
对于如何进行LCD的初始化,更不清楚怎么用了。
起初我想问老师怎么用,可老师就是不告诉我,就让我憋着要我自己去读懂相关的资料自己去解决。
实在是没办法我就硬着头皮自己去查找相关的资料慢慢研读并运用到编程里面。
经历几番推敲程序之后才明白怎么使用。
比如:汉字的摆放位置规律;工作控制指令方式;传送数据指令先后顺序;哪些位置的数据需要根据电位器的旋转变化而变化;哪些位置的数据显示不变等。
当我告诉老师我知道怎么用时他也很高兴。
为此我也很欣慰。
添加了一份自信。
在调试过程中我还遇到BCD码的转换问题,刚开始只能显示十六进制,后来向同学请教之后才发现自己对汇编程序中的一个指令字没理解透AD、DC。
起初只考虑到加法没想到其还有带进位位相加的作用,又经过几个几番自己的推敲才知道怎么回事了。
真是太大意啊!但能自己解决问题是最关键的。
最后在实验检查的过程中,我由于自己的疏忽,把本已改变的地址也按照自己原来的地址写上了,调试一直没有成功,到自己静下心来慢慢想的时候才发现自己犯得低级错误,获得了成功。
7、课设总结
这次课设给了我很多收获,不仅是我实现的这个题目,还是没有实现的语音芯片。
首先我明白有理论基础也不见得会很好的用在实践上,只有通过自己反复的琢磨进一步的理解并加于运用才是事实。
语音芯片的课设对我最大的帮助就是让我认识到,看视简单的程序,当真正去做的时候,就会发现事与愿违了。
我很努力的去查资
料,很认真的找学哥学姐答疑,但任然没有结果。
在万般无奈之下,我只好和付老师商量换了个题目,继续努力。
其次就是当遇到困能时还要靠自己去解决去探索。
因为我在做课设之初,总想别人帮我出个法案,别人给我指一条道路,但到最后真正做的时候才发现,别人的有些思路不适合自己,只有自己的东西才能运用起来得心应手。
最后想解决问题就必须要有耐心、细心、专心及谦虚等综合素质。
参考文献
[1] 陈伯时. 电力拖动自动控制系统-运动控制系统(第三版). 机械工业出版社,2008
[2]王兆安、黄俊.电力电子技术.机械工业出版社,2008
[3]张毅刚、彭喜元.新编MCS-51单片机应用设计(第三版).哈尔滨工业大学出版,2008
[4]马淑华、王凤文.单片机原理与接口技术.北京邮电大学出版社,2007
附录Ⅰ
用单片机控制LCD显示直流电机转速编写程序如下:
CS BIT P1.0
STD BIT P1.1
SCLK BIT P1.2
PSB BIT P1.3
RES BIT P1.4
DWEI EqU 20H
DGAO EQU 21H
START EQU 30H
COM EQU 31H
HDATA EQU 32H
LDATA EQU 33H
ASC EQU 34H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INIT0
ORG 0100H MAIN:
MOV SP,#60H
CLR RES
SETB RES
CLR PSB
LCALL LCDRESET
LCALL HZKDIS MAIN1:
LCALL BCD
MOV A,R5
MOV DWEI,A
MOV A,R4
MOV DZHONG,A
MOV A,R3
MOV DGAO,A
LCALL ERXING
LCALL HZKDIS2
MOV TL0,#00H
MOV TH0,#4CH
MOV TH1,#0
MOV TL1,#0
MOV TMOD,#51H SETB ET0
SETB TR0
SETB TR1
SETB EA
LCALL CLEAR
JMP MAIN1 CLEAR:
MOV A,#00H
RET
LCDRESET:
LCALL DL1MS
MOV START,#0F8H MOV COM,#30H
LCALL LCDWRITE
MOV COM,#0CH
LCALL LCDWRITE
MOV COM,#01H
LCALL LCDWRITE
LCALL DL1MS
MOV COM,#06H
LCALL LCDWRITE
RET
LCDWRITE:
MOV A,COM
ANL A,#0F0H
MOV HDATA,A
MOV A,COM
SWAP A
ANL A,#0F0H
MOV LDATA,A
MOV A,START
LCALL SENDBIT
LCALL DL1MS
MOV A,HDATA
LCALL SENDBIT
LCALL DL1MS
MOV A,LDATA
LCALL SENDBIT
LCALL DL1MS
RET
HZKDIS:
MOV START,#0F8H MOV COM,#80H
LCALL LCDWRITE
MOV DPTR,#TAB MOV A,#00H
DIS_1:MOV R6,#6
DIS_2:MOV START,#0FAH CLR A
MOVC A,@A+DPTR MOV COM,A
LCALL LCDWRITE INC DPTR
CLR A
MOVC A,@A+DPTR MOV COM,A
LCALL LCDWRITE
INC DPTR
LCALL DL40MS
DJNZ R6,DIS_2
RET
BCD:
MOV A,DWEI
MOV R7,A
MOV A,DGAO
TOBCD:
CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3:
MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整DJNZ R2,HB3 ;处理完16bit
RET
ERXING:
MOV START,#0F8H
MOV COM,#93H
LCALL LCDWRITE
MOV START,#0FAH
MOV DPTR,#TAB2
MOV A,DWEI
MOVC A,@A+DPTR MOV COM,A
LCALL LCDWRITE
LCALL DL1MS
MOV START,#0F8H MOV COM,#92H
LCALL LCDWRITE MOV START,#0FAH MOV DPTR,#TAB2 MOV A,DZHONG
MOVC A,@A+DPTR MOV COM,A
LCALL LCDWRITE
LCALL DL1MS
MOV START,#0F8H MOV COM,#91H
LCALL LCDWRITE MOV START,#0FAH MOV DPTR,#TAB2 MOV A,DGAO
MOVC A,@A+DPTR MOV COM,A
LCALL LCDWRITE
LCALL DL1MS
RET
HZKDIS2:
MOV START,#0F8H MOV COM,#94H
LCALL LCDWRITE
MOV DPTR,#TAB3 MOV R6,#3
DIS_4:
MOV START,#0FAH CLR A
MOVC A,@A+DPTR MOV COM,A
LCALL LCDWRITE INC DPTR
CLR A
MOVC A,@A+DPTR MOV COM,A
LCALL LCDWRITE INC DPTR
LCALL DL40MS DJNZ R6,DIS_4 RET
SENDBIT:
MOV R7,#08H SEND_1:
RLC A
MOV STD,C
CLR SCLK
SETB SCLK
DJNZ R7,SEND_1 RET
INIT0:
PUSH DPH
PUSH DPL
PUSH ACC
CLR TR1
MOV A,TL1
MOV B,#20
MUL AB
MOV B,#12
DIV AB
MOV DWEI1,A MOV DGAO1,B LCALL ERXING BACK:
MOV TL0,#00H MOV TH0,#4CH SETB TR0
MOV TL1,#00 MOV TH1,#00 SETB TR1
POP ACC
POP DPL
POP DPH
RETI
DL1MS:
PUSH 00H
PUSH 01H
PUSH 02H
MOV R2,#01H WA_PA:MOV R0,#0FH WA_PB:MOV R1,#0FH
DJNZ R1,$
DJNZ R0,WA_PB
DJNZ R2,WA_PA
POP 02H
POP 01H
POP 00H
RET
NOP
RET
DL40MS:
SETB PSW.3
MOV R2,#03H
DL_PA:MOV R0,#0FFH DL_PB:MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,DL_PB
DJNZ R2,DL_PA
CLR PSW.3
RET
TAB: DB '直流电机转速' TAB2: DB '0123456789' TAB3: DB '转每秒'
END。