基于stm32的智能自行车外设.docx
《基于stm32的智能自行车外设.docx》由会员分享,可在线阅读,更多相关《基于stm32的智能自行车外设.docx(17页珍藏版)》请在冰豆网上搜索。
基于stm32的智能自行车外设
研究训练
题目:
基于stm32的智能自行车外设
姓名:
班级:
09011301
学号:
西北工业大学自动化学院
2016.1
摘要
随着电子产业的飞速发展,智能穿戴设备逐步走进了我们的生活中,成为了我们生活中的一部分。
小米手环,李宁跑鞋等一大批优秀的智能穿戴设备脱颖而出,以其小巧精致的外形,实用的功能,吸引了大批消费者。
自行车作为日常生活中最环保、最便捷、最常用的交通工具,将骑行的乐趣与锻炼身体的目的相结合,早已融入大众生活之中。
通过本次研究训练,本文将基于ARMCortex-M内核的32位微控制器,即stm32设计出一款适用于自行车智能外设,以期能够将自行车数据与安卓终端进行互联,实现自行车智能化。
本文将从硬件结构与软件编程两个方面来介绍此次智能自行车外设的设计方案。
关键词:
智能外设;stm32
目录
1、研究背景1
2、设计任务及设计方案1
2.1、设计任务1
2.2、任务分析和设计方案1
3、硬件结构2
3.1、硬件结构总体设计2
3.2、主控制器模块设计3
3.2.1、微处理器电路设计3
3.2.2、电源模块设计5
3.2.3、串接口电平转换电路5
3.2.4、JTAG/SWD电路6
3.3、稳压电源转换电路6
3.4、基于STM32的行车安全及智能照明系统7
3.4.1、行车安全及照明系统原理图7
3.4.2、系统硬件设计7
4、软件设计8
4.1、stm32程序设计语言和程序设计工具8
4.2、系统软件结构和主程序流程图9
4.3、GPS数据解码及串口通讯的实现9
4.4、蓝牙模块串口通讯的实现10
5、发展前景12
6、研究训练总结12
7、参考文献:
13
1、研究背景
中国是自行车王国,拥有9亿自行车,年产量7000万。
而中国自行车骑行爱好者人数已经超过2000万,并且还在以每年接近50%的速度持续增长。
骑行已经成为一种健康时尚的日常活动。
而智能穿戴、智能家居也是当下十分流行的概念。
如果把传统的自行车变得智能起来,那么将会给我们的骑行带来无限的乐趣。
当前,对一辆普通自行车进行升级改造的方式主要有两种。
一是彻底变革成为智能自行车,二是加一些简单的非智能外设。
对于智能自行车,目前,国内XX、小米、乐视等多家公司在研制智能自行车,声称拥有收集里程、踏频、速度、地理位置信息、城市路况、环境质量、心率、卡路里等骑行信息,同时可以启动电机省力前进的功能。
但其不仅造价昂贵、而且不适合对中国广大自行车骑行群体的推广。
非智能简易外设通常是单一的灯,发电机类的物品,其功能单一、有些对自行车本身还会造成损耗。
而本小组提出设计一款基于stm32芯片的智能自行车外设,以期避免造价昂贵,性能单一的问题。
2、设计任务及设计方案
2.1、设计任务
此次设计,针对传统自行车不够智能以及现代智能自行车过于昂贵的问题,本文将设计一款自行车外设,以期实现以下功能:
●实现自行车实时位置,经纬度,海拔高度,速度的实时跟踪
●完成自行车的车灯控制
●安卓终端与智能外设的实时通信功能
●电源稳压设计
2.2、任务分析和设计方案
嵌入式系统被描述为:
“以应用为中心、软件硬件可裁剪的、适应应用系统对功能、可靠性、成本、体积、功耗等严格综合性要求的专用计算机系统”,由嵌入式硬件和嵌入式软件两部分有机的结合在一起。
作为一种典型的嵌入式应用,本课题研究的智能自行车外设要求具有很强的可移动性,便于在车辆移动中实现功能,同时也要求性能稳定可靠,能够实时对GPS和传感器信号进行相应解算。
本智能外设集信息收集—环境适应—蓝牙通讯三大功能于一体。
对于这些功能,即需要相独立的模块化设计,又需要良好的协调。
因此,在开发过程中,硬件设备的选择需要考虑这些特定的需求,有针对性的进行器件的选择和设计。
我们可以遵循这样的规则:
选择合适的处理器,尽量选择片上系统(SystemonChip,SoC)设计硬件系统,减少硬件复杂度并降低成本。
选择典型电路,按照模块化设计,系统扩展与I/O的配置充分满足应用系统的功能需求,并留有适当冗余,以便进行二次开发。
注重软硬件结合,软件能实现的功能尽可能由软件实现,以简化硬件结构,降低能耗和设备成本。
必须考虑芯片的驱动能力,有必要的可靠性及抗干扰设计它包括去藕滤波、印刷电路板布线、通道隔离等。
综合以上四个方面,在本设计中,我们选用了意法半导体公司推出的新型32位ARM内核处理机芯片STM32系列中的STM32F103RBT6。
针对2.2章所提到的设计任务本文将分别从硬件设计与软件设计两个方面予以解决。
后面将对处理器做详细介绍。
3、硬件结构
本章主要介绍本设计中的硬件设计,在总体设计的基础上,分别介绍了主控制器、电源模块、车灯控制模块和液晶显示模块的具体设计细节,并在必要的地方做了详尽的说明,以及一些原理性的阐述。
其中,电源控制模块和主控制器模块中的电源模块并不相同,主控制器模块中的电源电路只有简单的二级电压变化,主要是供给微处理器正常工作所需;电源模块的功能则是为了整个系统的供电所设,在设计上更为复杂,同时要求极高的可靠性与节能特性。
液晶显示模块的设计,则基于本设计的使用预期,在市场上选择满足要求的模块即可,对于内部电路以及工作原理,本设计不予具体说明。
3.1、硬件结构总体设计
系统硬件设计框图如图1所示。
在系统设计框图中,以嵌入式主控模块STM32F103RBT6为核心,以其他外设模块为依托,通过蓝牙通讯模块和液晶显示电路与用户形成交互。
图1
本课题所研究的智能自行车外设功能主要涉及到的为主控制器模块、GPS模块、车灯控制模块、蓝牙通讯模块、液晶显示模块。
各模块功能如下所述:
主控制模块:
主控制模块以STM32F103RBT6作为系统的主处理器,其最小系统电路包括电源电路、复位电路、时钟电路,这些都是芯片运行所必须的外接电路模块。
GPS模块:
GPS模块的功能是接收GPS卫星发送的导航电文,并通过串口把航电文发送给STM32微处理器,STM32微处理器对其进行解析得出车载终端所在的经度、纬度、时间和速度等位置信息。
蓝牙通讯模块:
负责与其它智能移动设备终端进行对接,在智能手机上安装相应app后,即可通过蓝牙完成两者间的数据传输和其它控制。
电源模块:
电源模块除了给系统中数字部分供电之外,还需要提供车灯和蓝牙通讯模块的相应能量,这些模块的点平并不一致,所以电源模块的主要功能就是对以上模块供给相应的电压,使系统正常工作。
车灯控制模块:
车灯控制模块主要实现对车灯的自动控制,通过速度和光照传感器获得的数据经微处理器处理后,用于控制车灯的开关、远近照明模式以及刹车灯的亮起等等,以保障行车安全。
液晶显示模块:
显示模块用于向用户展示自行车当前的状态,如速度、骑行时间、骑行距离、系统电量、车灯状态、时间等等信息,能够使使用者方便、快捷地规划骑行状态,做出合适的决策。
由于GPS技术和蓝牙技术已经相当成熟,相应的功能模块也有成熟的方案,所以以下主要介绍除这两者之外的其余模块的具体设计细节。
3.2、主控制器模块设计
3.2.1、微处理器电路设计
本系统的主处理器采用意法公司的STM32系列芯片STM32F103RBT6,STM32F103RBT6是基于ARMCortex-M3内核的32位嵌入式微处理器,它具有出色的内核性能,丰富的外部接口和低功耗。
图2为STM32电路设计图。
图2
STM32F103RBT6主要技术指标如下
:
●最高频率72MHz,1.25DMIPS/MHz
●128KB的FLASH,20KB的通用SRAM
●时钟,复位和电源管理;电压范围2.0~3.6V,可外接3~25M晶振,自带内部
RC,用于RTC的32KHz晶振
●低功耗管理:
有睡眠、停机和待机模式,突然掉电时可用电池为RTC和备用寄
存器供电
●2个12位1μsA/D,2个12位D/A
●12通道DMA控制器,支持TINIER,ADC,DAC,I
S,SPI,I
C和USART
●多达10个带有引脚重映射功能的定时器:
4个16位通用定时器,1个16位马
达专用PWM定时器,2个看门狗定时器,1个24位系统嘀嗒倒计数定时器,
2个用于DAC的16位基础定时器
●14个带有引脚重映射功能的通信接口:
2个I
C接口,3个USART,3个SPI
接口,2个CAN接口,USB2.0全速设备,10/1OOM以太网MAC
可以看出,STM32F103RBT6是一款具有极其丰富的片内外设,有较大的FLASH和SRAM,采用LQFP-64封装,适合低成本低功耗系统设计的一款处理器。
3.2.2、电源模块设计
系统采用锂电池供电,通常的锂电池电压输出为3.7V,而系统正常工作需要5V和3.3V电压,其中STM32需要3.3V电压进行供电,液晶显示的LCD电路以及蓝牙通讯模块需要5V电压供电。
因此,设计中采用两级变压方式,第一级将3.7V电压升至5V,第二级将5V电压降至3.3V对控制器供电。
采用自举电路可以将电源输出的电压升至5V,同时,对应于锂电池使用过程中的电压下降,自举电路也可以大致稳定输出电压不变,因此能够使用简单的自举电路完成升压过程。
图3是将SV电压转换成3.3V的电路,在此选用LM1117-33芯片。
它是一个低压差电压调节器系列,提供了电流限制和热保护,符合本系统的要求。
图3
3.2.3、串接口电平转换电路
由于车灯控制模块与STM32的串口通信所使用的点平不相同,为了实现与STM32的串口通信,需要进行串口的点平转换。
图4
电路如图4所示。
这里选用的电平转换芯片是MAX232,工作电压是3.3V。
电路与主控制器的USARTI连接,与车灯控制模块的连接采用了两个3线接口CNl和CN2,因为通常只采用的是输入、输出和接地3根线通信的方式。
3.2.4、JTAG/SWD电路
JTAG(JointTestActionGroup)是一种国际标准测试协议,主要用于芯片内部测试及系统进行仿真、调试。
在STM32F103RBT6处理器中,利用JTAG可以直接控制芯片的内部总线以及I/O口,通过JTAG接口,可对芯片内部的所有部件进行访问,是开发调试嵌入式系统的一种简洁高效的手段。
在设计中,对于nTRST,TDI,TMS,TDO端口,分别用lOK的上拉电阻上拉至3.3V。
电路设计如图5所示。
图5
3.3、稳压电源转换电路
图6
如图6所示,电路中24V电压由锂电池提供,分别使用LM7805和LM1117-3.3两块电压转换芯片,依次将24V电压转换为5V,3.3V电压供其他芯片使用。
这里的3.3V电压就是主控器STM32的供电电压,5V给液晶显示的LCD电路以及蓝牙通讯模块供电。
3.4、基于STM32的行车安全及智能照明系统
骑自行车时安全很重要。
这里设计一套智能测距及自动切换远近光灯的系统,如果自行车行驶前方有物体迅速靠近,该系统会立刻警示驾驶员进行规避以免碰撞,还可以自动调节远近光灯,从而降低事故发生率。
根据速度和雷达信息,判断自行车和其他车、自行车和行人之间的相互状态,并控制灯光切换,实现对远近灯光的自动控制。
可以有效避免驾驶员主观不规范使用灯光,造成的事故。
样机采用先进的嵌入式系统技术,功能扩展和集成能力很强。
3.4.1、行车安全及照明系统原理图
图7
如图7所示,该系统以单片机STM32为核心,通过检测光线以及相对速度进而判断是否进行声光报警以及灯光切换操作。
3.4.2、系统硬件设计
(1)微波测距方案
测距部分采用微波传感器,安装在车前,用来检测本车前方是否有障碍物,在夜间行驶中,微波传感器发射微波信号,遇到障碍物时,微波信号可以反射回来,微波传感器接收到反射回来的微波信号,经过合理的信号处理电路处理,进而判断车辆与障碍物的相对运动状态,做出相应的措施。
如果对方车辆开启远光灯导致自行车驾驶员无法看清前面道路状况,则微波测距传感器会检测前方是否有障碍物快速接近,如果有则会提醒驾驶员小心驾驶,减速行驶或者缓慢停车,从而能够降低相关事故的发生率。
(2)光线强度检测电路
图8
夜间行车时,如果对方车辆是利用远光灯行驶,则会对自行车驾驶员的视觉造成严重影响,进而容易发生交通事故。
所以,本系统会频繁切换远近光灯,以此给对方一个提醒作用,提示对方切换为近光灯行驶,如果对方变为近光灯,则本系统将会打开近光灯行驶。
灯光检测电路原理如图8。
当对方车辆为远光灯是,入射光线近似平行光,经反光环汇聚到硅光电池上,从而判断出对方为远光灯,并进行相应的灯光切换动作。
(3)声光报警及灯光自动控制
声音信号利用蜂鸣器来产生,并利用S8550三极管进行驱动;光信号利用红色LED产生。
在自行车行进时,微波雷达不停地探测前方物体与本车的相对速度,当相对速度超过50KM/h时,即将要发生撞车危险,此时主控器发出信号使三极管导通,从而使蜂鸣器开始工作进行声音警示,同时LED急促闪烁提供视觉警示。
3.5、液晶显示模块的选择
为了改善智能自行车外设的使用体验,有必要在系统中加入一块LCD显示屏,用以帮助用户掌握骑行信息,在相关型号的选择上,应当同时考虑功耗和成本。
考虑到显示屏需要呈现的信息较为简单,工作环境却比较复杂,因此决定采用具有背光功能的STN液晶屏幕,该类型的屏幕具有功耗极低的特点,适合于本系统采用电池供电的场合。
具体型号的选择参考以下几点参数作出选择:
尺寸。
便携式式是本系统设计时的一个指标,因此液晶的尺寸不易过大,但也要便于观察,选择时要符合实际情况,过大则不便于随身携带,过小则可能出现不便于观察等问题。
功耗。
对于便携式嵌入式设备来说,低功耗是一般都作为一项重要的指标,在使用时能够尽可能地延长电池的工作时间
价格。
正如上面所提到的,性价比高是本系统设计的一个目标,因此要可能的用符合设计要求价格低廉的产品。
材质。
液晶主要有两类:
STN型和TFT型,后者较之前者显示效果更佳,但耗电能方面也高于前者。
因此,根据上述几点本设计选用了3.2寸背光STN液晶显示屏,320*240像素,16位并行接口,可以直接用AVR,ARM7,STM32等MCU驱动。
相关参数:
●分辨率:
单色240x320
●尺寸:
3.2"
●控制器:
IL9320
●触摸屏:
非触摸屏
●接脚:
37PIN间距1mm
●背光:
5LED并联
4、软件设计
本章主要介绍本设计中的软件设计。
系统软件主要包括主程序,GPS解码子程序,GPS串口通讯子程序,蓝牙模块串口通讯子程序四个部分。
4.1、stm32程序设计语言和程序设计工具
Stm32编程一般使用C语言进行编写,可以支持汇编语言。
本文采用KeilμVision4来实现stm32C语言程序的编写。
MDK-Professional包括启用TCP/IP网络,CAN,USB和Flash文件系统支持库。
使用这些现有的资源,可以专注于开发应用程序的核心。
没有必要把时间浪费在重新执行低级别功能上。
所有Keil中间件库都由ARM和Keil工程师进行设计、测试和优化。
中间库有一个简单的API的模块化设计。
通过文档和例子,可以很容易重新使用专家所做的工作。
所有的中间件组件提供了源代码,可以重建库或扩展其功能集,对于需要源代码认证的产品非常有用。
并且使用Keil还具有可靠性强,成本低廉,资源丰富等特点,非常适合本项目设计开发使用。
因此本文选择使用KeilμVision4来实现程序的编写。
4.2、系统软件结构和主程序流程图
软件结构如图9所示,在软件方面主要包含主程序,GPS解码子程序,GPS串口通讯子程序,蓝牙串口通讯子程序四个部分。
其中主程序开始阶段需要初始化各个串口,i/o口等硬件设备,之后便进入GPS数据解码进程,通过解码程序将GPS串口发送过来的数据进行解码后,经过蓝牙模块的处理传输给安卓终端,从而达到预先要求的目的。
图9
4.3、GPS数据解码及串口通讯的实现
GPS定位的基本原理是根据高速运动的卫星瞬间位置作为已知的起算数据,采用空间距离后方交会的方法,确定待测点的位置。
由于GPS数据过于繁杂,且容易受到信号干扰,信号中断等因素的影响,GPS数据解码很容易出现数据丢失问题,因此在解码时程序使用nmealibrary库进行解码。
另外,为了防止GPS数据太多,CPU难以快速进行运算并处理,本文在串口通讯子程序中使用了DMA算法,使系统的效率大大提高。
以下是GPS串口通讯的代码实现:
硬件连接:
PA2-USART2(Tx),PA3-USART2(Rx)
用于接收GPS模块传来的数据,波特率9600
核心代码:
staticvoidGPS_DMA_Config(void)
{
DMA_InitTypeDefDMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启DMA时钟
DMA_InitStructure.DMA_PeripheralBaseAddr=(0x40004400+0x04);//设置DMA源:
串口数据寄存器地址
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)uart_buff;//方向:
从内存到外设
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//内存地址(要传输的变量的指针)
DMA_InitStructure.DMA_BufferSize=512;//传输大小DMA_BufferSize=SENDBUFF_SIZE
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址不增
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//内存地址自增
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;//外设数据单位
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;//内存数据单位
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//DMA模式:
不断循环
DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;//优先级:
中
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//禁止内存到内存的传输
DMA_Init(DMA1_Channel6,&DMA_InitStructure);//配置DMA的通道
GPS_Interrupt_Config();
DMA_ITConfig(DMA1_Channel6,DMA_IT_HT|DMA_IT_TC,ENABLE);//配置DMA发送完成后产生中断
DMA_Cmd(DMA1_Channel6,ENABLE);//使能DMA
USART_DMACmd(USART2,USART_DMAReq_Rx,ENABLE);//配置串口,向DMA发出TX请求
}
4.4、蓝牙模块串口通讯的实现
蓝牙是一种极其先进的大容量近距离无线数字通信的技术标准,其目标是实现最高数据传输速度。
由于蓝牙模块具有价廉,传输速度快,较为普及等优势,因此在与安卓端进行通讯时使用蓝牙模块。
以下是GPS串口通讯的代码实现:
硬件连接:
PA9-USART1(Tx),PA10-USART1(Rx)
重定向printf函数,波特率9600,同时可以直接连接蓝牙模块,将GPS获取的信息发送到安卓终端.
核心代码:
voidUSART1_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
USART_InitTypeDefUSART_InitStructure;
/*configUSART1clock*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
/*USART1GPIOconfig*/
/*ConfigureUSART1Tx(PA.09)asalternatefunctionpush-pull*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/*ConfigureUSART1Rx(PA.10)asinputfloating*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/*USART1modeconfig*/
USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
}
///重定向C函数库printf到USART1
intfputc(intch,FILE*f)
{
/*发送一个字节到USART1*/
USART_SendData(USART1,(uint8_t)ch);
/*等待发送完毕*/
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return(ch);
}
///重定向C函数库scanf到USART1
intfgetc(FILE*f)
{