单片机课程报告.docx
《单片机课程报告.docx》由会员分享,可在线阅读,更多相关《单片机课程报告.docx(36页珍藏版)》请在冰豆网上搜索。
单片机课程报告
HefeiUniversity
单片机设计—基于飞思卡尔MC9S12G128单片机
课程名称单片机课程实训
任课教师储忠
班级10级自动化
姓名
学号100507401005072010050740
日期2013/06/20
摘要
智能车系统以飞思卡尔公司的16位单片机MC9S12G128为核心控制器为核心,选择CodeWarriorIDE5.1作为软件系统开发环境。
通过一个CMOS摄像头检测模型车的运动位置和运动方向,用编码器检测模型车的速度。
使用PID控制算法调节驱动电机的转速和舵机的角度,完成对模型车运动速度和运动方向的闭环控制。
关键字:
MC9S12XS128、PID、CMOS
一、总体方案介绍
1.1系统方案概述
系统采用飞思卡尔16位单片机MC9S12G128为核心控制单元,智能车系统在大方向上主要分为四部分:
机械结构部分、电路部分、程序部分、辅助部分。
1.2系统总体结构
按照预先的设计,我们设计了整个系统的结构图。
系统力求简单高效,在满足要求的情况下,使硬件结构最简单,减少因硬件而出现问题。
系统总体结构如图1.1所示:
电电源模块
上位机
上位机
MC9S12G128
核心控制
速度检测
路径检测
电机驱动
舵机转向
图1.1系统总体结构图
各个模块的作用如下所示:
1.CMOS摄像头模块:
在该模块中对采集到的赛道信息进行处理,并通TLC5510和LM1881进行二值化处理,将处理得到的信息传给单片机,以是单片机能预知路况,通过算法处理,去合适的的控制伺服器转动的角度和电机的转速。
2.速度传感器:
选择光电编码器,采集当前的电机速度,作为系统速度控制的反馈。
同时与设置的目标速度作比较,选择合适的算法使其变化为目标速度,从而实现电机的加速减速。
3.角度传感器:
使用角度传感器,采集当前跑道与地面的角度,判断当前位置是否为坡道,将信息反馈给单片机,使其选择合适的算法,更好的平稳的过坡道。
4.MC9S12XG128模块:
S12单片机是系统的核心部分。
它负责接收赛道信息数据、赛车速度等反馈信息,并对这些信息进行恰当的处理,形成合适的控制量来对伺服器与电机驱动进行控制,以控制小车的运行速度和方向。
5.电机驱动模块:
在该模块中使用了两片BTS7960桥式电路驱动电机,当接收到单片机的命令后便执行相应的操作,同时信息采集模块又采集到电机的状态信息,反馈给单片机。
从而整个系统构能够形成一个闭环系统,保证了小车的平稳运行。
6.电源管管理模块:
为了使各模块正常工作,必须供给各自所需的电压,例如电机电源,舵机电源,单片机工作电源。
在恒压源的基础上,搭建模拟电路,使恒压源分别变为目标电压。
二、机械机构设计
2.1设计总体构思
任意一个工程都是由软件和硬件组成。
软件是灵魂,硬件是躯体,而软硬件都是在机械结构的基础上来执行和实现的。
在赛车制作中,除了算法的优化,硬件的稳定,车的机械结构也占举足轻重的作用。
赛车的机械性能对小车行驶性能有很大的影响,机械结构的调整是一个需要通盘考虑的问题。
安装时需要考虑的要点是:
(1)架高舵机,以提高舵机响应速度
(2)主板低位放置,降低赛车重心;
(3)采用强度高、质量轻的材料制作摄像头支架;
(4)摄像头后置于模型车的中间,减少赛车前方盲区
(4)车体各部分重量的分配
在车模的安装与结构改造过程中,通过不断的调试摸索后,我们对小车的机械结构进行了改进,以提高小车的过弯性能和行驶的稳定性
2.2车模的安装
车模的机械调整能让车的整体性能有一个质的飞跃,在预赛的过程中,我们会发现比赛前几名的车最后在硬件和软件上都没有太大差别,有差别的就是机械结构,如摄像头的安放、PCB板的固定等。
所以当速度到达一定的时候机械结构对车性能的影响就突出出来了。
对于机械的调整,我们的严格要求做到三点:
质量轻,重心低,简单可靠。
对于一辆快车来说,这是最基本的要求。
车的质量直接影响车的加减速性能,惯性,质量越小,控制越接近理想化,对于质量的控制,我们要求从每一个螺丝做起,能用塑料的绝不用金属的,对于每一个机械装置的制作要求在钢度达标的情况下,力求做到最小,最轻。
2.3舵机的固定和安装
转向系统在车辆运行过程中有着非常重要的作用,合适的前桥调整参数可以保证在车辆直线行驶过程中不会跑偏,即保证车辆行驶的方向稳定性;而在车辆转向后,合适的前桥可以使得车辆自行回到直线行驶状态,即具有好的回正性。
基于这个原因,前桥参数调整及转向系统优化设计必然会成为智能车设计中机械结构部分的重点,在实际操作中,我们通过理论预测进行方案的可行性分析,然后做出实际结构以验证理论数据。
另外,在模型车制作过程中,除了遇到“如何得到良好的方向稳定性”的问题外,还要考虑如何尽快实现转向。
而由于功率是速度与力矩乘积的函数,追求速度,必然会使力矩减小,因此设计时就要考虑到舵机的动力与来自地面的摩擦阻力间的关系,避免因舵机力量太小使得车辆无法转向的情况发生。
经过最后的参数比较,为了解决以上问题,我们希望通过设计一些可调整的机构,加上实际测算,最后得出一套可以稳定、高效工作的参数及机构。
采用站立式固定,这种固定方式是舵机竖立在车身前轮位置。
用两等长的前轮拉杆住链接前轮。
它的优点:
1)力臂长,前轮的反应速度是平躺式的三倍左右(由于力臂的长度会有所不同,力臂越长,反应越快)。
这里请注意一点,力臂过长可能导致力矩不足,反而导致前轮转不到位。
因此设计时就要综合考虑转向机构响应速度与舵机力矩之间的关系,通过优化得到一个最佳的转向效果。
建议力臂在3.5-4cm之间。
2)两拉杆轴是等长的,所以车的左右转是相同的。
这里说明一点,两拉杆轴是等长并不和上述“转向都是一边长一边短”相矛盾。
因为我们的最终目地是使车模在转向时,内侧前轮要比外侧的转角要大。
当舵机转动力臂时,由于力臂的尾端是按曲线运动的,导致两前轮的转角不同,内侧前轮要比外侧的转角要大.
2.4摄像头的安放
摄像头的安放原则是轻、稳、灵活,还要前瞻远,图像不失真。
摄像头传感器重量较重,即使除去外壳用裸板,其镜头的重量对于车架来说也是不小的负担,因此摄像头的安装位置对车模的机械性能会有不小的影响,我们采用的是用碳纤维管作为固定支架,这种管硬度高,质量轻。
同时,摄像头安装的位置与车模的前瞻量以及视野宽度也有直接关系,前瞻越大就能给系统留出更多的反应时间,对舵机的控制处理更理想。
所以摄像头安装的位置应同时考虑到机械性能的需要和图像的要求。
从车模的性能上考虑,车模的重心越低越好,所以在图像能够接受的前提下,应尽可能降低摄像头的高度。
参照上届的比赛经验和前几届比赛各参赛队关于选择摄像头的说明,我们对目前可选的各种摄像头进行了比较和实验。
目前市面上常见的摄像头主要有CCD和CMOS两种:
CCD摄像头具有对比度高、动态特性好的优点,但需要工作在12V电压下,对于整个系统来说过于耗电,且图像稳定性不高;CMOS摄像头体积小,耗电量小,图像稳定性较高。
因此,经过实验论证之后我们决定采用CMOS摄像头。
对于CMOS摄像头分为数字和模拟两种。
在上届比赛中,我们看到有不少参赛队采用了数字摄像头,本着严谨的态度,我们选用了OV7620进行实验,对数字摄像头的可行性进行论证。
OV7620数字摄像头使用27M晶振,能够达到的最大分辨率是640*480,即VGA模式,30万像素,ov7620既有progressivescan(逐行扫描),也有Interlacedscan(隔行扫描)。
每秒产生30帧图像,每帧两场,1秒钟采集60场图像,效率高,这比PAL制的摄像头来说提高了对小车的控制频率,对小车运行是很有好处的。
对于智能车来说,OV7620完全能够满足比赛要求,取Y0~Y7的亮度值(也就是识别黑白线),接单片机的PA口;另外就是场中断VSYN表示一帧数据完毕的标志,低电平有效,一般接单片机的外部下降沿中断,接PT1;行中断HREF表示一行数字完毕,高电平有效,一般也接单片机外部中断;接单片机的PT2。
引脚有:
数字信号输出Y0...Y7,像素同步信号PCLK,行信号HREF,场信号VSYN,奇偶场信号FOOD,芯片复位引脚RST,模拟信号输出VTO,(用于调试对焦)SCCB读写引脚SCL、SDA,电源引脚VCC(+5V)、GND一共18个管脚。
三、硬件电路的设计与实现
系统电源设计硬件电路整体结构设计,我们将电路分成几个模块:
单片机最小系统,电源模块,电机驱动模块,摄像头模块以及把它们连接在一起的系统主板电路。
3.1单片机最小系统
Freescale16位HCS12系列单片机也称MC9S12系列,简称S12系列。
MC9S12X系列是HCS12系列的增强型产品,基于S12CPU内核,可达到25MHz的HCS12的2~5倍的性能。
S12X系列增加了172条额外指令,可以执行32位计算(共280条指令),总线频率最高可达40MHz,并且具备完全的CAN功能,改进了中断处理能力。
S12X系列的CPU以复杂指令集CISC架构,集成了中断控制器,有丰富的寻址方式。
中断有7个优先级并且内核支持优先级的调度,最多可有117个中断源,S12X可访问最多8M的全部存储空间(包括片内和片外资源)。
单片机最小系统板使用MC9S12G128单片机,本系统所用到的引脚引出,包括PWM接口、计数器接口、外部中断接口、若干普通IO接口等。
还包括电源滤波电路、时钟电路、复位电路、串行通讯接口、BDM接口和SPI接口。
图3.1MC9S12G128单片机最小系统板电路原理图
3.2电源模块
常用的低压降串联稳压芯片主要有LM2940、LM1117等。
LM2940虽然压降比LM1117更低,但是纹波电压较大。
相比之下,LM1117的性能更好一些,具有输出电压恒定,压降较低的优点,但是其线性调整工作方式在工作中会造成较大的热损失,导致电源利用率不高,工作效率低下。
经过反复比较,最终系统选用微功耗低压差线性电源芯片TPS7350,其具有完善的保护电路,包括过流、过压、电压反接保护。
使用这个芯片只需要极少的外围元件就能构成高效稳压电路。
与前两种稳压器件相比,TPS7350具有更低的工作压降和更小的静态工作电流,可以使电池获得相对更长的使用时间。
由于热损失小,因此不需要专门考虑散热问题。
图3.2.1电源电路图
6V电压供舵机使用:
图3.2.26V电压电路
3.3驱动电路
BTS7960是集成的大电流半桥驱动,其内部包含了一片NMOS、一片PMOS和一片半桥门集驱动,在IOUT=9A,VS=13.5V,Tj=25°C时,其内阻抗为17mΩ。
驱动电路图如下:
图3.1驱动电路图
四软件算法的设计
4.1软件设计概要
在控制算法中,主要用到了以下三方面的内容:
摄像头循线控制算法,PID舵机控制算法和PID速度控制算法。
其中循线控制算法用来控制舵机的转向,PID控制算法主要用来控制智能车的快速加速、减速和速度的平稳。
本智能车系统主要用到G128芯片中的PWM模块,ECT模块、I/O模块以及SCI模块等模块化设计。
PWM模块用于控制舵机和电机的运转;ECT模块中的定时器中断及脉冲累加用于计算当前车速;I/O模块主要用于拨码开关,及LED指示灯的串行通信;SCI模块主要用在无线串口传送模块。
下图即为主程序算法流程图:
图4.1算法流程图
4.2各功能模块设计
4.2.1时钟模块
时钟基本脉冲是CPU工作的基础。
MC9S12G128微控制器的系统时钟信号,由时钟振荡电路或专用时序脉冲信号提供。
MCU内部的所有时钟信号都来源于EXTAL引脚,也为MUC与其他外接芯片之间的通信提供了可靠的同步时钟信号。
锁相环产生的时钟频率
fVCO=2*fOSC*(SYNDIV+1)/(REFDIV+1)
fPLL=fVCO/(2×CPMUPOSTDIV)其中PLLCLK为PLL模块输出的时钟频率;OSCCLK为晶振频率;SYAR为SYNR寄存器的值;REFDV为REFOV寄存器的值。
voidSetBusCLK_48(byte48)
{
MMCCTL1=0X00;
PKGCR=0X06;
DIRECT=0x00;
IVBR=0xFF;
ECLKCTL=0xC0;
CPMUPROT=0x26;//停止保护时钟配置寄存器
CPMUCLKS_PSTP=0;//
CPMUCLKS_PLLSEL=1;//应用PLL
//CPMUSYNR=48-1;//设置分频因子
CPMUSYNR=0xc0|(48-1);//设置分频因子
CPMUREFDIV=0x80|0x00;//pllclock=2*(1+SYNR)=MHz;
CPMUPOSTDIV=0x00;//Setthepostdividerregister
CPMUPOSTDIV=0x00;//Setthepostdividerregister
CPMUPLL=0x10;//SetthePLLfrequencymodulation
while(CPMUFLG_LOCK==0);/*WaituntilthePLLiswithinthedesiredtoleranceofthetargetfrequency*/
CPMUPROT=0x00;/*Enableprotectionofclockconfigurationregisters*/
}
4.2.2PWM模块
PWM(PulseWidthModulation)即脉宽调制,脉宽调制波是一种可用程序来控制波形占空比、周期、相位的波形。
它在电动机驱动、舵机控制等场合有着广泛的应用。
PWM模块特点:
8个带周期占空比可程控的PWM独立通道
4个可程控选择的时钟源
每个PWM通道有专用的计数器
PWM每个通道脉冲极性可以选择
每个PWM通道可使能/禁止
周期和占空比双缓冲
每个通道有中心对齐和边缘对齐方式
分辨率:
8位(8通道),16位(4通道)
带中断功能的紧急切断
PWM信号在本系统中主要用来控制电机的转速和舵机的转向。
其初始化程序如下:
voidPWM3_Init(void)
{
PWME_PWME7=0;
PWME_PWME3=0;
PWMCTL_CON67=1;
PWMCTL_CON23=1;
PWMPRCLK=0X00;
PWMSCLB=0x01;
PWMCLK_PCLK7=1;
PWMCLK_PCLK3=1;//时钟源的选择--------------PWM7-----sa
PWMPOL_PPOL7=1;
PWMPOL_PPOL3=1;//极性设置-----开始输出高电平
PWMCAE_CAE7=0;
TSCR1=0;//禁止时钟
TSCR2=0x81;//不允许溢出中断,分频因子为2
TCTL4=0x01;//设置通道0上升沿捕捉
PBCTL=0x40;
ICPAR=0x00;
PACN10=0x0000;
TSCR1|=(1<PWMCAE_CAE3=0;//对齐方式设置--------------左对齐
PWMCNT67=0;
PWMCNT23=0;//计数器清零
PWMPER67=1000;
PWMPER23=1000;//周期寄存器设置--Frequency=SB/50=2K
PWMDTY67=0;
PWMDTY23=0;//设置占空比
PWME_PWME7=1;
PWME_PWME3=1;//EnablePWM使能
}
voidPWM_01(void){
PWME_PWME1=0;//舵机初始化
PWMCTL_CON01=1;//0和1联合成16位PWM;
PWMCAE_CAE1=0;//选择输出模式为左对齐输出模式
PWMCNT01=0;//计数器清零;
PWMPOL_PPOL1=1;//先输出高电平,计数到DTY时,反转电平
PWMPRCLK=0X00;//clockA不分频,clockA=busclock=16MHz;CLKB分频:
1Mhz
PWMSCLA=0x10;//对clockSA16分频,pwmclock=clockA/16=1MHz;
PWMCLK_PCLK1=1;//选择clockSA做时钟源
PWMPER01=20000;//周期20ms;50Hz;
PWMDTY01=DUOJICENTER;//高电平时间为1.5ms;
PWME_PWME1=1;
}
4.2.3定时器、脉冲累加器模块
S12的ECT模块具有输入捕捉、输出比较、脉冲累加等多项功能,其初始化设置过程如下所示:
voidTIM_Init(void)
{
TIOS=0x00;//定时器通道0,1为输入捕捉
TSCR1=0x80;//定时器使能
TCTL4=0x09;//通道0捕捉上升沿通道1捕捉下降沿
TIE=0x03;//通道0,1中断使能
TFLG1=0xFF;//清中断标志位
}
voidInit_Pai(void)
{
PACTL=0X40;//端口初始化,始能脉冲累加器,累加上升沿
PACNT=0X0000;
}
通过定时器、脉冲累加器模块,我们实现了脉冲计数,通过定时中断检测智能车车速,从而对速度进行控制。
4.3图像的采集和处理
4.3.1图像的采集
interrupt8voidHREF_Count(void)
{
TFLG1_C0F=1;
Line_Flag=0;
m++;
if(m<12||m>288)
{
return;//判断是否从新的一场开始
}
if(m<40)
Interval=2;
elseif(m<61&&m>41)
Interval=3;
elseif(m<91&&m>60)
Interval=4;
elseif(m<121&&m>90)
Interval=5;
elseif(m<152&&m>120)
Interval=7;
elseif(m<182&&m>151)
Interval=9;
elseif(m<236&&m>181)
Interval=11;
else
Interval=13;
if(m%Interval==0)
{
Image_Data[Line_C][0]=PORTA;_asm();
Image_Data[Line_C][1]=PORTA;
Image_Data[Line_C][2]=PORTA;_asm();
Image_Data[Line_C][3]=PORTA;
Image_Data[Line_C][4]=PORTA;_asm();
Image_Data[Line_C][5]=PORTA;
Image_Data[Line_C][6]=PORTA;_asm();
Image_Data[Line_C][7]=PORTA;
Image_Data[Line_C][8]=PORTA;_asm();
Image_Data[Line_C][9]=PORTA;
Image_Data[Line_C][10]=PORTA;_asm
采集的图像数组Image_Data[47][120],寻找第一有效行,然后以第一个有效行
为依据,从中间向两边寻两条黑线
for(j=zhongdian;j<120;j++){
if(Image_Data[46][j]right[46]=j;
break;
}
else
right[46]=0x78;
}
for(j=zhongdian;j>0;j--){
if(Image_Data[46][j]lift[46]=j;
break;
}
else
lift[46]=0;
}
zhongdian=(lift[46]+right[46])/2;
for(i=46;i>0;i--){
for(j=zhongdian;j<120;j++){
if(Image_Data[i][j]right[i]=j;
break;
}
else
right[i]=0x78;
}
for(j=zhongdian;j>0;j--){
if(Image_Data[i][j]lift[i]=j;
break;
}
else
lift[i]=0;
}
zhongdian=(lift[i]+right[i])/2;
4.3.2图像的处理
由于图像存在失真,影响车的控制,因此我们对图像进行了修正。
for(i=ROW-1;i>26;i--){
if(lift[i]!
=0)
lift[i]=lift[i]-(46-i);
if(right[i]!
=0x78)
right[i]=right[i]+(46-i);//梯形修正
}
for(i=26;i>10;i--){
if(lift[i]!
=0)
lift[i]=lift[i]-19-(26-i)*3/5;
if(right[i]!
=0x78)
right[i]=right[i]+19+(26-i)*3/5;//梯形修正
}
for(i=10;i>0;i--){
if(lift[i]!
=0)
lift[i]=lift[i]-28-(10-i)/2;
if(right[i]!
=0x78)
right[i]=right[i]+28+(10-i)/2;//梯形修正
}
4.4速度及转角控制
4.4.1PID控制
图4.4.1PID控制器工作原理
PID控制策略其结构简单,稳定性好,可靠性高,并且易于实现。
其缺点在于控制器的参数整定相当繁琐,需要很强的工程经验。
4.4.2PID参数的整定
试凑法是通过闭环试验,观察系统响应曲线,根据各控制参数对系统响应的大致影响,反复试凑参数,以达到满意的响应,最后确定PID控制参数。
试凑不是盲目的,而是在控制理论指导下进行的。
在控制理论中已获得如下定性知识:
比例调节(P)作用:
是按比例反应系统的偏差,系统一旦出