MCS51单片机电机转速控制及测速显示系统.docx
《MCS51单片机电机转速控制及测速显示系统.docx》由会员分享,可在线阅读,更多相关《MCS51单片机电机转速控制及测速显示系统.docx(19页珍藏版)》请在冰豆网上搜索。
MCS51单片机电机转速控制及测速显示系统
MCS-51单片机电机转速控制及测速显示系统(总26页)
MCS-51单片机电机转速控制及测速显示系统
一、系统总体方案选择与说明
本课题要求设计一个单片机电机转速控制系统。
给定信号经A/D转换输入到单片机(MCS-51)并显示,单片机根据给定从D/A输出相应的信号控制直流电机的转速,并能对电机的转速进行测量。
1.设计要求
要求以MCS-51系列单片机为核心设计一个直流电机调速系统,该系统具有显示电动机转速、输入模拟量的功能。
用6位LED显示。
前两位显示AD,后两位显示输入模拟量,最后两位显示电动机转速,单位为转/s,电动机最大转速为5000转/min。
其转速由D/A转换的模拟量控制。
2.设计思路
1)由地址琐存器74LS273芯片实现动态显示模块,74LS273输出端为段控,用于输出所显示的数值,口位控,控制哪一位LED管亮,LED采用共阴极的接法;
2)选用89C51单片机,其内部有4K的寄存器,无需扩展外部存储单元,还具有2个16位定时器/计数器,可以通过CPU内部定时,进行数据采集;
3).ADC0809可将模拟量转换为数字量,并将数字量送单片机;DAC0832可将从单片机输出的数字量转换为模拟量,并用模拟量控制直流电机;
4)用霍尔元件测电动机转速。
转速的测量方法有两种:
①频率法:
利用单片机内部定时器定时(定时时间1秒),再用一计数器对被测脉冲计数,所测脉冲个数即转速值(转/S)
②周期法:
测量脉冲的周期,即利用定时期累计在被测脉冲的一个周期内机器周期的个数n。
被测信号周期T=n*机器周期,被测信号频率f=1/T。
考虑到要用定时采样的方法,同时又要将两位转速显示出来,所以本设计中采用频率法。
一、系统结构框图与工作原理
1.系统结构框图
2.工作原理
通过调节可变电阻,将模拟量送入AD转换器,经AD转换后通过P0口,将数字量送入单片机,单片机将数字量送I/O,并经74LS273锁存,送数码管显示,同时将数字量送给DA,DA将数字量转换为模拟量,用于控制直流电机的转速。
通过霍尔元件将测的电动机转速脉冲信号接单片机的中断INT0,用工作寄存器R6对脉冲数进行即测量转速值,又通过单片机将转速值数码管送显示。
三、各单元硬件设计及说明
D转换模块设计与说明
由于外界的模拟量不能直接被单片机8051直接识别,所以设置一个A/D转换电路,将外来的模拟信号转换成能被8051识别的数字信号进行处理。
转换电路由模数转换器ADC0809来实现。
ADC0809是最常用的8位模数转换器,属于逐次逼近。
ADC0809采用单一+5V供电,片内有带锁存功能的8路模拟开关,可对0~+5V、8路模拟信号分时进行转换,完成一次转换的时间约需100üs,数字输出信号具有TTL三态锁存器。
ADC0809功能简述如下:
1)IN0~IN7:
8通道模拟量输入信号;
2)D0~D7:
8位二进制数据输出端,三态输出;
3)ADDC、ADDB、ADDA:
通道号选择信号。
用于选择8路输入之一进行A/D转换。
4)START:
启动A/D转换信号,正脉冲有效,当给出一个START信号后,转换开始。
脉冲宽度要求在200ns以上。
5)EOC:
转换结束信号,START的上升沿使EOC变为低电平,A/D转换完成,EOC变为高电平。
6)OE:
输出使能信号,高电平有效,当此信号有效时,打开输出三态门,将转换后的结果送至数据总线。
图D转换模块接线图
2、89C51单片机芯片
89C51是一个40引脚的集成电路,引脚如图3:
1、主电源引脚VCC和VSS
VCC——(40脚)接+5V电压;
VSS——(20脚)接地。
2、外接晶体引脚XTAL1和XTAL2
3、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP
4、输入/输出(I/O)引脚P0、P1、P2、P3(共32根)
①P0口(39脚至32脚):
是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。
②P1口(1脚至8脚):
是准双向8位I/O口。
由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。
③P2口(21脚至28脚):
是准双向8位I/O口。
在设计时用到作查询口,检测AD转换是否结束。
④P3口(10脚至17脚)设计系统时用到的P3口线的第二功能定义如下:
12INT0(外部中断0)
14T0(定时器0外部输入)
16WR(外部数据存储器写脉冲)
17RD(外部数据存储器读脉冲)
图模块接线图
3、D/A转换模块设计与说明
DAC0832是CMOS工艺制造的8位单片模拟/数字(D/A)转换器.
DAC0832各引脚的功能如下:
DI0~DI7:
数据输入线.
ILE:
数据允许锁存信号,高电平有效;
CS:
输入寄存器选择信号,低电平有效.
XFER:
数据传送信号,低电平有效.
VREF:
基准电源输入引脚.
Rfb:
反馈信号输入引脚,反馈电阻在芯片内部.
IOUT1、IOUT2:
电流输出引脚.电流IOUT1、IOUT2的和为常数,IOUT1、IOUT2随DAC寄存器的内容线性变化.
VCC:
电源输入引脚.
AGND:
模拟信号地.
DGND:
数字地.
图3.D/A转换模块接线图
4、LED数码管动态显示模块
LED数码管动态显示器是1种由LED发光二极管组合显示字符的显示器件.它使用了8个LED发光二极管,其中7个用于显示字符,1个用于显示小数点,故通常称之为7段(也有称作8段)发光二极管数码显示器.
LED数码显示器有两种连接方法:
(1)共阳极接法:
把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连.
(2)共阴极接法:
把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地.每个发光二极管的阳极通过电阻与输入端相连.
图4.LED数码管动态显示模块接线图
5、电机转速测定模块
用霍尔元件测电动机转速:
霍尔元件工作原理是磁感应原理即电动机每转一圈,霍尔元件检测到一个磁感应信号,同时对外输出一个负脉冲.将此负脉冲送单片机,采用定时采样法,对负脉冲进行计数,所得的计数值即电机每秒的转速。
图5.反馈模块模块接线图
6.实验平台硬件总体接线:
1).74LS273的O0~O7接LED-A~LED-DP,P1~P5接LED6~LED1,74LS273的片选端CS273接CS2。
2).ADC0809的片选端接CS0,AD转换结束信号端EOC接,
输入端IN0接可变电阻。
3).DAC0832的的片选端接CS1,输出端DAOUT接DRU,转速脉冲信号端SINGAL接INT0端。
四、软件设计与说明(包括流程图)
1.程序流程图
1).A/D转换及D/A转换部分
A/D转换有两种方法;中断法和查询法。
在设计中采用了查询法,但查询法会占用CUP的运行时间,只要在不影响动态显示的情况下,也可以用查询法。
D/A转换有三种工作方式:
单缓冲、双缓冲、直通方式。
在设计中采用了双缓冲方式,因为双缓冲方式对数据接收和启动转换可以异步进行,即在对某数据转换的同时,能进行下一数据的接收,以提高转换速率。
2).转速的测量部分
转速测量的方法有两种:
①频率法:
利用单片机内部定时器定时(定时时间1秒),再用一计数器对被测脉冲计数,所测脉冲个数即转速值(转/S)
②周期法:
测量脉冲的周期,即利用定时期累计在被测脉冲的一个周期内机器周期的个数n。
在设计中采用了频率法,即定时采样法。
因为在设计过程中先用了周期法,但周期法是对负脉冲进行查询,占用了CPU的运行时间,影响了动态显示。
所以改用定时采样法,此方法是采用CPU内部定时,不占用CPU运行时间,在定时时间到时,对转速进行采集。
注:
①.定时器的计算定时器要求定时1秒,晶振频率12MHz。
晶振的一个工作周期12/12MHz=1us。
启用工作方式为1(16位的方式)。
最大计数216=65536。
所有最大计数。
我们就取整数50ms。
②.定时1S的计算:
50000=0C350H,所以0FFFFH-0C350H+0001H=3CB0H。
即TH0=3CH,TL0=0B0H。
定时器TMOD=00000001(01H),即选择T0的1方式。
3).动态显示部分
采用了74LS273芯片,因为参考书上有采用了74LS273进行动态显示的内容。
2.源程序各部分清单:
;**********************
;*主程序和中断程序入口*
;**********************
ORG0000H
AJMPMAIN
ORG0003H
LJMPINT0S
ORG000BH
JMPDVT0
ORG0030H
;*********************************
;*初始化程序中的各变量,及定时初值*
;*********************************
MAIN:
SETBEX0;开INT0中断
SETBET0;开T0中断
SETBEA;开放CPU总中断
SETBTR0;启动T0
SETBIT0;INTO为边沿触发方式
MOVR6,#00H;记数清零
MOVR2,#20;软件计数器,减法计数
DINGSHI:
MOVTMOD,#01H;定时器T0工作于方式1,定时50ms
MOVTH0,#3CH;写入计数初值
MOVTL0,#0B0H
;**********************
;*AD转换*
;**********************
LOOP:
MOVDPTR,#0CFA0H;ADC0809的入口地址
MOVA,#00H;启动AD
MOVX@DPTR,A
WAIT:
JNB,INT1S;=0则转INT1S
JMPWAIT
INT1S:
MOVXA,@DPTR;读取AD转换值
MOVR3,A;将AD转换值存入R3
;**********************
;*DA转换*
;**********************
DACH:
MOVDPTR,#0CFA8H;写入DA的入口地址
MOVX@DPTR,A;向0832输出数据并开始转换
INCDPTR;开启二级缓冲
MOVX@DPTR,A;启动DA
ACALLDEL
;**********************
;*显示部分的程序*
;**********************
XS:
MOVDPTR,#0CFB0H;CS273的入口地址
MOVR1,#60H
MOVR4,#06H;六个数码管
MOVR5,#0FEH;显示数码管位
MOVP1,#0FFH;初始数码管全灭
MOV64H,#0DH;写入AD
MOV65H,#0AH
CR:
MOVA,R0;取转速值低位
ANLA,#0FH;清高四位
MOV60H,A
MOVA,R0;取转速值高位
ANLA,#0F0H
SWAPA;交换高低四位
MOV61H,A
MOVA,R3;AD转换值低位
ANLA,#0FH;清高四位
MOV62H,A
MOVA,R3;AD转换值高位
ANLA,#0F0H
SWAPA;交换高低四位
MOV63H,A
MOVR1,#65H
LP:
MOVA,@R1;偏移地址
MOVDPTR,#TAB;TAB的首地址
MOVCA,@A+DPTR
MOVDPTR,#0CFB0H;选通74LS273
MOVX@DPTR,A;送出段码
MOVA,R5
MOVP1,A
JNB,LOOP;=0则转
NEXT:
RLA;A逐位左循环一位
MOVP1,#0FFH
MOVR5,A
DECR1
DJNZR4,LP;不等R4则转到LP
LJMPLOOP
;**********************
;*T0的中断服务程序*
;**********************
DVT0:
MOVTH0,#3CH;重装初值
MOVTL0,#0B0H
DJNZR2,RTN;判断是否完成一秒定时
MOVR2,#20
MOVA,R6;取测得的转速值
MOVR0,A;将转速值保存
MOVR6,#00H
RTN:
RETI
;**********************
;*INT0的中断服务程序*
;**********************
INT0S:
INCR6
RETI
;**********************
;*定义TAB的数表*
;**********************
TAB:
DB3FH,06H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DB39H,5EH,79H,71H,40H
;**********************
;*延时子程序*
;**********************
DEL:
MOVR7,#06H
DEL1:
DJNZR7,DEL1
RET1.
五、调试步骤与结果说明
1.在整个调试过程中,我们将整个系统分模块分别调试。
1).A/D转换,及转换值的显示:
①按设计方法接好接口电路线
2启动伟福硬件仿真器,装载程序
3单步执行模/数转换测量程序
4观察CPU、数据和输入输出窗口
5按设计方法接好接口电路线
6调节可变电阻,判断AD转换量的显示结果是否有变化
7单步执行显示程序
8判断显示是否正确
9能正确显示A/D转换值,即此部分运行正确。
2).D/A转换,及将转换值用于控制直流电机:
①按设计方法接好接口电路线
②启动伟富硬件仿真器,装载程序
③单步执行数/模转换测量程序
4观察CPU、数据和输入输出窗口
5按设计方法接好接口电路线
6调节可变电阻,判断DA转换量的结果是否有变化
7同时观察被控电机是否运转
8能正确控制电机,即此部分运行正确
3).霍尔元件测转速,及将转速显用于显示:
①按设计方法接好接口电路线
②启动伟富硬件仿真器,装载程序
3单步执行定时采用程序
4观察CPU、数据和输入输出窗口
5按设计方法接好接口电路线
6单步执行显示程序
7判断显示是否正确
8改变电机转速,判断显示的转速是否改变
9如果能正确改变显示转速,说明测速程序正确,即此部分运行也正确
2.结果说明:
将整体硬件接线接好,启动伟富硬件仿真器,装载程序。
数码管显示前两位为AD,后四位分别为两位AD转换值和转速值,调节可变电阻,显示的两位AD转换值发生变化,同时转速值也随之发生变化。
六、总结
单片微型计算机即单片微机,是现代控制系统的核心器件之一,20多年来一直应用在各种自动化、智能化、机电一体化以及光机电一体化仪器设备上,已成为当代机械电子工程、自动控制等相关专业知识结构中必不可少的一部分.
尽管大家都知道掌握单片机知识的意义很大,但许多人在学习过程中会感到困难重重,不易入门,实际应用更不易.这是由于在学习单片机是必须机器语言学习关,其难点是必须将硬件与软件结合起来考虑.比如每用一条指令就要联想到在单片机硬件电路中相应的工作情况,做到用软件控制或掌握硬件工作的全过程,显然这与以往学习电子电路或学习高级计算机语言的情况是完全不同的.
随着微型计算机应用的日益广泛和深入,接口技术有了迅速的发展,并已成为直接影响微机系统和推广应用的关键,从硬件的角度来看,微机的开发与应用,在很大程度上就是微机接口电路的开发与应用,因而,微机接口技术涉及本专业的大学生和科技人员必不可少的基本技能.
本次课程设计我们需要设计一个能用键盘调节温度的空调的温度控制系统.在这次设计中我们应用了单片机仿真系统,空调的温度显示要求有四位温度显示,能正确的显示设定温度和室内温度,并能用键盘来设定温度.这次课程设计我们用了74LS273、A/D0807、DAC0832、8051单片机、直流电动机、霍尔传感.
通过两周的设计和调试,在老师和同学的帮助下,我们顺利的完成了任务.通过本次课程设计使我对单片机应用系统的使用和设计有了更多的了解和进一步的掌握.对单片机应用程序的编写方法也掌握了一些技巧.我想在以后的学习中,如果碰到复杂系统的程序编写,就不会感到害怕和陌生了.
在程序的调试和仿真过程中我们也遇到了很多的困难,比如说显示器LED不能显示速度或者所显示的速度的不正确.有时候还会出现乱码.尤其是在程序编写时不知道芯片的地址,无法使芯片工作起来.在单片机指令上我也遇到很多的麻烦,有时候会不知道要使用什么指令或者所使用的指令是错误的,使程序无法按照所设想的来完成.在设计定时采样程序时,没能正确理解中断服务程序是如何调用的,在李老师的帮助,对中断服务程序是如何调用的,有了清楚的认识。
对子程序的调用时,有时候会改变一些变量的值,而我在设计时没有考虑到,这样又会使程序的运行出错.在调试时我对这些方面特别的留意,也对程序进行反复的分析,最后在同学及老师的大力帮助下,我把上面的问题一一克服,达到了老师对我提出的设计要求,非常成功的完成了任务.对任务的完成我真的感到非常的高兴,也真心的感谢我的同学和老师对我的帮助。
这次设计我也学习到了很多的实用技巧,我想这对我以后的工作是非常的有价值的,虽然只有短短的两周,但我真的学到了很多,虽然我的设计不能被制成产品,但我相信只要我继续的努力,总会有那么一天的.我也要感谢学校给了我这样一次机会.在现代社会中这方面的人才是非常的重要的,而我们的努力对这个社会的发展也有着重要的作用,所以我会在以后的工作和学习中艰苦奋斗,做一个对社会和国家有用的人,不辜负老师和家长对我的期待.最后我要再次谢谢那些帮助过我的老师和同学,是你们让我有了以上的想法,谢谢你们!
7.参考文献
[1]许立梓.《微型计算机原理及应用》.机械工业出版社
[2]李朝青.《单片机学习辅导测验及解答讲义》.北京航空航天大学业出版社
[3]楼然苗、李光飞.《51系列单片机设计实例》.北京航空航天大学业出版社
[4]王迎旭.《单片机原理与应用》.机械工业出版社
8.附录
附录A系统原理图
附录B程序清单
ORG0000H
AJMPMAIN
ORG0003H
LJMPINT0S
ORG000BH
JMPDVT0
ORG0030H
MAIN:
SETBEX0;开INT0中断
SETBET0;开T0中断
SETBEA;开放CPU总中断
SETBTR0;启动T0
SETBIT0;INTO为边沿触发方式
MOVR6,#00H;记数清零
MOVR2,#20;软件计数器,减法计数
DINGSHI:
MOVTMOD,#01H;定时器T0工作于方式1,定时50ms
MOVTH0,#3CH;写入计数初值
MOVTL0,#0B0H
LOOP:
MOVDPTR,#0CFA0H;ADC0809的入口地址
MOVA,#00H;启动AD
MOVX@DPTR,A
WAIT:
JNB,INT1S;=0则转INT1S
JMPWAIT
INT1S:
MOVXA,@DPTR;读取AD转换值
MOVR3,A;将AD转换值存入R3
DACH:
MOVDPTR,#0CFA8H;写入DA的入口地址
MOVX@DPTR,A;向0832输出数据并开始转换
INCDPTR;开启二级缓冲
MOVX@DPTR,A;启动DA
ACALLDEL
XS:
MOVDPTR,#0CFB0H;CS273的入口地址
MOVR1,#60H
MOVR4,#06H;六个数码管
MOVR5,#0FEH;显示数码管位
MOVP1,#0FFH;初始数码管全灭
MOV64H,#0DH;写入AD
MOV65H,#0AH
CR:
MOVA,R0;取转速值低位
ANLA,#0FH;清高四位
MOV60H,A
MOVA,R0;取转速值高位
ANLA,#0F0H
SWAPA;交换高低四位
MOV61H,A
MOVA,R3;AD转换值低位
ANLA,#0FH;清高四位
MOV62H,A
MOVA,R3;AD转换值高位
ANLA,#0F0H
SWAPA;交换高低四位
MOV63H,A
MOVR1,#65H
LP:
MOVA,@R1;偏移地址
MOVDPTR,#TAB;TAB的首地址
MOVCA,@A+DPTR
MOVDPTR,#0CFB0H;选通74LS273
MOVX@DPTR,A;送出段码
MOVA,R5
MOVP1,A
JNB,LOOP;=0则转
NEXT:
RLA;A逐位左循环一位
MOVP1,#0FFH
MOVR5,A
DECR1
DJNZR4,LP;不等R4则转到LP
LJMPLOOP
DVT0:
MOVTH0,#3CH;重装初值
MOVTL0,#0B0H
DJNZR2,RTN;判断是否完成一秒定时
MOVR2,#20
MOVA,R6;取测得的转速值
MOVR0,A;将转速值保存
MOVR6,#00H
RTN:
RETI
INT0S:
INCR6
RETI
TAB:
DB3FH,06H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DB39H,5EH,79H,71H,40H
DEL:
MOVR7,#06H
DEL1:
DJNZR7,DEL1
RET