飞思卡尔++XS128实现电机控制加减速正反转

重庆工商大学“飞思卡尔杯”智能汽车校内竞赛报告

(题目基于MC9S12XS128MAA单片机的直流电机驱动系统的控制设

计)

参赛队员:

学院:计信班级:自动化2 学号:2010133234 姓名:姜鹏电话:150********

日期:2012年11月 17日

摘要:本文以重庆工商大学“飞思卡尔杯”智能汽车校内选拔竞赛为背景,根据比赛相关要求,提出了基于MC9S12XS128MAA单片机的智能车直流电机驱动控制系统的设计方案,并阐述了选单片机的功能和指令系统特点以及所选外围硬件的功能和应用方法。通过所设计的电路图,设计出程序流程图并在此基础上通过开发软Code Warrio编程实现MC9S12XS128MAA单片机对智能车驱动电机控制并实现所选题目要求的相关功能。

关键词:单片机 H电机驱动脉冲宽度调制(PWM)智能车控制

前言:教育部为了加强大学生实践、创新能力和团队精神的培养,在已举办全国大学生“飞思卡尔”只能能车大赛;积极参加加第八届“飞思卡尔”杯全国大学生智能汽车竞赛重庆工商大学校内选拔赛。在本次比赛中经过学习,查阅相关资料,本文以研究“智能车驱动电机控制”为题展开,以MC9S12XS128MAA单片机结合H桥电机驱动电路进行驱动电机控制并实现小车电机在单片机上电5s后启动,先高速正向转动5s,然后慢速正向转动3s后停止转动5s,然后反向高速转动5s,再反向慢速转动3s,再高速正向转动5s后制动停止转动的功能。

1、飞思卡尔MC9S12XS128MAA单片机的功能特点和指令系统特点

MCS12XS128MAA是高性能16位单片机,具有速度快、功能强、成本低、功耗低等特点。基于MC9S12XS128MAA单片机的直流电机驱动系统的控制设计,我们以 PWM模块和ECT/Timer自由定时模块为例。

小车的速度快慢通过调节电压大小来控制,正转反转通过控制电流方向来控制,MC9S12XS128B 实现 PWM 斩波控制电压和控制电流方向。该模块功能特点:PWM有8个输出通道,每一个输出通道都可以独立的进行输出,每一个通道的PWM输出使能都可以由编程来控制。每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。每一个PWM输出通道都能调制出占空比从0—100%变化的波形。其指令特点为:1、禁止 PWME每一个PWM 的输出通道都有一

个使能位 PWMEx。它是用来启动和关闭波形输出;2、选择时钟PWMPRCLK,PWMSCLA,PWMSCLB,PWMCLK。 3、选择极性 PWMPOL选择是在高电平时翻转,还是在低电平时翻转。4、选择对齐模式PWMCAE包含8个控制位来对每个PWM通道设置左对齐输出或居中对齐输出。5、对占空比和周期编程 PWMDTYx,PWMPERx。

智能车电机运作时间控制基于MC9S12XS128定时器模块来解决。其特点是:1个16位自由运行计数器,8个16位输入捕捉/输出比较通道通过捕获自由运行计数器的计数值来检测外部事件和记录选定的输入信号跳变边沿的时间。1个16位脉冲累加器,模块时钟输入具有7位预分频器,8个输入捕捉通道带有边沿检测器,8个输出比较通道的输出极性可选择,16位脉冲累加器带有边沿检测器.其指令特点:1,TEN是定时器允许位。TEN=1时,允许定时器工作,TEN=0时,禁止定时器工作。其余不常用,设为0即可。2,TOI是定时器溢出中断允许位。这个在输入捕捉中没用到,设为0即可。TCRE是定时器计数寄存器复位允许位。用在输出比较中,允许输出比较寄存器7的事件来复位定时器计数寄存器。这里设为0即可。3,TSWAI:等待模式下TIM模块停止位,TSFRZ:冻结模式下定时器和模数计数器停止位。4,TOI:定时器溢出中断允许位,TCRE:定时器计数器复位允许,TOF:主定时器溢出标志。

2、开发软件Code Warrior的试用心得

CodeWarrior4.7是Freescale公司一套比较著名的软件集成开发环境(IDE),具有直观,易用的优点。CodeWarrior 4.7 IDE支持深入的C语言和汇编语言调试:启动/停步、单步、设置跟踪触发器、校验/修改存储器和C变量、结构与阵列、以及执行其他的仿真功能。它包括项目管理,代码生成,语法敏感编辑器等,具有快速下载的特点。CodeWarrior4.7具有在线调试,单步运行程序的功能,同时能够观察到主程序中定义的所有的变量的值。这一功能在进行程序错误检查和改正时起到了至关重要的作用。首先我打开CodeWarrior,点击Create New Project开始创建工程,单击File菜单下的New Project也可开始创建工程。随后选择芯片,即MC9S12X128旁边是你选择默认的下载方式,我们选TBDML。单击下一步,将工程名Project改成自己要命名的工程名,单击选择工程文件放置的位置。左边默认选择C语言。此时单击完成可创建完成一个空的工程;也可以单击下一步添加代码文件,添加完文件后可单击完成工程的创建,也可单击下一步进行更多的工程设置,基本选择默认。单击File

目录下的“New Text File”选项新建一个文件,单击工具栏的保存图标,选择保存文件的位置(一般放在工程下的Source文件夹下),并修改文件名为.c或者以.h结尾

的名字(.c或者.h不能丢),单击保存,此时在工程左边并不会看到刚新建的文件。接着单击菜单栏的可以选择第一项直接将刚新建的文件添加进工程(此时必须保证当前打开的文件是要添加的文件),编译源文件单击图标。

3、所选题目的程序流程图和源程序

3.1.源程序如下:

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions*/

unsigned int flag=0;

//-----时钟初始化程序--------//

void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)

{ //锁相环时钟=2*16*(7+1)/(3+1)=64MHz

REFDV=3; //busclock=64/2=32MHz

SYNR=7;

while(!(CRGFLG&0x08));

CLKSEL=0x80; //选定锁相环时钟

}

//-----PWM初始化程序------//

void PWM_Init(void)

{ PWME = 0x00; //pwm禁止

PWMCLK = 0xff; //时钟源选择SA,SB

PWMPRCLK = 0x22; // clockA=clockB=busclock/4=32/4=8MHz

PWMSCLA = 0x04; //clockSA=clockA/(2*PWMSCLA)=8/8=1MHz

PWMSCLB = 0x04; //clockSB=clockB/(2*PWMSCLB)=8/8=1MHz

PWMCAE = 0x00; // 左对齐模式

PWMPOL = 0xff; //正极性脉冲

PWMPER3 = 40; //PWM周期=通道时钟周期*PWMPER3

//PWM3口计数周期寄存器(0.04ms)

PWMDTY3 = 38; //输出高电平时间1.4ms

PWMPER4 = 40; //PWM4口0.04ms,25KHz

PWMDTY4 = 38; //

PWME= 0x18; //输出PWM3和pwm4

}

//-----主程序------//

void main(void)

{

PLL_Init();

PWM_Init();

EnableInterrupts;

for(;;) {

_FEED_COP(); /*feeds the dog*/

} /*loop forever*/

} /*please make sure that you never leave main*/ void interrupt 66 PIT0(void)

{flag++;

PITTF_PTF0=1; //清中断标志位

if(flag==500)

{PWME = 0x00;

PWMDTY3=0;

PWMDTY4=0;}

if(flag==1000)

{PWMDTY3=40;

PWMDTY4=0;

PWME = 0x18;}

if(flag==1300)

{ PWMDTY3=20;

PWMDTY4=0;

PWME = 0x18;//看看有必要没有

}

if(flag==1800)

{PWME = 0x00;

PWMDTY3=0;

PWMDTY4=0; }

if(flag==2300)

{PWME=0x18; // 详实

PWMDTY3=0;

PWMDTY4=40; }

if(flag==2600)

{ PWME=0x18; //

PWMDTY3=0;

PWMDTY4=20; }

if(flag==3100)

{PWME=0x18; //

PWMDTY3=40;

PWMDTY4=0; }

if(flag==3200)

{

PWME = 0x00;

flag=0;

}

}

3.2.程序流程图如下:

程序入口

变量初始化

设置总线频率

PWM模块初始化

4、所选题目的外围硬件的功能及应用方法

1.在本方案中,考虑到飞思卡尔MC9S12XS128MAA单片机正常工作的额定电压为5V,并且为了延长电池的使用寿命同时减小电压波动对单片机工作产生干扰,故选用TPS7350组成一个低压差稳压器(电路图见)对单片机进行供电,以实现单片机正常的工作。

2.对于智能车的驱动芯片,我们选用BTS7960。

BTS7960是集成的大电流半桥驱动,其内部包含了一片NMOS、一片PMOS和一片半桥门集驱动。BTS7960的芯片内部为一个半桥。INH引脚为高电平,使能BTS7960。IN 引脚用于确定哪个MOSFET导通。IN=1且INH=1时,高边MOSFET导通,OUT引脚输出高电平;IN=0且INH=1时,低边MOSFET导通,OUT引脚输出低电平。SR引脚外接电阻的大小,可以调节MOS管导通和关断的时间,具有防电磁干扰的功能。IS引脚是电流检测输出引脚。其输入信号为标准的TTL电平,直接与单片机相连就可以,降低系统的不稳定因素。用两片BTS7960即可构成全桥(H型)驱动电路,控制电机的正反转。

H型桥式驱动电路

直流电机驱动电路使用最广泛的就是H型全桥式电路,这种驱动电路可以很方便实现直流电机的四象限运行,分别对应正转、正转制动、反转、反转制动。它的基本原理图如图所示。

全桥式驱动电路的4只开关管都工作在斩波状态,S1、S2为一组,S3、S4为另一组,两组的状态互补,一组导通则另一组必须关断。当S1、S2导通时,S3、S4关断,电机两端加正向电压,可以实现电机的正转或反转制动;当S3、S4导通时,S1、S1关断,电机两端为反向电压,电机反转或正转制动。在小车动作的过程中,我们要不

断地使电机在四个象限之间切换,即在正转和反转之间切换,也就是在S1、S2导通且S3、S4关断,到S1、S2关断且S3、S4导通,这两种状态之间转换。

全桥式驱动电路的4只开关管都工作在斩波状态,S1、S2为一组,S3、S4为另一组,两组的状态互补,一组导通则另一组必须关断。当S1、S2导通时,S3、S4关断,电机两端加正向电压,可以实现电机的正转或反转制动;当S3、S4导通时,S1、S2关断,电机两端为反向电压,电机反转或正转制动。在小车动作的过程中,我们要不断地使电机在四个象限之间切换,即在正转和反转之间切换,也就是在S1、S2导通且S3、S4关断,到S1、S2关断且S3、S4导通,这两种状态之间转换。在这种情况下,理论上要求两组控制信号完全互补,但是,由于实际的开关器件都存在

BTS7960全桥驱动示意图

电源输入5-25V

最大驱动电流43A

驱动类型MOSFET

控制电源5V

过压,过流,过温,短路保护是

内阻7+9毫欧

频率输入0-25KHz

BTS7960全桥驱动参数表

MC9S12XS128 实现 PWM 斩波控制电压

脉冲宽度调制(PWM)

PWM一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。PWM控制是对脉冲的宽度进行调制的技术,即通过对一系列脉冲的宽度进行调解,来有效的获得所需要的波形。基于PWM控制的调速电路是把直流电压“斩”成一系列脉冲,改变脉冲的占空比来获得所需的输出电压改变脉冲的占空比就是对脉冲宽度进行调制,只是因为输入电压和所需要的输出电压都是直流电压,因此脉冲既是等幅的,也是等宽的,仅仅是对脉冲的占空比进行控制。在PWM驱动控制的调速系统中,通过改变电机电枢电压接通时间与通电周期的比值(即占空比)来控制电机的转速。用脉宽调制的方法,把恒定的直流电源电压调制成频率一定、宽度可变的脉冲电压序列,从而改变平均输出电压的大小,以调节电机转速。

PWM 占空比计算和极性寄存器 PWMPOL 有关,当 PPOLx=0时,占空比=(周期寄存器值减去占空比寄存器值)除以周期寄存器值;当 PPOLx=1 时,占空比=占空比寄存器值除以周期寄存器值。向IN1和IN2输送PWM波来控制电机的正反转。

5、所选题目的电路图

5.1智能车电机驱动模块电路图

5.2电机逻辑电路图

5.3 BTS7960全桥型电机驱动驱动电路图

相关文档
最新文档