1、0单片机原理及应用课程设计报告设计题目: 学 院: 专 业: 班 级: 学 号: 学生姓名: 指导教师: 年 月 日1目录设计题目 31 设计要求及主要技术指标: 41.1 设计要求 41.2 主要技术指标 52 设计过程 52.1 题目分析 92.2 整体构思 92.3 具体实现 .123 元件说明及相关计算 .143.1 元件说明 .143.2 相关计算 .154 调试过程 .164.1 调试过程 .164.2 遇到问题及解决措施 215 心得体会 .22参考文献 .23附录一:电路原理图 .24附录二:程序清单 .252设计题目:PWM 直流电机调速系统本文设计的 PWM 直流电机调速系
2、统,主要由 51 单片机、电源、H 桥驱动电路、LED 液晶显示器、霍尔测速电路以及独立按键组成的电子产品。电源采用78 系列芯片实现+5V、+15V 对电机的调速采用 PWM 波方式,PWM 是脉冲宽度调制,通过 51 单片机改变占空比实现。通过独立按键实现对电机的启停、调速、转向的人工控制,LED 实现对测量数据(速度)的显示。电机转速利用霍尔传感器检测输出方波,通过 51 单片机对 1 秒内的方波脉冲个数进行计数,计算出电机的速度,实现了直流电机的反馈控制。关键词:直流电机调速;定时中断;电动机;PWM 波形;LED 显示器;51 单片机31 设计要求及主要技术指标: 基于 MCS-51
3、 系列单片机 AT89C52,设计一个单片机控制的直流电动机 PWM调速控制装置。 1.1 设计要求(1)在系统中扩展直流电动机控制驱动电路 L298,驱动直流测速电动机。(2)使用定时器产生可控的 PWM 波,通过按键改变 PWM 占空比,控制直流电动机的转速。(3)设计一个 4 个按键的键盘。K1:“启动/停止”。K2:“正转/反转”。K3:“加速”。K4:“减速”。(4)手动控制。在键盘上设置两个按键-直流电动机加速和直流电动机减速键。在手动状态下,每按一次键,电动机的转速按照约定的速率改变。(5)*测量并在 LED 显示器上显示电动机转速(rpm).(6)实现数字 PID 调速功能。4
4、1.2 主要技术指标(1)参考 L298 说明书,在系统中扩展直流电动机控制驱动电路。(2)使用定时器产生可控 PWM 波,定时时间建议为 250us。(3)编写键盘控制程序,实现转向控制,并通过调整 PWM 波占空比,实现调速;(4)参考 Protuse 仿真效果图:图(1)图(1)52 设计过程本文设计的直流 PWM 调速系统采用的是调压调速。系统主电路采用大功率GTR 为开关器件、H 桥单极式电路为功率放大电路的结构。PWM 调制部分是在单片机开发平台之上,运用汇编语言编程控制。由定时器来产生宽度可调的矩形波。通过调节波形的宽度来控制 H 电路中的 GTR 通断时间,以达到调节电机速度的
5、目的。增加了系统的灵活性和精确性,使整个 PWM 脉冲的产生过程得到了大大的简化。本设计以控制驱动电路 L298 为核心,L298 是 SGS 公司的产品,内部包含4 通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个 H 桥的高电压大电流双全桥式驱动器,接收标准 TTL 逻辑电平信号,可驱动46V、2A 以下的电机。可驱动 2 个电机,OUTl、OUT2 和 OUT3、OUT4 之间分别接2 个电动机。5、7、10、12 脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。本设计以 AT89C52 单片机为核心,如下图(2),AT89C52 是一个低电
6、压,高性能 CMOS 8 位单片机 ,片内含 8k bytes 的可反复擦写的 Flash 只读程序存储器和 256 bytes 的随机存取数据存储器(RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器和 Flash 存储单元,AT89C52 单片机在电子行业中有着广泛的应用。6图(2)对直流电机转速的控制即可采用开环控制,也可采用闭环控制。与开环控制相比,速度控制闭环系统的机械特性有以下优越性:闭环系统的机械特性与开环系统机械特性相比,其性能大大提高;理想空载转速相同时,闭环系统的静差(额定负载时电机转速降落与理
7、想空载转速之比)要小得多;当要求的静差率相同时, 闭环调速系统的调速范围可以大大提高。直流电机的速度控制方案如图(3)所示。+-直流电机速度控制方案 图(3)驱动电路调节器直流电机测速装置转速设定值偏差 转速输出7一、 以下是直流电机调速3种控制方式选择:1、电阻网络或数字电位器:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。2、继电器:采用继电器对电动机的开或关进行控制。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械
8、结构易损坏、寿命较短、可靠性不高。3 、H 桥组成的高电压大电流双全桥式驱动芯片:L298N 是 SGS 公司的产品,内部包含 4 通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个 H 桥的高电压大电流双全桥式驱动器,接收标准 TTL 逻辑电平信号,可驱动 46V、2A 以下的电机。桥型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的 PWM 调速技术。兼于上述三种方案调速特性优良、调整平滑、调速范围广、过载能力大,因此本设计采用方案三。二、以下是 PWM 脉宽的 3 种调制方式:调脉宽的方式有三种:定频调宽、定宽调频和调宽调频。采用了
9、定频调宽方式,因为采用这种方式,电动机在运转时比较稳定;并且在采用单片机产生PWM 脉冲的软件实现上比较方便。最后再以键盘作为输入达到控制直流电机的启停、速度和方向,完成了基本要求和发挥部分的要求。在设计中,采用了 PWM 技术对电机进行控制,通过8对占空比的计算达到精确调速的目的。三、驱动电路设计单片机输出的电机控制 PWM 信号接在 ENA 端口,IN1 和 IN2 端口控制电机正反转,通过一个非门实现。对应的 OUT1 和 OUT2 输出接在直流电机两端。如图(4)所示。图(4)2.1 题目分析在进行单片机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设
10、计应用程序。因此,软件设计在控制系统设计中占重要地位。键盘向单片机输入相应控制指令,由单片机通过 P3.7 输出与转速相应的PWM 脉冲,另一口输出高电平,驱动 H 型桥式电动机控制电路,实现电动机转向与转速的控制。电动机所处速度级以速度档级数表示。速度分 4 档,快慢与电动机所处速度级快慢一一对应。9在程序中通过软件产生 PWM,送出预设占空比的 PWM 波形。PWM(脉冲宽度调制)是一系列周期固定、占空比可调的脉冲系列,由于每个脉冲的高电平时间和低电平时间之和必须等于周期数,所以输出电平的维持时间必须由定时器来控制。2.2 整体构思本系统采用 AT89C51 作为控制核心,用按钮来调节电机
11、转速和数码管来显示设定转速和测量转速。由上述提供的方案和最后选择结果,则用 H 桥组成的高电压大电流双全桥式驱动芯片 L298 作为本系统的驱动电路和用带有测速计的电机模型来取得电机的实际转速。如图(5)所示。直流电机控制系统总体框图(5)驱动电路直流电机测速计按 钮LED 数码管显示单元上位机AT89C51单片机10软件主要由 3 部分组成:主程序、键盘扫描程序、中断处理程序。主程序流程如图(6)所示。图(6) 主程序流程图112.3 具体实现定时中断处理程序实现采用定时方式 1,因为单片机使用 12M 晶振,可产生最高约为 65.5ms 的延时。对定时器置初值 0xFF9C 可定时 100
12、us。当 100us 定时时间到,定时器溢出则响应该定时中断处理程序,完成对定时器的再次赋值。 PWM 脉宽控制实现 一个脉冲周期可以由高电平持续时间系数 c16TimeH 和低电平持续时间系数c16TimeL 组成,本设计中采用的脉冲频率为 10000Hz,可得c16TimeH+c16TimeL=65536,占空比为 c16TimeH/(c16TimeH+c16TimeL),因此要实现定频调宽的调速方式,只需通过程序改变全局变量 c16TimeH,c16TimeL的值。其程序流程框如图(7):12开 始初 始 化等 待 键 盘 按 下P w m 调 速 控 制开 始 键 是 否按 下反 向
13、键 是 否按 下减 速 键 是 否按 下加 速 键 是 否按 下NP w m 调 速 控 制N将速度取反YNYP w m 调 速 控 制YNY图(7)133 元件说明及相关计算3.1 元件说明 : 电动机:选择电动机参数:额定电压:6V 额定转速:6000rpm 减速比:1:46.7空载转速:128rpm 10ms/转单片机选择:AT89C52 是美国 ATMEL 公司生产的低电压,高性能 CMOS 8 位单片机,片内含 8k bytes 的可反复擦写的只读程序存储器(PEROM)和 256 bytes 的随机存取数据存储器(RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,
14、与标准 MCS-51 指令系统及 8052 产品引脚兼容,片内置通用 8 位中央处理器(CPU)和 Flash 存储单元,功能强大 AT89C52 单片机适合于许多较为复杂控制应用场合。 主要性能参数:与 MCS-51 产品指令和引脚完全兼容 8k 字节可重擦写 Flash 闪速存储器 1000 次擦写周期 全静态操作:0Hz24MHz 三级加密程序存储器 2568 字节内部RAM 32 个可编程 IO 口线 3 个 16 位定时计数器 8 个中断源 可编程串行 UART 通道 低功耗空闲和掉电模式 功能特性概述: AT89C52 提供以下标准功能:8k 字节 Flash 闪速存储器,256
15、字节内部14RAM,32 个 IO 口线,3 个 16 位定时计数器,一个 6 向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C52 可降至 0Hz 的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止 CPU 的工作,但允许 RAM,定时计数器,串行通信口及中断系统继续工作。掉电方式保存 RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。L298 电机驱动:L298 是一款单片集成的高电压、高电流、双路全桥式电机驱动,设计用于连接标准 TTL 逻辑电平,驱动电感负载(诸如继电器、线圈、DC 和步进电机)。L298 提供两个使能
16、输入端,可以在不依赖于输入信号的情况下,使能或禁用L298 器件。LED 显示屏PROTEUS 设计与仿真平台3.2 相关计算 :在程序中通过软件产生 PWM,送出预设占空比的 PWM 波形。PWM(脉冲宽度调制)是一系列周期固定、占空比可调的脉冲系列,由于每个脉冲的高电平时间和低电平时间之和必须等于周期数,所以输出电平的维持时间必须由定时器来控制。设 PWM 周期为 T,高电平时间为 TH,低电平时间为 TL,电压为 VCC,则输出电压的平均值为:UAV =VCC*TH/(TH+TL)=VCC*TH/T=aVCC,当 VCC 固定时,其电压值取决于 PWM 波形的占空比 a,而 PWM 的占
17、空比由单片机软件内部用于控制 PWM 输出的寄存器值决定。PWM 脉宽控制实现 一个脉冲周期可以由高电平持续时间系数 c16TimeH 和低电平持续时间系数 c16TimeL 组成,本设计中采用的脉冲频率为 10000Hz,可得c16TimeH+c16TimeL=65536,占空比为 c16TimeH/(c16TimeH+c16TimeL),因此要实现定频调宽的调速方式,只需通过程序改变全局变量15c16TimeH,c16TimeL 的值。4 调试过程4.1 调试过程 :1、初始状态,未调试之前,仿真图如下图(8)。图(8)162、启动仿真后,手动控制。在键盘上设置两个按键-直流电动机加速和直
18、流电动机减速键。在手动状态下,每按一次键,电动机的转速按照约定的速率改变。LED 显示屏上显示电机转速的设定值和电机转速实际值。如下图(9)图(10)图(11)所示。图(9)启动仿真后17图(10)加速调节电机转速图(11)减速调节电机转速3、示波器显示 PWM 方波,状态(电机高速挡反转),显示如下图(12)。18图(12)4、示波器显示 PWM 方波,状态(电机高速挡反转),显示如下图(13)。19图(13)5、电机实际转速获取:在 Proteus 中只有一种直流电机集成了测速传感器,在搜索栏里搜索motor-encoder,即可得到这种电机模型。本设计中设置电机转一圈发出 60 个脉冲。
19、根据实际运转情况及结合所编写程序,确定转速公式为:V=N*15;V:速度 R/min N:每秒采样的脉冲个数如右图所示,为带测速功能的直流电机模型204.2 遇到问题及解决措施:问题一:打开仿真软件读取程序时出现如下图所示的黄色条幅?当你在测量时仿真必须停止。也就是说,你想用探针等工具测量参数时,要停止仿真,即,在非仿真状态下,先放好探针等工具,再仿真。问题二:运行程序时,仿真软件底部出现如下图黄色字符?经过上网查阅资料,给出的答案是电路中 GND网络中存在逻辑竞争冲突,检查一下每个接地点是否存在接线错误。或者是逻争征用,是程序里边那里赋值有误。问题三:部分源程序不懂,无法进行仿真,直流电机调
20、速 3 种控制方式选择?通过上网查阅资料和图书馆借阅图书得到的资料,程序得到了完善基本上达到了设计目的。实现通过单片机对直流电机的控制,通过合理的设备选型、参数设置和软件设计,提高了直流电机调速运行的可靠性。直流电机调速方式的选择详见 2.1。215 心得体会经过十天的学习,工作中,通过查阅相关资料了解了 PWM 直流电机调速系统,加深了对直流电机调速控制系统的认识,熟悉了单片机在控制系统中的运用。并且在所学知识的基础上,利用已有的直流调速系统设计,尝试了自己的一些研究。并且,使我将原来所学的知识系统化,理论化,实用化。对如何使用已有知识及获取相关资料方面的能力又有了提高。过而能改,善莫大焉。
21、在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获龋最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师、同学们的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!这次的课程设计给我很多专业知识以及专业技能上的提升,同时,设计让我感触很深。使我对抽象的理论有了具体的
22、认识。通过这次课程设计,我掌握了常用元件的识别和测试;熟悉了常用仪器、仪表;了解了(PID 仿真 ISSI)的连线方法;以及如何提高电路的性能等等,掌握部分程序的编写和仿真,通过查询资料,也了解 PWM 直流电机调速了系统。22参考文献1李广弟等.单片机基础M.北京航空航天出版社,2001.2王东峰等. 单片机 C 语言应用 100 例M.电子工业出版社,2009.3陈海宴. 51 单片机原理及应用M.北京航空航天大学出版社,2010.4刘守义等.单片机技术基础M.西安电子科技大学出版社,2007.5钟富昭等. 8051 单片机典型模块设计与应用M.人民邮电出版社,2007.6李平等.单片机入
23、门与开发M.机械工业出版社,2008. 7 陈伯石.电力拖动自动控制系统M.北京:机械工业出版社,2003.8 钟富昭.8051 单片机典型模块设计与应用M.北京:人民邮电出版社,20079 张靖武.单片机系统的 PROTEUS 设计与仿真M.北京:电子工业出版社,200710 杨恢先.单片机原理及应用M.北京:人民邮电出版社,200611 孟庆涛.图解电子控制电路M.北京:人民邮电出版社,200612 谢维成.单片机原理与应用及 C51 程序设计M.北京:清华大学出版社,200613 周润景.基于 PROTEUS 的电路及单片机系统设计与仿真M.北京:北京航空航天出版社,200614 李光飞
24、.单片机课程设计实例指导M.北京:北京航空航天出版社,200415 杜坤梅.电机控制技术M.哈尔滨:哈尔滨工业大学出版社,200216 李广第.单片机基础(修订版)M.北京:北京航空航天大学出版社,200117 陈光东.单片微型计算机原理与接口技术(第二版)M.武昌:华中科技大学出版社,199918 何耀三.电气传动的微机控制M.重庆:重庆大学出版社,199719 薛钧义.MCS-51/96 系列单片微型计算机及其应用M.西安:西安交通大学出版社,199720 陈志强 胡辉.单片机应用系统设计实践指南.自编教材23附录一:电路原理图24附录二:程序清单#include#include#defi
25、ne uchar unsigned char #define uint unsigned int#define THC0 0xf9#define TLC0 0x0f /2msunsigned char code Duan=0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/共阴极数码管,0-9 段码表unsigned char Data_Buffer8=0,0,0,0,0,0,0,0; / 显示缓冲uchar i=0;sbit AddSpeed=P11;sbit SubSpeed=P12;sbit PWM_FC=P10;int e ,e1 ,
26、e2 ;/pid 偏差float uk ,uk1 ,duk ;/pid 输出值float Kp=10,Ki=12,Kd=1.6;/pid 控制系数 10,12,1.5int out=0;uint SpeedSet=380;uint cnt=0;uint Inpluse=0,num=0;/脉冲计数uint PWMTime=100;/脉冲宽度unsigned char arry;void SendString(uint ch);void PIDControl();void SystemInit();void delay(uchar x);void PWMOUT();void SetSpeed();
27、void SegRefre();/*主函数*/void main()SystemInit();25while(1)SetSpeed(); /按键设定速度SegRefre(); /数码管显示刷新PWMOUT(); /输出 PWMvoid PIDControl() /pid 偏差计算e=SpeedSet-num; /误差=设定值-1s 采集的脉冲值duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2)/50; /增量式 PID 公式/50 是对 duk 进行缩小处理 uk=uk1+duk; out=(int)uk; /输出为占空比if(out1000)out=1000;else if
28、(out0;i-)for(j=50;j0;j-);void PWMOUT() /输出 PWM 脉冲if(cnt1000) cnt=0; void SystemInit()TMOD=0X21; TH0=THC0;TL0=TLC0;TH1=0xC0;TL1=0XC0;ET1=1;ET0=1;TR0=1;TR1=1;EX0=1; /中断 0 用来测量转速IT0=1;EA=1;e =0; /初始化 差值e1=0;e2=0;void SetSpeed()if(AddSpeed=0)delay(200); /消抖处理if(AddSpeed=0)SpeedSet+=10;if(SpeedSet1500)Sp
29、eedSet=1500;if(SubSpeed=0)delay(200);if(SubSpeed=0)SpeedSet-=10;if(SpeedSet8) Bit=0; P0=0xff;P2=DuanData_BufferBit; /显示段码switch(Bit) /数码管位选case 0:P0=0X7F;break;case 1:P0=0XBF;break;case 2:P0=0XDF;break;case 3:P0=0XEF;break;case 4:P0=0XF7;break;case 5:P0=0XFB;break;case 6:P0=0XFD;break;case 7:P0=0XFE;break;if(time100)28time=0;num=Inpluse*5; /算得 1s 采集的脉冲数Inpluse=0; PIDControl(); /调用 PID 算法,输出 PWMvoid timer_1() interrupt 3cnt+; /cnt 越大占空比越高 2.5Khz