Labview智能小车控制平台.docx

上传人:b****6 文档编号:8449453 上传时间:2023-01-31 格式:DOCX 页数:23 大小:90.57KB
下载 相关 举报
Labview智能小车控制平台.docx_第1页
第1页 / 共23页
Labview智能小车控制平台.docx_第2页
第2页 / 共23页
Labview智能小车控制平台.docx_第3页
第3页 / 共23页
Labview智能小车控制平台.docx_第4页
第4页 / 共23页
Labview智能小车控制平台.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

Labview智能小车控制平台.docx

《Labview智能小车控制平台.docx》由会员分享,可在线阅读,更多相关《Labview智能小车控制平台.docx(23页珍藏版)》请在冰豆网上搜索。

Labview智能小车控制平台.docx

Labview智能小车控制平台

基于Labview的智能小车控制平台

摘要:

该课程设计是基于Labview的智能汽车控制平台,该平台建立在飞思卡尔单片机及51单片机控制芯片基础上,基于Labview仿真。

采用无线控制小车转向,加速,刹车系统。

该设计是测控专业集单片机控制,电路,软件编程于一体的平台练习,是集测控专业所学的一门综合提高学生素质的课程设计。

关键词:

Labview智能汽车飞思卡尔单片机测控

Abstract:

thecourseisdesignedbasedontheintelligentvehiclecontrolplatformLabview,thisplatformbasedonSCMand51single-chipmicrocomputercontrolfreescaleLabview,basedonthechip.Usingradiocontrolcaraccelerated,brakingsystem,steering.Thisdesignisaprofessionalsetssingle-chipmicrocomputercontrol,thecontrolcircuitandthesoftwareprogramminginoneoftheplatform,whichisaprofessionalknowledgeofmeasurementtoimprovestudents'comprehensivequalityofthecoursedesign.

Keywords:

intelligentvehiclefreescalemicrocontrollermeasure-controlLabview

一、单片机系统的组成

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、KEY1…KEYn为留出的插槽)

该游戏方向盘上共计有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)串口通信电路

选用主要材料清单:

注:

材料清单中元件除发光二极管以外均要求贴片封装。

型号封装数量厂商说明

AT89S52TQFP4412ATMEL单片机

TLC0834SOP-1412TI8位串行AD转换芯片

MAX232SOP-1612MAXIM串口电平转换芯片

7805(LM7805)TO-22012ST5V电源稳压芯片

9013(8050)SOT2324(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单片机发送的一帧数据格式应为:

DxAx3x2x1Bx2x1Tx2x1Sxxxx

x:

表示数据,范围为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”(数据类型为unsignedchar)时,PC机便开始发送一帧数据,此时PC机的Labview程序一次性给小车发送四个数据,发送完毕后直到小车下一次发送回来的信号“1”时才再发数据。

例如发送的数据为:

03570-48

分别代表:

前进/后退油门刹车方向盘转角(注意顺序不能变)

(3)、数据说明如下:

前进/后退(DirectionFlag):

0表示前进,1表示后退(数据类型为unsignedchar型),只有两种状态。

油门(ThrottleData):

数据范围0~127,0表示小车速度为0,127表示速度为3.0m/s,线性递增(数据类型为unsignedchar型,共128档。

刹车(BrakeData):

数据范围0~127,0表示未踩刹车板,小车速度为当前速度,127表示刹车板踩到底,小车停止(数据类型为unsignedchar型)。

方向盘(AngleData):

数据范围-60~60,-60表示小车左转60度,60表示右转60度,即左负右正,0表示正中间,小车未转向(数据类型为char型)。

2.小车模型

(1)小车模型简介

模型车尺寸:

四轮驱动,长×宽×高为270×170×96(单位:

mm)

电机参数为:

DC7.2VND380

舵机参数为:

IPS017伺服器电池参数为:

7.2V2000mAh

(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串口,另外一个接无线传输模块。

图(20)系统框图

附录1:

飞思卡尔智能小车程序

//MainmoduleofMKCAR摩垦智卡

#include/*commondefinesandmacros*/

#include/*derivativeinformation*/

#include"stdio.h"

#include"stdlib.h"

#include"math.h"

#pragmaLINK_INFODERIVATIVE"mc9s12xs128b"

/////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////system&inits系统及初始化//////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////

#defineSYNE_SETTING4

#defineREFDV_SEETTING1//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)busclk=40M

#definedelay{_asmnop;}

#defineENSPDTESTTIE_C2I=1;

#defineDISSPDTESTTIE_C2I=0;

#defineENPIDPITINTE_PINTE0=1;

#defineDISPIDPITINTE_PINTE0=0;

#defineMOTORFORWORD{PWME_PWME3=0;PWMCNT01=0;PWME_PWME1=1;}

#defineMOTORBACK{PWME_PWME1=0;PWMCNT23=0;PWME_PWME3=1;}

#defineCARSTOPPWME=0;

#defineMAXSPEED128

unsignedintReceive=0;

unsignedintReceiveFlag=0;

floatspeed,Throttlespeed,Brakespeed;

unsignedcharCardata[5],PreCartata[5];

voidinit_sys(bytep1,bytep2)

{

init_CRG(p1,p2);

init_interupt();

init_port();

init_motor();

init_servo();

init_PIT();

}

///////////////////////////////////////////////////////////////////////////////

/////////////////////////////useri/o串行通信函数,用于调试//////////////

///////////////////////////////////////////////////////////////////////////////

charstrDisp[80]="hello\n";

/************-串口初始化*************/

voidSciInit()

{

unsignedintbd;bd=(unsignedint)((UL/*OSCfreq*//2)/9600/*baudrate*//16/*factor*/);

bd++;

SCI0BDH=(unsignedchar)((bd>>8)&0x00ff);

SCI0BDL=(unsignedchar)(bd&0xff);//(unsignedchar)((0UL/*OSCfreq*//2)/19200/*baudrate*//16/*factor*/);

SCI0CR1=0;/*normal,noparity*/

SCI0CR2=0X2C;/*RIE=1,TE=1,RE=1*/

//SCI0CR2=0X08;

}

/******发射端程序-----单字节发送********/

voidSciSend(unsignedchartext)

{

//unsignedchara;

//temp=SCI0SR1;/*clearflag*/

/*for(;;){

a=SCI0SR1;

if((a&0x40)==0x40)break;

}

*/

while(!

(SCI0SR1&0x80));/*waitforoutputbufferempty*/

SCI0DRL=text;

}

/********-接受部分(unsignedchar型数据)************/

charSciRead(void)

{

//unsignedchartemp;

unsignedcharresult;

//temp=SCI0SR1;//clearflag

while(!

(SCI0SR1&0x20));

result=SCI0DRL;

returnresult;

}

/*************************************wsl*************************************/

voidmkTasks(void)

{

byteiSpdCar=1;

staticintbDir=1;

floatrecd_T_speed,recd_B_speed;//接收到的速度值

DisableInterrupts;

init_sys(SYNE_SETTING,REFDV_SEETTING);

SciInit();

EnableInterrupts;

StartSpeedTest();//speedpidaction

for(;;)

{

while(ReceiveFlag)

{

ReceiveFlag=0;

/////////////////////////前进和后退控制///////////////

if(Cardata[0]!

=PreCartata[0])

{

if(((unsignedint)Cardata[0])==0x30){MOTORFORWORD;}

else{MOTORBACK;}

}

/////////////////////////油门和刹车控制//////////////////

Throttlespeed=(float)((Cardata[1]*10)/MAXSPEED)*(0.3);

SetCarSpeed(Throttlespeed);

if((unsignedint)Cardata[2]>0x50)CARSTOP;

/////////////////////////方向盘控制/////////////////////////

if(Cardata[3]!

=PreCartata[3])

{

if((unsignedint)Cardata[3]<=0x3c)

{

PWMDTY67=3750+((unsignedint)Cardata[3])*30;

}

else

{

PWMDTY67=3750-(256-(unsignedint)Cardata[3])*30;

}

}

strcpy(PreCartata,Cardata);

}

}

}

/**********程序起点main**********/

voidmain(void)

{

mkTasks();

}

//////////////////////////////////////////////////////////////////////////////

/////////////////////////////////中断程序区///////////////////////////////////

//////////////////////////////////////////////////////////////////////////////

#pragmaCODE_SEG__NEAR_SEGNON_BANKED

voidinterrupt20sci_interrupt(void)//serialcominterrupt//notused

{

Cardata[Receive]=SciRead();

++Receive;

if(Receive==4){Receive=0;ReceiveFlag=1;SciSend

(1);}

}

#pragmaCODE_SEGDEFAULT

附录2:

51单片机程序

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitmor1=P1^2;

sbitmor2=P1^3;

sbitkey_int0=P3^2;

sbitkey_int1=P3^3;

sbitkey_1=P0^0;

voidclk(void);

uchartlc_0834(ucharch);

voidsend_byte(ucharc);

voidinit_uart(void);

voiddelay(uintms);

voidSendInformation();

voidSendDirection();

voidSendAngle();

voidSendThrottle();

voidSendBrake();

voidSendToXS128();

sbitadc_clk=P1^6;

sbitadc_di=P1^4;

sbitadc_do=P1^5;

sbitadc_cs=P1^7;

ucharCanRecive=0;

ucharBrakeData,ThrottleData,DirectionData;//四个需发送信息。

ucharBrakeDataTemp,ThrottleDataTemp,ucharAngleData1,AngleData2;

charAngleData;

/////////发送到XS128的数据//////////////

//throttle:

油门(0~127)

//brake:

刹车(0~127)

//anlge:

转角(-60~

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1