基于MSP430单片机的电机调速系统Word格式文档下载.docx
- 文档编号:17128209
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:42
- 大小:177.11KB
基于MSP430单片机的电机调速系统Word格式文档下载.docx
《基于MSP430单片机的电机调速系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于MSP430单片机的电机调速系统Word格式文档下载.docx(42页珍藏版)》请在冰豆网上搜索。
本文主要研究了基于MSP430单片机的电机调速系统,通过键盘输入电机需达到的速度,并提供两种可选的输出模式即波形的静、动态显示,然后通过PID算法调节单片机输出的PWM波,从而使电机达到之前输入的预设速度,并将波形及预设速度和当前速度在LCD12864上显示出来,在测速方面采用市场上比价常见的霍尔传感器A44E,由单片机记录电机动时由小磁铁靠进传感器时产生的脉冲数,从而达到测速的目的,由于在PID算法中采用遇限削弱积分法,系统稳定性较好,具有较强的实用性。
关键词:
msp430、PID、霍尔元件、LCD12864
Abstract
ThisarticlemainlystudiedthemotorspeedsystemsbasedonMSP430,Throughthekeyboardinputthespeedwhichittakestoreach,Andprovidetwooptionaloutputmodesofstaticanddynamicwaveformtodisplay.Inordertoreachthespeedwhichhasbeeninputed,wetakethePIDalgorithmtocontrolthePWM,thendisplaythewave、inputandoutputontheLCD12864.Onthespeedmeasurement,wetaketheA44Ewhichisverycommoninthemarket.theninordertomeasurementthespeed,wecountthepulsewhichisproducewhenSmallmagnetsdependintosensor.BecauseinthePIDalgorithmweusetheencounterlimitweakenintegralmethod,thesystemstabilityisgood,hasthestrongerpracticability
Keywords:
msp430、PID、HallSensor、LCD12864
1前言
MSP430系列超低功耗单片机是TI公司于1996年开始推出的超低功耗16位单片机,凭借其自身优良的性能、方便灵活的开发方式、丰富的技术资料和应用案例,使得MSP430在国内得到非常广泛的应用。
PID调节是连续系统中技术最成熟、应用最为广泛的一个调节方式。
其实质就是根据输入的偏差值,按比例、积分、微分的函数关系进行运算,其运算结果用以输出控制。
实际应用中,根据被控对象的特性和控制要求,可灵活的改变PID结构,以充分发挥计算机的作用。
2系统框图
设计之前先画出系统的整个结构框架,以便于后面设计电路板和写程序。
图一系统结构图
3方案选择与比较
3.1LCD显示模块
采用LCD1602显示,由单片机的总线模式连接。
1602可以显示两行,每行可以显示16个字符,操作简单,控制容易。
采用LCD12864显示,12864具有四行显示,每行可以显示8个汉字16个字符,操作相对1602复杂一些,指令较多,但是基本原理是一致的。
通过对方案一和方案二的分析,以及结合本设计的要求,我们要求显示汉字和动态曲线图,所以我们选用12864液晶。
3.2测速模块
利用红外线对射方式和反射方式,在电机的转轴上安装一个塑料圆盘,再在圆盘上开一些小孔,通过记录脉冲数来记录圆盘转过的圈数,从而测出电机的转速。
但无论是反射式红外传感器还是对射式红外传感器,他们对都对外围环境要求较高,易受外部环境的影响,稳定性不高,且价格较为昂贵。
霍尔元件具有体积小,频率响应宽度大,动态特性好,对外围电路要求简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便。
利用霍尔元件来对转过的塑料圆盘圈数来计数,在塑料圆盘边上贴两个磁铁,通过记录脉冲数来记录圆盘转过的圈数,从而测出电机的转速。
试验期间发现用红外对管较之霍尔检测电路实现同一功能,电路复杂,调试不稳定,不如霍尔元件使用灵活,只要调整好磁钢和霍尔开关的距离就能完成检测任务,故选用了霍尔元件测速。
综合多方面因素决定选用方案2,其原理图接线如图二所示:
图二霍尔传感器
3.3电机驱动模块
采用传统的功率三极管作为功率放大器的输出控制直流电机。
线性型驱动的电路结构和原理简单,成本低,加速能力强。
其原理图连接如图三所示。
图三电机驱动
采用专用芯片L298N作为电机驱动芯片。
L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。
用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
且由L298N结合单片机可实现对小车速度的精确控制。
这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。
采用由双极性管组成的H桥电路。
用单片机控制晶体管使之工作在占空比可调的开关状态,精确调整电机转速。
这种电路由于工作在管子的饱和截止模式下,效率非常高;
H桥电路保证了可以简单地实现转速和方向的控制;
电子开关的速度很快,稳定性也很高,是一种广泛采用的调速技术。
本系统电机是空转,不要求严格的负载驱动,在加上成本的高低和经济承受能力,我们选择方案一。
4系统的具体设计与实现
4.1LCD显示
在液晶界面上显示设定转速和电机的当前速度,并绘制PID调速过程中的速度波动曲线图。
4.2测速
在电机的转轴上安装一个塑料圆盘,在圆盘的边上对称的贴两个磁铁,霍尔元件安装在电路板上,当磁铁垂直接触霍尔元件时产生低电平,通过msp430的P1口某一引脚中断计数,用定时器A计时间。
这样在规定的时间内记录脉冲数从而计算出电机一定时间的转速。
4.3驱动
通过msp430的P4.1引脚输出pwm波形,控制三极管的导通,从而达到控制电机的转速的目的。
4.4控速方案设计
在模拟系统中,PID算法的表达式为:
式中,
—调节器的输出信号
—调节器的偏差信号,它等于测量值与给定值之差
—调节器的比例系数
—调节器的积分时间
—调节器的微分时间
在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。
它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;
而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。
PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活(PI、PD、…)。
PID调节器个校正环节的作用:
(1)比例环节:
即时成比例的反应控制系统的偏差信号e(t),偏差一旦产生,
调节器立即产生控制作用以减少偏差。
(2)积分环节:
主要用于消除误差,以提高系统无差度。
积分作用的强弱取决于积分时间,积分作用越弱,反之越强。
(3)微分环节:
能反映偏差的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个早期的有效修正信号,从而加快系统的动作速度,减少调节时间。
将模拟信号
、
在第n次采样的数据分别用
表示,于是有
从而可以推导出数字PID算法:
将此式代入程序中调节好
这三个参数,从而调节PWM使电机转速达到设定值。
在实际应用中数字PID算法的积分项可能会引起饱和现象,导致带幅度的超调,是系统那个不稳定。
为了消除饱和积分的影响,我们采用遇限削弱积分法:
一旦控制量进入饱和区,则停止进行增大积分的运算。
4.5键盘输入
采用4×
4矩阵键盘。
用msp430单片的P2口中断来扫描键盘,当有键按下时产生中断,在中断内处理键值,每按一次记录一个数,将设定的转速记录下来,传给PID函数进行计算和控制。
5原理图与PCB图
5.1msp430最小系统原理图
图四MSP430F149最小系统图
5.2其他模块原理图
图五电源接口及稳压电路
图六IO扩展电路及外部设备电源供给
6程序框图和系统程序
6.1程序流程图
图七PID算法流程图
图八键盘输入流程图
图八系统流程图
6.2系统程序
将各个模块程序整理如下。
程序一:
键盘输入检测文件
#include<
msp430x14x.h>
#include"
subfuncs.h"
#defineuintunsignedint
#defineucharunsignedchar
#defineSCAN_OUTP2OUT//4×
4键盘扫描端口,低4位是列线,高4位是行线
#defineSCAN_INP2IN//采用逐列扫描的方法,无按键时,低4位输出1,高4位输出0//当有按键时,高4位输出扫描电位,低4位输入扫描结果
constucharuca_RowScan[4]={0x7F,0xBF,0xDF,0xEF};
//列线扫描电压,分为第1,2,3,4根列线
uchark;
voidclear_row(ucharrow)
{
uchari=0;
Write_Cmd(row);
//显示地址
for(i=0;
i<
8;
i++)
Write_Data(0x20);
//写入十六个空格
//显示地址
}
voidInit_Keypad(void)
{
P2DIR|=0xF0;
//P2.0~P2.3设置为输入状态,P2.4~P2.7设置为输出状态
P2OUT=0x00;
//P2.4~P2.7输出低电平
/*********************************
Scankey键盘扫描函数
返回值0~9代表数值0~9
10代表删除光标左边一位
11代表确定键
12表示输入错误
*****************************/
uintucKeyScan(void)
ucharucTemp=0;
//扫描状态暂存
ucharucRow=0,ucLine=0;
//行号,列号
ucharkey=0;
//返回键值
uintspeed1=0;
Init_Keypad();
while
(1)
{
while((P2IN&
0x0F)==0x0f)//等待按键按下s
//Delay_Nms(5);
}
for(ucRow=0;
ucRow<
4;
ucRow++)//列扫描
P2OUT=uca_RowScan[ucRow];
//输出扫描电位
ucTemp=P2IN&
0x0F;
Delay_Nms(20);
if(ucTemp!
=0x0F)
{//判断该列是否有按键按下
Delay_Nms(15);
if(ucTemp==(P2IN&
0x0F))
switch(ucTemp)//如果有,则判断行号
case0x0E:
ucLine=1;
break;
case0x0D:
ucLine=2;
case0x0B:
ucLine=3;
case0x07:
ucLine=4;
default:
ucLine=5;
}
0x0F)!
=0x0f)//等待按键放开
Delay_Nms(25);
Delay_Nms(5);
/******判断键值******/
switch(ucLine+(ucRow+1)*10)
case11:
key=1;
case12:
key=2;
case13:
key=3;
case14:
key=12;
case21:
key=4;
case22:
key=5;
case23:
key=6;
case24:
case31:
key=7;
case32:
key=8;
case33:
key=9;
case34:
case41:
case42:
key=0;
case43:
key=11;
case44:
key=10;
if(key==12)
elseif(key==10)
i=0;
returnspeed1;
elseif(key==11)
clear_row(0x84);
else
{if(i==0)
i=1;
Write_Data(0x30+key);
speed1=speed1*10+key;
ucharselc_mode()//模式选择函数
//返回键值
{//判断该列是否有按键按下
if(key==1)
clear_row(0x94);
k=key;
elseif(key==2)
k=key;
returnk;
程序二:
LCD12864显示文件
voidDelay_1ms(void);
voidDelay_Nms(uintn);
voidWrite_Cmd(ucharcod);
voidWrite_Data(uchardat);
voidIni_Lcd(void);
voidDisp_HZ(ucharaddr,constuchar*pt,ucharnum);
voidDisp_ND(ucharaddr,uintthickness);
voidDraw_TX(ucharYaddr,ucharXaddr);
voidDraw_PM(constuchar*ptr);
voiddisplay(ucharadd,uintcont);
voiddisplay_str(uchar*str);
voidClear_GDRAM(void);
ucharRead_Data();
voiddis_line(ucharyaddr);
voiddis_lin(ucharystar,ucharxstar,ucharyend,ucharxend);
#include<
typedefunsignedcharuchar;
typedefunsignedintuint;
#defineLCD_DataInP5DIR=0x00//数据口方向设置为输入
#defineLCD_DataOutP5DIR=0xff//数据口方向设置为输出
#defineLCD2MCU_DataP5IN
#defineMCU2LCD_DataP5OUT
#defineLCD_CMDOutP3DIR|=0x07//P3口的低三位设置为输出
#defineLCD_RS_HP3OUT|=BIT0//P3.0
#defineLCD_RS_LP3OUT&
=~BIT0//P3.0
#defineLCD_RW_HP3OUT|=BIT1//P3.1
#defineLCD_RW_LP3OUT&
=~BIT1//P3.1
#defineLCD_EN_HP3OUT|=BIT2//P3.2
#defineLCD_EN_LP3OUT&
=~BIT2//P3.2
voidDelay_1ms(void)
uchari;
for(i=150;
i>
0;
i--)_NOP();
}
voidDelay_Nms(uintn)
uinti;
for(i=n;
i--)Delay_1ms();
voidWrite_Cmd(ucharcmd)
ucharlcdtemp=0;
LCD_RS_L;
LCD_RW_H;
LCD_DataIn;
do//判忙
{
LCD_EN_H;
_NOP();
lcdtemp=LCD2MCU_Data;
LCD_EN_L;
while(lcdtemp&
0x80);
LCD_DataOut;
LCD_RW_L;
MCU2LCD_Data=cmd;
_NOP();
LCD_EN_L;
voidWrite_Data(uchardat)
lcdtemp=LCD2MCU_Data;
LCD_RS_H;
MCU2LCD_Data=dat;
voidIni_Lcd(void)
LCD_CMDOut;
//液晶控制端口设置为输出
Delay_Nms(500);
Write_Cmd(0x30);
//基本指令集
Delay_1ms();
Write_Cmd(0x02);
//地址归位
Write_Cmd(0x0c);
//整体显示打开,游标关闭
Write_Cmd(0x01);
//清除显示
Write_Cmd(0x06);
//游标右移
Write_Cmd(0x80);
//设定显示的起始地址
voidDisp_HZ(ucharaddr,constuchar*pt,ucha
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MSP430 单片机 电机 调速 系统