单片机控制直流电动机设计.docx
《单片机控制直流电动机设计.docx》由会员分享,可在线阅读,更多相关《单片机控制直流电动机设计.docx(21页珍藏版)》请在冰豆网上搜索。
单片机控制直流电动机设计
课程单片机课程设计
题目单片机控制直流电动机
专业自动化姓名学号
主要内容:
采用单片机设计一个控制直流电机并测量转速的装置。
单片机扩展有A/D转换芯片ADC0809和D/A转换芯片DAC0832。
基本要求:
(1)通过改变A/D输入端可变电阻来改变A/D的输入电压,D/A输入检测量大小,进而改变直流电机的转速。
(2)手动控制。
在键盘上设置两个按键—直流电动机加速键和直流电机减速键。
在手动状态下,每按一次键,电机的转速按照约定的速率改变。
(3)键盘列扫描(4 6)。
主要参考资料:
第1章概述
1.1设计目的
1、通过单片机课程设计,熟练掌握C语言的编程方法,将理论联系到实践中,提高我们的动脑和动手的能力。
2、通过对单片机控制直流电动机控制系统的设计,掌握A/D转换、D/A转换的有关原理,加深对PWM波的理解和使用,同时对单片机的使用更加熟练,通过对简单程序的编写提高我们的逻辑抽象能力。
1.2设计任务和要求
任务:
采用单片机设计一个控制直流电动机并测量转速的装置。
要求:
1、通过改变A/D输入端的可变电阻来改变A/D输入电压,D/A输入检测量大小,进而改变直流电机的转速。
2、手动控制。
在键盘上设置两个按键——直流电动机加速键和直流电机减速键。
在手动状态下,每按一次键,电机的转速按照约定的速率改变。
3、键盘列扫描(4*6)。
1.3设计原理
直流电机是通过两个磁场的互作用产生旋转。
其结构如下页图所示,固定部分(定子)上,装设了一对直流励磁的静止的主磁极N和S,在旋转部分(转子)上装设电枢铁心。
定子与转子之间有一气隙。
在电枢铁心上放置了由A和X两根导体连成的电枢线圈,线圈的首端和末端分别连到两个圆弧形的铜片上,此铜片称为换向片。
直流电机的速度与施加的电压成正比,输出转矩则与电流成正比。
由于必须在工作期间改变直流电机的速度,直流电机的控制是一个较困难的问题。
直流电机高效运行的最常见方法是施加一个PWM(脉宽调制)方波,其占空比对应于所需速度。
电机起到一个低通滤波器作用,将PWM信号转换为有效直流电平。
特别是对于微处理器驱动的直流电机,由于PWM信号相对容易产生,这种驱动方式使用的更为广泛。
本项目的示例程序为了能够演示DAC0832的使用,未使用PWM驱动方式。
而是利用直流电机的速度与施加电压成正比的原理,通过滑动变阻器向ADC0809输入控制电压信号,经AD后,输入到AT89C51中,AT89C51将此信号转发给DAC0832,通过功放电路放大后,驱动直流电机。
需要注意的是,本题目使用的Proteus版本,未提供ADC0809的仿真模型,这里以引脚、功能与之相同的ADC0808代替。
同时,DAC0832也可以用引脚、功能相同的DAC0830代替。
第2章系统结构及主要元器件
2.1AT89C51单片机
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图
图2-1AT89C51单片机引脚
2.2LCD显示器
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5×7或者5×11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
图2-2LCD1602引脚图
第3章硬件设计
根据总设计方案可知硬件电路是以单片机为核心辅以适当的电路以完成要求功能。
主要包括显示模块,A/D转换模块,D/A转换模块等模块。
3.1按键电路
3.1.1AT89C51
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图3-1按键电路的设计
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
3.1.2按键电路
如图2.1所示,单片机的P2.1和P2.2口分别接一个按键用于控制电机。
当按下S1键时,电机转速提高,进入加速状态;当按下S2键时,电机转速减慢,进入减速状态。
通过S1,S2两个按键可以达到键盘控制电机的作用。
3.2显示电路
3.2.1MAX7219
MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。
其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。
只有一个外部寄存器用来设置各个LED的段电流。
MAX7221与SPI™、QSPI™以及MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。
一个方便的四线串行接口可以联接所有通用的微处理器。
每个数据可以寻址在更新时不需要改写所有的显示。
MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。
整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
3.2.2工作原理
图3-2显示电路的设计
如图2.2所示,可变电阻接ADC0808转变成相应电压的数字信号,单片机通过P0口读取,再由P1口输出与转速相应的8位BCD编码到MAX7219。
经由MAX7219处理后通过四位数码管显示出来。
电动机所处速度级以速度档级数显示。
正转时最高位显示“三”,其它三位为电机转速;反转时最高位显示“F”,其它三位为电机转速。
每次电动机启动后开始显示,停止时数码管显示出“0000”。
3.3A/D转换模块
3.3.1ADC0808
ADC0808是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片。
主要特性
1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)
4)单个+5V电源供电。
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度。
7)低功耗,约15mW。
ADC0809的工作过程
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
为此可采用下述三种方式。
(1)定时传送方式
对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0808的EOC端。
因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
(3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。
图3-3AD转换电路的设计
3.3.2工作原理
如图2.3所示,外部电源通过滑动变阻器向ADC0808输入控制电压信号,经A/D处理后,输入到AT89C51中,交由AT89C51处理,进行下一步动作。
3.4D/A转换模块
3.4.1DAC0832
DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
主要特性参数
1.分辨率为8位;
2.电流稳定时间1us;
3.可单缓冲、双缓冲或直接数字输入;
4.只需在满量程下调整其线性度;
5.单一电源供电(+5V~+15V);
6.低功耗,20mW。
DAC0832的工作方式
DAC0832进行D/A转换,可以采用两种方法对数据进行锁存。
第一种方法是使输入寄存器工作在锁存状态,而DAC寄存器工作在直通状态。
具体地说,就是使和都为低电平,DAC寄存器的锁存选通端得不到有效电平而直通;此外,使输入寄存器的控制信号ILE处于高电平、处于低电平,这样,当端来一个负脉冲时,就可以完成1次转换。
第二种方法是使输入寄存器工作在直通状态,而DAC寄存器工作在锁存状态。
就是使和为低电平,LE为高电平,这样,输入寄存器的锁存选通信号处于无效状态而直通;当和端输入1个负脉冲时,使得DAC寄存器工作在锁存状态,提供锁存数据进行转换。
图3-4DA转换电路的设计
3.4.2工作原理
如上图2.4所示,电压信号输入后经过AD转换输入到AT89C51,由单片机通过P1口输出与转速相应的8位BCD编码,该编码通过DAC0832译成相应的模拟电压,经过信号放大实现电动机转向与转速的控制。
第4章软件设计
4.1程序框图
Y
图4-1程序流程图
4.2程序源代码
#include
#defineucharunsignedchar
ucharTABLE[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsignedintfrq1,c;
voiddelay(unsignedintk)
{
unsignedinti,j;
for(i=0;i{
for(j=0;j<121;j++)
;
}
}
voiddisplay()
{
ucharqian,bai,shi,ge;
qian=0;
bai=0;
shi=0;
ge=0;
c=frq1;
qian=c/1000;
bai=c/100%10;
shi=c/10%10;
ge=c%10;
P1=0x01;
P2=TABLE[qian];
delay(5);
P1=0x02;
P2=TABLE[bai];
delay(5);
P1=0x04;
P2=TABLE[shi];
delay(5);
P1=0x08;
P2=TABLE[ge];
delay(5);
}
voidchang(void)interrupt0using0
{
if(INT0==0)
while(!
INT0)
frq1++;
}
voidmain()
{
unsignedinti=0;
while
(1)
{
TMOD=0x01;
TH0=55536/256;
TL0=55536%256;
TR0=1;
EA=1;
EX0=1;
while(TF0==1)
{i++;
if(i==10)
{
display();
frq1=0;
TF0=0;
}
}
;
}
}
调速程序
#include"reg51.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitP20=P2^0;
sbitP21=P2^1;
ucharflag=0;/***高低电平标志***/
bitdirection=0;/***方向标志***/
staticucharconstant=1;//可以改变占空比
voidtime0(void)interrupt1using1
{
staticuchari;
i++;
/**频率为固定的1kHZ左右,只是占空比发生变化**/
if(i<=constant)
flag=1;
if(i<=10&&i>constant)
flag=2;
if(i==10)
i=0;
TH0=0X9C;
TL0=0X9C;
}
/****改变转向标志*****/
voidint1_srv(void)interrupt2using2
{
if(INT1==0)
{
while(!
INT0);
constant--;
if(constant==10)
constant=0;
}
}
/*******中断,调节占空比********/
voidchange(void)interrupt0using0
{
if(INT0==0)
{
while(!
INT0);
constant++;
if(constant==10)
constant=0;
}
}
/*************************/
voidmain()
{
EA=1;
TMOD=0x02;
ET0=1;
TR0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
TH0=0X9C;
TL0=0X9C;
while
(1)
{
P21=0;
if(flag==1)
{
flag=0;
P20=1;
}
if(flag==2)
{
flag=0;
P20=0;
}
}
第5章系统仿真及调试
5.1仿真步骤
加载目标代码文件打开元器件单片机属性窗口,在“ProgramFile”栏中添加上面编译好的目标代码文件“keil-12.hex”;在“ClockFrequency”栏中输入晶振频率为12MHz。
ADC0809的时钟信号设置为640kHz。
启动仿真如下页图所示,各按键功能如图中所注,LED中显示的为当前电压的数字信号值,即当前转速的档位(0-256),通过调整从滑动变阻器输出的电压值,可以观察到直流电机不同的转速。
通过按键加减速,改变电机转速,数码管显示的数字也相应改变。
结果如图4.1所示:
图5-1仿真结果
按下加速键后,电机转速加快,数码管显示的数值增大。
结果如图4.2所示:
图5-2仿真结果
5.2仿真结果分析
通过键盘向单片机输入相应控制指令,数码管显示出不同的数值。
当按下加速键时,数码管显示数值增大,说明电机转速增快;当按下减速键时,数码管显示数值减小,说明电机转速减慢。
键盘通过单片机实现了控制电机转速的功能。
当改变可变电阻阻值时,电机两端改变,数码管显示的数值也改变。
说明电阻改变可改变电机两端的电压,从而达到控制直流电机的目的,且当电压越大时,数码管显示数值越大,电机转速越快;电压越小时,数码管显示数值越小,电机转速越慢。
结论
本次课程设计我们主要根据要求中的提示,首先确定了各个模块的作用和工作原理,再通过资料的整理了解具体每块芯片的结构和工作方式,便于我们对相应模块及整体电路的设计,也为我们软件程序的编写提供依据。
通过参考资料和已有的相关实验理论,我们最终完成了硬件电路设计和部分软件程序设计。
通过此次课程设计使我们对单片机控制理论有了初步的了解,对单片机的应用有了更多的了解,让我们对自己所学过的知识有了更深刻的认识,同时也增加了我们的知识面,培养了我们的自主学习的能力,可谓收获颇多。
参考文献
[1]马淑华.单片机原理与接口技术[M].北京:
北京邮电大学出版社,2005.
[2]方建军.智能机器人[M].北京:
化学工业出版社,2004.
[3]刘复华.单片机及其应用系统[M].北京:
清华大学出版社,1992.
[4]周万珍.单片机分析与设计应用[M].北京:
电子工业出版社,2004.
[5]陈元杰.串级控制的PID参数自整定算法[M].北京:
电子工业出版社,1996.
东北石油大学课程设计成绩评价表
课程名称
单片机课程设计
题目名称
单片机控制直流电动机
学生姓名
学号
指导教师姓名
李艳辉
邵克勇
职称
教授
教授
序号
评价项目
指标
满分
评分
1
工作量、工作态度和出勤率
按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。
20
2
课程设计质量
课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。
45
3
创新
工作中有创新意识,对前人工作有一些改进或有一定应用价值。
5
4
答辩
能正确回答指导教师所提出的问题。
30
总分
评语:
指导教师:
年月日