基于LPC2124的直流电机调速系统Proteus仿真.docx

上传人:b****8 文档编号:9438199 上传时间:2023-05-19 格式:DOCX 页数:22 大小:329.75KB
下载 相关 举报
基于LPC2124的直流电机调速系统Proteus仿真.docx_第1页
第1页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第2页
第2页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第3页
第3页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第4页
第4页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第5页
第5页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第6页
第6页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第7页
第7页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第8页
第8页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第9页
第9页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第10页
第10页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第11页
第11页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第12页
第12页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第13页
第13页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第14页
第14页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第15页
第15页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第16页
第16页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第17页
第17页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第18页
第18页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第19页
第19页 / 共22页
基于LPC2124的直流电机调速系统Proteus仿真.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于LPC2124的直流电机调速系统Proteus仿真.docx

《基于LPC2124的直流电机调速系统Proteus仿真.docx》由会员分享,可在线阅读,更多相关《基于LPC2124的直流电机调速系统Proteus仿真.docx(22页珍藏版)》请在冰点文库上搜索。

基于LPC2124的直流电机调速系统Proteus仿真.docx

基于LPC2124的直流电机调速系统Proteus仿真

基于LPC2124的直流电机调速系统Proteus仿真

1直流电机、减速器及传感器选型

设计要求驱动轮式机器人,两轮的直径相同为0.1m,驱动电机选用直流电机,为了满足加速度需求,每个电机配备了减速装置,且两轮为独立驱动。

小车运行过程中自带电池,电池的供电电压为+24VDC,为满足机器人比赛需要,经需求分析可得该机器人运动控制系统的最大速度为:

5.0m/s,最大加速度为:

20m/

,控制方案采用闭环控制方案。

通过计算可知,在没有减速器的情况下,电机应达到955r/min才能实现最大转速5.0m/s,启动时间应该小于0.25s才能达到最大加速度20m/

的要求。

所以,可以选择额定电压24V,空载转速2500r/min的直流电机,采用调速比2.5的减速器,加速度要求通过软件实现。

系统要求采用闭环控制方案,本设计采用转速单闭环控制,选用旋转编码器作为测速传感器。

旋转编码器不仅精度高,而且安全稳定、维护方便,在Proteus库里有配套旋转编码器的直流电机,方便仿真。

理论上旋转编码器的光栅数越大,测速越精确,但是光栅数的增大会增加制作难度和成本,本设计只是用于轮式机器人的测速,采用光栅数1024的旋转编码器足以,同时可以采用四倍频电路提高转速分辨率。

在基于Proteus仿真的直流电机调速系统中,由于各种限制,设计并不能达到系统的具体要求,但是可以作为一个可供参考的调速模型。

2直流电机调速系统硬件设计

2.1硬件系统结构图

直流电机转速单闭环调速系统硬件结构图如图1所示

图1直流电机转速单闭环调速系统硬件结构图

2.2LPC2124简介

LPC2124是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-SCPU的微控制器,并带有256KB嵌入的高速Flash存储器。

128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行,且可使用16位Thumb模式。

LPC2124支持多种通信接口,包括UART,和SPI等串行接口以及PWM输出接口,外围接口部分设计极为方便、灵活。

2.3电机驱动芯片L298介绍

L298N是ST公司生产的一种高电压、大电流电机驱动芯片。

该芯片采用15脚封装。

主要特点是:

工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。

内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。

使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。

芯片内部结构图如图2所示。

图2L298芯片的内部结构图

L298驱动直流电机参考表1

表1L298驱动直流电机参考表

电机

旋转方式

控制端IN1

控制端IN2

控制端IN3

控制端IN4

输入PWM信号改变脉宽可调速

调速端A

调速端B

M1

正转

/

/

/

反转

/

/

/

停止

/

/

/

M2

正转

/

/

/

反转

/

/

/

停止

/

/

/

2.4直流电机调速系统Proteus仿真电路

Proteus的元件库中提供许多种类型的电机元件,从简单的直流电机到步进电机、伺服电机都有,我们选取一个带编码器的电机MOTOR-ENCODER来仿真,之所以用带编码器的,是因为我们需要用到编码器的输出信号来测量电机的转速。

MOTOR-ENCODER的编码输出与本系统所要求的增量式旋转编码具有同等功能,可提供两路路具有90○相位差的编码脉冲,利用其中任何一个可实现对转速的检测。

在MOTOR-ENCODER的属性中可设置其参数,本系统对MOTOR-ENCODER的参数设置如表2所示。

表2Motor-Encoder参数表

参数名

参数值

额定电压

24V

线圈电阻

12Ω

线圈电感

100mH

空载转速

1000rpm

负载率

10%

每转脉冲数

60

直流电机调速系统Proteus仿真电路如图2所示。

图2直流电机调速系统Proteus仿真电路

系统采用24MHz晶振提供外部时钟,LPC2124的P0.6,P0.7输出高低电平控制电机转速方向;四个二极管作为续流二极管,起保护作用;四个按键通过上拉电阻与LPC通用端口相连,按键按下,低电平有效,另外通过一个四输入与门与外部中断EINT0相连,通过外部中断方式判断是否有按键按下,四个按键分别实现电机加速、减速、反转、制动的功能。

3直流电机调速系统软件设计

3.1直流电机调速系统软件设计流程图

直流电机调速系统软件设计流程图如图3所示,中断程序如图4、图5所示。

图3调速系统软件图4按键中断图5测速中断

设流程图程序流程图程序流程图

3.2PWM模块

系统采用PWM方法调整电动机的速度,首先应确定合理的脉冲频率。

脉冲宽度一定时,频率对电机运行的平稳性有较大影响,脉冲频率高电动机运行的连续性好,但带负载能力差;脉冲频率低则反之。

调脉宽的方式有三种:

定频调宽、定宽调频和调宽调频。

我们采用了定频调宽方式,因为采用这种方式,电动机在运转时比较稳定;并且在采用LPC2124产生PWM脉冲的软件实现上比较方便。

PWM输出频率采用系统时钟频率,通过转速调节器调节PWM占空比,实现直流电机的调速驱动。

PWM初始化子程序流程如图6所示。

图6PWM初始化流程图

3.3测速模块

本系统采用T法测速,旋转编码器输出的脉冲由LPC2124的P0.28捕获,电机每转一圈旋转编码器输出60个脉冲,每捕获一个编码器输出脉冲,则进入中断读取定时器的值,计算测速时间,通过公式(1-2)计算转速

(1-1)

T法测速原理如图7所示。

图7T法测速原理图

定时器0初始化流程图如图8所示。

图8定时器0初始化流程图

3.4数字PI调节器模块

在微机数字控制系统中,当采样频率足够高时,可以先按模拟系统的设计方法设计调节器,然后再离散化,就可以得到数字控制器的算法,这就是模拟调节器的数字化。

当输入时误差函数e(t)、输出函数是u(t)时,PI调节器的传递函数如下:

(1-2)

式中:

Kpi为PI调节器比例部分的放大系数;

t为PI调节器的积分时间常数。

式子(1-2)的时域表达式可写成:

(1-3)

其中,

为比例系数,

1/t为积分系数。

将上式离散化成差分方程,其第k拍输出为:

(1-4)

其中,

为采样周期。

式(1-4)表述的差分方程为位置式算法,u(k)为第k拍的输出值。

由式子看出,比例部分只与当前的偏差有关,而积分部分则是系统过去所有偏差的累积。

位置式PI调节器的结构清晰,P和I两部分作用分明,参数调整简单明了。

为了安全起见,常须对调节器的输出实行限幅。

在数字控制算法中,要对u限幅,只须在程序内设置限幅值um,当u(k)>um时,便以限幅值um作为输出。

而位置式算法必须要同时设积分限幅和输出限幅。

带有积分限幅和输出限幅的位置式数字PI调节程序框图如图9所示。

图9位置式数字PI调节流程图

本系统只采用了P调节器,即令PI参数为零,经过仿真发现系统可以较稳定地运行。

3.5直流电机制动

直流电机要达到快速制动,必须采用反压制动方式,所以制动过程采用另外独立的程序设计。

因为原先采用统一的调速程序发现,制动过程反转超调后就向反方向加速,导致系统不稳定。

采用独立的程序设计实现电机逐级制动,随转速降低减小PI参数,最后置高P0.6、P0.7,保证超调也不会反转加速。

4直流电机调速系统Proteus仿真结果

本系统采用简单的按键操作,实现电机的加速、减速、制动、反转功能,由于时间仓促,在判断按键过程,我们只考虑了只有一个按键按下的情况。

本系统各按键的共能如下

1加速键用于电机加速,每按一次电机转速增加10r/min。

2减速键用于电机减速,每按一次电机转速减小10r/min。

3制动键用于电机制动,停止电机旋转。

4反转键用于电机反转,每按一次电机反转。

按键仿真图如图10所示。

图10按键仿真图

当连接好仿真图和载入LPC2124的执行文件后,单击Proteus的仿真启动按钮,则开始对本系统的仿真。

其运行流程如下:

(1)按20次加速键让电机启动正转,达到200r/min,所需时间大致在1.3s左右,如图11所示。

图11加速正转

(2)按一次减速键,电机转速减小10r/min,到达190r/min,如图12所示。

图12减速

(3)按一次反转按键,电机反转,到达-190r/min,如图13所示。

图13反转

(4)按一次制动键,电机制动,转速较大时,电机可以快速制动到接近零,之后缓慢减速,如图14所示。

图14制动

经过仿真调试,发现系统可以实现基本的调速功能,并且可以较快速地启动,系统具有较好的稳定性,误差范围在

5结束语

本设计采用ARM7LPC2124及外部扩展设备实现对直流电机的转速监控,在硬件上采用了基于PWM技术的H型桥式驱动电路,解决了电机驱动的效率问题,在软件上也采用较为合理的系统结构及算法,提高了ARM的使用效率。

以往的数字化直流调速系统中转速常用测速发电机来检测,这种测速方法的精度不够高,在低速时更为严重,很难保障生产的高效、安全运行,所以在本次设计中测速采用了目前较先进的旋转编码器测速,即数字测速。

数字测速不仅精度高,而且安全稳定、维护方便。

本系统的直流调速系统采用单闭环P调节器控制。

用软件编程完成转速驱动,转速检测,实现了对转速的最优化调节。

同时还实现了转速的按键输入控制。

通过本次设计,加强了我对ARM应用知识的掌握,同时了解了目前工业生产中数字化系统的重要性,使我对使用ARM实现自动化控制的设计过程有了全面地了解。

通过学习控制系统工作原理以及如何利用ARM实现各种功能,我查阅了大量相关资料,学会了许多知识,培养了我独立解决问题的能力。

同时在对硬件电路设计的过程中,巩固了我的专业课知识,使自己受益匪浅。

当然在本次设计中还有需要完善的地方,比如可以增加一个显示模块,显示系统运行的状态,还可以改善调节器,采用PID调节器使转速稳定无超调,另外还可以改善按键输入为数字键盘输入,这样可以给定具体的转速。

总之,通过本次设计不仅进一步强化了专业知识,还掌握了设计系统的方法、步骤等,为今后的工作和学习打下了坚实的基础。

由于时间仓促,本论文中或多或少会存在一些缺点,所设计的软件难免存在一些不足,恳请老师批评和指正。

 

附录基于LPC2124的直流电机调速系统源代码

/******************************************************************************

*File:

Main.c

*功能:

使用PWM6输出PWM信号,通过KEY1,KEY2,KEY3控制电机转速,KEY1按一次加速10r/min,KEY2按一下减速10r/min,KEY3按一下制动,KEY4按一下反转

******************************************************************************/

#include"LPC21xx.h"

typedefunsignedintuint32;

typedefintint32;

#definepwmdata240000/*PWM周期*/

#definef01000000/*计数器频率*/

#defineZ60/*电机每转一圈产生Z个脉冲*/

#definekp0.1/*PI调节器比例系数*/

#defineki0/*PI调节器积分系数*/

#defineKEY0x0b800000/*P0.23,P0.24,P0.25,P0.27引脚连有按键*/

#defineKEY10x00800000/*P0.23引脚连接KEY1*/

#defineKEY20x01000000/*P0.24引脚连接KEY2*/

#defineKEY30x02000000/*P0.25引脚连接KEY3*/

#defineKEY40x08000000/*P0.27引脚连接KEY4*/

uint32t1=0,t2=0,i=0;

uint32flag=0;/*制动标志,flag=1转速接近0*/

uint32fv=0;/*正反转标志,fv=0正转,fv=1反转*/

int32nu=0,n=0;/*nu给定转速,n检测转速*/

__irqvoidIRQ_T0(void)

{

t2=T0CR2;//读取捕获寄存器

T0CR2=0;//捕获寄存器清零

if(t1

elseif(t1>t2)n=1.236*60*f0/(Z*(t2-t1+f0));//1.236为修正系数

t1=t2;

T0IR=0x40;//清除捕捉0中断标志(向6位写1)

VICVectAddr=0x00;//中断结束

}

__irqvoidIRQ_EINT0(void)

{

uint32i;

IOCLR0=0x00000001;

for(i=0;i<50;i++);//延时去抖

if((IOPIN0&KEY)!

=KEY)

if((IOPIN0&KEY1)==0)//KEY1按键按下,加速

{

flag=0;

if(nu>=0)nu+=10;

elsenu-=10;

}

elseif((IOPIN0&KEY2)==0)//KEY2按键按下,减速

{

if(nu>10)nu-=10;

elseif(nu<-10)nu+=10;

elsenu=0;

}

elseif((IOPIN0&KEY3)==0){nu=0;}//KEY3按键按下,制动

elseif((IOPIN0&KEY4)==0)//KEY4按键按下,反转

{

if(fv==0)fv=1;

elsefv=0;

nu=-nu;

}

while((IOPIN0&KEY)!

=KEY);//等待按键放开

EXTINT=0x01;//清楚EINT0中断标志

VICVectAddr=0x00;//中断结束

}

voidTargetInit(void)

{

/*管脚配置初始化*/

PINSEL0=0x00080000;//设置PWM6连接到P0.9引脚

PINSEL1=0x02000000;//P0.28捕捉

IODIR0=0x000002c0;//P0.6,P0.7,P0.9输出

/*PWM初始化*/

PWMPR=0x00;//不分频,计数频率为Fpclk

PWMMCR=0x02;//设置PWMMR0匹配时复位PWMTC

PWMMR0=pwmdata;//设置PWM周期

PWMMR6=120000;//设置PWM占空比

PWMLER=0x40;//PWMMR6锁存

PWMPCR=0x4000;//允许PWM6输出,单边PWM

PWMTCR=0x09;//启动定时器,PWM使能

/*EINT0中断初始化*/

PINSEL1=(PINSEL1&0xfffffffc)|0x01;//选择P0.16为EINT0

EXTMODE=EXTMODE&0x0e;//电平触发

EXTPOLAR=EXTPOLAR&0x0e;//低电平中断

/*定时器0初始化*/

T0TC=0;//清除T0计数值

T0PR=23;//24分频(24MHZ分频后变成1MHZ)

T0MR0=1000000;//计数匹配值

T0CCR=0x0140;//第七位写1进入捕捉模式(上升沿捕捉,进入中断)

T0MCR=0x00000002;//匹配后复位T0(不停止)

T0TCR=0x00000002;//复位计数器

T0TCR=0x00000001;//计数器使能

/*中断向量初始化*/

VICIntSelect=0x00000000;//中断向量寄存器选择0,IRQ中断

VICVectCntl0=0x20|4;//定时器0中断分配为向量IRQ通道0

VICVectAddr0=(uint32)IRQ_T0;//向量IRQ通道0的中断服务程序地址为IRQ_T0

VICVectCntl1=0x20|14;//EINT0中断分配为向量IRQ通道1

VICVectAddr1=(uint32)IRQ_EINT0;//向量IRQ通道1的中断服务程序地址为IRQ_EINT0

VICIntEnable=(1<<4)|(1<<14);//定时器0和EINT0中断使能

EXTINT=0x07;//清楚外部中断标志

}

/******************************************************************************

*名称:

main()

*功能:

使用PWM6输出占空比可调的PWM波形,控制直流电机

******************************************************************************/

intmain(void)

{

floatPI=0,sum=0;

int32es=0;

TargetInit();

while

(1)

{

if(nu==0)//制动

if(fv==0)//如果正转

if(n>50)PI=-0.8;

elseif(n>20)PI=-0.5;

elseif(n>10)PI=-0.3;

elseif(n>3)PI=-0.1;

else{PI=0;flag=1;}

else//如果反转

if(n>50)PI=0.8;

elseif(n>20)PI=0.5;

elseif(n>10)PI=0.3;

elseif(n>3)PI=0.1;

else{PI=0;flag=1;}

else

{

if(nu>0)es=nu-n;

elsees=nu+n;

sum=sum+es;

PI=kp*es+ki*sum;

if(PI>0.8)PI=0.8;//过饱和保护

if(PI<-0.8)PI=-0.8;

}

if(flag==1)

{IOSET0=0x000000c0;}

else

if(PI>0)

{

IOSET0=0x00000040;//设置P0.6高电平,P0.7低电平

IOCLR0=0x00000080;//正转

PWMMR0=pwmdata;

PWMMR6=pwmdata*PI;//设置PWM占空比

PWMLER=0x40;//PWMMR6锁存,更新PWM占空比

}

elseif(PI<0)

{

IOCLR0=0x00000040;//设置P0.6低电平,P0.7高电平

IOSET0=0x00000080;//反转

PWMMR0=pwmdata;

PWMMR6=pwmdata*(-PI);//设置PWM占空比

PWMLER=0x40;//PWMMR6锁存,更新PWM占空比

}

}

//return(0);

}

参考文献

[1]杨旭强、吴红星、金钊编著,基于ARM的电动机控制技术[M].北京:

中国电力出版社,2008.

[2]周立功主编,ARM嵌入式系统基础教程(第2版)[M].北京:

北京航天航空大学出版社,2008.9.

[3]周润景、袁伟亭、景晓松编著,Proteus在MCS-51&ARM7系统中的应用百例[M].北京:

电子工业出版社,2006..10.

[4]陈伯时主编,电力拖动自动控制系统——运动控制系统[M].北京:

机械工业出版社,2003.7.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2