飞思卡尔智能车主体设计报告Word格式文档下载.docx
《飞思卡尔智能车主体设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《飞思卡尔智能车主体设计报告Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。
而其它模块则需要通过较大的电流,而LM2940-5,转换效率高,带载能力大,对其它模块供电还是能保证充足的电源。
利用TPS7350和LM2940-5对控制系统和执行部分开供电,可以有效地防止各器件之间发生干扰,以及电流不足的问题,使得系统能够稳定地工作。
3.3电机驱动模块
常用的电机驱动有两种方式:
一、采用集成电机驱动芯片。
二、采用N沟道MOSFET和专用栅极驱动芯片设计。
为了减少车体复杂程度,我们采用了较为简单的集成的电机驱动芯片作为点击的驱动。
市面上常见的集成H桥式电机驱动芯片中,飞思卡尔公司的33886型芯片性能较为出色,该芯片具有完善的过流、欠压、过温保护等功能,内部MOSFET导通电阻为120毫欧,具有最大5A的连续工作电流。
使用集成芯片的电路设计简单,可靠性高,但是性能受限。
由于比赛电机内阻仅为430毫欧,而集成芯片内部的每个MOSFET导通电阻在120毫欧以上,大大增加了电枢回路总电阻,此时直流电动机转速降落较大,驱动电路效率较低,电机性能不能充分发挥。
由于33886的以上缺点我们没有采用33886作为驱动芯片,而采用了BTS7960作为电机的驱动芯片。
BTS7960是集成的大电流半桥驱动,其内部包含了一片NMOS、一片PMOS和一片半桥门集驱动。
图1.3BTS7960芯片内部电路图
BTS7960的芯片内部为一个半桥。
INH引脚为高电平,使能BTS7960。
IN引脚用于确定哪个MOSFET导通。
IN=1且INH=1时,高边MOSFET导通,OUT引脚输出高电平;
IN=0且INH=1时,低边MOSFET导通,OUT引脚输出低电平。
SR引脚外接电阻的大小,可以调节MOS管导通和关断的时间,具有防电磁干扰的功能。
IS引脚是电流检测输出引脚。
其输入信号为标准的TTL电平,直接与单片机相连就可以,降低系统的不稳定因素。
用两片BTS7960即可构成全桥驱动电路,控制电机的正反转。
图1.4:
BTS7960全桥驱动示意图
电源输入
5-25V
最大驱动电流
43A
驱动类型
MOSFET
控制电源
5V
过压,过流,过温,短路保护
是
内阻
7+9毫欧
频率输入
0-25KHz
表1.1BTS7960全桥驱动参数表
图3.6电机驱动模块电路设计图
1.4智能车传感器模块设计
道路检测模块为小车的“眼睛”。
赛道相对车模的偏移量、方向、曲率等信
息是实现车模自主沿着赛道运行的信息基础,获得更多、更远、更精确的赛道信
息是提高车模运行速度的关键。
本设计中通过红外发射管发射红外光照射跑道,根据跑道表面与中心线反射光强不同从而得出黑线位置。
本设计中采用的光电管都采用一字均匀排布,共13个红外传感器。
通过单片机的A/D端口直接读取电压的变化量,优点是可以简化外部电路
设计。
对于红外管,采用这种方式可以保留红外接收管的连续变化电压信息,通过软件算法进行位置插值细化,不仅可以得到更加精确的位置信息,同时还可以消除环境光线的影响。
但处理速度上,因需要考虑到A/D转换时间,故采集速度较前者稍慢。
为提高下排红外A/D采样速度,我们通过PLL将系统时钟由8M倍频到48M,同时采用了ADC模块的单通道采样模式,来减少许多无谓的通道转换。
尽量缩短路径检测的周期。
第二章软件设计
在软件部分,我们没有用到最经典的PID控制,甚至于没有所谓成熟的算法,在我们这个队伍中,是通过硬件和软件的不断磨合才让我们拿到今天的成绩,现就将我们的经验阐述如下(传感器对应为旧)。
我们采用的是光电管模拟量进行控制,控制策略主要有一下几个部分,1、原始数据的采集;
2、原始数据的处理;
3、舵机的转角控制策略;
4、速度的控制策略;
6、起跑线的识别。
#include<
hidef.h>
/*commondefinesandmacros*/
MC9S12XS128.h>
/*derivativeinformation*/
#pragmaLINK_INFODERIVATIVE"
mc9s12xs128"
//定义全局变量
intPM_singal;
//M端口采集
intPA_singal;
//A端口采集
intline_mun=0;
intDirection,Velocity;
/*Direction设置舵机角度*//*Velocity设置电机速度*/
inta,b;
//函数声明
voidPOWERFUL(void);
voidDelay(intcnt);
//延时函数
voidPMSingal_set(void);
voidPASingal_set(void);
voidStart_line(void);
voidStop_car(void);
voidInit_busclock(void);
//总线时钟初始化
voidInit_PWM_out(void);
voidPWM_out(intDirection,intVelocity);
//函数名称:
Init_busclock(void)
//函数功能:
总线时钟初始化
voidInit_busclock(void)
{
//CLKSEL=0X00;
//disengagePLLtosystem
//PLLCTL_PLLON=1;
//turnonPLL
SYNR=2;
//s=9,r=3,c=40M
REFDV=1;
//pllclock=2*osc*(1+SYNR)/(1+REFDV)=BUSCLOCK=48M
while(!
(CRGFLG_LOCK==1));
//whenpllissteady,thenuseit;
CLKSEL=CLKSEL_PLLSEL_MASK;
//engagePLLtosystem;
}
Init_PWM_out(void)
对PWM进行初始化设置
voidInit_PWM_out(void)
PWME=0x28;
/*01:
50Hz45:
1kHz*/
PWMPOL=0x28;
PWMCTL=0x60;
PWMCLK=0x28;
PWMPRCLK=0x00;
PWMSCLA=4;
//A=B=48MSA=SB=6M
PWMSCLB=4;
main()
实现赛车稳定循迹
voidmain(void)
{
Delay(100);
Init_busclock();
Init_PWM_out();
//PWM初始化
DDRB=0xFF;
DDRM=0x00;
DDRA=0x00;
//PORTA=0x00;
PORTB=0X00;
EnableInterrupts;
for(;
;
)
{
POWERFUL();
Start_line();
Stop_car();
}
POWERFUL(void)
voidPOWERFUL(void)//赛道处理程序
{
PM_singal=PTM&
0x1f;
PA_singal=PORTA;
PMSingal_set();
PWM_out(Direction,Velocity);
PASingal_set();
Start_line(void)
起始线判断
voidStart_line(void)
if(((PM_singal==0x1e)&
&
(PA_singal==0x3f))||((PM_singal==0x1e)&
(PA_singal==0x6f))||((PM_singal==0x1e)&
(PA_singal==0x2f)))
line_mun++;
PORTB=!
PORTB;
Direction=0;
Delay(500);
}
Stop_car(void)
voidStop_car(void)
if(line_mun==2)
Velocity=300;
Delay(10000);
PWM_set(void)
依据检测黑线位置对PWM设置
voidPASingal_set(void)
switch(PA_singal)
case0x01:
//左一
Direction=500;
Velocity=85;
break;
case0x03:
//左一二
Direction=500;
case0x02:
//左二
Direction=450;
case0x06:
//左二三
Velocity=90;
case0x04:
//左三
Direction=400;
case0x0c:
//做三四
Direction=350;
case0x08:
//左四
Direction=300;
Velocity=95;
case0x18:
//左四五
Direction=250;
case0x10:
//左五
Direction=150;
case0x20:
//左六
Direction=50;
case0x40:
//中
case0x60:
//左六中
case0xc0:
//右六中
case0x80:
//右六
Direction=-50;
default:
voidPMSingal_set(void)
switch(PM_singal)
//右五
Direction=-150;
//右四五
Direction=-250;
//右四
Direction=-300;
//右四三
Direction=-350;
//右三
Direction=-400;
//右三二
Direction=-450;
//右二
Velocity=85;
//右二一
Direction=-500;
//右一
PWMout(intDirection,intVelocity)
读取设定DV值,从PP1PP5输出
voidPWM_out(intDirection,intVelocity)
Direction=Direction+4050;
PWMPER23=60000;
//Center1500ms*3*/
PWMDTY23=Direction;
//角度*/
PWMPER45=300;
Velocity=300-Velocity;
PWMDTY45=Velocity;
/*设置电机速度*/
Delay()
软件延时cnt--延时参数,数越大值越大
voidDelay(intcnt)
inti,j;
for(i=0;
i<
cnt;
i++)
j=0x1300;
while(j--);
}
工作日程
日期
主要工作
1
查阅资料
2
写出算法
3
硬件调试
4
设计报告
评议意见
指导教师的评阅意见
指导教师(签字)
年月日
系答辩组审定意见
组长(签字)