




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Labview的智能小车控制平台摘要:该课程设计是基于Labview的智能汽车控制平台,该平台建立在飞思卡尔单片机及51单片机控制芯片基础上,基于Labview仿真。采用无线控制小车转向,加速,刹车系统。该设计是测控专业集单片机控制,电路,软件编程于一体的平台练习,是集测控专业所学的一门综合提高学生素质的课程设计。 关键词:Labview 智能汽车 飞思卡尔单片机 测控Abstract: the course is designed based on the intelligent vehicle control platform Labview, this platform based on SCM and 51 single-chip microcomputer control freescale Labview, based on the chip. Using radiocontrol car accelerated, braking system, steering. This design is a professional sets single-chip microcomputer control, the control circuit and the software programming in one of the platform, which is a professional knowledge of measurement to improve students comprehensive quality of the course design.Keywords: intelligent vehicle freescale microcontroller measure-control Labview一、 单片机系统的组成1改装原因:(1):市面上的游戏方向盘都是USB通信协议,用户不了解协议内容,无法用于自己控制要求。(2):USB通信优势虽然非常明显,但由于其协议复杂,且受其通信距离限制,USB信号一般只能在几米的传输范围内,较串口较短,因此选择了简易可行的串口协议。2. 设计步骤:(1):了解内部工作及传感原理。拆开游戏方向盘,结果发现传感原理非常简单,仅靠变阻器和按键传递控制信号。(2):使用一款自己熟悉的单片机(AT89S52)根据硬件电路接口电路设计自己的硬件控制电路板卡。其中包括方向盘指挥输入部件和与PC机通信的串口通信模块。(3):编写自己的用户应用程序,创建自己和PC的通信协议,发挥软件编程的灵活性。3. 硬件原理图说明:(1):核心控制芯片选用AT89S52,其各接口使用情况如下图所示:0834_DI、0834_DO、0834_CLK、 0834_CS 用于AD采样的接口。图(7)核心控制芯片89S52(2)AD转换及采样接口电路说明:采样电路的等效电路图图所示:图(8)AD转换油门和刹车:注:刹车和油门的机械结构将脚下力转换为对应变阻器的阻止变化,只需采样阻值大小即可判断力的大小。经测量知:刹力越大,电阻值越小。 图(9)油门和刹车等效图接口3、4之间接到游戏方向盘的刹车控制变阻器两端,相当于接一可变电阻。接口1、2之间接到游戏方向盘的油门控制变阻器两端,相当于接一可变电阻。AD_Brake和AD_Thtottle用于AD采样油门和刹车的模拟信号,R18,R19用于采样时分压。方向盘:方向盘的转向信号仍是模拟信号,用AD采样之后即可判断转动方向及幅度。接口的1、2、3分别对应于三端滑动变阻器的三个端子。 图(10)方向盘等效电路 左转时1、2之间电阻逐渐变小,AD_L的分压将逐渐变大。右转时2、3之间的电阻逐渐变小,AD_R的分压将逐渐变大。AD转换电路图:AD芯片使用的是TI公司的一款8位4通道串行AD芯片,正好满足要求。与单片机的接口为SPI的接口,具体说明和使用请参考芯片资料里的TLC0834使用范例文档,也可参考该芯 图(11)AD转换电路 片厂商提供的技术文档,内含具体 操作时序。 图(12)按键电路 (3)按键接口硬件说明按键的设计依赖于具体的硬件结构,在此给出说明。下图为按键的设计原理(并非实际电路),由于游戏方向盘上按键单独设计已经由机械结构确定,故在主控制板上只是留出对应接口(J)即可。分布在方向盘的各个按键小板原理图如下所示(GND、KEY1KEYn为留出的插槽)该游戏方向盘上共计有19个用户按键使用(包含最中间的复位按键),具体排列如下。图(13)按键小板对应于游戏方向盘上5、6、7、8、9、10、11、12和中间的cruise(我们设为复位键)的按键。见下图: 图(13)方向盘按键对应于对应于游戏方向盘上UP、DOWN、LEFT、RIGHT的按键。见下图:图(14)UP、DOWN、LEFT、RIGHT的按键对应于对应于游戏方向盘上1、2、3、4的按键。见下图:对应于对应于游戏方向盘上左右两个的按键,在此设为中断按键,方便用于处理实时信息。见下图:另外由于单片机资源较多,仍有多余的IO口6个,在此引出以便于扩展外部功能。见下图:(4)振动器驱动硬件电路为增强游戏者的手感,游戏方向盘上有两个振动器,在此给出驱动电路图及说明如下:三级管在此既作为单片机控制的开关,又充当功率放大的角色。只需给Mor1、Mor2给出高电平即可驱动负载,低电平断开。图(15)驱动电路(5)在系统编程接口现今单片机一般都支持ISP(在系统编程),这样大大方便了单片机开发用户,在此也引出了ISP的接口规范,供参考如下:该款下载线使用的是网上非常流行的USBASP,支持USB下载和供电双功能,并且可以同时下载AT89s5x和AVR单片机(Atmage16),详细可以参考网上相关资料。 图(16)系统编程图(6)串口通信硬件说明为了满足串口传输的电平规范,在此需要设计电平转换电路,电路原理来源于Maxim公司的max232芯片说明文档。图(17)串口通信电路选用主要材料清单:注:材料清单中元件除发光二极管以外均要求贴片封装。型号 封装 数量 厂商 说明AT89S52 TQFP44 12 ATMEL 单片机TLC0834 SOP-14 12 TI 8位串行AD转换芯片MAX232 SOP-16 12 MAXIM 串口电平转换芯片7805(LM7805) TO-220 12 ST 5V电源稳压芯片9013(8050) SOT23 24(30) NPN三极管有极性贴片钽电容(1uF,10uF) 1206 有极性贴片电容二、 Labview控制平台的设计1. 基本界面组成(1) 串口1:用于连接单片机和PC机,作为方向盘数据传送的枢纽。(2) 串口2:用于连接PC机和无线传输模块,主要是给小车发送相关的数据,实时调整小车的状态。(3) 显示控件:本次设计至少需要显示四个参数,方向(Direction)、转角(Angle)、速度(Speed)、刹车(Brake)。(4) 全局变量、美化界面相关控件。2. 串口1的协议:(1) PC机先往51单片机发送字符“1”,作为51单片机开始发送数据的命令。(2) 51单片机发送的一帧数据格式应为:Dx Ax3x2x1 Bx2x1 Tx2x1 S x x x xx:表示数据,范围为0 256,与ASCII码表一一对应。(3) D为方向标识符,后面紧跟的数据必须为0或1(对应的十六制数为30H和31H)。0为前进,1为后退,默认为0.(4) A为方向标识符,后面紧跟的第一位数是左右转标识符,取值为0或1,为为右转,1为左转。第二、三位分别为转角(Angle)的十位和个位,取值范围为0 60。(5) B为刹车标识符,后面数据的第一、二位分别为刹车(Brake)值的十位和个位,取值范围为0 30,即把刹车档分为了30档。(6) T为油门标识符,后面数据的第一、二位分别为速度(Speed)值的个位和小数点后的第一位,取值范围为0.0 3.0。(7) S为传送到小车单片机的标识符,用于PC机识别该信息后向串口2发送由51单片机读取到的AD值。(8) S后面的数据均由单片机得到的AD值,具体范围见串口2的协议。3. 设计思路根据制定的协议要求:小车发送上来的数据严格遵守一定的数据格式,在实际数据前面都有一个标识符:D为方向,A为转角,B 为刹车,T为油门,因此在Labview中就必须判断发送上来的字符(串口每次只能发送一个字符内容)中是4个的哪一个标识符,后面紧跟的数据便是需要送给程序处理的。根据以上分析,在Labview的程序设计中采用并行程序的处理方式,判断从串口1送上来的数据应该送到哪个控件上显示,单片机再发送标识符S,PC机收到此信息后便把处理后的数据送到串口2,把相关的数据送到小车上,小车根据收到的信息做出相应的决策。传送完一帧数据后开始下一帧数据的处理,不断循环执行。4. 界面程序图图(1) 串口1和串口2初始化图(2)方向D处理程序图(3)转角A处理程序图(4)刹车B处理程序图(5)油门T和串口2处理程序5. 前面板模型图(6)智能小车控制面板显示图三、 智能小车的控制原理1. PC机Labview程序与小车通讯协议(1)、方式::PC机Labview程序通过无线串口与小车通讯。(2)、系统串口协议内容:1、当PC机接到小车单片机发送的信号“1”(数据类型为unsigned char)时,PC机便开始发送一帧数据,此时PC机的Labview程序一次性给小车发送四个数据,发送完毕后直到小车下一次发送回来的信号“1”时才再发数据。 例如发送的数据为: 0 35 70 -48 分别代表:前进/后退 油门 刹车 方向盘转角(注意顺序不能变)(3)、数据说明如下:前进/后退(DirectionFlag): 0表示前进,1表示后退(数据类型为unsigned char型),只有两种状态。 油门(ThrottleData): 数据范围0127,0表示小车速度为0,127表示速度为3.0m/s,线性递增(数据类型为unsigned char型,共128档。 刹车(BrakeData): 数据范围0127,0表示未踩刹车板,小车速度为当前速度,127表示刹车板踩到底,小车停止(数据类型为unsigned char型)。 方向盘(AngleData): 数据范围-6060,-60表示小车左转60度,60表示右转60度,即左负右正,0表示正中间,小车未转向(数据类型为char型)。2. 小车模型(1)小车模型简介模型车尺寸:四轮驱动,长宽高为27017096(单位:mm)电机参数为:DC 7.2V ND380舵机参数为:IPS017伺服器电池参数为:7.2V 2000mAh(2)核心芯片采用飞思卡尔公司生产的16位单片机mc9s12xs128作为主控芯片。图(18)小车图片(3)XL105-232AP2 无线模块简介PC机与小车通讯用无线串口XL105-232AP2。XL105-232AP2 是 UART 接口半双工无线传输模块,内置天线,体积小巧,适合 100 米内的无线通讯连接。模块工作在 2400-2483MHz 公用频段 。XL105-232AP2 的各项参数如:串口速率、工作通道、产品ID等相关参数可以通过软件设置。图(19)无线串口XL105-232AP2图片3、系统框图说明: 1.为了保证数据能够有条不紊地在51单片机、PC机、飞思卡尔单片机间正常地通讯,必须有相应的协调信号,统一采用发送信号“1”来识别是否发送一帧数据。2.本次课程设计需要采用双串口通讯,对于笔记本来说需要两个USB接口,其中一个转换成RS232串口,另外一个接无线传输模块。串口1接收串口1发送串口2接收串口2发送PC机Labview显示界面51单片机串口1发送串口1接收IOIO方向盘按键(前进、后退)油门、刹车、左右方向AD转换单片机发送方向盘信息给PC机,如油门AD转换的结果PC机发送信号“1”,单片机收到此信号后便开始发送一帧数据串口2接收串口2发送PC机发送一帧数据给小车,必须有前进(后退)、油门、刹车、方向盘转角4个数据,且顺序不能改变,范围必须符合以上协议。小车上的单片机发送信号“1”,PC机接收到此信号后便开始发送数据,4数据是连续发送。小车上的飞思卡尔单片机小车上的串口通讯通过无线传输模块实现,即PC机需要两个串口,可用USB转串口。图(20)系统框图附录1:飞思卡尔智能小车程序/Main module of MKCAR 摩垦智卡#include /* common defines and macros */#include /* derivative information */#includestdio.h#includestdlib.h#includemath.h#pragma LINK_INFO DERIVATIVE mc9s12xs128b/ system & inits 系统及初始化 / #define SYNE_SETTING 4#define REFDV_SEETTING 1 / PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1) busclk=40M#define delay _asm nop;#define ENSPDTEST TIE_C2I = 1;#define DISSPDTEST TIE_C2I = 0;#define ENPID PITINTE_PINTE0=1;#define DISPID PITINTE_PINTE0=0; #define MOTORFORWORD PWME_PWME3=0;PWMCNT01=0; PWME_PWME1=1;#define MOTORBACK PWME_PWME1=0;PWMCNT23=0; PWME_PWME3=1;#define CARSTOP PWME=0;#define MAXSPEED 128unsigned int Receive=0;unsigned int ReceiveFlag=0;float speed,Throttlespeed,Brakespeed;unsigned char Cardata5,PreCartata5; void init_sys(byte p1,byte p2) init_CRG(p1,p2); init_interupt(); init_port(); init_motor(); init_servo(); init_PIT(); / user i/o 串行通信函数,用于调试 / char strDisp80=hellon;/*-串口初始化*/void SciInit() unsigned int bd; bd=(unsigned int)(80000000UL /* OSC freq */ / 2) / 9600 /* baud rate */ / 16 /*factor*/); bd+; SCI0BDH = (unsigned char)(bd8)&0x00ff); SCI0BDL = (unsigned char)(bd&0xff); /(unsigned char)(128000000UL /* OSC freq */ / 2) / 19200 /* baud rate */ / 16 /*factor*/); SCI0CR1=0;/*normal,no parity*/ SCI0CR2=0X2C; /*RIE=1,TE=1,RE=1*/ /SCI0CR2=0X08;/*发射端程序-单字节发送*/void SciSend(unsigned char text) / unsigned char a; /temp=SCI0SR1; /*clear flag*/ /* for(;) a=SCI0SR1; if( (a&0x40)=0x40 ) break; */while (!(SCI0SR1&0x80); /* wait for output buffer empty */SCI0DRL=text; /*-接受部分(unsigned char型数据)*/char SciRead(void) /unsigned char temp; unsigned char result; /temp=SCI0SR1; /clear flag while(!(SCI0SR1&0x20); result=SCI0DRL; return result;/*wsl*/ void mkTasks(void) byte iSpdCar=1; static int bDir=1; float recd_T_speed,recd_B_speed; /接收到的速度值 DisableInterrupts; init_sys(SYNE_SETTING,REFDV_SEETTING); SciInit(); EnableInterrupts ; StartSpeedTest();/ speed pid action for(;) while(ReceiveFlag) ReceiveFlag=0; / 前进和后退控制/ if(Cardata0!=PreCartata0) if (unsigned int)Cardata0)=0x30) MOTORFORWORD; else MOTORBACK; /油门和刹车控制/ Throttlespeed=(float)(Cardata1*10)/MAXSPEED)*(0.3); SetCarSpeed(Throttlespeed); if(unsigned int)Cardata20x50) CARSTOP; /方向盘控制/ if(Cardata3!=PreCartata3) if(unsigned int)Cardata3=0x3c) PWMDTY67=3750+(unsigned int)Cardata3)*30; else PWMDTY67=3750-(256-(unsigned int)Cardata3)*30; strcpy(PreCartata,Cardata); /* 程序起点 main */ void main(void) mkTasks();/中断程序区/#pragma CODE_SEG _NEAR_SEG NON_BANKED void interrupt 20 sci_interrupt(void) / serial com interrupt/ not used CardataReceive=SciRead(); +Receive; if(Receive=4) Receive=0; ReceiveFlag=1;SciSend(1); #pragma CODE_SEG DEFAULT 附录2:51单片机程序#include#include #include#define uchar unsigned char #define uint unsigned intsbit mor1=P12;sbit mor2=P13;sbit key_int0=P32;sbit key_int1=P33;sbit key_1=P00;void clk(void);uchar tlc_0834(uchar ch);void send_byte(uchar c);void init_uart(void);void delay(uint ms);void SendInformation();void SendDirection();void SendAngle();void SendThrottle();void SendBrake();void SendToXS128();sbit adc_clk=P16;sbit adc_di=P14;sbit adc_do=P15;sbit adc_cs=P17;uchar CanRecive=0;uchar BrakeData,ThrottleData,DirectionData;/四个需发送信息。uchar BrakeDataTemp,ThrottleDataTemp , uchar AngleData1,AngleData2;char AngleData;/发送到XS128的数据/throttle:油门(0 127)/brake:刹车(0 127)/anlge:转角(-60 60)char throttle=60,brake=0,angle=-45; union serils_floatfloat var_float;uchar var_char4;void main()float f=124.75;mor1=0;mor2=0; /关振动器init_uart();EA=1;EX0=1;EX1=1;IT0=1;IT1=1;while(1)BrakeDataTemp=tlc_0834(0); /第0通道采集为刹车的数据.BrakeData= (uchar) (0.359*(BrakeDataTemp-42) ); brake= (uchar) (1.512*(BrakeDataTemp-42) ); ThrottleDataTemp=tlc_0834(1); /第2通道采集的油门数据.ThrottleData= (uchar) ( 0.359*(ThrottleDataTemp-42) );throttle= (uchar) (1.512*(BrakeDataTemp-42) ); AngleData1=tlc_0834(2); /第三和第四通道共同采集方向盘转角信号.,?AngleData2=tlc_0834(3);AngleData= (char) ( AngleData1- AngleData2 ); /范围为-60-60。angle=AngleData;SendInformation();uchar tlc_0834(uchar ch) /ch为要选择的通道uchar j,p,s;p=0;switch(ch)case 0:s=0x0c;break;case 1:s=0x0e;break;case 2:s=0x0d;break;case 3:s=0x0f;break;default: s=0x0c;break;adc_clk=0;adc_di=0;adc_cs=1;adc_cs=0;for(j=4;j=1;j-) /起始和通道选择信号,此时上升沿写入数据。clk();adc_di=s&0x08;s=s1;clk();clk();adc_clk=1;for(j=0;j8;j+) /此时下降沿读取数据p=(p1)|adc_do;clk();for(j=0;j0x7b) p=0x7e;if(p0x77) p=0x7e;if(p0x7d) p=0x7d;/规定采样上下限分别为0x4和0x7d!?if(p0x7d) p=0x7d;/规定采样上下限分别为0x4和0x7d。if(p0x43) p=0x42;break;default: break;return (p);void clk(void) unsigned char i; adc_clk=0; for(i=0;i2;i+); adc_clk=1; for(i=0;i2;i+); void init_uart(void)TMOD=0x20; /定时器1为方式2,波特率发生器SCON=0x50; /允许串行接收,串口于方式1,8位,可变波特率 TH1 = 0xFD; /9600波特率,11.0592MHZ TL1 = 0xFD; PCON = 0x00; EA = 1; ES = 1; TR1 = 1; /start T1TI=0;void UARTInterrupt(void) interrupt 4 /串口中断服务子程序 uchar CharTemp;if(RI) CharTemp=SBUF;if(CharTemp=0x31)/READY信号只能是1,即0x31 CanRecive=1;/能够继续接收信息,告诉单片机可以发送方向盘信息 RI = 0; else /send interrupt TI = 0;void send_byte(uchar c) /发送一字节数据SBUF=c;/while(TI=0);/TI=0;void delay(uint ms)uint i,j;for(i=0;ims;i+)for(j=0;j120;j+);/发送方向函数/void SendDirection()send_byte(D);/先发送字母D让PC机可以识别delay(1);if(1=DirectionData)send_byte(1);delay(1);if(0=DirectionData)send_byte(0); delay(1);/发送转角函数/void SendAngle()uchar shi=0,ge=0;send_byte(A);/发送识别字母Adelay(1);if(AngleData0)send_byte(1); /如果需左转,则发送1,表示左转,0表示右转delay(1);AngleData=abs(AngleData); /把转角转换成正数elsesend_byte(0);del
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厂长招聘面试题及答案
- 江苏省南京市鼓楼实验中学2026届八年级数学第一学期期末检测试题含解析
- 2026届江苏省常州市溧阳市九年级数学第一学期期末质量跟踪监视试题含解析
- 天津市北辰区北仓二中学2026届八年级数学第一学期期末预测试题含解析
- 战马阅读测试题及答案
- 注册化工考试题目及答案
- 小班英语试题及答案
- 销售考试题及答案
- 2025年宇宙主题考试题及答案
- 北京集中考试题库及答案
- TB 10012-2019 铁路工程地质勘察规范
- 弱电维护方案
- 砼回弹强度自动计算表
- 国开2023春《言语交际》形考任务1-6参考答案
- 抽油机井示功图分析判断1
- 机电一体化说专业比赛
- GB/T 39141.3-2022无机和蓝宝石手表玻璃第3部分:定性标准和试验方法
- GB/T 1142-2004套式扩孔钻
- 2022年天津市河东区生态环境系统事业单位招聘笔试试题及答案
- 研究生学术道德与学术规范课件
- 浦发银行个人信用报告异议申请表
评论
0/150
提交评论