基于430单片机控制的智能遥控小车论文_第1页
基于430单片机控制的智能遥控小车论文_第2页
基于430单片机控制的智能遥控小车论文_第3页
基于430单片机控制的智能遥控小车论文_第4页
基于430单片机控制的智能遥控小车论文_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、. . . . 2013年电子工程学院“MSP430单片机”设计竞赛竞 赛论 文作品题目 905无线智能遥控小车 组员:睿智郭晋阳拨2013年6月17日31 / 31目录一、引言3二、论证方案42.1无线遥控论证方案42.2 电机驱动论证方案4三、系统设计53.1 系统需求分析53.2 无线模块63.3 功能芯片430.7 3.4 驱动电路与驱动芯片LM298.8 3.5 编程软件与其下载器.9四、系统实现94.1 系统实现概述9五、软件设计105.1 主控程序流程图11六、系统调试与测试126.1 系统功能检测.126.2 检测过程.12七、总结13附录:程序.14参考文献30 905无线智

2、能小车设计1引言无线通信主要包括微波通信和卫星通信。微波是一种无线电波,它传送的距离一般只有几十千米。但微波的频带很宽,通信容量很大。微波通信每隔几十千米要建一个微波中继站。卫星通信是利用通信卫星作为中继站在地面上两个或多个地球站之间或移动体之间建立微波通信联系。无线通信(Wireless Communication)是利用电磁波信号可以在自由空间中传播的特性进行信息交换的一种通信方式,近些年信息通信领域中,发展最快、应用最广的就是无线通信技术。在移动中实现的无线通信又通称为移动通信,人们把二者合称为无线移动通信。从最初的电报开始,经过150多年的现代电信的发展是来自各界的成千上万科学家、工程

3、师和研究人员的辛勤劳动的结果。他们当中只有少数独立负责发明的人成了名,而大多数达到顶点的发明是许多个人的成果。nRF905采用Nordic公司的VLSI ShockBurst技术。ShockBurst技术使nRF905能够提供高速的数据传输,而不需要昂贵的高速MCU来进行数据处理/时钟覆盖。通过将与RF协议有关的高速信号处理放到芯片,nRF905提供给应用的微控制器一个SPI接口,速率由微控制器自己设定的接口速度决定。nRF905通过ShockBurst工作模式在RF以最大速率进行连接时降低数字应用部分的速度来降低在应用中的平均电流消耗。在ShockBurst RX模式中,地址匹配AM和数据准

4、备就绪DR信号通知MCU一个有效的地址和数据包已经各自接收完成。在ShockBurst TX模式中,nRF905自动产生前导码和CRC校验码,数据准备就绪DR信号通知MCU数据传输已经完成。总之,这意味着降低MCU的存储器需求也就是说降低MCU成本,又同时缩短软件开发时间。而且在433MHz的频段它是可以免费的使用,最高的共工作速率达到50kbps,高效的GFSK调制,抗干扰能力强,特别适合工业控制场合。智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。本次设计的无线智能小车,采用MSP430单片机作为小车的检

5、测和控制核心;采用红外蔽障模块,从而把小车前方反馈到的信号送单片机,使单片机按照预定的工作模式控制小车的运动与停止,当无线遥控控制小车运行时,如果前方出现障碍物,红外蔽障模块会自动感应并将信号传给单片机,单片机控制使小车强行静止,彩灯闪烁,以便于操作者与时发现问题更好的控制小车。虽然制作简单,但具有高度的智能化、人性化,一定程度体现了智能。2 无线智能遥控车设计方案论证无线智能遥控车对于控制芯片的实时性,稳定性,快速性,准确性都达到了一个很高的要求,介于本设计对于主控芯片的要求,我们选择了MSP430这款单片机。它的部资源也比较丰富,性能全面而且适用性强,能覆盖多种应需求。用户可以根据设计的需

6、要设计成各种不同的应用的控制系统。2.1 无线遥控方案论证当前遥控器模型一般都采用连线、红外、无线这三种方式来进行对被控制器的控制。连线遥控式的遥控器它的遥控器和被控制端通过导线直接连接起来,但缺点很明显,由于是由到导线直接连接,这就很容易引起导线的缠绕,打结,连接,最突出的是它的受到导线长度的制约,不能进行远距离的遥控。红外遥控器的特点是通过遥控器发射红外光进行传递信息,它的应用很广泛,比如:电视机等一些家用电器。红外线在介质中传播会产生衰减,特别在金属中传播衰减很大,它的穿透力有限。另外由于其存在定向性的问题,并且它不能穿透物体,而且在使用红外线传送信号时,容易受到照明光和外来杂波的影响和

7、干扰,所以不适合这个项目开发的要求。无线遥控方式遥控器和接受器两端通过无线电波传送控制信息。但是市面上那种简单的无线遥控,它的无线遥控方式很容易受到其它的无线电波的干扰,因此必须采用抗干扰能力强的无线发射装置来提高系统的稳定性。2.2电机驱动部分的方案论证电机驱动部分通过单片机输出的脉冲信号来控制小车的方向,和它的正转和反转。这个问题有两种方案来解决。第一种:是我们经常玩的,可以随处买到的遥控车玩具,它包括两个电机:一个用于控制小车的转向;另一个电机是作为小车的动力系统,控制小车的前进和后退。但是这种小车对于机械部分的要很高的,由于设备的不足和资金的缺乏,最终果断放弃了这种方案。第二种是在小车

8、的左右各放一个直流电机,通过控制左右两个电机的转动方向来控制小车的前进后退以与它的转向,通过实验,发现如果采用这种方案,成本会很低,而且设备也是现成的。因此本项目采用这种方案。3 系统设计3.1系统需求分析系统主要由五大模块构成:控制信息产生模块、控制信息发送模块、控制信息接收模块、驱动模块。结构框图如图3.1所示。图 3.1 系统模块组成本项目主要的硬件模块有:键盘、发送主控制板、发射器、电源、接收主控模块、接收模块、电机驱动模块与小车实体部分。主要实现的功能有:小车的前进、后退、左转、右转。由于这款小车是四轮驱动,它可以实现原地的转向,所以根本不用担心它的动力是否足够和他的灵活性。3.2无

9、线模块nRF905可以自动完成处理字头和CRC(循环冗余码校验)的工作,可由片硬件自动完成曼彻斯特编码/解码,使用SPI接口与微控制器通信,配置非常方便,其功耗非常低,以-10dBm的输出功率发射时电流只有11mA,在接收模式时电流为12.5mA。 nRF905单片无线收发器工作由一个完全集成的频率调制器,一个带解调器的接收器,一个功率放大器,一个晶体震荡器和一个调节器组成。ShockBurst工作模式的特点是自动产生前导码和CRC,可以很容易通过SPI接口进行编程配置。nRF905管脚原理图如图3.2所示。图3.2 nRF905管脚原理图nRF905各管脚功能如表1所示。表1 nRF905各

10、管脚功能说明管脚名称管脚功能说明1VCC电源电源+1.9-3.6V DC2TX_EN数字输入TX_EN= 1 TX 模式 TX_EN= 0 RX 模式3TRX_CE数字输入使能芯片发射或接收4PWR_UP数字输入芯片上电5uCLK时钟输出本模块该脚废弃不用,向后兼容6CD数字输出载波检测7AM数字输出地址匹配8DR数字输出接收或发射数据完成9MISOSPI 接口SPI 输出10MOSISPI 接口SPI 输入11SCKSPI 时钟SPI 时钟12CSNSPI 使能SPI 使能13GND地接地14GND地接地3.3功能芯片430MSP430系列是一个16位的、具有精简指令集的、超低功耗的混合型单

11、片机。单片机就是一块芯片,但是这块芯片具有一些特殊的功能,他的功能的实现要靠我们使用者自己编程完成。我们编写程序的目的就是控制各个I/O 口在不同时间输出不同电平(高电平1或者低电平0),而这个时间段相对于我们来说是很短的,至少是微秒级的时间,也就是说,单片机可以在几个微秒的时间切换其I/O 口输出的电平状态。 作为用户,我们需要做的仅仅是怎么使用单片机,也就是给单片机编写程序,控制它的I/O 口的电平状态。MSP430G2系列是仪器近期推出的一款产品,在秉承MSP430超低功耗,高集成度的优点的同时,具有高性价比的特点。该系列被称为ValueLine,旨在以8位单片机的价格实现16位单片机的

12、性能。MSP-EXP430Launchpad是TI推出的又一套用于MSP430和电路实验的开发板。在该套不到名片大小的开发板上集成了一片超低功耗16位MSP430单片机,USB口仿真器电路以与各引脚接口等。利用LaunchPad开发板,仅需一台笔记本电脑,就可以在基于图形界面的编程软件CCS上进行嵌入式软硬件系统的开发和调试,真正做到将实验室装进口袋里,让使用者可以随时随地,不受场地和设备的限制进行430的开发工作。3.4驱动电路与驱动芯片LM2983.41驱动电路L298N是SGS公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;

13、输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。3.42 L298N驱动电路原理图3.5编程软件与其下载器当然我们使用的编译器IAR for MSP430,它的功能没有CCS强大复杂,但胜在学习简单

14、容易使用方便快捷。4 系统实现 系统实现概述系统的实现包括硬件和软件两个部分,硬件包括nRF905芯片2个、发射天线2个、430单片机开发板2块、L298N驱动电路一块、小车底板1块,直流电机4个:包括小车轮胎4个、遥控键盘1块、数据线1根、电池盒1个、锂电池1个、电脑1台,导线若干。软件使用有IAR程序下载软件。5 系统的软件设计软件要实现的功能是:键盘对单片机输入数据,单片机对获得的数据进行处理,送到无线模块进行数据的再次发送,同时接收到无线信息,发送到另一块单片机,输出相应的信号到L298M电机驱动模块。系统框图如图5.1所示。键盘输入单片机接收信号无线模块接收并发送无线模块接收并发送到

15、单片机单片机接收信号并发送到电机驱动模块L298M驱动模块图5.1 系统框图5.1主控程序流程图主控发送程序首先进行系统初始化,然后发送信号,输出相应的电压控制字,等待键盘输入。根据键盘的不同输入,执行不同的系统程序,执行后,返回按键扫描状态,等待下一次按键。框图如图5.2所示。开 始初始化RF905初始化发送代码发送按键代码结束NY接收数据成功?N图 5.2 控制发送流程图主控接收程序首先进行系统初始化,然后接收信号,输出相应的电压控制字。根据键盘的不同输入,执行不同的系统程序,执行后,返回等待状态,等待下一次接收。框图如图5.3所示。开始初始化RF905初始化寄存器初始化MCU接收数据成功

16、?MCU向小车发送指令NY图5.3 接收主流程图6 系统检测与调试6.1系统功能检测系统的检测是为了发现硬件和软件中存在的问题和系统是否达到了项目的要求,在系统的运行过程中发现问题,从而改进更能够提高系统的稳定性。系统调试是系统到现场后,对系统硬件、组态软件进行现场检验的过程,以确保供应的硬件、软件满足项目的要求。6.2 检测过程测试按照项目的要求进行,首先组装好小车后 ,检测小车的硬件连接是否正常,再次检测电源系统没有问题,两项都正常后,初始化无线模块和430开发板,按下遥控器上的按键,而后小车的前进、后退、左转、右转都没有问题。经检测小车基本实现了系统功能的要求,同时我们也实际测了905收

17、发模块的信号传输距离,经多次测量归纳,无线遥控智能小车的遥控距离在150米左右,信号收发相对稳定。7 总结参加这次比赛让我们受益匪浅,非常感学院举办的这场比赛。它拓宽了我们的知识面,接触了许多新的知识,最重要的是提高了我们的能力,每一个小小的成功带给我们的喜悦,让我们有信心去面对其他未知的困难。 这个无线遥控小车是我们三个人的第一个作品,我们为共同的目标走到一起并且为之努力。其中遇到了不少困难,我们一起克服没有放弃过,相信我们以后会更加团结,做出更好的作品。并且在这里由衷的感电子创新协会各位学长对我们的大力帮助与支持!附录:程序列表发射#include <reg52.h> #inc

18、lude <ABSACC.h> #include <intrins.h> #include <stdio.h> #define uint unsigned int #define uchar unsigned char #define BYTE_BIT0 0x01 #define BYTE_BIT1 0x02 #define BYTE_BIT2 0x04 #define BYTE_BIT3 0x08 #define BYTE_BIT4 0x10 #define BYTE_BIT5 0x20 #define BYTE_BIT6 0x40 #define BYT

19、E_BIT7 0x80 bdata unsigned char DATA_BUF; #define DATA7 (DATA_BUF&BYTE_BIT7) != 0) #define DATA0 (DATA_BUF&BYTE_BIT0) != 0) sbit flag =DATA_BUF7; sbit flag1 =DATA_BUF0;#define TxRxBuf_Len 4 /发送数据缓冲区unsigned char TxRxBufTxRxBuf_Len= 0,0,0,0 ; char temp6; /温度缓冲 sbit TXEN=P36; /NRF905 控制 IOsbit

20、 TRX_CE=P04; sbit PWR=P32; sbit MISO=P01; /NRF905 SPI 接口sbit MOSI=P34; sbit SCK=P00; sbit CSN=P35; sbit AM=P02; sbit DR=P33; sbit CD=P37; sbit led3=P15; sbit led2=P16; sbit led1=P17; sbit led0=P14; sbit Key0 = P20; sbit Key1 = P21; sbit Key2 = P22; sbit Key3 = P23;sbit Key4 = P24; uchar seg10=0xC0,0

21、xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /09 段码 #define WC 0x00 /nrf905 控制指令#define RC 0x10 #define WTP 0x20 #define RTP 0x21 #define WTA 0x22 #define RTA 0x23 #define RRP 0x24 unsigned char idata RFConf11= 0x00, /配置命令/ 0x4c, /CH_NO,配置频段在 430MHZ 0x0c, /输出功率为 10db,不重发,节电为正常模式 0x44, /地址宽度设置,为 4 字节

22、 0x04,0x04, /接收发送有效数据长度为 32 字节 0xCC,0xCC,0xCC,0xCC, 0x58, /CRC 充许,8 位 CRC 校验,外部时钟信号不使 能,16M 晶振 ;bit lcdbit; code TxAddress4=0xcc,0xcc,0xcc,0xcc; static void Delay(uchar n) uint i; while(n-) for(i=0;i<80;i+); void SpiWrite(unsigned char send) unsigned char i; DATA_BUF=send; for (i=0;i<8;i+) if

23、(DATA7) /总是发送最高位 MOSI=1; else MOSI=0; SCK=1; DATA_BUF=DATA_BUF<<1; SCK=0; void nRF905Init(void) /初始化 nRF905 CSN=1; / Spi disable SCK=0; / Spi clock line init low DR=0; / Init DR for input AM=0; / Init AM for input CD=0; / Init CD for input PWR=1; / nRF905 power on TRX_CE=0; / Set nRF905 in sta

24、ndby mode TXEN=0; / set radio in Rx mode void Config905(void) /初始化寄存器 uchar i; CSN=0; / Spi enable for write a spi command /SpiWrite(WC); / Write config command 写放配置命令 for (i=0;i<11;i+) / Write configration words 写放配置字 SpiWrite(RFConfi); CSN=1; / Disable Spi void TxPacket(uchar *TxRxBuf) uchar i;

25、 /Config905(); CSN=0; SpiWrite(WTP); / Write payload command for (i=0;i<4;i+) SpiWrite(TxRxBufi); / Write 32 bytes Tx data CSN=1; Delay(1); / Spi disable CSN=0; / Spi enable for write a spi command SpiWrite(WTA); / Write address command for (i=0;i<4;i+) / Write 4 bytes address SpiWrite(TxAddre

26、ssi); CSN=1; / Spi disable TRX_CE=1; / Set TRX_CE high,start Tx data transmission Delay(1); /while (DR!=1); TRX_CE=0; / Set TRX_CE low void SetTxMode(void) TRX_CE=0; TXEN=1; Delay(1); / delay for mode change(>=650us) void init() nRF905Init(); Config905(); P0= seg8; led0=0; led1=0; led2=0; led3=0;

27、 void main(void) uchar i; init(); while(1) if(Key0=0) /键 0 按下 /Delay(5); if(Key0=0) TxRxBuf0=0x28; P0= seg1; led0=1; led1=1; led2=1; led3=0; while(!Key0);for(i=0;i<2;i+) SetTxMode();/ Set nRF905 in Tx mode TxPacket(TxRxBuf);/ Send data by nRF905 if(Key1=0) /Delay(5); if(Key1=0) TxRxBuf0=0x29; P0=

28、 seg2; led0=1; led1=1; led2=0; led3=1; while(!Key1); for(i=0;i<2;i+) SetTxMode();/ Set nRF905 in Tx mode TxPacket(TxRxBuf);/ Send data by nRF905 / if(Key2=0) / while(!Key2); /Delay(5); if(Key2=0) TxRxBuf0=0x30; P0= seg3; led0=1; led1=0; led2=1; led3=1; while(!Key2); for(i=0;i<2;i+) /有键 1 按下 /等

29、待按键松开 GREEN SetTxMode();/ Set nRF905 in Tx mode TxPacket(TxRxBuf);/ Send data by nRF905 / if(Key3=0) /Delay(5); if(Key3=0) TxRxBuf0=0x31; P0= seg4; led0=0; led1=1; led2=1; led3=1; while(!Key3); for(i=0;i<2;i+) SetTxMode();/ Set nRF905 in Tx mode TxPacket(TxRxBuf);/ Send data by nRF905 /Delay(250)

30、; if(Key4=0) /Delay(5); if(Key4=0) TxRxBuf0=0x32; P0= seg5; led0=1; led1=1; led2=1; led3=1; while(!Key4); for(i=0;i<2;i+) SetTxMode();/ Set nRF905 in Tx mode TxPacket(TxRxBuf);/ Send data by nRF905 接收#include <reg52.h> #include <ABSACC.h> #include <intrins.h>#include <stdio.h

31、>#define uint unsigned int /0 255 #define uchar unsigned char#define BYTE_BIT0 0x01#define BYTE_BIT1 0x02#define BYTE_BIT2 0x04 #define BYTE_BIT3 0x08 #define BYTE_BIT4 0x10 #define BYTE_BIT5 0x20 #define BYTE_BIT6 0x40 #define BYTE_BIT7 0x80uchar data temp_data2=0x00,0x00; uchar dispaly7; bdata

32、unsigned char DATA_BUF; #define DATA7 (DATA_BUF&BYTE_BIT7) != 0) #define DATA0 (DATA_BUF&BYTE_BIT0) != 0) sbit flag =DATA_BUF7; sbit flag1 =DATA_BUF0; #define TxRxBuf_Len 4 unsigned char TxRxBufferTxRxBuf_Len;sbit TXEN=P31; sbit TRX_CE=P14; sbit PWR=P32;sbit MISO=P11; sbit MOSI=P34; sbit SCK

33、=P10; sbit CSN=P35;sbit AM=P12; /905状态标志sbit DR=P33; sbit CD=P37;sbit DQ = P35; sbit BELL = P34;sbit LED1=P27;sbit LED2=P26;/sbit KEY0=P36; /sbit KEY1=P37; sbit OUTA1 = P20; sbit OUTA2 = P21; sbit OUTB1 = P22; sbit OUTB2 = P23;uchar seg10=0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /09 段 码 #d

34、efine WC 0x00 #define RC 0x10 #define WTP 0x20 #define RTP 0x21 #define WTA 0x22 #define RTA 0x23 #define RRP 0x24 /code TxAddress5=0xcc,0xcc,0xcc,0xcc,0xcc;/*void delay_ms(uchar ms) int i; while(ms-) for(i=0; i<100; i+); */ unsigned char idata RFConf11= 0x00, 0x4c, 0x0c, 0x44,0x04,0x04, 0xcc,0xc

35、c,0xcc,0xcc, 0x58, ; /CRC 充许,8 位 CRC 校验,外部时钟信号不使 能,16M void Delay(uchar n) uint k; while(n-) for(k=0;k<8;k+); void delay1(uint i) for(;i>0;i-); unsigned char SpiRead(void) unsigned char j; for (j=0;j<8;j+) DATA_BUF=DATA_BUF<<1; SCK=1; if (MISO) /读取最高位,保存至最末尾,通过左移位完成整个字节 DATA_BUF|=BYTE

36、_BIT0; else DATA_BUF&=BYTE_BIT0; SCK=0; return DATA_BUF; void SpiWrite(unsigned char send) unsigned char i; 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; void nRF905Init(void) CSN=1; SCK=0; DR=0; AM=0; CD=0; PWR=1; TRX_CE=0;

37、 TXEN=0; void Config905(void) uchar i; CSN=0; / Spi enable for write a spi command /SpiWrite(WC); / Write config command 写放配置命令 for (i=0;i<11;i+) / Write configration words 写放配置字 SpiWrite(RFConfi); CSN=1; / Disable Spi void SetRxMode(void) TXEN=0; TRX_CE=1; Delay(1); / delay for mode change(>=650us) unsigned char CheckDR(void) /检查是否有新数据传入 Data Ready if (DR=1&&TRX

温馨提示

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

评论

0/150

提交评论