遥控小车报告_第1页
遥控小车报告_第2页
遥控小车报告_第3页
遥控小车报告_第4页
遥控小车报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

湖北师范学院电工电子实验教学省级示范中心电子版实验报告第18页,共18页电子系统设计基于STM32的无线遥控小车课程设计黄光普2011112020433电子信息科学与技术物理与电子科学学院2014年05月2日电工电子中心2009年5月绘制湖北师范学院电工电子实验教学省级示范中心电子版实验报告第2页,共18页基于STM32的无线遥控小车一.任务解析1、电机驱动方案以及主控芯片选择2、无线通信模块的驱动和调试3、软件控制算法4、STM32主控制板PCB打样及调试二.方案实施1方案论证:1)电机驱动方案选择:电机的常用驱动方式有两种:直流电压驱动,PWM加H桥驱动。直流驱动实现简单,但是一般只能实现单向旋转,并且效率低。PWM加H桥的驱动方式可以在一组电源的情况下方便实现正反转,H桥工作在开关状态下,效率高,故采用PWM加H桥的驱动方案。2)主控芯片选择:一路电机需要两路PWM信号来控制正反转以及转速,小车有四个独立的直流电机,所以需要8路PWM。不管是传统51单片机还是改进型的12单片机都已经不能胜任此任务,这里采用意法半导体公司的STM32F103RBT6芯片作为主控。STM32F103RBT6有128K的FLASH,20K的SRAM,最高72MHZ工作频率,2个12位ADC(16个通道),支持DMA传输,多达7个定时器,9个通信接口。强大的性能以及低廉的价格完全可以满足本设计的需求。2无线模块的驱动和调试无线通信采用的是挪威NORDIC公司的NRF24L01+芯片。nRF24L01+是一款高速低功耗集收发于一体的半双工芯片,最大传输速度可以达到2Mbps,工作在2.4GHz全球开放ISM频段,最大0dBm发射功率,免许可证使用。nRF24L01+集成了所有与RF协议相关的高速信号处理部分,其通信接口采用标准的SPI总线接口。用51单片机驱动NRF24L01+的做法是软件模拟SPI时序,但是软件模拟的时序存在部分问题:1),软件模拟时序速度慢,2)稳定度不够高,STM32F103RBT6芯片自带硬件双路SPI,最高速度可以达到18MBits/s,此处的NRF24L01+和OLED都是通过硬件SPI驱动的。硬件SPI配置的关键代码如下:SPI_InitTypeDefSPI_InitStructure;//声明SPI结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用AFIO时钟,使用硬件SPI必须先使能复用AFIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); //使能SPI1时钟,使用外设时,必须先使能外设时钟 SPI_Cmd(SPI1,DISABLE); //改变MODE前先禁止SPI SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//设置为两线全双工模式SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//设置为主模式 SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//道PWM为比较输出高模式}2)小车前进/后退以及转弯控制图1:L9110典型应用图如上图1所示,当正转信号端有PWM信号,反转信号端为低电平时,电机正转,此时小车前进。当正转信号端为低电平,反转信号端有PWM信号时,电机反转,即小车后退,通过控制输入PWM的占空比即可以实现小车速度的调节。由于市面上卖的四轮驱动小车的四个轮子都是固定的,不能像汽车那样,导向轮可以左右转动,这里采取使左右轮的速度不一致的方式来实现转弯,当左轮速度大,右轮速度小,小车向右转,反之左转。如果以固定的差值改变左右PWM占空比,这样油门不同的时候就会出问题,例如为了解决这个问题,这里采用比例法,用这个比例系数去乘上油门的值,这样就可以很容易的解决问题。转弯的关键代码如下:u16Throttle; //油门u16Direction; //方向floatDirL,DirR;//左右轮油门比例if(Direction>2048)//如果方向值大与2048{DirL=1.0;//设置左轮油门比例系数为1DirR=(4096-Direction)/2048.0;//右轮油门比例系数随着方向值增大而减小}Else//如果方向值小与2048{DirL=Direction/2048.0;//左轮油门比例系数随着方向值减小而减小DirR=1.0;//设置右轮油门比例系数为1}TIM_SetCompare1(TIM4,0); //设定TIM4通道CHx占空比为0,即为低电平,此时为正转,小车前进TIM_SetCompare2(TIM4,0);TIM_SetCompare3(TIM4,0);TIM_SetCompare4(TIM4,0);if(Nflag!=Oflag)//当Nflag!=oldflag(车换向时)时,设置死区延时,防止同一侧两个开关管同时导通烧坏芯片{delay_ms(50);}TIM_SetCompare1(TIM2,(u32)Thr*DirR);//设定通道CH1占空比,占空比的值由油门值以及油门比例系数共同决定TIM_SetCompare2(TIM2,(u32)Thr*DirR);//同上TIM_SetCompare3(TIM2,(u32)Thr*DirL);TIM_SetCompare4(TIM2,(u32)Thr*DirL);3)在实际的测试过程中发现当遥控的油门减小前就突然断电了,小车会保持之前的状态继续运动,这样就会失去控制,很容易出问题。后来在此基础上想到了看门狗,如果在规定时间里没有向看门狗寄存器里写入特定的数据,就会产生系统复位,当复位后,初始状态下车是停止的,这样一旦接收不到遥控的发来的数据就停止喂狗,系统处于一直复位状态,知道接收到遥控发送的数据,这样就保证了系统的稳定工作。具体实现代码如下:IWDG_Config(IWDG_2K5,2500);//配置独立看门狗时钟为2.5K,计数值为2500,1/2500*2500=1s,在1s内喂狗不会产生系统复位if(STATE==1&&flag!=0xff)//判断接收标志位,当遥控突然断电后,用串口发现依然能够接收到0XFF的标志位,原因暂时不详{IWDG_Feed(); //接受到数据后喂狗,1S内没接收到数据产生系统复位Throttle=RxBuf[0]*256+RxBuf[1];//获得油门值Direction=RxBuf[2]*256+RxBuf[3];//获得方向值flag=RxBuf[4];//获得正/反转标志位值printf("%d%d%d\r\n",Throttle,Direction,flag);//串口打印接收到的数据,便于系统调试STATE=0;//清空接收标志位}为了清晰的观察,系统是否处在复位状态下,这里加了指示灯加以指示,当系统复位时,会观察到灯以1S左右的周期闪烁,当系统正常工作时,灯处于长亮状态。具体代码如下:LED=1;//初始复位,状态指示灯不亮delay_ms(500);//当硬件一直复位时,形成状态灯以1s周期闪烁的效果while(1){LED=0;//当系统正常工作时,状态指示灯长亮3,STM32主控制板PCB打样及调试在进行PCB打样之前,先得进行原理的验证,这块板子的原理图参考了周兆丰老师以及正点原子的MiniSTM32开发板,在他们的基础上有所增减。当然,这不是一块纯粹的小车控制板,是一个完整的STM32开发板。里面的模块很多,这里就只介绍其中一部分。原理图部分如下:图2:串口/USB选择当1和3,2和4相连是,是串口的功能,当3和5,4和6相连时,是USB功能,这里相对正点原子的少了两个排针,3,4可以作为公用的,减少了排针数目。图3:一键下载电路当然,这个电路不是我原创的啦,是正点原子的,觉得很经典,在这里说明一下。下载的时候选择DTR的低电平复位,RTS的高电平进BootLoard。一键下载电路的具体实现过程:首先,mcuisp控制DTR输出低电平,则DTR_N输出高,然后RTS置高,则RTS_N输出低,这样Q2导通了,BOOT0被拉高,即实现设置BOOT0为1,同时Q1也会导通,STM32的复位脚被拉低,实现复位。然后,延时100ms后,mcuisp控制DTR为高电平,则DTR_N输出低电平,RTS维持高电平,则RTS_N继续为低电平,此时STM32的复位引脚,由于Q1不再导通,变为高电平,STM32结束复位,但是BOOT0还是维持为1,从而进入ISP模式,接着mcuisp就可以开始连接STM32,下载代码了,从而实现一键下载。图4:通用OELD模块接口我的这个OLED排母有9个引脚,可能你会觉得奇怪,本来SPI驱动模式的OLED (128*64)市面上常用的一般都只有6个引脚,多的也才7个引脚,为什么要多此一举多弄两个电源引脚呢?仔细观察之后,你也许会明白,这样做是为了兼容性,当你顺着看的时候可以完全兼容6脚或者7脚的OLED,那么IIC驱动模式的呢,对了,当你从下往上看的时候,会发现正好就是4脚IIC驱动模式的OLED,而且蛮巧的,正好硬件IIC的引脚和硬件SPI的引脚是挨着的,这样在方便布线的同时保证兼容市面上所有接口类型的OLED(单指128*64点),并且在程序上都可以采用硬件功能驱动,可以更快速的显示动态画面。图5:TFT彩屏以及正点原子OLED接口彩屏接口是照着正点原子的原理图画的,因为对彩屏不是太熟悉,加之中等容量的STM32没有FSMC,只能用模拟时序的方式去驱动彩屏,并且在正点原子的TFT程序功能已经如此丰富的情况下,贸然去大幅度更改会造成不必要的麻烦。这里也可以兼容正点原子的OLED,他是采用模拟时序的方式驱动的,虽然他的驱动方式灵活(8080,SPI,IIC可选),但是在速度上就比不上硬件驱动了上几张整体效果图:三.结果展示四.经验总结这次做遥控小车,是源于大二时的想法,当时还没接触到STM32,用来用去都是51,一想到8路PWM就立马感觉无可奈何了。其实当时也只是一时觉得好玩,想趁着考研之前做点玩的,顺便也挑战一下自己,深入学习一下STM32。做之前也没想那么多,找到有意愿想做的,一番简单商量之后就开始开工了。在做的过程中,不断发现问题,一个一个解决问题。STM32开发板我是自己打了两版的,第一版没有一键下载电路,下载程序不能一键下载,需要通过短路帽选择启动区。当时画PCB因为不明白那是一键下载电路,就给省掉了。后来想着既然做,就做的像个样子,于是经过修改调整之后才有了现在这一版。在小车最后调试阶段,在全速时突然换向,结果导致电机驱动板烧坏,刚开始以为是全速换向瞬时电流太大导致的。后来换了一块新驱动板,在低速下换向,发现还是烧了。经过测试,全速换向时,瞬时电流也远没有达到800MA,愣是没想明白问题在哪。我仔细研究了一下H桥驱

温馨提示

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

评论

0/150

提交评论