基于Labview的智能小车控制平台_第1页
基于Labview的智能小车控制平台_第2页
基于Labview的智能小车控制平台_第3页
基于Labview的智能小车控制平台_第4页
基于Labview的智能小车控制平台_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于Labview的智能小车控制平 基于Labview的智能小车控制平台 该课程设计是基于Labview的智能汽车控制平台,该平台建立在飞思 卡尔单片机及51单片机控制芯片基础上,基于Labview仿真。采用无线控制小 车转向,加速,刹车系统。该设计是测控专业集单片机控制,电路,软件编程 于一体的平台练习,是集测控专业所学的一门综合提高学生素质的课程设计。 Abstract: the 关键词:Labview智能汽车 飞思卡尔单片机 测控 course is designed based on the intelligent vehicle control platform Labview, t

2、his 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 p

3、latform, which is a professional knowledge of measurement to improve students comprehensive quality of the course design Keywords: intelligent vehicle freescalemicrocontroller 26 measure-control Labview 一、 单片机系统的组成 1. 改装原因: (1) :市面上的游戏方向盘都是USB通信协议,用户不了解协议内容, 无法用于自己控制要求。 (2) : USB通信优势虽然非常明显,但由于其协议复杂,

4、且受其通信距 离限制,USB信号一般只能在几米的传输范围内,较串口较短,因此选 择了简易可行的串口协议。 2. 设计步骤: (1) : 了解内部工作及传感原理。拆开游戏方向盘,结果发现传感原理 非常简单,仅靠变阻器和按键传递控制信号。 (2) :使用一款自己熟悉的单片机(AT89S52)根据硬件电路接口电路 设计自己的硬件控制电路板卡。其中包括方向盘指挥输入部件和与PC 机通信的串口通信模块。 (3) :编写自己的用户应用程序,创建自己和PC的通信协议,发挥软 件编程的灵活性。 3硬件原理图说明: RXD ZT 严EV: AT9S52-24AC KEY S KEY * PO.UADI P0.3

5、AD3 PW【X P0.5 AD5 P0.6AD6 po/vait NIC NIC NIC NIC PI. CLK V+ VCC CH0 CH1 DO CH2 CH3 CS AGND DI REF DGND SARS ADC0834AIN 7 5. vcc )0 0834 DO 1 2 0834 CS 】3 0834 DI Ik/ GND AD转换接门电路 AD芯片使用的是TI公司的 一款8位4通道串行AD芯片, 正好满足要求。与单片机的接口 为SPI的接口,具体说明和使用 请参考芯片资料里的TLC0834 使用范例文档,也可参考该芯 图(11) AD转换电路 片厂商提供的技术文档,内 含具体

6、 操作时序。 图(12)按键电路 (3)按键接口硬件说明 按键的设计依赖于具体的硬件结构,在 此给出说明。 下图为按键的设计原理(并非实际电路),由于游戏方向盘上按键单独 设计已经由机械结构确定,故在主控制板上只是留出对应接口 (J)即可。 GND KEV2 KEYll 分布在方向盘的各个按键小板原理图如下所示 (GND、KEY1 -KEY 11为留出的插槽) 图(13)按键小板 对应于游戏方向盘上5、6、7、 11、12和中间的cruise 键。见下图: 该游戏方向盘上共计有19个用户按键使用(包含最 中间的复位按键),具体排列如下。 26 的多余接I】以开J J -扩展功能 P13 KEY

7、 DOWN KEY RIGHT KEY LEFT KEY UP ;1 GND 图(13)方向盘按键 对应于对应于游戏方向盘上UP、DOWN、 LEFT. RIGHT的按键。见下图: 图(14) UP、DOWN. LEFT、RIGHT 的按彳 GND 对应于对应于游戏方向盘上K 2. 3. 4 的按键。见下图: P12 1XT KEY1 GND 1NT KEY2 P9 1 2 3 INT_KEY KEY 1 KEY 3 KEY 4 KEV 2 2 3 4 5 1234 对应于 对应于游戏方向盘上左右两个的按键,在此设为 中断按键,方便用于处理实时信息。见下图: 另外由于单片机资源较多,仍有多余的

8、IO MHDR1X6 口 6个,在此引出以便于扩展外部功能。见下图: (4) 振动器驱动硬件电路 为增强游戏者的手感,游戏方向盘上有两个振动器,在此给出驱动电路图及 说明如下: VCC GND GND 功率枚大,用驰动抿动蛊 三级管在此既作为 单片机控制的开关,又充 当功率放大的角色。只需 给 Morl. Mor2给出高 电平即可驱动负载,低 电平断开。 图(15)驱动电路 (5) 在系统编程接口 现今单片机一般都支持ISP (在系统编程),这样大大方便了单片机开发 VCC IGND P3 ISP (In Svstem Program)编程接口 0834_CS对应于SCK (Pl. 7) 08

9、34_CLK对应于MISO (Pl. 6) 0834_D0对应于HOSI (Pl. 5) REST对应丁-RST复位 用户,在此也引出了 isp的接口规范,供参考如下: 该款下载线使用的是 网上非常流行的 USB ASP,支持USB下载 和供电双功能,并且可以 同时下载AT89s5x和AVR 单片机(Atmagel6),详细 可以参考网上相关资料。 图(16)系统编程图 图(17)串口通信电路 (6) 串口通信硬件说明 为了满足串口传输的电 平规范,在此需要设计电平转 换电路,电路原理来源于 Maxim公司的max232芯片说 明文档。 选用主要材料清单: 注:材料清单中元件除发光二极管以外均

10、要求贴片封装。 型号 封装 数量 厂商 说明 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三极 有极性贴片锂电容(luF, 10uF) 1206 有极性贴片电 二、Labview控制平台的设计 1. 基本界面组成 (1) 串口 1: 用于连接单片机和PC机,作为方向盘数据传送的枢纽。 (2) 串口 2: 用于连接PC机和无线

11、传输模块,主要是给小车发送相关的数据,实时 调整小车的状态。 (3) 显示控件: 本次设计至少需要显示四个参数,方向(Direction).转角(Angle)、速 度(Speed)、刹车(Brake)o (4) 全局变量、美化界面相关控件。 2串口 1的协议: (1) PC机先往51单片机发送字符“1”,作为51单片机开始发送数据的命令。 (2) 51单片机发送的一帧数据格式应为: Dx Ax3x2xl Bx2xl Tx2xl S x x x x x:表示数据,范围为0 256,与ASCII码表一一对应。 (3) D为方向标识符,后面紧跟的数据必须为0或1 (对应的十六制数为30H 和31H)

12、。0为前进,1为后退,默认为0. (4) A为方向标识符,后面紧跟的第一位数是左右转标识符,取值为0或1,为 为右转,1为左转。第二、三位分别为转角(Angh)的十位和个位,取 值范围为0 60。 (5) B为刹车标识符,后面数据的第一、二位分别为刹车(Brake)值的十位 和个位,取值范围为0 30,即把刹车档分为了 30档。 (6) T为油门标识符,后面数据的第一、二位分别为速度(Speed)值的个位和 小数点后的笫一位,取值范围为003.0。 (7)S为传送到小车单片机的标识符,用于PC机识别该信息后向串口 2发送 由51单片机读取到的AD值。 (8)S后面的数据均由单片机得到的AD值,

13、具体范围见串口 2的协议。 3. 设计思路 根据制定的协议要求:小车发送上来的数据严格遵守一定的数据格 式,在实际数据前面都有一个标识符:D为方向,A为转角,B为刹车, T为油门,因此在Labview中就必须判断发送上来的字符(串口每次只能 发送一个字符内容)中是4个的哪一个标识符,后面紧跟的数据便是需要 送给程序处理的。 根据以上分析,在Labview的程序设计中采用并行程序的处理方式, 判断从串口 1送上来的数据应该送到哪个控件上显示,单片机再发送标识 符S, PC机收到此信息后便把处理后的数据送到串口 2,把相关的数据 送到小车上,小车根据收到的信息做出相应的决策。传送完一帧数据后开 始

14、下一帧数据的处理,不断循环执行。 4. 界面程序图 逢捋单片机1 1 1*0 11 回 I9 #define ENSPDTEST TIE_C2I = 1; #define DISSPDTEST TIE_C2I = 0; #define ENPIDPITINTE_PINTEO=1; #define DISPIDPITINTE_PINTE0=0; #defineMOTORFORWORD PWME_PWME3=0;PWMCNT01=0; PWME_PWME1=1; #defineMOTORBACK PWME_PWMEl=0;PWMCNT23=0; PWME_PWME3=1; #define CARS

15、TOP PWME=0; #define MAXSPEED 128 unsigned int Receive=0; unsigned int ReceiveFlag=0; float speedThrottlespeed,Brakespeed; unsigned char Cardata5,PreCartata5; void init_sys(byte pl,byte p2) init_CRG(pl,p2); init_interupt(); init_port(); 二* baaOso 冬 T10000008ZI)UElp pau.2fslm)、 oJXOQPeUElp 1耳) H TOHOI

16、OS oJOOXOQooAcpq)UElp pau 尽 Sun) n huhoios 匸+pq 91 一 Ac pnEq 冬 0096 N 二舶 bay Oso 乞floioooQO)a.s pau.2fslmlrpq fpq -III pau.2fslm 9-SI-3S P-SA J5O 喘一LP8dsKIhs jmp 三二 三三三三三三三三三三三三三三三三三三三三三三三三二 -=-=抵理4旺 蘇ewQ0/| ksn 三三三三三三三三三二 二三 三三三三三三三三三三三三三三三三三三三三三三三三二 oud=启 oOAJasJfiI oJOJOUIJflI 2) / 19200 /* baud

17、rate */ / 16 /factor*/); SCI0CRl=0;/*normal,no parity*/ SCI0CR2=0X2C; /*RIE=1,TE=1,RE=1勺 /SCI0CR2=0X08; /*发射端程序 单字节发送*/ void SciSend(unsigned char text) / unsigned char a; /temp=SCI0SRl; /clear flag*/ /* for(;) a=SCI0SRl; if( (a */ while (!(SCI0SR 1/* wait for output buffer empty */ SCI0DRL=text; 接受

18、部分(unsigned char型数 据)*/ char SciRead(void) /clear flag /unsigned char temp; unsigned char result; /temp=SCIOSRl; while(! (SCIOSR 1 result=SCIODRL; return result; / 2 2 / rj rjrjrj rj rjrj rj rjrjr| / B # rjrj rj rjrjrj rj rjrjrj rj rjrjrj rj rjrj/ void mkTasks(void) byte iSpdCar=l; static int bDir=l

19、; float recd_T_speed,recd_B_speed; /接收到 的速度值 Disablelnterrupts; init_sys(SYNE_SETTING,REFDV_SEETTING) Scilmt(); Enablelnterrupts ; StartSpeedTest();/ speed pid action for(;) while(ReceiveFlag) ReceiveFlag=O; lllllllllllllllllllllllll 前进和后退控制/ if(CardataO!=PreCartataO) if (unsigned int)Cardata0)=0 x3

20、0) MOTORFORWORD; else MOTORBACK; /油门和刹车控制/ Throttlespeed=(float)(CardatalH:10)/MAXSP EED)*(03); SetCarSpeed(Throttlespeed); if(unsigned int)Cardata20 x50) CARSTOP; lllllllllllllllllllllllll 方向盘控制/ if(Cardata3!=PreCartata3) if(unsigned int)Cardata3 r|w r|r|w r| r|w r| r|w J void main(void) mkTasks();

21、 llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll Illi lllllllllllllllllllllllllllllllll 中断程序区 lllllllllllllllllllllllllllllllllll / Illi #pragma CODE_SEG _NEAR_SEG NON_BANKED void interrupt 20 sci_interrupt(void)/ serial com interrupt/ not used CardataReceive=SciRead(); +R

22、eceive; if(Receive=4)Receive=O; ReceiveFlag=1; SciSend(l); #pragma CODE_SEG DEFAULT 附录2: 51单片机程序 #include include #include 井define uchar unsigned char 片define uint unsigned int sbit morl=Pl2; sbit mor2=Pl*3; sbit O=P3A2; sbit key_intl二P33; sbit key_l二POP; void elk (void); uchar tlc_0834(uchar

23、 ch); void send_byte(uchar c); void init.uart(void); void delay(uint ms); void Sendinformation 0; void SendDircctionO ; void SendAngleO ; void SendThrottleO; void SendBrake (); void SendToXS128(); sbit adc_clk=Pl*6; sbit adc.di二P4; sbit adc_do=Pl*5; sbit adc_cs二P7; uchar CanRecive=O; uchar BrakcData

24、, ThrottleData,DirectionData;/四个需发送信息。 uchar BrakeDataTemp, ThrottleDataTemp , uchar AngleDatal AngleData2; char AngleData; /发送到 XS128 的数据 / /throttle:油门(0 127) /brake:刹车(0 127) /anlgc:转角(-60 60) char throttle=60, brake=0,且ngle=-45; union serils.float float var.float; uchar var_char4; ; void mainO f

25、loat f=124. 75; mor 1=0; mor2=0; 关振动器 init.uart0; EA=1; EXO=1; EX1=1; IT0=l; IT1=1; while(1) BrakeDataTemp=tlc.O834(0); 第0通道采集为刹车的数据. BrakeData= (uchar) (0. 359*(BrakeDataTcmp-42); brake二(uchar) (1. 512*(BrakeDataTemp-42); ThrottleDataTemp=tlc_0834 (1); 第2通道采集的油门数据 ThrottlcData= (uchar) ( 0. 359*( T

26、hro111cDataTemp-42); throttle= (uchar) (1. 512*(BrakeDataTemp-42); AngleDatal=tlc_0834(2);第三和第四通道共同采集方向盘转角信号.,? AngleData2=tlc_0834(3); AngleData= (char) ( AngleDatal- AngleData2 ); 范围为6060。 anglc=AngleData; S endInformat i on 0; uchar tlc_0834 (uchar ch) /ch为要选择的通道 uchar j,p, s; P=0; switch (ch) ca

27、se 0: s=0 x0c; break;case 1: s=OxOe; break; case 2: s=OxOd; break; case 3: s=OxOf; break; default: s=OxOc;break; adc_clk=O; adc_di=O; adc_cs=l; adc cs=O: for(j=4;j=l; j-)起始和通道选择信号.此时上升沿写入数据。 clk(); adc_di=s s=sl; clk(); clkO; adc_clk=l; for(j=0;J8;j+) p= (pl) ladc.do; clkO; for(J=0;j0 x7b) if(p0 x77

28、) if(p0 x7d) if(p0 x7d)p=0 x7d; if(p0 x43)p=0 x42; ; break; default: break; return (p); void elk (void) unsigned char i; adc_clk=0; for(i=0;i2;i卄); adc_clk=l; for(i=0;i2;i-H-); void init_uart(void) TM0D=0 x20; SC0N=0 x50; TH1 = OxFD; TL1 = OxFD; 定时器1为方式2,波特率发生器 允许串行接收,串口于方式1, 8位,可变波特率 /9600波特率,11.05

29、92MHZ PCON = 0 x00; EA = 1; ES = 1; TRI = 1; /start T1 TI=0; void UARTIntcrrupt (void) interrupt 4 串 口中断服务子程序 uchar CharTemp; if (RI) CharTemp=SBUF; if(CharTemp=0 x31) r /READY信号只能是1,即0 x31 t CanRccive=l; /能够继续接收信息,告诉单片机可以发送方向盘信息 RI = 0; else /send interrupt TI = 0; 26 void send.byte (uchar c) 发送一字节

30、数据 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 SendDirection0 send_byte CD); delay (1); 先发送字母D让PC机可以识别 if (l=DircctionData) send_byte CT); delay (1); if(0=DircctionData) send.byteC 0*); delay(1); /发送转角函数/ void SendAngleO uchar shi=0,

31、ge=0; send_byteCA); delay (1); 发送识别字母A if (AnglcData0) scnd.byte CT); 右转 delay (1); AngleData=abs(AngleData); /如果需左转,则发送1,表示左转,0表示 把转角转换成正数 分离十位和个位,然后分别发送给PC机 /发送识别字母 else send.byteC O); delay (1); if (AngleData58) AngleData=60; shi=AngleData/10; ge=Ang1eDat a%10; send.byte(shi+48); delay (1); shi=O; send.byte(ge+48); delay (1); ge=O; /发送刹车档位/ void SendBrake 0 uchar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论