目录
1 / 16
一、设计目的
1、通过单片机课程设计,熟练掌握C语言的编程方法,将理论联系到实践中,提高我们的动脑和动手的能力。
2、通过对单片机控制直流电动机控制系统的设计,掌握A/D转换、D/A转换的有关原理,加深对PWM波的理解和使用,同时对单片机的使用更加熟练,通过对简单程序的编写提高我们的逻辑抽象能力。 二、设计任务和要求
任务:采用单片机设计一个控制直流电动机并测量转速的装置。
要求: 1、通过改变A/D输入端的可变电阻来改变A/D输入电压,D/A输入检测量大小,进而改变直流电机的转速。
2、手动控制。在键盘上设置两个按键——直流电动机加速键和直流电机减速键。在手动状态下,每按一次键,电机的转速按照约定的速率改变。 3、键盘列扫描(4*6)。
三、设计原理分析 1. 设计思路
本文设计的直流PWM调速系统采用的是调压调速。系统主电路采用大功率GTR为开关器件、H桥单极式电路为功率放大电路的结构。PWM调制部分是在单片机开发平台之上,运用汇编语言编程控制。由定时器来产生宽度可调的矩形波。通过调节波形的宽度来控制H电路中的GTR通断时间,以达到调节电机速度的目的。增加了系统的灵活性和精确性,使整个PWM脉冲的产生过程得到了大大的简化。设计以AT89C51单片机为核心,以键盘作为输入达到控制直流电机的启停、速度和方向,完成了基本要求和发挥部分的要求。在设计中,采用了PWM技术对电机进行控制,通过对占空比的计算达到精确调速的目的。本文介绍了直流电机的工作原理和数学模型、脉宽调制控制原理和H桥电路基本原理设计了驱动电路的总体结构,根据模型,利用PROTEUS软件对各个子电路及整体电路进行了仿真,确保设计的电路能够满足性能指标要求,并给出了仿真结果。 2、 基本原理
主体电路:即直流电机PWM控制模块。PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压
2 / 16
调整方法。这部分电路主要由80C51单片机的I/O端口、定时计数器、外部中断扩展等控制直流电机的加速、减速,并且可以调整电机的转速,还可以方便的读出电机转速的大小和了解电机的转向,能够很方便的实现电机的智能控制。其间是通过80C51单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。 四、硬件资源及原理 1.1直流电机调速原理
直流电动机根据励磁方式不同,直流电动机分为自励和他励两种类型。不同励磁方式的直流电动不同。但是对于直流公式: n=U/Cc-TR内
R内—励磁绕组本压;
机机械特性曲线有所电动机的转速有以下/CrCc 其中:U—电身的电阻;—每极常数;Cr—转矩常量。机的速度控制既可采采用磁场控制法。磁
磁通(Wb);Cc—电势由上式可知,直流电用电枢控制法,也可
场控制法控制磁通,其控制功率虽然较小,但低速时受到磁极饱和的限制,高速时受到换向火花和换向器结构强度的限制,而且由于励磁线圈电感较大,动态响应较差。所以在工业生产过程中常用的方法是电枢控制法。
图1-1 直流电机的工作原理图
电枢控制是在励磁电压不变的情况下,把控制电压信号加到电机的电枢上,以控制电机的转速。在工业生产中广泛使用其中脉宽调制(PWM)应用更为广泛。脉宽调速利用一个固源的接通或断开,期内“接通”和“断即改变直流电机电比”来改变平均电制电动机的转速,“开关驱动装置”。
3 / 16
定的频率来控制电并通过改变一个周开”时间的长短,枢上电压的“占空压的大小,从而控因此,PWM又被称为
图1-2电枢电压占空比和平均电压的关系图
tV根据上图,如果电机始终接通电源时,电机转速最大为max,占空比为D=1/T,
V=V*D则电机的平均速度为:Dmax,可见只要改变占空比D,就可以得 到不同的电机速度,从而达到调速的目的。 1.2直流调速系统实现方式
PWM为主控电路的调速系统:基于单片机类由软件来实现PWM,在PWM调速系统中占空比D是一个重要参数在电源电压Ud不变的情况下,电枢端电压的平均值取决于占空比D的大小,改变D的值可以改变电枢端电压的平均值从而达到调速的目的。改变占空比D的值有三种方法: A、定宽调频法:保持t1不变,只改变t,这样使周期(或频率)也随之改变。(图1-2)B、调宽调频法:保持t不变,只改变t1,这样使周期(或频率)也随之改变。(图1-2)C、定频调宽法:保持周期T(或频率)不变,同时改变t1和t。(图1-2)
前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与 系统的固有频率接近时,将会引起振荡,因此常采用定频调宽法来改变占空 比从而改变直流电动机电枢两端电压。 1.3 89C51单片机
U419XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C514 / 16
图 1-3 89C51单片机
2 硬件电路设计 2.1 pwm波的实现
随计算机技术及电力电子技术的发展,PWM波形采用软件方法实现显得非常灵活和实用,以89C51单片机为控制核心,晶振频率为12MHz定 时计数器TO,T1作定时器使用,工作在方式1,定时时间为0.1ms,若PWM波形的频率为50 Hz ,占空比为1:1,则和 R0载入30H和31H单元的值初始100,若在程序中利用按键产生中断调用来改变30H和31H单元的值就可以改变占空比.系统流程图如图2-1所示 :
开始 系统初始化 加速 发加速命令 减速 调用子程序 5 / 16 发减速命令
图 2-1 程序流程图
2.2直流电动机驱动
在直流电动机的驱动中对大功率的电动机常采用IGBT作为主开关元件,对中小功率的电机常采用功率场效应管作为主开关元件.另外还可以采用集成电路来完成对电机的驱动,系统采用集成电路L298来驱动电机
图2-2 L298内部结构和功能引脚图
L298是双H高电压大电流功率集成电路.直接采用 L逻辑电平控制,可以驱 动继电器、直流电动机 、步进电动机等电感性负载。其内部有两个完全相同的功率放大回路。其内部结构和引脚功能如图 2-2所示。 L298 引脚符号及功能
SENSA、SENSB:分别为两个H桥的电流反馈脚,不用时可以直接接地 ENA 、ENB:使能端,输入PWM信号
IN1、IN2、IN3、IN4:输入端,TTL逻辑电平信号 OUT1、OUT2、OUT3、OUT4:输出端,与对应输入端同逻辑 VCC:逻辑控制电源,4.5~7V GND:地
VSS:电机驱动电源,最小值需比输入的低电平电压高
6 / 16
当使能端为高电平时,输入端IN1为PWM信号,IN2为低电平信号时,电机正转;输入端IN1为低电平信号,IN2为PWM信号时,电机反转;;IN1与IN2相 同时,电机快速停止。当使能端为低电平时,电动机停止转动。 五、硬件图
7 / 16
六、程序框图 1、主程序框图 开始
系统初始化 启动 从键盘发命令送入intx中(x=0或1) 定时中断给电机输入脉冲 电机转动,数码管显示速度 结束
2、中断服务程序框图
8 / 16 设置中断返回地址
中断响应
七、程序 #include uchar TABLE[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; unsigned int frq1,c; void delay(unsigned int k) { } void display() { uchar qian,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; 9 / 16 返回 unsigned int i,j; for(i=0;i ; 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); } void chang(void) interrupt 0 using 0 { if(INT0==0) while(!INT0) frq1++; } void main() { unsigned int i=0; while(1) { TMOD=0x01; TH0=55536/256; TL0=55536%256; TR0=1; EA=1; EX0=1; while(TF0==1) 10 / 16 } } { } ; i++; if(i==10) { display(); frq1=0; TF0=0; } 调速程序 #include\"reg51.h\" #include\"intrins.h\" #define uchar unsigned char #define uint unsigned int sbit P20=P2^0; sbit P21=P2^1; uchar flag=0;/***高低电平标志***/ bit direction=0;/***方向标志***/ static uchar constant=1;//可以改变占空比 void time0(void) interrupt 1 using 1 { i++; /**频率为固定的1kHZ左右,只是占空比发生变化**/ if(i<=constant) flag=1; if(i<=10&&i>constant) 11 / 16 static uchar i; } flag=2; i=0; if(i==10) TH0=0X9C; TL0=0X9C; /****改变转向标志*****/ void int1_srv (void) interrupt 2 using 2 { } /*******中断,调节占空比********/ void change(void) interrupt 0 using 0 { if(INT0==0) { } 12 / 16 if(INT1==0) { } while(!INT0); constant--; if(constant==10) constant=0; while(!INT0); constant++; if(constant==10) constant=0; } /*************************/ void main() { 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; } } } 13 / 16 八、调试运行 1、按硬件图接线,加速减速按钮分别接单片机的P3.2口、P3.3口,单片机输出端口P2.0、P2.1接L298的IN1、IN2口,电动机测速端口接另一片单片机的INT0、INT1. 2、开始运行系统,观察数码管,当按下加速按钮时数码管显示的电动机速度应该加速,而当按下减速按钮时,数码管显示的速度应该减小。 3、运行系统看电动机速度是否符合要求,如不符合,则再调试,直至满足要求。 九、仿真截图 当仿真开始运行时,各个模块处于初始状态。点击左边的独立键盘加速或减速按钮。显示模块便开始显示数字。电机的驱动模块能够实现电机的加速、减速等操作。且改变PWM脉冲时的占空比电机的工作电压改变。因此,从仿真结果可以看出,本设计可以得到预期仿真效果。 14 / 16 图9 仿真截图 十、心得体会 这次单片机期末实训,凝结了很多老师的心血,在此我表示由衷的感谢。没有老师们的帮助,我将无法顺利完成这次实训。首先,我要特别感谢刘老师在这一学期里给我们上了单片机课。刘老师渊博的知识、严谨的作风、诲人不倦的态度和学术上精益求精的精神让我受益终生。作为一个本科生的实训设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,想要完成这个设计是难以想象的。因此,特别需要感谢各位老师给予的耐心细致的指导,在此,再一次向全体教师以及关心帮助我的教师同学表示最诚挚的谢意!在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。在这两周的学习中,我深刻感觉到了自己对单片机编程知识的缺乏,对实践操作的生疏,也感觉到了单片机的重要性与实用性,在一块小小的芯片上就可实现很多的事情的演示。我同样也对直流电机 15 / 16 等和本次课题相关的芯片,元器件有了新的认识,我会在今后的学习中,加大对单片机和汇编语言的学习,争取更大的进步。课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的含义,认真的进行课程设计学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础. 16 / 16 因篇幅问题不能全部显示,请点此查看更多更全内容