智能车模块源程序很详细

合集下载

智能循迹小车详细制作过程

智能循迹小车详细制作过程

第二届“飞思卡尔”杯全国大学生智能汽车邀请赛技术报告目录第一章引言 (1)1.1 智能车制作概述 (1)1.2 参考文献综述 (1)1.3 技术报告内容与结构 (1)第二章设计方案概述 (3)2.1 总体设计 (3)2.2 具体方案 (3)2.2.1 道路识别模块 (3)2.2.2 速度检测模块 (4)第三章模型车整体设计 (5)3.1 机械部分的调整 (5)3.2 传感器设计与安装 (5)3.2.1 光电管安装: (5)3.2.2 摄像头安装: (6)3.2.3 测速装置 (7)第四章硬件电路设计 (9)4.1 整体介绍 (9)4.2 各模块电路介绍 (10)第五章控制算法实现 (15)5.1 总体软件设计 (15)5.2 路径识别算法 (16)5.2.2 基于光电管的模糊控制算法 (16)5.2.2 基于CMOS的算法 (18)5.2.3 两者的结合 (20)5.3 速度控制算法 (20)第六章调试及主要问题解决 (23)6.1 调试工具 (23)6.2 调试过程 (24)6.3 主要技术参数说明 (25)第七章结论 (27)附录A 参考书目 (I)附录B 部分程序...................................................................................... I I第一章引言1.1 智能车制作概述本队在小车制作过程中,先对比赛内容,要求与规则进行了详细分析,然后按照要求制订了几种设计方案,并对几种方案进行比较敲定最后方案。

根据方案完成小车的总体设计和详细设计(包括底层硬件设计和总体软件设计),在完成了车模组装和改造后,完成了各个模块的硬件电路设计与安装,并进行了控制算法的设计和软件实现,最后进行了整车的调试和优化。

1.2 参考文献综述方案设计过程中参考了一些相关文献,如参考文献所列。

例如文献 1 与 2 单片机嵌入式系统在线开发方法。

智能循迹小车详细制作过程

智能循迹小车详细制作过程

(穿山乙工作室)三天三十元做出智能车基本设计思路:1.基本车架(两个电机一体轮子+一个万向轮)2.单片机主控模块3.电机驱动模块(内置5V电源输出)4.黑白线循迹模块0.准备所需基本元器件1).基本二驱车体一台。

(本课以穿山乙推出的基本车体为例讲解)2).5x7cm洞洞板、单片机卡槽、51单片机、石英晶体、红色LED、1K电阻、10K排阻各一个;2个瓷片电容、排针40个。

3).5x7cm洞洞板、7805稳压芯片、红色LED、1K电阻各一个;双孔接线柱三个、10u电解电容2个、排针12个、9110驱动芯片2个。

4).5x7cm洞洞板、LM324比较器芯片各一个;红外对管三对、4.7K电阻3个、330电阻三个、红色3mmLED三个。

一、组装车体(图中显示的很清晰吧,照着上螺丝就行了)二、制作单片机控制模块材料:5x7cm洞洞板、单片机卡槽、51单片机、石英晶体、红色LED、1K电阻、10K排阻各一个;2个瓷片电容、排针40个。

电路图如下,主要目的是把单片机的各个引脚用排针引出来,便于使用。

我们也有焊接好的实物图供你参考。

(如果你选用的是STC98系列的单片机在这里可以省掉复位电路不焊,仍能正常工作。

我实物图中就没焊复位)三、制作电机驱动模块材料:5x7cm洞洞板、7805稳压芯片、红色LED、1K电阻各一个;双孔接线柱三个、10u电解电容2个、排针12个、9110驱动芯片2个。

电路图如下,这里我们把电源模块与驱动模块含在了同一个电路板上。

因为电机驱动模块所需的电压是+9V左右(6—15V 均可),而单片机主控和循迹模块所需电压均为+5V。

这里用了一个7805稳压芯片将+9V电压稳出+5V电压。

+9V +9V这是工作室做的电源+驱动模块,仅作参考四、制作循迹模块材料:5x7cm洞洞板、LM324比较器芯片各一个;红外对管三对、4.7K电阻3个、330电阻三个、红色3mmLED三个。

LM324电压比较器工作原理:该芯片内部有四组比较器,原理就是反相输入端Vi—与同相输入端Vi+的电压进行比较,若Vi+大于Vi—则比较器的输出端OUT输出高电平+5V;若Vi+小于Vi—则比较器的输出端OUT输出低电平0V;TCRT5000红外对管工作原理:工作时由蓝色发射管发射红外线,红外线由遮挡物反射回来被接收管接收。

基于51单片机WiFi智能小车制作

基于51单片机WiFi智能小车制作

基于51单片机WiFi智能小车制作基于51单片机WiFi智能小车制作一、基本原理51单片机WiFi智能小车是利用PC或手机作为控制端,通过手机连接wifi模块(路由器)以获得wifi信号,同时车载也连接wifi模块以获得和手机相同的IP地址,实现手机和小车的连接,然后利用PC或手机上的控制软件以wifi网络信号为载体发送相关信号,wifi模块接收PC 或手机端发送来的相关信号并分析转换成TTL 电平信号,然后发送给单片机,单片机接收到的电平信号处理、分析、计算,转化成控制指令并发送给电机驱动模块以实现小车的前进、后退、左拐、右拐等功能。

二、购买所需材料了解51单片机WiFi智能小车基本原理后,需要购买所需材料进行制作。

下面列出所需制作材料:序号材料备注图例6 小车底盘7 摄像头 根据固件支持摄像头购买8 电源根据自己需要购买种类9 杜邦线及小配件制作所需工具:序号工具名备注图例称1 电烙铁一套 包括松香焊锡2 螺丝刀 平口、十字等3 微型电钻 可以自制4手工刀5 剪刀6 万用表7 热熔胶枪或快干胶8US B下载器三、开始制作1、制作流程开始制作前,我们首先需要看购买路由器的型号,笔者采用的是703n 路由器,所以需要引出ttl 线。

总体步骤为:路由器引TTL 线→路由器刷OpenWrt 固件→制作51单片机最小系统→下载下位机程序到51单片机→安装上位机程序至PC 或手机→测试上、下位机通信→组装→调试完成。

2、路由器引ttl线首先打开703n路由器,按照下图标示位置焊接ttl线。

注意:1、焊接的时候要小心焊接,焊好后微拉下查看松紧2、焊接最好采用软线焊接,防止意外整块拉掉焊点3、焊好后一定用胶固定,最好采用热熔胶下图为引好ttl线样子3 刷OpenWrt固件何为OpenWrt固件,OpenWrt可以被描述为一个嵌入式的Linux 发行版,(主流路由器固件有dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的,静态的系统。

智能小车方案

智能小车方案

智能小车寻迹与避障方案总体方案:整个电路系统分为寻迹检测、避障检测、控制、驱动四个模块。

首先利用检测模块对路面信号进行检测,经过比较器处理之后,送给软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。

检测模块:在该模块中包括有速度信息检测和位置信息检测两个子模块,分别检测小车当前的位置信息和速度信息,并将检测到的信息传给MCU,其核心是传感器。

控制模块:控制模块包括信息处理和控制,其核心是MCU,MCU接收到检测来的信号,对信号进行处理后作出判断,并发出控制命令。

驱动模块:该模块包括了驱动电机,当接收到MCU的命令后便执行相应的操作,同时检测模块又检测到电机的状态信息,反馈给MCU 。

从而整个系统构成一个闭环系统,在运行过程中,系统自动调节而达到正确行驶的目的。

智能小车寻迹与避障系统框图一.方案论证与选择1.1小车方案方案一:三轮智能小车。

三轮智能小车的结构简单,易于操作,前轮的方向由舵机控制。

但该方案的缺点也十分明显,在小车在行驶过程中的稳定性不足,并且行驶速度过慢。

方案二:四轮智能小车。

四轮智能小车相对于三轮智能小车在结构上更为复杂,但其稳定性得到明显加强。

两个电机分别控制小车的两个后轮,驱动小车前进。

同时四轮小车在转弯的控制性上更好。

综合以上信息,在本次试验中,四轮驱动小车的性能更为优越,也更符合设计的目的和要求。

所以此次智能小车方案选择四轮小车作为小车模型。

1.2电源管理模块方案一:三端固定输出电压式稳压电源L7805:运用其器件内部电路来实现过压保护、过流保护、过热保护,这使它的性能很稳定。

能够实现1A以上的输出电流器件具有良好的温度系数。

L7805有多种电压输出值5V~24V,因此它的应用范围很广泛,可以运用本地调节来消除噪声影响,解决了与单点调节相关的分散问题,输出电压误差精度分为±3%和±5%。

而且它的价格低廉。

方案二:LM1117是一个低压差电压调节器系列。

智能小车源代码

智能小车源代码

include<>include <>xe”软件上(de)数据设置/define leftdata 0x11define rightdata 0x22define forwarddata 0x33define backdata 0x44define stopdata 0x55define uchar unsigned chardefine uint unsigned intunsigned char receiveData,high_velosity,low_velosity; void UsartConfiguration();/电机端口定义/sbit IN1=P1^0; //为高电平时,左电机后转sbit IN2=P1^1; //为高电平时,左电机正转sbit IN3=P1^2; //为高电平时,右电机正转sbit IN4=P1^3; //为高电平时,右电机后转/无线遥控模块定义/sbit Key_A = P2^0; //B键信号端对应D0sbit Key_B = P2^1; //D键信号端对应D1 sbit Key_C = P2^2; //C键信号端对应D2sbit Key_D = P2^3; //C键信号端void delay0(int a);void delay15us(void);void delay1ms(int z);void di(); //蜂鸣器函数声明unsigned int time;//用于存放定时器时间值unsigned int S; //用于存放距离(de)值char flag =0; //量程溢出标志位char f1,f2,f3,f4,n0;int a;int n;//运行次数判断标志int s_left,s_right;void Delay10us(unsigned char i){unsigned char j;do{j = 10;do{_nop_();}while(--j);}while(--i);}///电机程序/ //void loop(){IN1=1; //左电机IN2=0;IN3=1; //右电机IN4=0;}void runfront(){IN1=1; //左电机IN2=0;IN3=0; //右电机IN4=1;}//小车后退函数void runback(){IN1=0; //左电机 IN2=1;IN3=1; //右电机 IN4=0;}//小车左转void runleft(){IN1=0; //左电机 IN2=0;IN3=0; //右电机 IN4=1;}//小车右转void runright(){IN1=1; //左电机 IN2=0;IN3=0; //右电机 IN4=0;}////小车左后转//void runbackleft() //{// IN1=0; //左电机// IN2=0;// IN3=0; //右电机// IN4=1;//}////小车右后转//void runbackright() //{// IN1=1; //左电机// IN2=0;// IN3=0; //右电机// IN4=0;//}//小车停止函数void stop(){IN1=0; //左电机IN2=0;IN3=0; //右电机IN4=0;}///蓝牙程序///void delay(unsigned int a){unsigned int b;for(;a>0;a--)for(b=3;b>0;b--);}//左电机转void left_motor_runfront(unsigned int a) {IN1=1; //左电机IN2=0;delay(a);IN1=0;IN2=0;delay(100-a);}void right_motor_runfront(unsigned int a){IN3=0; //右电机IN4=1;delay(a);IN3=0;IN4=0;delay(100-a);}void left_motor_back(unsigned int a) {IN1=0; //左电机IN2=1;delay(a);IN1=0;IN2=0;delay(100-a);}void right_motor_back(unsigned int a) {IN3=1; //右电机IN4=0;delay(a);IN3=0;IN4=0;delay(100-a);}void left_motor_stop(){IN1=0; //左电机IN2=0;}void right_motor_stop(){IN3=0; //左电机IN4=0;}//PWM调速void PWM_RUNFRONT(unsigned int a,unsigned int b) //a属于0~100{left_motor_runfront(a);right_motor_runfront(b);}void PWM_RUNBACK(unsigned int a,unsigned int b) //a属于0~100{left_motor_back(a);right_motor_back(b);}void PWM_RUNLEFT(unsigned int a) //a属于0~100{right_motor_runfront(a);left_motor_stop();}void PWM_RUNRIGHT(unsigned int a) //a属于0~100{right_motor_stop();left_motor_runfront(a);}void bluestop(){left_motor_stop() ;right_motor_stop() ;}void UsartConfiguration(){SCON=0X50; //设置为工作方式1TMOD=TMOD|0x21; //设置计数器工作方式2PCON=0X80; //波特率加倍TH1=0XFA; //计数器初始值设置,注意波特率是4800(de) TL1=0XFA;ES=1; //打开接收中断EA=1; //打开总中断TR1=1;TH0=0;TL0=0;ET0=1; //打开计数器}/函数名 :Delay(unsigned int i)函数功能 : 延时函数输入 : 无输出 : 无void Usart() interrupt 4{receiveData=SBUF;//出去接收到(de)数据RI = 0;//清除接收中断标志位if(receiveData==0x66){low_velosity=1;high_velosity=0;// write_com(0x80);}if(receiveData==0x77){low_velosity=0;high_velosity=1;}}///舵机程序/void delayx(int t){char j;for(;t>0;t--)for(j=19;j>0;j--);}void degree0(){int i;for(i=0;i<10;i++){PWM=1;delayx(10);//1msPWM=0;delayx(390);//19ms }}void degree90(){int i;for(i=0;i<10;i++)PWM=1;delayx(24);//50PWM=0;delayx(376);//}}void degree180(){int i;for(i=0;i<15;i++){PWM=1;delayx(40);//PWM=0;delayx(360);//}}///超声波程序/ ///A键被按下后,前进/void Count1(void){time=TH1256+TL1;TH1=0;TL1=0;S=(time/100;n++;if(S<=30&&n==1){led1=0;stop();degree0();di();}if(S>30&&n==1){led1=1;runfront();n=0;}if(n==2){s_left=S;degree180();di();}if(n==3){s_right=S;degree90();di();n=0; //标志位清零if(s_left>s_right){led2=1;delay1ms(50);led2=0;delay1ms(50);runright();delayx(1250);}else{led3=1;delay(800);led3=0;delay(500);runleft();delayx(1250);}}}/超声波高电平脉冲宽度计算程序/void Timer_Count(void){TR1=1; //开启计数while(RX); //当RX为1计数并等待TR1=0; //关闭计数//Count1(); //计算}//void StartModule() //启动模块{TX=1; //启动一次模块 Delay10us(2);TX=0;}///主程序///void main(void){UsartConfiguration();while(1){if(k1==0&&n0==0){delay1ms(20);if(k1==0){n0++;}}else if(k1==0&&n0==1){delay1ms(20);if(k1==0){n0--;}if(n0==0){if(Key_B==0&&Key_D==0&&Key_C==0&&Key_A==1) //A键被按下{f1=1;f2=0;f3=0;f4=0;di();}else if(Key_A==0&&Key_D==0&&Key_B==1&&Key_C==0) //B键被按下{f1=0;f2=1;f3=0;f4=0;di();}else if(Key_B==0&&Key_D==0&&Key_A==0&&Key_C==1) //C键被按下{f1=0;f2=0;f3=1;f4=0;di();}else if(Key_D==1&&Key_B==0&&Key_A==0&&Key_C==0) //D键被按下{f1=0;f2=0;f3=0;f4=1;di();if(f1){StartModule();for(a=951;a>0;a--){if(RX==1){Timer_Count();Count1();}}}if(f2){runback();}if(f3){loop();}if(f4){stop();}}if(n0==1){if(low_velosity){switch(receiveData){case leftdata: PWM_RUNLEFT(30); break;case rightdata: PWM_RUNRIGHT(30); break;case forwarddata: PWM_RUNFRONT(64,70); break;case backdata: PWM_RUNBACK(64,70); break;case stopdata: bluestop(); break;}}if(high_velosity){switch(receiveData){case leftdata: PWM_RUNLEFT(50); break;case rightdata: PWM_RUNRIGHT(50); break;case forwarddata: PWM_RUNFRONT(94,100); break;case backdata: PWM_RUNBACK(94,100); break;case stopdata: stop(); break;}}}}}/蜂鸣器/void di(){int i;for(i=0;i<150;i++){Beep= 1;delay0(20);}Beep=0;}void delay0(int a){char j;int i;for(i=a; i > 0; i--)for(j = 200; j > 0; j--); }void delay1ms(int z) //延时1ms {int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}。

智能小车控制系统设计实现

智能小车控制系统设计实现

关键词:智能小车;控制系统;设计和实现1智能小车控制系统概述智能小车控制系统是一个综合、复杂的系统,其既有多种技术,也含有嵌入式的软件设备和硬件设备、图像识别、自动控制和电力传动、机械结构等技术知识,智能小车的控制系统主要是围绕嵌入式控制系统进行的,将其作为操控的中心,并借助计算机系统,最终完成自动造作和控制的过程[1]。

智能小车的控制系统流程图见图1所示。

2智能小车的设计和实现2.1智能小车的硬件设计硬件设计是保证智能小车平稳运行的必要条件,它关系着控制系统的精度和稳定性,因此在设计时需要用在模块化设计思想,该研究是通过采取硬件系统K60芯片作为核心控制器,并通过图像采集模块和电机、舵机驱动模块、测速模块、电源模块等组成硬件设计系统图,见图2。

首先,电源电路设计,该设计时智能小车的动力来源,为小车运行提供不断的电力,一般采取7.3V、容量为2000mAh的可充电型的镍铬电池作为电源,但是其不能直接为控制器传输电力,需要在转变电路后才可以进行传输。

转变电路可以保证控制器直接对电池内的电压进行调节,保证不同模块可以正常工作和运行,智能小车主要是依靠控制电力和电机驱动进行转变的。

其次是K60最小系统板,在设计时需要将K60的管脚部分做成最小系统的单独电路板,这样可以简化电路板的设计,促使调试更加顺利,K60系统板主要由K60芯片、复位电路、时钟电路、JTAG下载电路、电源滤波电路组成。

再其次是电机驱动电路,该电路是在集成芯片的驱动下进行的,可以为控制器更其他模块提供较大的电流最终集成电机驱动芯片,但是要特别注意这部分因为在电机驱动过程中有较大的分功率,会导致小车在进行调试时因为过大的电流导致小车电路发生堵塞现象,而使小车电路被烧毁,因此需要设计者避免这种现象,可以将驱动电路做成驱动板[2]。

最后是舵机接口电路。

在智能小车设计中,舵机主要保证小车可以顺利转向,因此舵机的运行电压、转向动作、转向速度都是需要考虑的因素,一般选择舵机时主要选择Futaba3010,选择供电电压为6V。

详解自动驾驶安全软件开发流程

详解自动驾驶安全软件开发流程

1 引言自动驾驶汽车开发越来越重视性能、质量和性价比,自动驾驶口碑成为新技术应用取得市场成功的关键,而口碑的建立依赖于相关软件开发流程、周期、时间和质量。

一家汽车企业只有拥有或者其软件开发供应商具有成熟的软件开发团队、软件开发流程、可复用的软件流程资源库,才能在日益激烈的自动驾驶产业竞争中获得一席之地。

目前,国际上应用于汽车行业的软件开发成熟度评估标准主要有能力成熟度模型集成(Capability Ma⁃turity Model IntegraTIon,CMMI)和汽车软件过程改进及能力评定模型框架(AutomoTIve Software Process Im⁃provement and Capacity DeterminaTIon,ASPICE)。

CMMI拥有全球公认的软件、产品和系统开发优良实践过程改进模型,能够帮助组织提升绩效,具有普适性,而ASPICE标准基于软件过程评估国际标准ISO15504,主要针对汽车行业软件开发过程框架,是现今汽车企业主要依据的过程评估标准。

与典型传统软件开发过程,例如线性瀑布模型相比,以V开发模式为导向的ASPICE软件过程域,从客户需求、系统架构、软件需求、软件架构、软件详细设计、单元构建到测试验证之间都存在一致性与双向追溯性关系,从最初的系统需求分析开始,测试人员就参与进行对应验证标准的设计,将设计和测试在项目开始初期就关联起来,在整个软件开发生命周期都有着重要的指导意义。

传统软件开发重视业务过程和文档,若软件开发人员完全按照设计文档进行程序开发,经过很长的开发周期后提交软件程序,会导致早期错误可能要等到开发过程后期才能发现,风险与修正成本不可控制。

敏捷软件开发模式强调沟通,通过各子项目的集成和运行,构建成上层软件项目,软件开发成员拥有充分的自主权,可自行寻找最佳工作方式完成工作,不必拘泥于设计文档。

开发过程循环迭代,开发人员针对前期需求,尽可能早地提交一个完整可独立运行的源程序,供测试验证,发现问题后提出需求变更请求,开发人员再次按照新需求开发并提交源程序,如此循环直至软件从整体构架至各个细节完全符合需求,从而实现完美的人机结合。

Arduino技术智能小车设计论文

Arduino技术智能小车设计论文

Arduino技术智能小车设计论文摘要:目前,研究Arduino人越来越多,众多技术爱好者都希望能亲手设计一个智能小车,智能小车的设计应该包括硬件设计和软件设计两部分,在硬件设计部分包括电源模块、单片机系统、循迹模块、鸵机转向模块、后轮电机驱动模块等内容,在软件设计部分包括PWM设计、舵机控制、后轮电机控制、主程序设计等几部分。

1 Arduino及智能小车的基本概念Arduino源于意大利的一位教授的研究,它一个开源的单板机控制器,向所有人开放其源代码、软硬件平台和开发环境,目前有大量的学者使用这一平台进行研究。

我们所说的智能小车应该区别于普通的遥控汽车和玩具,它应该具有环境的感知能力,通过各种传感器采集环境信息并做出相应反应,能按要求自动行驶,不需要人工操纵和干预。

2 智能小车车体结构设计智能小车首先应该确定小车的基本结构,其主要包括以下几个部分:(1)循迹模块:指小车利用红外发射装置发射红外线后,照射物体表面返回量的多少来测定小车的具体的位置,以进行循迹。

(2)舵机转向模块:指通过设置一定占空比的方波来控制舵机转过的角度,舵机由于力矩大,响应速度快等优点,经常使用在自动小车转向装置中。

(3)电机驱动模块:指通过专用电路对电机进行驱动,单片机给出控制信号控制电机正常运转。

(4)单片机模块:这是小车的控制中心,为设计方便,文章使用51单片机。

(5)电源模块:因设计需要,我们给小车单独供电,设置独立的电源模块,使之稳定运行。

3 硬件设计3.1 电源模块设计小车电源是整个系统稳定工作的前提,所以因此电源设计合理,小车电池电压要求在6-8V左右,在考虑电池损耗和稳压的情况下,我们采用低压差的稳压芯片。

同时为防止大电流器件对单片机形成的干扰,大电流器件和单片机要分开供电。

3.2 单片机系统设计单片机是小车的控制中心,设计一个小巧单片机系统是智能小车平稳运行重要保证,在设计单片机系统时需要合理考虑调试扩展的需要,原则上要把所有IO口引出,合理集成LED显示、蜂鸣器等外围模块。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由于今年组委会光电管和摄像头分开比赛。

所以传感器部分我们选择了光电管,比赛以小车的速度记成绩,为了让小车更快更稳得跑完全程,传感器的探测距离必须要远,既要有大的前瞻,普通的红外对管由于功率较小,探测距离增大时,干扰严重,所以我们自制了大功率对管,同时采用了程序控制脉冲发光的办法,有效的降低了发热,提高了系统的稳定性。

系统采用采用了7.2V 2000mAh Ni-Cd蓄电池作为系统能源,并且通过稳压电路分出6伏,5伏已分别给舵机和单片机供电。

直流电机驱动模块接收速度控制信号控制驱动电机运行,达到控制车速目的。

转向伺服模块控制舵机转向,进而控制智能车转弯。

速度测量模块实时测量智能车车速,用于系统的车速闭环控制,以精确控制车速。

系统充分使用了MC9S12DG128单片机的外围模块,具体使用到的模块包括:ADC模拟数字转换模块、定时器模块、PWM脉冲宽度调制模块、中断模块、I/O 端口和实时时钟模块等。

系统调试过程中,使用了组委会提供的代码调试环境CodeWarrior IDE,同时使用了清华的Plastid2软件进行了仿真试验。

图1.1 系统结构框图3.1舵机部分为了使转弯更加灵活,对舵机相关部分作了部分改动。

首先,我们将舵机力臂加长85mm。

这样,对于同样的转弯角度值,只需更小的舵机转角,减小了舵机转弯时惯性带来的弊端。

其次,我们将舵机反装,使舵机连杆水平,因为此时舵机提供的力全部用在转弯上。

3.2前轮部分为了增加前轮转弯时的稳定性,对前轮相关部分进行了部分改动。

首先,更改前后垫片的数量,使前轮主销后倾,这样,车轮具有更好的自动回正功能。

其次,更改连杆的长度,使车轮外倾,车轮转弯时,前半部分重心上移,促使赛车转弯更加稳定。

再次,我们通过更改舵机连杆的长度,增加前轮前束,同样增加了前轮的稳定性。

3.3底盘部分为了提高赛车运行时的稳定性,对地盘相关部分作了部分改动。

首先,前轮相关位置加垫片,降低了前轮重心。

其次,更改后轮车轴处的调节块,使后轮重心升高,这样,车身前倾,一定程度上,增加了车的稳定性。

3.4后轮部分首先,更换后轮轮距调节块,使后轮两轮之间间距加大。

这样,车在转弯时不容易产生侧滑。

其次,调节后轮差速,使赛车转弯更加灵活。

4.1电源部分为了能使智能车系统能正常工作,就需要对电池电压调节。

其中,单片机系统、车速传感器电路需要5V电压,路径识别的光电传感器和接收器电路电压工作为5V、伺服电机工作电压范围4.8V到6V(或直接由电池提供),直流电机可以使用7.2V 2000mAh Ni-cd蓄电池直接供电。

考虑到由于驱动电机引起的电压瞬间下降的现象,因此采用低压降的三端稳压器成为必然。

我们在采用lm7805,和lm7806作为稳牙芯片。

经试验电压纹波小,完全可以满足要求。

图4.2 7805电路图图4.3 电源模块示意图稳压电路电机图4.1系统电压调节图 5V对管单片机舵机测速板6V7.2V4.2电机驱动电路电机驱动使用飞思卡尔专用电机驱动芯片MC33886。

驱动电路如图4.4 所示。

为了增大驱动能力,减少单片发热量,电路采用两片MC33886 并联的方案。

系统使用PWM 控制电机转速,充分利用单片机的PWM 模块资源。

电机PWM 频率设定为8KHz。

MC33886芯片的工作电压为5-40V,导通电阻为140毫欧姆,PWM频率小于10KHz,具有短路保护、欠压保护、过温保护等功能。

电机驱动芯片安装在制作的电机驱动PCB板上,在PCB 板设计时,考虑到芯片散热问题,在芯片腹部设计了方型的通孔,实际运行效果表明芯片散热均匀,设计合理。

为了防止电动机突然停止时产生的电磁干扰,在电动机的两端焊接了一个0.1μF 滤波电容。

图4.4 两片MC33886并联使用图4.5 两片MC33886并联使用的实物图在图中可以看到,我们使用PWM23和PWM45作为电机驱动PWM信号,两个PWM通道级联可以使其输出更加精确。

在程序中,我们把PWM值直接转换成了以米/秒为单位的绝对速度,这样使智能车的速度更加直观切易于调试。

4.3测速电路由于考虑到成本需要,我们采用了红外对管和黑白码盘作为测速模块的硬件构成。

其中码盘为32格的黑白相间圆盘,如下图所示:图4.5 码盘红外传感器安装在正对码盘的前方,虽然这样做精度比编码器要低很多,但是成本低廉制作容易,如果智能车速度较快,可以考虑再减少码盘上黑白色条的数量即可。

当圆盘随着齿轮转动时,光电管接收到的反射光强弱交替变化,由此可以得到一系列高低电脉冲。

设置9S12 的ECT 模块,同时捕捉光电管输出的电脉冲的上升沿和下降沿。

通过累计一定时间内的脉冲数,或者记录相邻脉冲的间隔时间,可以得到和速度等价的参数值。

测速电路使用自行研制的红外反射式光电测速传感器。

速度测量电路使用红外反射式光电对管RPR220,自行制作的编码盘,比较电路等组成。

速度测量电路图2.8所示。

红外反射式光电对管的光敏三极管信号通过比较器处理后输入单片机的计数器模块,利用单片机的输入捕捉功能,处理智能车速度信息。

自制的编码盘有24道黑色条纹,电机旋转一周将产生24次输入捕捉中断。

单片机记录两次中断的时间间隔T 。

两次中断对应于智能车前进的距离S 为:16.5/24 cm,即0.6875cm ,其中16.5cm 为智能车后轮实测周长[7]。

智能车实时速度V(cm/s)的计算公式如下:s cm TT T S V /6875.024/5.16===4.4红外对管检测电路由于我们采用了大功率对管,所以红外对管的电路是整个电路中要求最高的,不紧要保证对管正常工作,而且还要考虑整个电路的能耗和发热问题。

经测试我们发现单个对管在通以100mA 到170mA 电流时可以。

保证抬高20到30厘米的距离。

此时每个对管的管压降为1.2到1.5伏。

为了进一步加大发光量,我们采用了双发射管的办法,即一个接受管对应两个发射管。

为了降低整体的能耗。

我们让同一对的发射管串联,14对发射管再并联。

同时使用了irf540进行开关控制。

控制对管脉冲发光。

开关频率为200HZ 。

这样既保证了大前瞻探测的需要,又降低了整体的能耗和对电源的冲击图4.7 先串联再并联的脉冲发光对管电路图。

图4.8对管实物图反面图4.9 对管实物图正面4.5拨码开关电路由于在智能车比赛开始后,不能够对智能车硬件及软件进行修改,在保证了硬件有效可靠的同时,软件有可能不能够适应新场地,所以设计拨码开关对智能车有关参数进行设置也是必要的。

拨码开关电路如下图所示:图4.9 拨码开关这是一个八段的拨码开关,我们把它成成上下连个部分,显然,每个部分都有16种状态,前四个来改变舵机参数,后四个改变直流电机参数,这样对于适应新的场地很有好处。

5.1路径搜索算法对于本控制系统采用14对光电对管的方案,单排排列在车体头部10cm处。

编号为6、7的光电对管处于正中央位置。

利用14对传感器进行道路识别。

传感器对白色的反射率比黑色的大。

单片机ADC读入值相应也大。

在程序中对传感器信号进行处理,判断传感器是否检测到黑色引导线。

将单个传感器对白色和黑色路面的ADC值之差分为平均的两段,每次处理实时传感器信号时,判断本次采样的ADC值与黑色路面ADC值之差落在两段中的哪一段。

如果在靠近黑色的一段,则判定该传感器检测到黑线,将该传感器对应的变量置为判定值1;如果在靠近白色的一段,则判定该传感器检测到白线,将该传感器对应的变量置为判定值1;为了增强判断的准确性,在对ADC值采样时,采用了中值滤波方法,以去除瞬间的干扰。

路径检测完后,将测的的路径值暂时存储,然后将路径信息传递给舵机和电机控制部分,以选择给定合适的转角和速度。

5.2舵机、电机的控制智能车的舵机和电机都采用了经典的PID控制方法。

但是由于舵机和电机性能的不同要求,分别对其进行了不同的修改。

PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。

其输入e (t)与输出u(t)的关系为式中积分的上下限分别是0和t因此它的传递函数为:G(s)=U(s)/E(s)=kp(1+1/(TI*s)+TD*s)其中kp为比例系数;TI为积分时间常数;TD为微分时间常数比例KP用来控制当前,误差值和一个负常数P(表示比例)相乘,然后和预定的值相加。

P只是在控制器的输出和系统的误差成比例的时候成立,KP能够快速的跟随变化量。

及时的产生与之相关的调节作用。

但是KP是有差调节,无法消除静态误差。

积分KI来控制过去,误差值是过去一段时间的误差和,然后乘以一个负常数I,然后和预定值相加。

I从过去的平均误差值来找到系统的输出结果和预定值的平均误差。

一个简单的比例系统会振荡,会在预定值的附近来回变化,因为系统无法消除多余的纠正。

通过加上一个负的平均误差比例值,平均的系统误差值就会总是减少。

所以,最终这个PID回路系统会在预定值定下来。

微分KD 来控制将来, 计算误差的一阶导,并和一个负常数D相乘,最后和预定值相加。

这个导数的控制会对系统的改变作出反应。

导数的结果越大,那么控制系统就对输出结果作出更快速的反应。

这个D参数也是PID被成为可预测的控制器的原因。

D参数对减少控制器短期的改变很有帮助。

一些实际中的速度缓慢的系统可以不需要D参数。

舵机PID由于舵机是一个具有大的延迟的执行机构,所以在PID控制中不能加入积分环节。

否则会导致小车震荡。

所以小车采用PD控制。

同时加入一个一阶惯性环节,构成不完全微分,给小车一个超前的调节。

实际使用中,为了减少计算时间,将位置式PID转化为增量式增量式PID公式:电机PID控制小车行使过程中,随着跑道的不同,需要配合不同的速度值,因此对电机的PID是一个给定值不断变化的PID。

小车的目标速度(Object_Speed)给定规则:1》小车在直道上,Object_Speed为最大值200。

2》小车在大弯道上,Object_Speed为160。

3》小车在小弯道或S型弯道上,Object_Speed为1204》小车冲出跑道,Object_Speed为70。

5》小车由直道进入弯道,Object_Speed逐渐减小。

6》小车由弯道进入直道,Object_Speed逐渐加大。

在实验中发现,PID的超调量主要在第一个波形中起作用,也即单速度由很大到很小的时候,或由低速突然加到高速的过程中,会出现很大的超调。

但是这个超调并不是有害的,因为,当速度要求突变的时候,往往是小车由直道入弯道,或者由弯道入直道的过程,这个过程往往需要很快的大加减速,而由于小车的惯性,一般的PID调节难以满足要求,这时使用大的超调量可以使小车有一个加速或刹车的过程,使之更好的达到要求速度。

6.1 Codewarrior 开发环境在整个开发调试过程中,使用Metrowerks公司为MC9S12 系列专门提供的全套开发工具(Freescale Codewarrior IDE 4.6)。

相关文档
最新文档