2012重庆工商大学“飞思卡尔杯”智能汽车校内竞赛
重庆工商大学“飞思卡尔杯”智能汽车校内竞赛报告
(题目 基于MC9S12XS128MAA单片机的直流电机驱动系统的控制设
计)
参赛队员:
学院:计信 班级:自动化2 学号:2010133234 姓名:姜鹏 电话:15023386728
日期: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 的输出通道都有一
2012重庆工商大学“飞思卡尔杯”智能汽车校内竞赛
个使能位 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结尾
2012重庆工商大学“飞思卡尔杯”智能汽车校内竞赛
的名字(.c或者.h不能丢),单击保存,此时在工程左边并不会看到刚新建的文件。接着单击菜单栏的可以选择第一项直接将刚新建的文件添加进工程(此时必须保证当前打开的文件是要添加的文件),编译源文件单击
3、所选题目的程序流程图和源程序
图标。
3.1.源程序如下:
#include
#include %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) {
2012重庆工商大学“飞思卡尔杯”智能汽车校内竞赛
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;
2012重庆工商大学“飞思卡尔杯”智能汽车校内竞赛
PWMDTY4=0; } if(flag==3200) {
PWME = 0x00; flag=0;
}
}
3.2.程序流程图如下: 程序入口 变量初始化
设置总线频率 PWM模块初始化 4、所选题目的外围硬件的功能及应用方法
1.在本方案中,考虑到飞思卡尔MC9S12XS128MAA单片机正常工作的额定电压为5V,并且为了延长电池的使用寿命同时减小电压波动对单片机工作产生干扰,故选用TPS7350组成一个低压差稳压器(电路图见)对单片机进行供电,以实现单片机正常的工作。