基于单片机的直流电机调速.docx
《基于单片机的直流电机调速.docx》由会员分享,可在线阅读,更多相关《基于单片机的直流电机调速.docx(18页珍藏版)》请在冰豆网上搜索。
![基于单片机的直流电机调速.docx](https://file1.bdocx.com/fileroot1/2023-1/14/a75a794a-81c6-42c0-8852-1fd4cf8e490e/a75a794a-81c6-42c0-8852-1fd4cf8e490e1.gif)
基于单片机的直流电机调速
工程实训
报告
题目:
基于单片机的直流
电机调速系统
班级:
电信13-2班
姓名:
王坤
学号:
1306110218
指导教师:
张沛泓
成绩:
电子与信息工程学院
信息与通信工程系
一直流电机调速器简介
1.1直流电机调速器
脉宽调制的全称为:
PulseWidthModulator简称PWM,直流电机调速器就是调节直流电动机速度的设备,由于直流电动机具有低转速大力矩的特点,是交流电动机无法取代的,因此调节直流电动机速度的设备—直流调速器,由于它的特殊性能、常被用于直流负载回路中、灯具调光或直流电动机调速、HW-1020型调速器、就是利用脉宽调制(PWM)原理制作的马达调速器、PWM调速器已经在:
工业直流电机调速、工业传送带调速、灯光照明调解、计算机电源散热、直流电扇等、得到广泛应用。
1.2调速原理
直流电动机根据励磁方式不同,分为自励和他励两种类型。
不同励磁方式的
机械特性曲线有所不同,对于直流电动机的转速有以下公式:
其中:
U—电压;
—励磁绕组电阻;
—磁通(Wb);
Cc—电势常数;Cr—转矩常量。
由上式可知,直流电机的速度控制分两种方法,有电枢控制法和磁场控制法。
比较两种方法优劣,对于磁场控制法,其控制功率较小,低速传动时易受到磁极饱和限制,而高速传动时又受到换向火花和换向器结构限制。
所以磁场控制法并不合适,电枢控制法在电机调速中是比较常用的方法。
直流电动机的基本结构直流电机的结构是多种多样的,但任何直流电机都包括定子部分和转子部分,这两部分间存在着一定大小的气隙,使电机中电路和磁场发生相对运动.直流电机定子部分主要由主磁极,电刷装置和换向极等组成,转子部分主要由电枢绕组,换向器和转轴等构成,如下图所示:
图1-1直流电机工作原理图
电枢控制即在励磁电压不变的情况下,把控制电压信号加到电机的电枢上,以控制电机的转速。
在电机调速中广泛使用,其中脉宽调制应用广泛。
脉宽调速的概念是利用一个固定的频率来控制电源的接通或断开,并通过改变一个周期内“接通”和“断开”时间的长短,即改变直流电机电枢上电压的“占空比”来改
变平均电压的大小,从而控制电动机的转速。
图1-2直流电机脉宽调制图
根据上图,当电动机始终接通电源时,电机转速最大为
,占空比为
,则电机的平均速度为:
可见只要改变占空比D,就可以得到不同的电机速度,从而实现调速。
1.3直流调速系统实现方式
PWM为主控电路的调速系统:
基于单片机类由软件来实现PWM,在PWM调速系统中占空比是一个重要参数,电源电压不变时,电枢端电压的平均值取决于占空比的大小,改变的值可以改变电枢端电压的平均值:
1、定宽调频法:
保持t1不变,只改变t,使周期也随之改变。
2、调宽调频法:
保持t不变,只改变t1,使周期或频率也随之改变。
3、定频调宽法:
保持周期T(或频率)不变,同时改变t1和t。
1和2方法在调速时改变了控制脉冲的周期或频率,当控制脉冲的频率与系统的固有频率接近时,将会引起振荡,因而不合适,用定频调宽法来改变占空比从而改变直流电动机电枢两端电压。
1.3控制程序的设计
软件采用定时中断进行设计。
当单片机上电后,系统进入准备状态。
当按动按钮后执行相应的程序,根据P1.1的高低电平决定直流电机正反转。
根据加、减速按钮,调整P1.1输出高低电平的占空比,从而可以控制高低电平的延时时间,进而控制电压的大小来决定直流电机的转速。
二系统硬件电路的设计
2.1系统总体设计框图及单片机系统的设计
本系统采用STC89C51控制输出数据,由单片机IO口产生PWM信号,送到直流电机,直流电机通过测速电路将实时转速送回单片机,进行转速显示,从而实现对电机速度和转向的控制,达到直流电机调速的目的。
具体使用器件如下:
1)9*15万用板2)51单片机3)40脚IC座4)1602液晶5)16p母座
6)16p排针7)10k电阻*38)1k电阻*59)3v直流电机10)磁铁*2
11)塑料管12)3144霍尔传感器13)4148二极管*414)8050三极管*4
15)8550三极管*216)103排阻17)104独石电容18)10uf电解电容
19)30pf瓷片电容*220)12M晶振21)按键*622)自锁开关
23)DC电源插口24)导线若干25)焊锡若干26)USB电源线
所以,直流电机调速系统总体设计框图如下所示:
图2-1系统总体设计图
2.2STC89C51单片机
STC89C51单片机由CPU和8个部件组成,它们都通过片内单一总线连接,其基本结构依然是通用CPU加上外围芯片的结构模式,但在功能单元的控制上采用了特殊功能寄存器的集中控制方法。
中央处理器CPU:
它是单片机的核心,完成运算和控制功能。
内部数据存储器:
STC89C51芯片中共有256个RAM单元,能作为存储器使用的只是前128个单元,其地址为00H—7FH。
通常说的内部数据存储器就是指这前128个单元,简称内部RAM。
内部程序存储器:
STC89C51芯片内部共有4K个单元,用于存储程序、原始数据或表格,简称内部ROM。
定时器:
STC89C51片内有2个16位的定时器,用来实现定时或者计数功能,并且以其定时或计数结果对计算机进行控制。
中断控制系统:
该芯片共有5个中断源,即外部中断2个,定时/计数中断2个和串行中断1个。
其基本组成如下图所示:
图2-2单片机的组成
2.3STC89C51单片机引脚图及其功能
图2-3单片机引脚图
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。
读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。
只有读端口时才真正地把外部的数据读入到内部总线。
上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作。
这是由硬件自动完成的,不需要我们操心,1然后再实行读引脚操作,否则就可能读入出错,为什么看上面的图,如果不对端口置1端口锁存器原来的状态有可能为0,Q端为0。
Q为1加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1,也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1。
若先执行置1操作,则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入,由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为准双向口。
89C51的P0/P1/P2/P3口作为输入时都是准双向口。
RST:
复位输入,当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
三PWM信号发生电路设计
3.1PWM的基本原理
调速采用PWM(PulseWidthModulation)脉宽调制,工作原理:
通过产生矩形波,改变占空比,以达到调整脉宽的目的。
PWM的定义:
脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。
3.2系统的硬件电路设计
电动机PWM驱动模块的电路采用H桥驱动,设计与实现具体电路见下图。
本电路采用的是基于PWM原理的驱动电路。
图3-1电动机PWM驱动模块
PWM电路由复合体管组成,两个输入端高低电平控制晶体管是否导通或截止。
NPN的三极管高电平输入时导通,PNP的三极管低电平输入时导通,当Q1和Q2都导通时,Q3和Q6截止,Q4和Q5导通,电机两端都是GND,电机是不转的,当Q1和Q2都截止时,Q3和Q6导通,Q4和Q5截止,电机两端都是VCC,电机也是不转的,那么,当Q1导通,Q2截止时,Q4和Q6导通,电机右边是电源,左边是地,电机逆时针转动,此时保持Q2截止,PWM控制Q1的导通截止,就可以控制电机的速度,同理,当Q1截止,Q2导通时,Q3和Q5导通,电机的左边是电源,右边是地,电机顺时针转动,此时保持Q1截止,PWM控制Q2的导通截止就可以控制电机的转速。
4个二极管在电路中的作用是防止晶体管产生不当反向电压,以及电机两端电流和晶体管上的电流过大保护。
3.3H桥驱动电路设计
H桥式电动机驱动电路包括4个三极管和一个电机,因为它的形状与字母H相似,故因此而得名。
如下图所示,要使电动机成功运转,须对对角线上的一对三极管通电。
据不同的三极管对的导通通电的情况,电流会从右至左或相反方向流过电机,从而改变电机的转动方向。
图3-2H桥驱动电路
因此要想使电动机运转,必须使对角线上两个三极管通电。
例如,当Q2管与Q3管导通时,电流从电源正极经Q2从左到右通过电机,再经Q3到电源的负极。
同样Q1与Q4亦是如此,由电流箭头可看,驱动电动机将顺时针转动。
图3-3H桥驱动电路驱动电机转动
四主电路设计
4.1单片机系统
经过研究以及分析可以得到调速系统的主电路设计图,如下:
图4-1主电路设计图
4.2液晶电路LCD1062
液晶部分的电路图如下图所示:
图4-2液晶电路的电路图
LCD(LiquidCrystalDisplay)是液晶显示器英文名称的缩写,液晶显示器是一种被动式的显示器,即液晶本身并不发光,而是利用液晶经过处理后能改变光线通过方向的特性,达到白底黑字或黑底白字显示的目的。
液晶显示器具有功耗低、抗干扰能力强等优点。
4.2.1LCD1602与单片机连接
LCD1602可以采用两种方式与单片机连接,一种是采用8位数据总线D0~D7,和RS、R/W、EN三个控制端口;另一种是只用D4~D7作为四位数据分两次传送。
进行LCD设计主要是LCD的控制/驱动和外界的接口设计,控制主要是通过接口与外界通信、管理内/外显示RAM,控制驱动器,分配显示数据;驱动主要是根据控制器要求,驱动LCD进行显示,控制器还常含有内部ASCII字符库,或可外扩的大容量汉字库。
单片机的P1.1与LCD1602的使能端E相连,GND与读写选择端R/W相连,P1.0与RS相连,当使能端使能时,再通过命令选择端来控制读数据,写数据,写命令,控制P0端口与LCD1602的数据端口相连,传输数据。
4.2.2LCD1602的显示与控制
LCD1602液晶模块内部的字符发生内存(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
LCD1602液晶模块内部的控制器共有11条控制指令,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置;
指令2:
光标复位,光标返回到地址00H;
指令3:
光标和显示模式设置I/D,光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效;
指令4:
显示开关控制,D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有游标,低电平表示无游标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁;
指令5:
光标或显示移位元S/C:
高电平时移动显示的文字,低电平时移动光标;
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5×7的点阵字符,高电平时显示5×10的点阵字符;
指令7:
字符发生器RAM地址设置;
指令8:
DDRAM地址设置;
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙;
指令10:
写数据;
指令11:
读数据。
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。
4.3按键电路
本设计采用按键接低的方式来读取按键,单片机初始时,因为为高电平,当按键按下的时候,会给单片机一个低电平,单片机对信号进行处理
单片机键盘有独立键盘和矩阵式键盘两种:
独立键盘每一个I/O口上只接一个按键,按键的另一端接电源或接地(一般接地),这种接法程序比较简单且系统更加稳定;而矩阵式键盘式接法程序比较复杂,但是占用的I/O少。
根据本设计的需要这里选用了独立式键盘接法。
独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。
将常开按键的一端接地,另一端接一个I/O口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。
当有键按下时,此I/O口与地短路迫使I/O口为低电平。
按键释放后,单片机内部的上拉电阻使I/O口仍然保持高电平,我们所要做的就是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。
在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。
这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。
这种抖动一般10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒的单片机而言则是慢长的。
硬件去抖动就是用部分电路对抖动部分加之处理,软件去抖动不是去掉抖动,而是避抖动部分的时间,等键盘稳定了再对其处理。
所以这里选择了软件去抖动,实现法是先查寻按键当有低电平出现时立即延时10~200毫秒以避开抖动(经典值为20毫秒),延时结束后再读一次I/O口的值,这一次的值如果为1表示低电平的时间不到10~200毫秒,视为干扰信号,当读出的值是0时则表示有按键按下,调用相应的处理程序。
硬件电路如图所示:
图4-3按键部分电路
4.4霍尔元件电路
用于测量的A44E集成霍尔开关,磁钢用直径D=6.004mm,长度为L=3.032mm的钕铁硼磁钢。
电源用直流,霍尔开关输出由四位半直流数字电压表测量,磁感应强度B用95A型集成霍尔元件测量。
图4-4霍尔片管脚以及管脚接线
4.4.1霍尔传感器测量原理
测量电机转速的第一步就是要将电机的转速表示为单片机可以识别的脉冲信号,从而进行脉冲计数。
霍尔器件作为一种转速测量系统的传感器,它有结构牢固、体积小、重量轻、寿命长、安装方便等优点,因此选用霍尔传感器检测脉冲信号,其基本的测量原理如图所示,当电机转动时,带动传感器运动,产生对应频率的脉冲信号,经过信号处理后输出到计数器或其他的脉冲计数装置,进行转速的测量。
图4-5霍尔器件测速原理
五直流电机系统程序构成
5.1主函数
voidmain()
{flag_1=0;
m=100;//占空比为100
zhuansu=0;//转速初值0
flag=0;
zheng=1;//初始化电机正转动
fan=0;
init();
while
(1)
{
keyscan();
}
}
通过主函数的设置,来带动整体程序的运行,设置转速初值,经过运行保证能让电机正常转动,再接下来进入下一程序。
5.2输入字节函数
voidwrite_com(ucharcom)//向1602写一字节(控制指令)
{
rs=0;P0=com;
delay(5);en=0;
delay(10);en=1;
}
voidwrite_data(uchardate)//向1602写一字节(数据)
{
rs=1;P0=date;
delay(5);en=0;
delay(5);en=1;
}
5.3转速显示函数
voiddisplay()
{
write_com(0x82);
zhuansu=zhuansu*30;//将两秒内的计数乘以30得到转每分
if(zhuansu/10000!
=0)
write_data(zhuansu/10000+0x30);//如果转速的万位不为0,
正常显示否则显示空格
else
write_data('');
if(zhuansu/1000==0)
write_data('');
else
write_data(zhuansu%10000%1000+0x30);//如果转速小于1000千位
为空格,否则正常显示
if(zhuansu/100==0)
write_data('');
else
write_data(zhuansu%10000%1000/100+0x30);//如果转速小于100百位
为空格,否则正常显示
if(zhuansu/10==0)
write_data('');
else
write_data(zhuansu%10000%1000%100/10+0x30);//如果转速小于10十
位为空格,否则正常显示
write_data(zhuansu%10000%1000%100%10+0x30);
write_com(0xd0);
//如果没有这句,当中断内的显示函数执行完,就会在转速的位置显示占
空比数据,导致乱码
}
5.4占空比显示函数
voiddisplaym()
{
write_com(0xcb);
if(m/200%10!
=0)
write_data(m/200%10+0x30);//如果占空比百位不为0,
显示百位否则显示空格
else
write_data('');
if(m/200%10==0&&m/20%10==0)
write_data('');
else
write_data(m/20%10+0x30);//如果占空比小于10十位正
常显示,否则显示空格
write_data(m/2%10+0x30);//显示个位
}
5.5初始化函数
voidinit()//初始化函数
{
en=0;rw=0;
write_com(0x01);//lcd初始化
write_com(0x38);//5X7显示
write_com(0x0c);//关闭光标
TMOD=0x01;//定时器方式1
TH0=0xdc;
TL0=0x00;//定时器装入初值
EA=1;//开总中断
ET0=1;//定时器0开中断
TR0=1;EX1=1;
IT1=1;//定时器启动
TH1=0xfc;
TL1=0x66;//定时100us
ET1=1;//定时器1开中断
TR1=1;
write_com(0x80);
write_data('V');
write_data(':
');
write_com(0x87);//第一行显示转速
write_data('r');write_data('p');write_data('m');write_com(0xc0);
write_data('z');write_data('h');write_data('a');write_data('n');
write_data('k');write_data('o');write_data('n');write_data('g');
write_data('b');write_data('i');//在第二行显示zha