《单片机控制直流电机.doc》由会员分享,可在线阅读,更多相关《单片机控制直流电机.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流单片机控制直流电机.精品文档. 20122013学年 第 一 学期 单片机原理及应用 课 程 设 计 报 告 题 目: 单片机控制直流电动机 专 业: 电子信息工程 班 级: 姓 名: 指导教师: 电气工程系 2012年10月21日1、任务书课题名称单片机控制直流电动机指导教师(职称) 执行时间20122013学年 第一学期 第 周学生姓名学号承担任务 设计目的 采用单片机设计一个控制直流电机并测量转速的装置。单片机扩展有A/D转换芯片ADC0809和D/A转换芯片 DAC0832。 设计要求(1)通过改变A/D输入端可变电阻来改变A/D的输
2、入电压,D/A输入检测量大小,进而改变直流电机的转速。(2)手动控制。在键盘上设置两个按键直流电动机加速键和直流电机减速键。在手动状态下,每按一次键,电机的转速按照约定的速率改变。摘 要 电动机作为最主要的动力源,在生产和生活中占有重要地位。电动机的调速控制过去多用模拟法,随着计算机的产生和发展以及新型电力电子功率器件的不断涌现,电动机的控制也发生了深刻的变化,本系统利用直流电机的速度与施加电压成正比的原理,通过滑动变阻器向ADC0809输入控制电压信号,经AD后,输入到AT89C51中,AT89C51将此信号转发给DAC0832,通过功放电路放大后,驱动直流电机。关键字:电动机;AT89C5
3、1;单片机目 录 单片机原理及应用 课 程 设 计 报 告I任务书II摘 要III第一章 整体设计11.1 设计原理11.2 整体设计1第二章 系统硬件设计32.1 按键电路32.1.1 AT89C5132.1.2 按键电路42.2 显示电路42.2.1 MAX721942.2.2 工作原理52.3 A/D转换模块62.3.1 ADC080862.3.2 工作原理82.4 D/A转换模块82.4.1 DAC083282.4.2 工作原理92.5 总电路图9第三章 系统软件设计113.1 系统主程序设计114.1 按键扫描程序124.2 显示子程序144.3 定时中断处理程序164.4 A/D转
4、换程序17第四章 系统仿真194.1 仿真步骤194.2 仿真结果分析20结论21附录22参考文献32 第一章 整体设计1.1 设计原理 直流电机是通过两个磁场的互作用产生旋转。其结构如下页图所示,固定部分(定子)上,装设了一对直流励磁的静止的主磁极N和S,在旋转部分(转子)上装设电枢铁心。定子与转子之间有一气隙。在电枢铁心上放置了由A和X 两根导体连成的电枢线圈,线圈的首端和末端分别连到两个圆弧形的铜片上,此铜片称为换向片。换向片之间互相绝缘,由换向片构成的整体称为换向器。换向器固定在转轴上,换向片与转轴之间亦互相绝缘。在换向片上放置着一对固定不动的电刷B1和B2,当电枢旋转时,电枢线圈通过
5、换向片和电刷与外电路接通。 定子通过永磁体或受激励电磁铁产生一个固定磁场,由于转子由一系列电磁体构成,当电流通过其中一个绕组时会产生一个磁场。对有刷直流电机而言,转子上的换向器和定子的电刷在电机旋转时为每个绕组供给电能。通电转子绕组与定子磁体有相反极性,因而相互吸引,使转子转动至与定子磁场对准的位置。当转子到达对准位置时,电刷通过换向器为下一组绕组供电,从而使转子维持旋转运动。直流电机的速度与施加的电压成正比,输出转矩则与电流成正比。由于必须在工作期间改变直流电机的速度,直流电机的控制是一个较困难的问题。直流电机高效运行的最常见方法是施加一个 PWM(脉宽调制)方波,其占空比对应于所需速度。电
6、机起到一个低通滤波器作用,将PWM信号转换为有效直流电平。特别是对于微处理器驱动的直流电机,由于PWM信号相对容易产生,这种驱动方式使用的更为广泛。1.2 整体设计 为了使用单片机对电动机进行控制,对单片机的基本要求应有足够快点速度;有捕捉功能。总体设计方案如图所示数码管显示DAC0832按键控制单片机信号放大ADC0808驱动电机电压信号图1.1总体设计方案键盘向单片机输入相应控制指令,由单片机通过P1口输出与转速相应的8位BCD编码,该编码通过DAC0832译成相应的模拟电压,经过信号放大实现电动机转向与转速的控制。 可变电阻接ADC0808转变成相应电压的数字信号,单片机通过P2口读取,
7、再由P1口输出与转速相应的8位BCD编码。电动机的运转状态则通过四位数码管显示出来。电动机所处速度级以速度档级数显示。正转时最高位显示“三” ,其它三位为电机转速;反转时最高位显示“F”,其它三位为电机转速。每次电动机启动后开始显示,停止时数码管显示出“0000”。 第二章 系统硬件设计 根据总设计方案可知硬件电路是以单片机为核心辅以适当的电路以完成要求功能。主要包括显示模块,A/D转换模块,D/A转换模块等模块。2.1 按键电路2.1.1 AT89C51AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Onl
8、y Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。图2.1 按键电路的设计AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内
9、部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。2.1.2 按键电路 如图2.1所示,单片机的P2.1和P2.2口分别接一个按键用于控制电机。当按下S1键时,电机转速提高,进入加速状态;当按下S2键时,电机转速减慢,进入减速状态。通过S1,S2两个按键可以达到键盘控制电机
10、的作用。2.2 显示电路2.2.1 MAX7219MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI、 QSPI以及 MICROWIRE相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。 一个方便的四线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。
11、MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150A的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。功能特点:1、10MHz连续串行口 2、独立的LED段控制 3、数字的译码与非译码选择 4、150A的低功耗关闭模式 5、亮度的数字和模拟控制 6、高电压中断显示 7、共阴极LED显示驱动 8、限制回转电流的段驱动来减少EMI(MAX7221) 9、SPI, QSPI, MICROWIRE串行接口(MAX7221) 10、24脚的 DIP和 SO 封装2.2.2 工作原理图2.2
12、 显示电路的设计 如图2.2所示,可变电阻接ADC0808转变成相应电压的数字信号,单片机通过P0口读取,再由P1口输出与转速相应的8位BCD编码到MAX7219。经由MAX7219处理后通过四位数码管显示出来。电动机所处速度级以速度档级数显示。正转时最高位显示“三” ,其它三位为电机转速;反转时最高位显示“F”,其它三位为电机转速。每次电动机启动后开始显示,停止时数码管显示出“0000”。2.3 A/D转换模块2.3.1 ADC0808 ADC0808是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只
13、选通8路模拟输入信号中的一个进行A/D转换。是目前国内应用最广泛的8位通用A/D芯片。 主要特性 1)8路输入通道,8位A/D转换器,即分辨率为8位。 2)具有转换起停控制端。 3)转换时间为100s(时钟为640kHz时),130s(时钟为500kHz时) 4)单个+5V电源供电。 5)模拟输入电压范围0+5V,不需零点和满刻度校准。 6)工作温度范围为-40+85摄氏度。 7)低功耗,约15mW。 ADC0809的工作过程首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EO
14、C输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。 转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。 (1)定时传送方式 对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128s,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启
15、动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。 (2)查询方式 A/D转换芯片由表明转换完成的状态信号,例如ADC0808的EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。 (3)中断方式 把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。图2.3 AD转换电路的设计2.3.2 工作原理 如图2.3所示,外部电源通过滑动变阻器向ADC0808输
16、入控制电压信号,经A/D处理后,输入到AT89C51中,交由AT89C51处理,进行下一步动作。2.4 D/A转换模块2.4.1 DAC0832 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的工作
17、方式DAC0832进行D/A转换,可以采用两种方法对数据进行锁存。 第一种方法是使输入寄存器工作在锁存状态,而DAC寄存器工作在直通状态。具体地说,就是使 和 都为低电平,DAC寄存器的锁存选通端得不到有效电平而直通;此外,使输入寄存器的控制信号ILE处于高电平、 处于低电平,这样,当 端来一个负脉冲时,就可以完成1次转换。 第二种方法是使输入寄存器工作在直通状态,而DAC寄存器工作在锁存状态。就是使和为低电平,LE为高电平,这样,输入寄存器的锁存选通信号处于无效状态而直通;当和端输入1个负脉冲时,使得DAC寄存器工作在锁存状态,提供锁存数据进行转换。 图2.4 DA转换电路的设计2.4.2
18、工作原理如上图2.4所示,电压信号输入后经过AD转换输入到AT89C51,由单片机通过P1口输出与转速相应的8位BCD编码,该编码通过DAC0832译成相应的模拟电压,经过信号放大实现电动机转向与转速的控制。2.5 总电路图 由各子模块设计给得出总硬件电路设计如下图2.5所示图2.5 硬件总电路图第三章 系统软件设计本系统编程部分工作采用KELI-C51语言完成,采用模块化的设计方法,与各子程序做为实现各部分功能和过程的入口,完成键盘输入、按键识别、ADC0809读取和DAC0832输出以及数码管显示等部分的设计。开始3.1 系统主程序设计系统初始化按键是否按下 N读取键值 Y减速加速 电机加
19、速电机减速将模拟电压转变为数字信号调用显示子程序 显示速度返回图3.1 主程序流程图 主程序流程图如上图3.1所示。系统初始化后,主程序通过调用各子程序完成预定动作,达到控制电机正反转及转速的目的。4.1 按键扫描程序 按键扫描程序采用中断方式,按下键,完成延时去抖动、键码识别、按键功能执行。要实现按住加/减速键不放时恒加或恒减速直到放开停止,就需在判断是否松开该按键时,每进行一次增加/减少一定的占空比。按键扫描程序流程图如下图3.2所示开始按键是否释放 N延时去抖动、 Y键码识别按键功能执行加/减占空比返回图3.2 按键扫描程序流程图由流程图设计程序如下:/*按键扫描*/key()if(P1
20、2=0) /如果按下, while(!P12) /去抖动 display(); k=k;if(P16=0) /启动while(P16=0);IE=0x8a;if(P13=0) /加速while (P13=0);t+;if(t=5)t=5;if(P14=0) /减速while(P14=0);t-;if(t1)t=1;if(P15=0) /停止while(P15=0);EA=0;P10=0;P11=0;4.2 显示子程序显示子程序用于处理DAC0832处理出来的8位BCD,利用数组方式定义显示缓存区,缓存区有8位,分别存放各个数码管要显示的值。流程图如下图3.3所示开始 求各位数值,并送入各位对应
21、的缓冲区显示各位数值延时显示正反转返回图3.3 显示程序流程图由流程图设计程序如下:/*数码管显示*/display()uchar i; gw=x%10; /求速度个位值,送到个位显示缓冲区sw=(x/10)%10; /求速度十位值,送到十位显示缓冲区bw=(x/100)%10; /求速度百位值,送到百位显示缓冲区qw=x/1000; /求速度千位值,送到千位显示缓冲区for(i=0;i4;)P2=ledi;if(i=0) /显示个位P0=smggw;delays();else if(i=1) /显示十位P0=smgsw;delays();else if(i=2) /显示百位P0=smgbw;
22、delays(); else if(i=3) /显示千位if(k=0)/正转时显示三 P0=0x49; delays();else P0=0x71; /反转时显示Fi+;4.3 定时中断处理程序定时中断处理程序:采用定时方式1,因为单片机使用12M晶振,可产生最高约为65.5ms的延时。对定时器置初值B1E0H可定时20ms,即系统时钟精度可达0.02s。当20ms定时时间到,定时器溢出则响应该定时中断处理程序,完成对定时器的再次赋值,并对全局变量time加1,这样,通过变量time可计算出系统的运行时间。4.4 A/D转换程序首先判断A/D转换是否允许进行,当WR又低变高时AD开始转换,再读
23、取转换数据结果,把数据存到ad_data中,完成A/D转换。流程图如下图4.4所示开始acds=0 N允许A/D转换、 Y读取转换数据结果数据结果把数据存到ad_data中停止A/D转换图3.4 A/D转换程序流程图 由流程图设计程序如下:ADC0809:/启动AD转换子程序/void start_adc0809(void) /adcs=0; /允许进行A/D转换 adwr=0;delay_50us(2);adwr=1; /WR由低变高时,AD开始转换 /adcs=1; /停止AD转换delay_50us(10);/读A/D数据子程序/read_ad() uint ad_data; ad1_7
24、=0xff; /adcs=0; /允许读 /adrd=0; /读取转换数据结果 delay_50us(5); ad_data=ad1_7; /把数据存到ad_data中 /adrd=1;adcs=1; /停止A/D读取 return(ad_data);第四章 系统仿真4.1 仿真步骤 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-12.hex”;在“Clock Frequency”栏中输入晶振频率为12MHz。ADC0809的时钟信号设置为640kHz。启动仿真如下页图所示,各按键功能如图中所注,LED中显示的为当前电压的
25、数字信号值,即当前转速的档位(0-256),通过调整从滑动变阻器输出的电压值,可以观察到直流电机不同的转速。通过按键加减速,改变电机转速,数码管显示的数字也相应改变。结果如图4.1所示:图4.1 仿真结果 按下加速键后,电机转速加快,数码管显示的数值增大。结果如图4.2所示:图4.2 仿真结果4.2 仿真结果分析通过键盘向单片机输入相应控制指令,数码管显示出不同的数值。当按下加速键时,数码管显示数值增大,说明电机转速增快;当按下减速键时,数码管显示数值减小,说明电机转速减慢。键盘通过单片机实现了控制电机转速的功能。 当改变可变电阻阻值时,电机两端改变,数码管显示的数值也改变。说明电阻改变可改变
26、电机两端的电压,从而达到控制直流电机的目的,且当电压越大时,数码管显示数值越大,电机转速越快;电压越小时,数码管显示数值越小,电机转速越慢。结论本次课程设计我们主要根据要求中的提示,首先确定了各个模块的作用和工作原理,再通过资料的整理了解具体每块芯片的结构和工作方式,便于我们对相应模块及整体电路的设计,也为我们软件程序的编写提供依据。通过参考资料和已有的相关实验理论,我们最终完成了硬件电路设计和部分软件程序设计。通过此次课程设计使我们对单片机控制理论有了初步的了解,对单片机的应用有了更多的了解,让我们对自己所学过的知识有了更深刻的认识,同时也增加了我们的知识面,培养了我们的自主学习的能力,可谓
27、收获颇多。附录附录一 电路原理图及PCB板附图1 电路原理图附图2 PCB板附录二 系统程序#include #includelcd1602.h #includefonction.huchar count=0,count2=1;uchar key_num=0;uint speed5;/bit direct_flag=1,run_flag=0;/方向标志 运行标志uchar pwmdata=50;sbit right=P27;sbit left=P26;void dsp() if(run_flag) gotoxy(1,0);display_string(running);/ 显示电机的转动去停止
28、情况 else gotoxy(1,0);display_string( stop ); / if(direct_flag) gotoxy(12,0);display_string(-); /显示电机的转动方向 箭头方向 else gotoxy(12,0);display_string(=100)pwmdata=100; break;case 5:pwmdata-; if(pwmdata=100)pwmdata=0; break; key_num=0;/清零 void main() /-硬件初始化- EA=1; ET0=1; TMOD=0X51; TH0=(65536-50000)/256; T
29、L0=(65536-50000)%256; TR0=1; TH1=0; TL1=0; TR1=1; EX0=1; IT0=1; /-控制端口初始化- right=0;left=0; init_lcd(); gotoxy(0,0); display_string( stop dt:- );/stop 2 running 1 gotoxy(0,1); display_string( 000r/s 050% );/2 11 for(;) count2+; if(count100)count2=1; if(run_flag=0)right=0;left=0; else if(count2=5)t=5;
30、if(P14=0) /减速while(P14=0);t-;if(t1)t=1;if(P15=0) /停止while(P15=0);EA=0;P10=0;P11=0;ADC0809:/启动AD转换子程序/void start_adc0804(void) /adcs=0; /允许进行A/D转换 adwr=0;delay_50us(2);adwr=1; /WR由低变高时,AD开始转换 /adcs=1; /停止AD转换delay_50us(10);/读A/D数据子程序/read_ad() uint ad_data; ad1_7=0xff; /adcs=0; /允许读 /adrd=0; /读取转换数据结
31、果数据结果 delay_50us(5); ad_data=ad1_7; /把数据存到ad_data中 /adrd=1;adcs=1; /停止A/D读取 return(ad_data);/*数码管显示*/display()uchar i; gw=x%10; /求速度个位值,送到个位显示缓冲区sw=(x/10)%10; /求速度十位值,送到十位显示缓冲区bw=(x/100)%10; /求速度百位值,送到百位显示缓冲区qw=x/1000; /求速度千位值,送到千位显示缓冲区for(i=0;i4;)P2=ledi;if(i=0) /显示个位P0=smggw;delays();else if(i=1)
32、/显示十位P0=smgsw;delays();else if(i=2) /显示百位P0=smgbw;delays(); else if(i=3) /显示千位if(k=0)/正转时显示三 P0=0x49; delays();else P0=0x71; /反转时显示Fi+;参考文献 1陈桂友,孙同景.单片机原理及应用M.机械工程出版社 2常敏,王涵,范江波.51单片机应用程序开发与实践M.电子工业出版社 3杨宁,胡学军.单片机与控制技术M.北京航空航天大学出版社 4求是科技.单片机典型模块设计实例导航M.人民邮电出版社 5林育兹.电工电子学M.电子工业出版社 答辩记录及评分表课题名称单片机控制直流电机答辩教师(职称) 答辩时间20122013 学年 第 一 学期 第 周答辩记录 评 分 表学生姓名学号评分