PWM控制直流电动机转速报告.docx
《PWM控制直流电动机转速报告.docx》由会员分享,可在线阅读,更多相关《PWM控制直流电动机转速报告.docx(22页珍藏版)》请在冰豆网上搜索。
![PWM控制直流电动机转速报告.docx](https://file1.bdocx.com/fileroot1/2023-6/20/9c4a06c8-a2e9-4103-87b6-54f1ff2dba1c/9c4a06c8-a2e9-4103-87b6-54f1ff2dba1c1.gif)
PWM控制直流电动机转速报告
2011年全国大学生电子设计竞赛
PWM控制直流电机转速(A题)
【高职组】
2011年9月6日
摘要
本设计主要要实现的功能是,通过直流电机PWM控制系统,实现对直流电机的加速、减速以及电机的正转、反转和急停,并且可以调整电机的转速,能够很方便的实现电机的智能控制。
主要采用直流电机PWM调速系统以AT89S52单片机为控制核心,由命令输入模块、LCD显示模块及电机驱动模块组成。
使用带中断的独立式键盘作为命令的输入,单片机在程序控制下,定时不断给L298直流电机驱动芯片发送PWM波形H型驱动电路完成电机正、反转和急停控制,同时单片机不停的将PWM脉宽调制占空比送到LCD1602液晶来完成实时显示。
关键词:
直流电机;PWM;控制。
abstract
Thisdesignmainlyinordertorealizethefunctionis,throughthedcmotorPWMcontrolsystem,theimplementationofthedcmotorspeed,motorandreducer,moveforward,reverseandstop,andcanadjustthespeedofthemotor,caneasilyrealizetheintelligentcontrolofthemachine.MainlyadoptsdcmotorPWMspeedregulationsystemAT89S52singlechipmicrocomputerascontrolcore,bythecommandinputmodule,LCDdisplaymoduleandmotordrivemodule.Usingindependenttypekeyboardwithinterruptionascommandinput,singlechipmicrocomputerunderprogramcontrol,timing,constantlysenddcmotordriverchipL298PWMwaveformHdrivecircuittocompletethemotorpositiveandreverseandstopcontrol,meanwhilemicrocontrollerofthePWMpulsewidthmodulationdutycycletotheLCD1602LCDtocompletereal-timedisplay.
Keywords:
dcmotor;PWM.Control.
一系统方案设计与分析……………………………………………4
1系统总体框图………………………………………………………4
2方案论证与选择……………………………………………………4
控制模块的论证与选择…………………………………………4
输入模块的论证与选择…………………………………………4
显示模块的论证与选择…………………………………………5
传感器的论证与选择…………………………………………5
3理论分析与计算……………………………………………………5
PWM调速原理……………………………………………………5
PWM调速方法……………………………………………………6
二硬件电路设计……………………………………………………6
1控制系统……………………………………………………6
2驱动模块……………………………………………………7
3显示模块……………………………………………………8
三软件设计……………………………………………………9
1程序流程图
四调试结果与分析……………………………………………………10
五元器件清单……………………………………………………12
六参考文献……………………………………………………12
七总结……………………………………………………12
附录一:
原理图……………………………………………………13
附录二:
源程序……………………………………………………14
一系统方案设计与分析
1系统总体框图
本系统主要由控制模块、显示模块、电机驱动模块、传感器模块、电源模块等组成,系统总体框图如图1所示。
图1系统总体框图
2方案论证与选择
控制模块的论证与选择
方案一:
采用嵌入式系统。
特点是硬件结构相对于AT80C51复杂,编程容易。
价格低廉、采用CMOS技术和RISC架构,低功耗(μA)、具有SLEEP(休眠)功能。
AVR的一条指令执行速度可达50ns(20MHz),而耗电则在1μA~间。
高度保密。
方案二:
采用AT80C51系统。
特点是具有8K字节的ROM,32个可编程IO口,3个16位定时/计数计,8个中断源,1个全双工UART串行通信口,编程容易,是应用广泛的一种单片机。
方案三:
采用MSP430。
此系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。
这些特点保证了可编制出高效率的源程序。
综合以上三种方案,本设计选择方案二。
输入模块的论证与选择
方案一:
采用独立键盘来控制输入。
特点是硬件结构简单,编程容易,按键较多时需要较多的IO口。
方案二:
采用矩阵键盘来控制输入。
特点是硬件结构复杂,编程复杂,对于按键较多时,可节约IO口。
方案三:
采用拨码开关。
拨码开关(也叫DIP开关,拨动开关,超频开关,地址开关,拨拉开关,数码开关,指拨开关)是一款用来操作控制的地址开关,采用的是0/1的二进制编码原理。
通俗的说也就是一款能用手拨动的微型的开关,所以也通常叫指拨开关的也很多。
广泛使用于数据处理、通信、遥控和防盗自动警铃系统、风淋室等需要手动程式编制的产品上。
综合以上三种方案,本设计选择方案一。
显示模块的论证与选择
方案一:
采用数码管显示。
特点是耗电少、寿命长、成本低、故障少、可视距离远,但其只能显示数字,字母。
方案二:
采用LCD1602显示。
特点是体积小,功耗低,显示内容丰富,是单片机应用设计中最常用的信息显示模块。
方案三:
采用LCD12864显示。
特点是该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗。
不论硬件电路结构或显示程序都要简洁得多,价格也较低廉。
综合以上三种方案,本设计选择方案二。
、
传感器的论证与选择
方案一:
采用红外对管测速。
特点是能够快速反应电机轴上码盘的黑白线,输出方波,并用数码管显示。
可以满足一般小电机的测速,适合于玩具车的,循迹小车的测速,但在大型电机上还有很大要改进的地方
方案二:
采用编码测速。
特点是功耗小,性能稳定,分辨力高,广泛应用于机电测速的各个方面。
方案三:
采用光电对管测速。
采用集成电路技术和SMT表面安装工艺而制造的新一代光电开关器件,具有延时、展宽、外同步、抗相互干扰、可靠性高、工作区域稳定和自诊断等智能化功能。
这种新颖的光电开关是一种采用脉冲调制的主动式光电探测系统型电子开关,它所使用的冷光源有红外光、红色光、绿色光和蓝色光等,可非接触,无损伤地迅速和控制各种固体、液体、透明体、黑体、柔软体和烟雾等物质的状态和动作。
体积小、功能多、寿命长、精度高、响应速度快、检测距离远以及抗光、电、磁干扰能力强。
综合以上三种方案,本设计选择方案二。
3理论分析与计算
PWM调速原理
PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率改变负载两端的电压,从而达到控制要求的一种电压调整方法。
PWM可以应用在许多方面。
比如电机调速、温度控制、压力控制等等。
在PWM驱动控制的调整系统中按一个固定的频率来接通和断开电源并且根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速,也正因为如此PWM又被称为“开关驱动装置”。
设电机始终接通电源时,电机转速最大为Vmax,设占空比为D=t1/,则
电机的平均速度为Va=Vmax*D,其中Va指的是电机的平均速度,Vmax指电机在全通电时的最大速度,D=t1/T是指占空比。
由上面的公式可见,当我们改变占空比D=t1/T时,就可以得到不同的电机
平均速度Vd,从而达到调速的目的。
严格来说,平均速度Vd与占空比D并非严
格的线性关系,但是在一般的应用中,我们可以将其近似的看成是线性关系。
PWM调速方法
基于单片机类由软件来实现PWM:
在PWM调速系统中占空比D是一重要参数在电源电压dU不变的情况下,电枢端电压的平均值取决于占空比D大小,改变D的值可以改变电枢端电压的平均值从而达到调速的目的。
改变占空比D的值有三种方法:
A、定宽调频法:
保持1t不变,只改变t,这样使周期(或频率)也随之改变。
B、调宽调频法:
保持t不变,只改变1t,这样使周期(或频率)也随之改变。
C、定频调宽法:
保持周期T(或频率)不变,同时改变1t和t。
前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与
系统的固有频率接近时,将会引起振荡,因此常采用定频调宽法来改变占空比从而改变直流电动机电枢两端电压。
利用单片机的定时计数器外加软件延时等方式来实现脉宽的自由调整。
此种方式可简化硬件电路、操作性强等优点。
二硬件电路设计
1控制系统
单片机80C51如图2所示。
图280C51
单片机AT80C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesSP的可反复擦写的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCC-51指令系统及89C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT80C51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT80C51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,个16位可2编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
2驱动模块
电机驱动芯片L298N如图3所示。
图3L298N
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片采用15脚封装。
主要特点是:
工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。
内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台电动机。
使用直流/步进两用驱动器可以驱动两台直流电机。
分别为M1和M2。
引脚A,B可用于输入PWM脉宽调制信号对电机进行调速控制。
(如果无须调速可将两引脚接5V,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,输入信号端IN1接高电平输入端IN2接低电平,电机M1正转。
(如果信号端IN1接低电平,IN2接高电平,电机M1反转。
)控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。
(反之则反转),PWM信号端A控制M1调速,PWM信号端B控制M2调速。
可参考下图表:
电机
旋转方式
控制端IN1
控制端IN2
控制端IN3
控制端IN4
输入PWM信号改变脉宽可调速
调速端A
调速端B
M1
正转
高
低
/
/
高
/
反转
低
高
/
/
高
/
停止
低
低
/
/
高
/
M2
正转
/
/
高
低
/
高
反转
/
/
低
高
/
高
停止
低
低
/
/
/
高
3显示模块
LCD1602显示模块如图4所示。
LCD1602的主要功能是
(1)40通道点阵LCD驱动;
(2)可选择当作行驱动或列驱动;(3)输入/输出信号:
输出,能产生20×2个LCD驱动波形;输入,接受控制器送出的串行数据和控制信号,偏压(V1∽V6);(4)通过单片机控制将所测的频率信号读数显示出来。
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在各类仪表和低功耗系统中得到广泛的应用。
LCD602共16个管脚,但是编程用到的主要管脚不过三个,分别为:
RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个
管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:
RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
除此外,D0~D7分别为8位双向数据线。
各管脚功能介绍如下表所示。
引脚号
引脚名
电平
输入/输出
作用
1
VSS
电源地
2
VCC
电源(+5V)
3
VEE
对比调整电压
4
RS
0/1
输入
0=输入指令
1=输入数据
5
RW
0/1
输入
0=向LCD写入指令或数据
1=从LCD读取信息
6
E
1,1_0
输入
使能信号1时读取信号
1—0(下降沿)执行指令
7
D0
0/1
输入/输出
总线Line0(最低位)
8
D1
0/1
输入/输出
总线Line1
9
D2
0/1
输入/输出
总线Line2
10
D3
0/1
输入/输出
总线Line3
11
D4
0/1
输入/输出
总线Line4
12
D5
0/10/1
输入/输出
总线Line5
13
D6
0/1
输入/输出
总线Line6
14
D7
0/1
输入/输出
总线Line7(最高位)
15
A
+VCC
LCD背光电源正极
16
K
接地
LCD背光电源负极
三软件设计
1程序流程图
本系统直接应用于AT80C51的软件方法实现PWM信号的输出,这比硬件实现PWM成本低,限制少,实现便捷。
此处利用定时计数器让单片机P1口的、、控制L298的IN1、IN2、ENA管脚,输出占空比不同的方波,然后经驱动芯片L298放大后控制直流电动机。
在调速时,IN1与IN2引脚一个为低电平,一个为高电平,通过控制L298的ENA,产生驱动电机的PWM信号。
当需要改变电机转动方向时,两个引脚的输出方向相反。
PWM脉冲信号是单片机采用延时程序产生的方波信号。
PWM脉宽控制是把每一脉冲的宽度均相等的脉冲列作为PWM波,改变脉冲的宽度或占空比来实现可以调速。
本设计中采用了定频调宽方式,在这种工作方式下电动机在运转时比较稳定,并且采用单片机采用PWM脉冲的软件实现上比较方便。
四调试结果与分析
将各个模块按照电路要求连接到相应的位置,并连接好所有的电源线和液晶显示控制线,检查线路是否正确无误,将电压测量线引出。
然后将程序下载到单片机中。
测试数据如下表
结果说明
在实际测试中发现低电平所占比例越大,电机转速越快,所以本设计中的占空比为del/255。
电机转速测量值比预计的值要大,这里的原因主要是程序中语句导致的延时。
由于电机转动时会有速度值的波动,所以从键盘输入设定值时,无法达到两种驱动方式的最大值。
一旦电机旋转速度超过其最大速度界限,电机就会停转。
表中的键盘输入值的范围是指能够使电机稳定旋转的值。
这里的“稳定”定义为电机的最终转速值在设定值附近有±1的波动。
因为程序语句本身就有一定的延时,再加上用C语言编程,一条C语句在进行编译时能够编译成好几条汇编语句,有的甚至十几条,这样就增加了延时。
虽然程序中设定1s显示转速值,但由于语句延时问题的存在,显示的值可能是多于1s的转速,所以转速值有偏大的问题。
五元器件清单
LCD1602
1
100nF电容
AT89S52
1
二极管4007
1k排阻
1
电阻
DS18B20
1
晶振
L298N
1
7805
直流小电机
1uf
30pF电容
10uf
10K电阻
Led
六参考文献
【1】黄智伟电路设计北京:
北京航空航天大学出版社2011
【2】罗会昌.电工电子技术实验与课程设计.中国科学技术大学出版社.1996年1月
【3】闫晓金单片机应用技能北京:
电子工业出版社2010
【4】李全利单片机原理及其应用技术北京:
高等教育出版社2001
【5】常用集成芯片使用.北京理工大学出版社.1995年
【6】谢自美.电子技术基础实验与课程设计.电子工业出版社.2002年2月赵
【7】王琼.单片机及应用实验教程[M].合肥:
合肥工业大学出版社,2005
【8】刘鲲孙春亮单片机C语言入门[M].北京:
人民邮电出版社,2008
七总结
这个设计的几大模块比较明确,在编写程序时,我选择先编写出每一个模块,让每一个模块实现其基本的功能,然后再逐步合并模块,来实现设计的要求。
在编写程序的过程中遇到了一些问题,通过解决这些问题,我也有了一些收获。
PWM模块不需要很多的语句去描述,只要理解了它的工作原理,而且要实际测量转速与P10口置1的关系,才能得出正确的调速语句。
通过本次设计,使自己学到很多课本上学不到的东西,也是我领会到单片机技术的应用广泛,同时也进一步加强了自己的动手能力和运用专业知识的能力,从中学到如何去思考问题和解决问题。
附录一:
原理图
附录二:
源程序
/*-----------------------------------------------
名称:
独立按键控制直流电机调速
内容:
对应的电机接口需用杜邦线连接到l298电机控制端
使用5V-12V小功率电机皆可------------------------------------------------*/
#include<>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbitDCOUT=P3^4;//定义电机信号输出端口
sbitk1=P2^0;
sbitk2=P2^1;
sbitk3=P2^2;
sbitk4=P2^3;
sbitk5=P2^4;
sbitIN1=P1^0;
sbitIN2=P1^1;
staticunsignedcharcount;
/*------------------------------------------------
全局变量
------------------------------------------------*/
unsignedcharPWM_ON;//定义速度等级
#defineCYCLE10//周期
/*------------------------------------------------
函数声明
------------------------------------------------*/
voidDelayUs2x(unsignedchart);//us级延时函数声明
voidDelayMs(unsignedchart);//ms级延时
//unsignedcharKeyScan(void);//键盘扫描
voidInit_Timer0(void);//定时器初始化
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
Init_Timer0();
PWM_ON=0;
count=0;
DCOUT=0;
P1=0x00;
k1=1;
k2=1;
k3=1;
k4=1;
k5=1;
while
(1)//主循环
{
if(k1==0)//正转
{DelayMs(150);
IN1=1;
IN2=0;
}
if(k2==0)//反转
{DelayMs(150);
if(k2==0)//反转
{
IN1=0;
IN2=1;
}
}
if(k3==0)//速度等级增加
{DelayMs(150);
EA=0;//总中断打开
ET0=0;//定时器中断打开
if(PWM_ONPWM_ON++;
elsePWM_ON=0;
EA=1;//总中断打开
ET0=1;//定时器中断打开
}
if(k4==0)//速度等级减小
{DelayMs(150);
EA=0;//总中断打开
ET0=0;//定时器中断打开
if(PWM_ON>0)
PWM_ON--;
elsePWM_ON=0;
EA=1;//总中断打开
ET0=1;//定时器中断打开
}
if(k5==0)//停止
{
IN1=0;
IN2=0;
}
}
}
/*------------------------------------------------
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
voidDelayUs2x(unsignedchart)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编
-------------