基于arm平台的无线遥控小车设计报告_第1页
基于arm平台的无线遥控小车设计报告_第2页
基于arm平台的无线遥控小车设计报告_第3页
基于arm平台的无线遥控小车设计报告_第4页
基于arm平台的无线遥控小车设计报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、高级职业技能实训课 程 设 计 报 告课题名称 基于ARM平台的智能遥控小车 专 业 电子信息工程技术 班 级 电子B1512班 姓 名 同 组 人 指导教师 l 2017-11-02目 录1.设计题目、要求及分工41.1 设计题目41.2 设计要求41.3 分工42.设计方案43.硬件电路设计53.1硬件系统整体分析53.2各模块功能介绍53.2.1 L298N驱动模块53.2.2 NRF24L01无线通信模块63.2.3 STM32处理器63.2.4 液晶屏显示模块73.2.5 显示屏与微控制器通信方式73.2.6本章小结84.软件系统的分析与设计85.调试结果记录及分析105.1作品编译

2、环境105.2结果记录及分析115.2.1电阻式触摸屏调试记录115.2.2 2.4G无线通信模块调试记录115.2.3直流电机调试记录11参考文献12附录113附录2221.设计题目、要求及分工1.1 设计题目本课程设计题目是基于ARM平台的智能遥控小车。在嵌入式高速发展,ARM独占一席的今天,熟练运用ARM对于电科大学生至为重要。1.2 设计要求由无线通信NRF24L01发射装置、STM32F103微处理器和电阻式触摸屏构成的遥控装置向主体小车发送信息,控制小车的运行。由无线通信NRF24l01接收装置、STM32F103微处理器、L298N直流电机驱动、直流电机组合的智能小车接收遥控装置

3、信息来达到主机遥控从机的目的。1.3 分工在本次设计中,张荣俊同学主要负责软件的设计与分析,赖庆鹏同学和汤青红同学负责硬件电路的设计以及课程报告的撰写,最后由我们三个人共同交流分析,对整个系统以及设计报告进行了优化和改良。2.设计方案方案一:采用STC89C52单片机作为主控芯片,ESPP8266WIFI模块作无线通信、以及采用继电器对电动机进行控制,通过切换电动机的开关来调整小车的速度。该方案的优点是电路相对比较简单,但是它的缺点也比较多,如:ESP8266WiFi模块通信协议较为复杂,而继电器的响应时间偏慢,寿命较短,容易损坏,可靠性也不是很高。故决定放弃此方案。方案二:采用STM32F1

4、03系列单片机作为主控芯片,NRF24L01模块作无线通信、以及专用的电机驱动芯片L298N来控制直流减速电机,L298N芯片是一个具有高电压大电流的全桥驱动芯片,通过单片机的IO口输出电平来改变芯片控制端的输入电平,即可以实现对电机进行正转、反转和停止操作。用该芯片作为电机驱动,驱动能力大、操作方便、稳定性好、性能优良。故决定采用该方案。3.硬件电路设计3.1硬件系统整体分析智能小车的硬件系统主要由电源模块、MCU、电阻式触摸屏模块、电机驱动、直流电机、2.4G无线通信模块、车架等组成。其硬件系统框图如下:电源模块电源模块液晶显示模块液晶显示模块MCUMCU无线发送模块无线发送模块图3.1

5、硬件系统主机框图MCUMCU无线接收模块模块无线接收模块模块电机驱动模块电机驱动模块直流电机电源模块电源模块图3.2 硬件系统从机框图3.2各模块功能介绍3.2.1 L298N驱动模块L298N是SGS公司的产品,比较常见的是15脚Multiwattt封装的L298N,内部包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.57V电压。4脚VS接电源电压,VS电压范围为+2.546V。输出电流可达2.5A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298N可驱动

6、2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电机。图3.3 L298N驱动模块原理图 图3.4 L298N驱动模块实物正面图 图3.5 L298N驱动模块实物背面图3.2.2 NRF24L01无线通信模块本设计无线通信用到了NRF24L01模块,2.4G通信是无线通信技术的一种,因为其工作在2.400GHz2.4835GHz频段之间,所以被称为2.4G无线通信技术。是市面上主要无线技术(包括 Bluetooth、27M、2.4G)之一。多应用于无线键盘鼠标,四轴飞行器。特点:低电压,高效率,低成本,双向高速数据传输,特小体积(不需要外接天线),具有快速跳频,前向纠错,校验等功

7、能,其工作在全球免费开放的ISM频段,无需许可证。图3.6 2.4G模块实物图3.2.3 STM32处理器STM32F103系列处理器是32位ARM微控制器,此系列控制芯片是意法半导体公司生产,是 Cortex-M3内核,该系列控制芯片按片内F1ash容量大小可分为三大类:小容量、中容量、大容量。ARM32位的 Cortex-M3最高72MHz工作频率支持串行单线调试(SWD)和JTAG接口调试模式,3个 USART接口,Vbat为RTC和后备寄存器供电,2个SPI接口。其价格低,功能强大。3.2.4 液晶屏显示模块市场上的主流显示屏主要有TFT、OLED、12864、诺基亚5510。1286

8、4、诺基亚5510显示分辨率不高,故不适合在本设计中使用。OLED虽然分辨率高、且又自带背光,具有极高的市场使用率。但是OLED不能触摸,不适合在人机交互界面中使用。所以本作品选择TFT液晶显示屏。市场上的TFT显示屏分为2种,一种是电阻式显示屏,还有一种是电容式显示屏。 图3.7电阻式显示屏实物图 图3.8 电阻式显示屏背部图3.2.5 显示屏与微控制器通信方式IL9341简介:26万色TFT液晶显示驱动器,支持320×240分辨率,172800字节显存(320*240*2),使用FSMC方式模拟8080接口,FSMC可用于STM32微处理器控制NOR FLASH、PSRAM、和N

9、AND FLASH存储芯片。在这里使用NORIPSRAM模式控制LCD,主要用到以下几种信号线。各信号线与信号方向和功能如下表3-1所示。表3-1 FSMC引脚说明FSMC信号名信号方向功能CLK输出时钟(同步突发模式使用)A25:0输出地址总线D15:0输入/输出双向数据总线NEx输出片选,x=1.4NOE输出输出使能NWE输出写使能NWAIT输入NOR内存要求FSMC等待的信号3.2.6本章小结 本章首先介绍了智能小车硬件系统框架,然后对硬件系统框架中各个模块在系统设计中担当的具体角色与其性能进行了分析与介绍。在此基础上对智能小车的硬件进行了组装,智能车整体外形如下图。图3.9智能车外形图

10、4.软件系统的分析与设计开始系统初始化触摸屏检测发送数据结束本文研究智能小车的软件系统主要有:系统初始化;电阻式触摸屏的显示和触摸;2.4G无线数据的发送和接收;直流电机的驱动等。系统流程图如图4.1所示。图4.1主机软件系统流程图 图4.2主机主界面图 图4.3主机控制界面图开始系统初始化接收数据驱动电机结束图4.4从机软件系统流程图1、系统初始化包括:IO端口初始化、电阻式触摸屏初始化、2.4G模块初始化和系统滴答定时器初始化等。2、触摸屏检测:触摸屏检测的过程主要是MCU端口通过SPI读取液晶屏板载XPT2046芯片坐标信息,另经过触摸屏校准算法,执行相应的功能。3、发送数据:触摸屏获取

11、的坐标信息后,使能2.4G无线模块,再通过模块发送对应的信息。4、接收数据:接收数据功能在从机小车上,从机启动后,2.4G无线模块进入数据接收模式,等待接收主机发送的数据。5、电机驱动:MCU对无线模块接收的数据进行解析,接收信息无误后使能L298N直流电机驱动模块驱动直流电机。本设计研究的智能车的软件系统所使用的编程语言是C语言。5.调试结果记录及分析5.1作品编译环境本作品的编译环境为Keil,当前最高版本是Keil5,此软件编译环境界面十分良好。可以用户自行设置。图5.1是Keil的主界面图5.1 Keil5的主界面为了方便编写代码,及界面符合用户自己的习惯,可以进入配置界面。下载程序时

12、也需要在这里设置DEBUG。如图5.2是编译环境的设置界面。图5.2 Keil5的配置界面Keil5的调试界面也十分良好,点击debug按钮便会进入debug调试模式,点击run便可以运行程序的主函数,随即可以设置断点或点击单步运行去调试程序。如图3-4为Kei15的调试窗口:图5.3 keil5的调试窗口5.2结果记录及分析 5.2.1电阻式触摸屏调试记录屏幕板载XPT2046芯片起初读取坐标信息有错,通过Keil软件DEBUG发现是在使用软件模拟SPI时序时延时时间没处理好。5.2.2 2.4G无线通信模块调试记录在调试2.4G无线通信模块时,模块发送数据异常,通过Keil软件DEBUG读

13、取模块状态寄存器的值得出原因是主机未接收到从机的应答信号导致数据发送异常。5.2.3直流电机调试记录小车一共有四个电机,通过L298N驱动板驱动。起初调电机时有一个电机不转动,通过检测发现驱动电流不够大。最后外加移动电源解决了该问题。在设计过程中遇到各种各样的小问题,总结一点就是需要硬件加软件结合调试,才能找出问题的根本。还有就是一定要有耐心,代码一行一行检查。其次就是要善于利用串口调试,跟踪传输的数据信息,准确定位问题在哪。最后,感谢两位老师的耐心指导,提供解决问题的思路。参考文献1刘火良.STM32库开发实战指南M.北京:机械工业出版社,2013:320-4222蒙博宇.STM32自学笔记

14、M.北京:北京航空航天大学出版社,2012:230-2403韩旭,王娣. C语言从入门到精通M.北京:清华大学出版社,2010:244-2604胡仁喜. Altium Designer 16从入门到精通M.北京:机械工业出版社,2016:118-168附录1程序1:主机主界面程序uint8_t display_home(void) display_picture(0,0,240,320,gImage_1);/显示九江学院校徽图片LCD_SetFont(&Font8x16);/设置显示字体LCD_SetColors(BLUE,WHITE);/设置显示字体颜色ILI9341_DispStr

15、ingLine_EN_CH(LINE(0)," 高级职业技能实训");ILI9341_DispStringLine_EN_CH(LINE(1),"题目:基于ARM平台智能遥控小车");ILI9341_DispStringLine_EN_CH(LINE(2)," 班级:B1512班");ILI9341_DispStringLine_EN_CH(LINE(3),"姓名:张荣俊、赖庆鹏、汤青红");ILI9341_DispStringLine_EN_CH(LINE(4),"学号: 17号、 22号、 26号&q

16、uot;);LCD_SetColors(RED,WHITE);ILI9341_DrawRectangle (0,270,240,20,1);LCD_SetColors(BLACK,RED);ILI9341_DispStringLine_EN_CH(LINE(17)," 请点击此处进入控制界面 ");LCD_SetColors(BLACK,GREEN);while(1)switch(status)case SUCCESS:ILI9341_DispStringLine_EN_CH(LINE(19),"NRF与MCU连接成功!");break;case ERR

17、OR:ILI9341_DispStringLine_EN_CH(LINE(19),"NRF与MCU连接失败!");break;if(XPT2046_TouchDetect() = TOUCH_PRESSED)/检测是否有触摸操作BEEP_ON();XPT2046_Get_TouchedPoint(&zuobiao,strXPT2046_TouchPara);/获取触摸坐标SysTick_Delay_ms(100);if(zuobiao.x >= 0 && zuobiao.x <= 240 && zuobiao.y >

18、= 270 && zuobiao.y <= 286)flag_function =1;return flag_function;elseBEEP_OFF();程序2:主机控制界面程序uint8_t display_control(void)LCD_SetColors(WHITE,WHITE);ILI9341_DrawRectangle (0,0,240,320,1);ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH);/清屏,显示全黑 LCD_SetColors(BLUE,WHITE); ILI9341_DispStringLine_

19、EN_CH(LINE(3)," 2.4G遥控小车控制面板");LCD_SetFont(&Font16x24);LCD_SetColors(GREEN,WHITE);ILI9341_DrawRectangle (80,80,80,80,1);LCD_SetColors(WHITE,GREEN);ILI9341_DispString_EN (105 ,110, "go" ); LCD_SetColors(BLUE,WHITE);ILI9341_DrawRectangle (0,160,80,80,1);LCD_SetColors(WHITE,BLUE

20、);ILI9341_DispString_EN ( 8 ,185,"left" );LCD_SetColors(RED,WHITE);ILI9341_DrawRectangle ( 80, 160, 80, 80, 1);LCD_SetColors(WHITE,RED);ILI9341_DispString_EN (88,185,"stop" );LCD_SetColors(MAGENTA,MAGENTA);ILI9341_DrawRectangle (160,160,80,80,1);LCD_SetColors(WHITE,MAGENTA);ILI93

21、41_DispString_EN (160,185,"right" )LCD_SetColors(YELLOW,WHITE);ILI9341_DrawRectangle (80,240,80,80,1);LCD_SetColors(WHITE,YELLOW);ILI9341_DispString_EN (88,265,"back");LCD_SetColors(RED,RED);ILI9341_DrawRectangle (180,300,60,20,1);LCD_SetFont(&Font8x16);LCD_SetColors(BLACK,RE

22、D);ILI9341_DispString_CH (193,302,"退出");while(1)if(XPT2046_TouchDetect() = TOUCH_PRESSED)BEEP_ON();XPT2046_Get_TouchedPoint(&zuobiao,strXPT2046_TouchPara);SysTick_Delay_ms(100);if(zuobiao.x >= 180 && zuobiao.x <= 240 && zuobiao.y >= 300 && zuobiao.y <

23、;= 320)BEEP_OFF();LED_OFF();status = NRF2_Tx_Dat(tx_quit);status = NRF2_Check();flag_function = 0;return flag_function;else if(zuobiao.x >= 80 && zuobiao.x <= 160 && zuobiao.y >= 80 && zuobiao.y <= 160)LED_G();status = NRF2_Tx_Dat(tx_go);switch(status) case MAX_RT

24、:printf("rn 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 rn"); break; case ERROR: printf("rn 未知原因导致发送失败。 rn"); break; case TX_DS:printf("rn 主机接收到从机的应答信号,发送成功!发送的数据为%drn",tx_go0); break; status = 0;else if(zuobiao.x >= 0 && zuobiao.x <= 80 && zuobiao.y >= 160 &a

25、mp;& zuobiao.y <= 240)LED_B();status = NRF2_Tx_Dat(tx_left);switch(status) case MAX_RT:printf("rn 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 rn"); break; case ERROR: printf("rn 未知原因导致发送失败。 rn"); break; case TX_DS:printf("rn 主机接收到从机的应答信号,发送成功!发送的数据为%drn",tx_left0); break; statu

26、s = 0;else if(zuobiao.x >= 80 && zuobiao.x <= 160 && zuobiao.y >= 160 && zuobiao.y <= 240)LED_R();status = NRF2_Tx_Dat(tx_stop);switch(status) case MAX_RT:printf("rn 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 rn"); break; case ERROR: printf("rn 未知原因导致发送失败。 rn&quo

27、t;); break; case TX_DS:printf("rn 主机接收到从机的应答信号,发送成功!发送的数据为%drn",tx_stop0); break; status = 0;else if(zuobiao.x >= 160 && zuobiao.x <= 240 && zuobiao.y >= 160 && zuobiao.y <= 240)LED_R_B();status = NRF2_Tx_Dat(tx_right);switch(status) case MAX_RT:printf(&

28、quot;rn 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 rn"); break; case ERROR: printf("rn 未知原因导致发送失败。 rn"); break; case TX_DS:printf("rn 主机接收到从机的应答信号,发送成功!发送的数据为%drn",tx_right0); break; status = 0;flag_control = 4;else if(zuobiao.x >= 80 && zuobiao.x <= 160 && zuobiao.y

29、 >= 240 && zuobiao.y <= 320)LED_R_G();status = NRF2_Tx_Dat(tx_back);switch(status) case MAX_RT:printf("rn 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 rn"); break; case ERROR: printf("rn 未知原因导致发送失败。 rn"); break; case TX_DS:printf("rn 主机接收到从机的应答信号,发送成功!发送的数据为%drn",tx_back0

30、); break; status = 0;flag_control = 5;elseBEEP_OFF();程序3:主机主程序int main(void)Beep_GPIO_Config();LED_GPIO_Config();ILI9341_Init(); XPT2046_Init();Calibrate_or_Get_TouchParaWithFlash(6,0);SPI_FLASH_Init();SPI_NRF2_Init(); status = NRF2_Check();USART_Config();printf("rn 正在检测NRF与MCU是否正常连接。rn");

31、if(status = SUCCESS)printf("rn NRF与MCU连接成功!rn"); elseprintf("rn NRF与MCU连接失败,请重新检查接线。rn");NRF2_TX_Mode();printf("rn 主机进入发送模式rn");while(1)display_home();if(flag_function = 1)display_control();程序4:图片显示程序void display_picture(u32 Xpos,u32 Ypos,u32 Pic_x,u32 Pic_y,const unsig

32、ned char * p) u32 i,j; for(j = 0; j < Pic_y; j+) for(i = 0; i < Pic_x; i+) ILI9341_SetPointPixel1(Xpos+i,Ypos+j,(*p<<8)+*(p+1); p += 2; 程序5:触摸屏坐标获取程序uint8_t XPT2046_Get_TouchedPoint ( strType_XPT2046_Coordinate * pDisplayCoordinate, strType_XPT2046_TouchPara * pTouchPara )uint8_t ucRet =

33、 1; /若正常,则返回0strType_XPT2046_Coordinate strScreenCoordinate; if ( XPT2046_ReadAdc_Smooth_XY ( & strScreenCoordinate ) ) pDisplayCoordinate ->x = ( ( pTouchParaLCD_SCAN_MODE.dX_X * strScreenCoordinate.x ) + ( pTouchParaLCD_SCAN_MODE.dX_Y * strScreenCoordinate.y ) + pTouchParaLCD_SCAN_MODE.dX )

34、; pDisplayCoordinate ->y = ( ( pTouchParaLCD_SCAN_MODE.dY_X * strScreenCoordinate.x ) + ( pTouchParaLCD_SCAN_MODE.dY_Y * strScreenCoordinate.y ) + pTouchParaLCD_SCAN_MODE.dY ); if(pDisplayCoordinate ->x>=500)pDisplayCoordinate ->x=0;else ucRet = 0; return ucRet;程序6:NRF24L01数据发送程序u8 NRF_T

35、x_Dat(u8 *txbuf)u8 state; NRF2_CE_LOW(); SPI_NRF2_WriteBuf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH); NRF2_CE_HIGH(); while(NRF2_Read_IRQ()!=0); state = SPI_NRF2_ReadReg(STATUS); SPI_NRF2_WriteReg(NRF_WRITE_REG+STATUS,state); SPI_NRF2_WriteReg(FLUSH_TX,NOP); if(state&MAX_RT) return MAX_RT; else if(state

36、&TX_DS) return TX_DS; else return ERROR; 程序7:从机主程序int main(void) CAR_Config();LED_GPIO_Config(); SPI_NRF_Init(); USART1_Config(); printf("rn 这是一个 NRF24L01 无线传输实验 rn"); printf("rn 这是无线传输 主机端 的反馈信息rn"); printf("rn 正在检测NRF与MCU是否正常连接。rn"); status = NRF_Check(); if(statu

37、s = SUCCESS) printf("rn NRF1与MCU连接成功!rn"); else printf("rn NRF1与MCU连接失败,请重新检查接线。rn"); NRF_RX_Mode();printf("rn 从机端 进入接收模式rn"); while(1) status = NRF_Rx_Dat(rxbuf); if(status = RX_DR) printf("rn 从机端 接收到 主机端 发送的数据为:%d rn",rxbuf0);switch(rxbuf0)case 1:printf(&quo

38、t;gorn");LED_G();go();break;case 2:printf("leftrn");LED_B();left();break;case 3:printf("stoprn");LED_R();stop();break;case 4:printf("rightrn");LED_R_B();right();break;case 5:printf("backrn");LED_R_G();back();break;case 6:printf("led_offrn");LED_

39、OFF();default:rxbuf0 = 0; else if (status = ERROR)printf("未接收到主机数据");程序7:电机驱动程序void go (void)GPIO_SetBits(MOTOR_GPIO_PORT, MOTOR_LEFT_IN1_PIN); GPIO_ResetBits(MOTOR_GPIO_PORT, MOTOR_LEFT_IN2_PIN);GPIO_SetBits(MOTOR_GPIO_PORT, MOTOR_LEFT_IN3_PIN); GPIO_ResetBits(MOTOR_GPIO_PORT, MOTOR_LEFT_

40、IN4_PIN);GPIO_SetBits(MOTOR_GPIO_PORT, MOTOR_RIGHT_IN1_PIN); GPIO_ResetBits(MOTOR_GPIO_PORT, MOTOR_RIGHT_IN2_PIN);GPIO_SetBits(MOTOR_GPIO_PORT, MOTOR_RIGHT_IN3_PIN);GPIO_ResetBits(MOTOR_GPIO_PORT, MOTOR_RIGHT_IN4_PIN);void back(void)GPIO_ResetBits(MOTOR_GPIO_PORT, MOTOR_LEFT_IN1_PIN); GPIO_SetBits(M

41、OTOR_GPIO_PORT, MOTOR_LEFT_IN2_PIN);GPIO_ResetBits(MOTOR_GPIO_PORT, MOTOR_LEFT_IN3_PIN); GPIO_SetBits(MOTOR_GPIO_PORT, MOTOR_LEFT_IN4_PIN);GPIO_ResetBits(MOTOR_GPIO_PORT, MOTOR_RIGHT_IN1_PIN); GPIO_SetBits(MOTOR_GPIO_PORT, MOTOR_RIGHT_IN2_PIN);GPIO_ResetBits(MOTOR_GPIO_PORT, MOTOR_RIGHT_IN3_PIN);GPIO_SetBits(MOTOR_GPIO_PO

温馨提示

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

评论

0/150

提交评论