基于430单片机控制的智能遥控小车论文.docx
《基于430单片机控制的智能遥控小车论文.docx》由会员分享,可在线阅读,更多相关《基于430单片机控制的智能遥控小车论文.docx(31页珍藏版)》请在冰豆网上搜索。
基于430单片机控制的智能遥控小车论文
2013年电子工程学院
“MSP430单片机”设计竞赛
竞
赛
论
文
作品题目905无线智能遥控小车
组员:
曹睿智
郭晋阳
张拨
2013年6月17日
3.3功能芯片430.....................................................................................................................7
3.4驱动电路及驱动芯片LM298............................................................................................8
3.5编程软件及其下载器........................................................................................................9
6.1系统功能检测.................................................................................................................12
6.2检测过程.........................................................................................................................12
附录:
程序.....................................................................................................................................14
905无线智能小车设计
1引言
无线通信主要包括微波通信和卫星通信。
微波是一种无线电波,它传送的距离一般只有几十千米。
但微波的频带很宽,通信容量很大。
微波通信每隔几十千米要建一个微波中继站。
卫星通信是利用通信卫星作为中继站在地面上两个或多个地球站之间或移动体之间建立微波通信联系。
无线通信(WirelessCommunication)是利用电磁波信号可以在自由空间中传播的特性进行信息交换的一种通信方式,近些年信息通信领域中,发展最快、应用最广的就是无线通信技术。
在移动中实现的无线通信又通称为移动通信,人们把二者合称为无线移动通信。
从最初的电报开始,经过150多年的现代电信的发展是来自各界的成千上万科学家、工程师和研究人员的辛勤劳动的结果。
他们当中只有少数独立负责发明的人成了名,而大多数达到顶点的发明是许多个人的成果。
nRF905采用Nordic公司的VLSIShockBurst技术。
ShockBurst技术使nRF905能够提供高速的数据传输,而不需要昂贵的高速MCU来进行数据处理/时钟覆盖。
通过将与RF协议有关的高速信号处理放到芯片内,nRF905提供给应用的微控制器一个SPI接口,速率由微控制器自己设定的接口速度决定。
nRF905通过ShockBurst工作模式在RF以最大速率进行连接时降低数字应用部分的速度来降低在应用中的平均电流消耗。
在ShockBurstRX模式中,地址匹配AM和数据准备就绪DR信号通知MCU一个有效的地址和数据包已经各自接收完成。
在ShockBurstTX模式中,nRF905自动产生前导码和CRC校验码,数据准备就绪DR信号通知MCU数据传输已经完成。
总之,这意味着降低MCU的存储器需求也就是说降低MCU成本,又同时缩短软件开发时间。
而且在433MHz的频段它是可以免费的使用,最高的共工作速率达到50kbps,高效的GFSK调制,抗干扰能力强,特别适合工业控制场合。
智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。
本次设计的无线智能小车,采用MSP430单片机作为小车的检测和控制核心;采用红外蔽障模块,从而把小车前方反馈到的信号送单片机,使单片机按照预定的工作模式控制小车的运动与停止,当无线遥控控制小车运行时,如果前方出现障碍物,红外蔽障模块会自动感应并将信号传给单片机,单片机控制使小车强行静止,彩灯闪烁,以便于操作者及时发现问题更好的控制小车。
虽然制作简单,但具有高度的智能化、人性化,一定程度体现了智能。
2无线智能遥控车设计方案论证
无线智能遥控车对于控制芯片的实时性,稳定性,快速性,准确性都达到了一个很高的要求,介于本设计对于主控芯片的要求,我们选择了MSP430这款单片机。
它的内部资源也比较丰富,性能全面而且适用性强,能覆盖多种应需求。
用户可以根据设计的需要设计成各种不同的应用的控制系统。
2.1无线遥控方案论证
当前遥控器模型一般都采用连线、红外、无线这三种方式来进行对被控制器的控制。
连线遥控式的遥控器它的遥控器和被控制端通过导线直接连接起来,但缺点很明显,由于是由到导线直接连接,这就很容易引起导线的缠绕,打结,连接,最突出的是它的受到导线长度的制约,不能进行远距离的遥控。
红外遥控器的特点是通过遥控器发射红外光进行传递信息,它的应用很广泛,比如:
电视机等一些家用电器。
红外线在介质中传播会产生衰减,特别在金属中传播衰减很大,它的穿透力有限。
另外由于其存在定向性的问题,并且它不能穿透物体,而且在使用红外线传送信号时,容易受到照明光和外来杂波的影响和干扰,所以不适合这个项目开发的要求。
无线遥控方式遥控器和接受器两端通过无线电波传送控制信息。
但是市面上那种简单的无线遥控,它的无线遥控方式很容易受到其它的无线电波的干扰,因此必须采用抗干扰能力强的无线发射装置来提高系统的稳定性。
2.2电机驱动部分的方案论证
电机驱动部分通过单片机输出的脉冲信号来控制小车的方向,和它的正转和反转。
这个问题有两种方案来解决。
第一种:
是我们经常玩的,可以随处买到的遥控车玩具,它包括两个电机:
一个用于控制小车的转向;另一个电机是作为小车的动力系统,控制小车的前进和后退。
但是这种小车对于机械部分的要求是很高的,由于设备的不足和资金的缺乏,最终果断放弃了这种方案。
第二种是在小车的左右各放一个直流电机,通过控制左右两个电机的转动方向来控制小车的前进后退以及它的转向,通过实验,发现如果采用这种方案,成本会很低,而且设备也是现成的。
因此本项目采用这种方案。
3系统设计
3.1系统需求分析
系统主要由五大模块构成:
控制信息产生模块、控制信息发送模块、控制信息接收模块、驱动模块。
结构框图如图3.1所示。
图3.1系统模块组成
本项目主要的硬件模块有:
键盘、发送主控制板、发射器、电源、接收主控模块、接收模块、电机驱动模块及小车实体部分。
主要实现的功能有:
小车的前进、后退、左转、右转。
由于这款小车是四轮驱动,它可以实现原地的转向,所以根本不用担心它的动力是否足够和他的灵活性。
3.2无线模块
nRF905可以自动完成处理字头和CRC(循环冗余码校验)的工作,可由片内硬件自动完成曼彻斯特编码/解码,使用SPI接口与微控制器通信,配置非常方便,其功耗非常低,以-10dBm的输出功率发射时电流只有11mA,在接收模式时电流为12.5mA。
nRF905单片无线收发器工作由一个完全集成的频率调制器,一个带解调器的接收器,一个功率放大器,一个晶体震荡器和一个调节器组成。
ShockBurst工作模式的特点是自动产生前导码和CRC,可以很容易通过SPI接口进行编程配置。
nRF905管脚原理图如图3.2所示。
图3.2nRF905管脚原理图
nRF905各管脚功能如表1所示。
表1nRF905各管脚功能说明
管脚
名称
管脚功能
说明
1
VCC
电源
电源+1.9-3.6VDC
2
TX_EN
数字输入
TX_EN=1TX模式TX_EN=0RX模式
3
TRX_CE
数字输入
使能芯片发射或接收
4
PWR_UP
数字输入
芯片上电
5
uCLK
时钟输出
本模块该脚废弃不用,向后兼容
6
CD
数字输出
载波检测
7
AM
数字输出
地址匹配
8
DR
数字输出
接收或发射数据完成
9
MISO
SPI接口
SPI输出
10
MOSI
SPI接口
SPI输入
11
SCK
SPI时钟
SPI时钟
12
CSN
SPI使能
SPI使能
13
GND
地
接地
14
GND
地
接地
3.3功能芯片430
MSP430系列是一个16位的、具有精简指令集的、超低功耗的混合型单片机。
单片机就是一块芯片,但是这块芯片具有一些特殊的功能,他的功能的实现要靠我们使用者自己编程完成。
我们编写程序的目的就是控制各个I/O口在不同时间输出不同电平(高电平1或者低电平0),而这个时间段相对于我们来说是很短的,至少是微秒级的时间,也就是说,单片机可以在几个微秒的时间内切换其I/O口输出的电平状态。
作为用户,我们需要做的仅仅是怎么使用单片机,也就是给单片机编写程序,控制它的I/O口的电平状态。
MSP430G2系列是德州仪器近期推出的一款产品,在秉承MSP430超低功耗,高集成度的优点的同时,具有高性价比的特点。
该系列被称为ValueLine,旨在以8位单片机的价格实现16位单片机的性能。
MSP-EXP430Launchpad是TI推出的又一套用于MSP430和电路实验的开发板。
在该套不到名片大小的开发板上集成了一片超低功耗16位MSP430单片机,USB口仿真器电路以及各引脚接口等。
利用LaunchPad开发板,仅需一台笔记本电脑,就可以在基于图形界面的编程软件CCS上进行嵌入式软硬件系统的开发和调试,真正做到将实验室装进口袋里,让使用者可以随时随地,不受场地和设备的限制进行430的开发工作。
3.4驱动电路及驱动芯片LM298
3.41驱动电路
L298N是SGS公司生产的一种高电压、大电流电机驱动芯片。
该芯片采用15脚封装。
主要特点是:
工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。
内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。
3.42L298N驱动电路原理图
3.5编程软件及其下载器
当然我们使用的编译器IARforMSP430
,它的功能没有CCS强大复杂,但胜在学习简单容易使用方便快捷。
4系统实现
系统实现概述
系统的实现包括硬件和软件两个部分,硬件包括nRF905芯片2个、发射天线2个、430单片机开发板2块、L298N驱动电路一块、小车底板1块,直流电机4个:
包括小车轮胎4个、遥控键盘1块、数据线1根、电池盒1个、锂电池1个、电脑1台,导线若干。
软件使用有IAR程序下载软件。
5系统的软件设计
软件要实现的功能是:
键盘对单片机输入数据,单片机对获得的数据进行处理,送到无线模块进行数据的再次发送,同时接收到无线信息,发送到另一块单片机,输出相应的信号到L298M电机驱动模块。
系统框图如图5.1所示。
图5.1系统框图
5.1主控程序流程图
主控发送程序首先进行系统初始化,然后发送信号,输出相应的电压控制字,等待键盘输入。
根据键盘的不同输入,执行不同的系统程序,执行后,返回按键扫描状态,等待下一次按键。
框图如图5.2所示。
图5.2控制发送流程图
主控接收程序首先进行系统初始化,然后接收信号,输出相应的电压控制字。
根据键盘的不同输入,执行不同的系统程序,执行后,返回等待状态,等待下一次接收。
框图如图5.3所示。
图5.3接收主流程图
6系统检测与调试
6.1系统功能检测
系统的检测是为了发现硬件和软件中存在的问题和系统是否达到了项目的要求,在系统的运行过程中发现问题,从而改进更能够提高系统的稳定性。
系统调试是系统到现场后,对系统硬件、组态软件进行现场检验的过程,以确保供应的硬件、软件满足项目的要求。
6.2检测过程
测试按照项目的要求进行,首先组装好小车后,检测小车的硬件连接是否正常,再次检测电源系统没有问题,两项都正常后,初始化无线模块和430开发板,按下遥控器上的按键,而后小车的前进、后退、左转、右转都没有问题。
经检测小车基本实现了系统功能的要求,同时我们也实际测了905收发模块的信号传输距离,经多次测量归纳,无线遥控智能小车的遥控距离在150米左右,信号收发相对稳定。
7总结
参加这次比赛让我们受益匪浅,非常感谢学院举办的这场比赛。
它拓宽了我们的知识面,接触了许多新的知识,最重要的是提高了我们的能力,每一个小小的成功带给我们的喜悦,让我们有信心去面对其他未知的困难。
这个无线遥控小车是我们三个人的第一个作品,我们为共同的目标走到一起并且为之努力。
其中遇到了不少困难,我们一起克服没有放弃过,相信我们以后会更加团结,做出更好的作品。
并且在这里由衷的感谢电子创新协会各位学长对我们的大力帮助与支持!
附录:
程序列表
发射
#include
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineBYTE_BIT00x01
#defineBYTE_BIT10x02
#defineBYTE_BIT20x04
#defineBYTE_BIT30x08
#defineBYTE_BIT40x10
#defineBYTE_BIT50x20
#defineBYTE_BIT60x40
#defineBYTE_BIT70x80
bdataunsignedcharDATA_BUF;
#defineDATA7((DATA_BUF&BYTE_BIT7)!
=0)
#defineDATA0((DATA_BUF&BYTE_BIT0)!
=0)
sbitflag=DATA_BUF^7;
sbitflag1=DATA_BUF^0;
#defineTxRxBuf_Len4//发送数据缓冲区
unsignedcharTxRxBuf[TxRxBuf_Len]={0,0,0,0};
chartemp[6];//温度缓冲
sbitTXEN=P3^6;//NRF905控制IO
sbitTRX_CE=P0^4;
sbitPWR=P3^2;
sbitMISO=P0^1;//NRF905SPI接口
sbitMOSI=P3^4;
sbitSCK=P0^0;
sbitCSN=P3^5;
sbitAM=P0^2;
sbitDR=P3^3;
sbitCD=P3^7;
sbitled3=P1^5;
sbitled2=P1^6;
sbitled1=P1^7;
sbitled0=P1^4;
sbitKey0=P2^0;
sbitKey1=P2^1;
sbitKey2=P2^2;
sbitKey3=P2^3;
sbitKey4=P2^4;
ucharseg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9段码
#defineWC0x00//nrf905控制指令
#defineRC0x10
#defineWTP0x20
#defineRTP0x21
#defineWTA0x22
#defineRTA0x23
#defineRRP0x24
unsignedcharidataRFConf[11]={0x00,//配置命令//
0x4c,//CH_NO,配置频段在430MHZ
0x0c,//输出功率为10db,不重发,节电为正常模式
0x44,//地址宽度设置,为4字节
0x04,0x04,//接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC,
0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
bitlcdbit;
codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};
staticvoidDelay(ucharn)
{
uinti;
while(n--)
for(i=0;i<80;i++);
}
voidSpiWrite(unsignedcharsend)
{
unsignedchari;
DATA_BUF=send;
for(i=0;i<8;i++)
{if(DATA7)//总是发送最高位
{
MOSI=1;
}
else
{
MOSI=0;
}
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
voidnRF905Init(void)//初始化nRF905
{
CSN=1;//Spidisable
SCK=0;//Spiclocklineinitlow
DR=0;//InitDRforinput
AM=0;//InitAMforinput
CD=0;//InitCDforinput
PWR=1;//nRF905poweron
TRX_CE=0;//SetnRF905instandbymode
TXEN=0;//setradioinRxmode
}
voidConfig905(void)//初始化寄存器
{
uchari;
CSN=0;//Spienableforwriteaspicommand
//SpiWrite(WC);//Writeconfigcommand写放配置命令
for(i=0;i<11;i++)//Writeconfigrationwords写放配置字
{
SpiWrite(RFConf[i]);
}
CSN=1;//DisableSpi
}
voidTxPacket(uchar*TxRxBuf)
{
uchari;
//Config905();
CSN=0;
SpiWrite(WTP);//Writepayloadcommand
for(i=0;i<4;i++)
{
SpiWrite(TxRxBuf[i]);//Write32bytesTxdata
}
CSN=1;
Delay
(1);//Spidisable
CSN=0;//Spienableforwriteaspicommand
SpiWrite(WTA);//Writeaddresscommand
for(i=0;i<4;i++)//Write4bytesaddress
{
SpiWrite(TxAddress[i]);
}
CSN=1;//Spidisable
TRX_CE=1;//SetTRX_CEhigh,startTxdatatransmission
Delay
(1);
//while(DR!
=1);
TRX_CE=0;//SetTRX_CElow
}
voidSetTxMode(void)
{
TRX_CE=0;
TXEN=1;
Delay
(1);//delayformodechange(>=650us)
}
voidinit()
{
nRF905Init();
Config905();
P0=seg[8];
led0=0;
led1=0;
led2=0;
led3=0;
}
voidmain(void)
{
uchari;
init();
while
(1)
{
if(Key0==0)//键0按下
{//Delay(5);
if(Key0==0)
{
TxRxBuf[0]=0x28;
P0=seg[1];
led0=1;
led1=1;
led2=1;
led3=0;
while(!
Key0);
for(i=0;i<2;i++)
{SetTxMode();//SetnRF905inTxmode
TxPacket(TxRxBuf);//SenddatabynRF905
}
}
}
if(Key1==0)
{
//Delay(5);
if(Key1==0)
{
TxRxBuf[0]=0x29;
P0=seg[2];
led0=1;
led1=1;
led2=0;
led3=1;
while(!
Key1);
for(i=0;i<2;i++)
{SetTxMode();//SetnRF905inTxmode
TxPacket(TxRxBuf);//SenddatabynRF905//
}
}
}
if(Key2==0)
{//while(!
Key2);
//Delay(5);
if(Key2==0)
{
TxRxBuf[0]=0x30;
P0=seg[3];
led0=1;
led1=0;
led2=1;
led3=1;
while(!
Key2);
for(i=0;i<2;i++)