基于STM32的自行车转向刹车灯本科生毕业论文.docx
《基于STM32的自行车转向刹车灯本科生毕业论文.docx》由会员分享,可在线阅读,更多相关《基于STM32的自行车转向刹车灯本科生毕业论文.docx(39页珍藏版)》请在冰豆网上搜索。
基于STM32的自行车转向刹车灯本科生毕业论文
河南师范大学
本科毕业论文
学号:
**********
基于STM32的自行车转向刹车灯
学院名称:
物理与电子工程学院
专业名称:
电气工程及其自动化
年级班别:
2011级
姓名:
指导教师:
2015年5月
基于STM32的自行车转向刹车灯
摘要
本课题选用了STM32F103C8T6单片机和ADXL345三轴加速度传感器,来控制全彩灯珠和红外线激光灯,达到指示自行车的刹车或者转向的功能。
本文首先介绍了STM32系列芯片和ADXL345加速度芯片的功能和特点。
之后详细介绍了刹车灯系统的硬件和软件设计。
难点是硬件设计中的问题与思考,重点软件设计中运用模块化编程的方法组建代码的过程。
经过调试运行结果分析,该设计实现了刹车时全彩灯珠自动亮起,转向前主动触发,使红外线激光灯产生显著的转向信号的功能,满足了设计的要求。
论文最后总结了设计中出现的问题以及解决方法。
关键字:
STM32,ADXL345,自行车刹车灯,转向灯
TheBicycleBreakLightandSteeringLampBasedonSTM32
Abstract
ThissubjectselectstheSTM32F103C8T6micro-controllerandADXL345threeaxisaccelerationsensor,tocontroltheRGBLEDandinfraredlaserlight,toindicateabicyclebrakingorsteeringfunction.
FirstthispaperintroducessomeinformationandcharacteristicsofSTM32serieschipandADXL345accelerationchip.Andthenintroducesthedesignofhardwareandsoftwareofthesystem.Thedifficultyistheproblemandthinkingintheprocessofhardwaredesign,usingthemethodofmodularprogrammingkeysoftwaredesignbuildingcode.Throughthedetailedanalysisoftheoperationresult,thedesignandimplementationoftheRGBLEDautomaticallylightsupwhenbraking,activetriggeringmakestheinfraredlaserlightgeneratedsignalfunctionsignificantlybeforesteering,inaccordancewiththedesignrequirements.Thethesisfinallysummarizestheproblemsoccurredindesignandtheirsolutions.
Keywords:
STM32,ADXL345,thebicyclebreaklights,steeringlamp
前言
骑自行车既是一种环保的出行方式,又是一种健康的运动方式。
对于个人来说,骑自行车不仅可以减肥,使身体匀称,同时可以强化心脏功能,有避免高血压等疾病的功能。
骑自行车可以使骑行者血液循环加速,主动吸入大量新鲜空气,从而使骑行者脑筋更清楚。
有研究显示,骑自行车上班或者上学,可以提升人的幸福感。
特别是在风景优美的地方骑行,会让人觉得心旷神怡,充分感受到运动的快乐和自然的美好。
对于自然来说,骑自行车出行可节约能源、降低噪音、减少污染,生态效应明显。
建设“资源节约型、环境友好型”社会是我国经济社会发展的客观要求。
个人开车上下班会对环境产生巨大危害,给城市交通也带来巨大压力。
因此积极提倡自行车出行,是利国利民的好事。
然而,中国的自行车骑行氛围非常不乐观。
中国曾是自行车的王国,却像一些发达国家一样过度强调汽车经济,各个城市汽车保有量连年上升,冷落自行车成为常见社会现象,鄙视普通骑行者更是成为大众心理。
另外,由于汽车尾气,工厂排污等造成的环境污染,导致许多城市适合户外运动的天数越来越少。
加之中国司机普遍素质不高,在驾驶机动车行车过程中常常占用自行车道。
特别是从自行车道超车这种行为,给骑行者带来很大的威胁。
尤其是在夜间,机动车占道超车的危害更大。
与机动车不同,自行车出现刹车、转向等行驶状态的变化时,没有显著的指示。
如果在转向或者刹车时自行车道被机动车占用的话,对于骑行者来说将是非常危险的事情。
本设计可以归类为骑行装备的一种,设计初衷是为了给骑行者提供一种较为显著的可以警示转向或者刹车的工具。
与头盔、护膝之类传统的骑行装备相比,可以在危险发生前提供预警,减小危险发生的几率。
按照实现方法来说的话,本设计属于基于STM32单片机的一个小型电子设备。
与常见的长亮型市售刹车灯相比,更加智能,功耗也更低。
与无光源反射式的后座警示灯相比,本设计的警示方式更加显眼,也更加时尚。
综上,本设计与其它骑行装备相比,是具有一定的独创性的智能化警示设备。
本设计虽然只是为了检验学习情况,而做的一个小制作性质的发明,但其设计思路却以正规产品思路为指导,没有追求一味地多添加功能,以增加其技术含量,而是真正考虑到如果要作为实际产品的话,需要考虑的功能、成本和功耗。
因此,本设计最大程度追求降低功耗,裁去多余硬件,功能求专而不求多。
本文共分为5部来写,首先介绍了STM32系列芯片的和ADXL345芯片的特点,然后是系统硬件设计和系统软件设计,最后是总结设计中出现的问题及其解决办法,个人收获。
1.Cortex-M3与STM32简介
1.1Cortex-M3与STM32的关系
STM32是采用Cortex-m3的内核的一种CPU,Cortex-M3是ARM架构的一种。
Cortex-M3采用ARMV7构架,支持Thumb-2指令集,同时具有很多强大的特性。
较之ARM7TDMI,Cortex-M3不仅拥有更强的性能、更高的代码密度、而且可以位带操作、中断嵌套、低成本、低功耗。
国内Cortex-M3市场,意法半导体公司的STM32是毋庸置疑的领跑者,不论是在市场占有率,技术支持还是使用氛围等方面,都远超其他对手。
所以本设计在Cortex-M3芯片的时候,自然而然地就考虑了STM32。
1.2STM32的优越性
STM32的优越性体现在以下几个方面:
1.超低的价格。
几乎与8位单片机的价格持平是STM32最大的优势。
就本设计所选的STM32F103C8T6而言,在北京中发电子市场买10片的话,每片仅需10.5元。
而一块STC89C52RC就需要9元。
两者的性能差别却非常之大。
2.丰富的外设。
STM32拥有包括:
TIMER定时器、SPI通讯协议、I2C总线、USB通讯协议、CAN总线、数模转换器、模数转换器、RTC、DMA等众多外设或者功能,具有很高的集成度。
本设计中单片机通过SPI与ADXL345三轴加速度芯片进行通信。
3.丰富的型号。
STM32中的M3系列内核拥有多个系列上百种型号,十分丰富。
其封装库也有较多的选择,如QFN、LQFP、BGA等。
本设计选取了LQFP48L封装,是一种方便手工焊接,且体积较小的封装。
4.优异的实时性能。
由于STM32芯片的多数IO口都可以通过不同的映射设置,来作为中断输入,所以提供了较多的中断数量,最多可达84个,且具有16级可编程的优先级,合理地规划中断数量和优先级可以有效保障实时性能。
5.杰出的功耗控制。
STM32所有的外设都有自身的独立时钟开关,相应外设的时钟被设置为关闭的话可以有效降低功耗。
本设计充分应用了STM32的这个特性,所有的外设全部以中断的方式来控制,在不使用的时候关闭相应时钟,追求最大程度降低功耗。
6.较快的开发速度。
ST将各个寄存器的操作集成了一个官方固件库,将寄存器的使用方法封装到不同的函数中,开发者通过API直接调用这些函数即可操作寄存器,不需要深入底层注重这些寄存器的操作细节,因此大大提升了开发速度。
7.极低的开发成本。
STM32的官方仿真器价格很低,且国产的仿真器质量也可以接受,不像某些单片机仿真器动辄上千,另外支持SWD和JTAG两种调试办法,方便使用。
本设计使用SWD调试,只需要2个IO口,即可实现仿真调试。
1.3STM32的系统结构、内核及指令集示意图:
图1-1STM32的系统结构
图1-2Cortex-M3处理器内核与Cortex-M3芯片的关系
图1-3Thumb-2指令集与Thumb指令集的关系示意图
1.4STM32F103C8T6的基本参数、内设与引脚位
基本参数:
类别:
集成电路(IC)
所属:
嵌入式微控制器
位数:
32位
最高速度:
72MHz
输入/输出IO数:
37
程序存储器容量:
中型64K
程序存储器类型:
Flash闪存
RAM容量:
20Kx8
电源电压:
2V-3.6V
ADC:
10x12b
工作温度:
-40°C-85°C
封装/外壳:
LQFP-48L贴片式
图1-4STM32F103C8T6内设与引脚图
2.ADXL345与SPI简介
2.1ADXL345简介
概述
ADXL345是一种体积小巧的低功耗三轴加速度芯片传感器,拥有可达13位的分辨率和16g的测量范围。
输出16位补码数据,可通过SPI或I2C接口访问。
ADXL345可以在倾斜检测中测量静态重力加速度,由于高达3.9mg/LSB的分辨率,小于1度的倾斜角变化可以检测到。
还可以测量运动或冲击导致的动态加速度。
本设计中使用的功能就是在运动状态中检测动态加速度,属于移动设备应用的ADXL345,可以说是恰如其分的选择。
该器件提供以下几种特殊检测功能:
活动与否检测功能:
通过比较某轴上的加速度与用户自定义的值来检测是否运动。
震动检测功能:
检测任意方向的有无震动。
掉落检测功能:
判断传感器是否处在在掉落过程中。
这些功能可以独立映射到两个中断输出引脚(第8脚和第9脚)中的一个。
参数
功耗:
测量模式23uA(VS=2.5V),待机模式0.1uA
分辨率:
10位固定分辨率,最大可调分辨率13位
电源电压VS:
2V-6.3V
引脚高电平:
1.7V-VS
工作温度:
-40°C至+85℃
引脚结构与功能
图2-1引脚配置图
表2-1引脚功能描述表
2.2SPI介绍
SPI是串行外设接口(SerialPeripheralInterface)的缩写,SPI是一种简单易用的通讯协议,正在被越来越多的芯片采用,它可进行全双工通讯,所以速度很快,可同步。
只占用四根线,不但节省了宝贵的芯片IO口资源,而且有利于进行PCB布局设计。
表2-2SPI功能描述表
名称
功能
描述
SDO
数据输出
主要的通讯线,负责输入主设备的数据,输出从设备的数据
SDI
数据输入
主设备数据输出,从设备数据输入,在单向传输时可以不使用此线
SCLK
时钟
时钟信号,主设备负责提供时钟脉冲,允许数据按位传输,共数据输入线和输出线按照这个脉冲传输数据
CS
片选
从设备使能信号,由主设备控制某从设备是否被选中,因此同一总线上可以连接多个SPI从设备。
SPI是串行通讯协议,即数据是按位的传输的。
由SCLK提供时钟脉冲。
从设备向主设备的数据输出通过SDO线,数据在时钟上升沿(或下降沿时)改变,在下一个下降沿(或上升沿)被读取。
这样,在SCKL提供不少于8次脉冲时,就可以完成一个8位数据的传输。
一个满足SPI协议的设备中,至少需要一个主设备。
只可以主设备控制SCKL,从设备不允许控制。
当主设备未曾控制SCKL时钟信号线产生跳变时,从设备不进行数据的采集和传输。
这样的好处是,主设备只需要控制SCKL时钟线就可以控制与从设备的通讯。
时序介绍
图2-2SPI时序图
3硬件设计
3.1硬件设计概述
本设计的硬件设计经历了两个版本,V1.0和V2.0。
。
本设计采用的设计流程是:
1.考虑预期功能,进行器件的类别选择。
2.广泛搜集资料,设计原理图。
3.考虑板子与器件大小,设计PCB。
4.焊接第一版PCB,调试程序。
5.修改错误,优化布局,设计第二版PCB。
本设计的硬件电路设计软件是altiumdesigner13。
最初的想法是设计一个自行车的刹车灯,看上去要酷炫。
当时有两个方案:
其1是直接改装自行车的刹车手柄,使手柄的活动处与车把的固定端导电连通,刹车的时候这两处分离,则电气连接断开。
这样子几乎可以保证百分之百亮起刹车灯。
缺点是不具备普适性,每个自行车需要不同的改装,另外技术含量也大大降低。
其2是使用加速度传感器芯片。
通过MCU控制传感器芯片,读取加速度值来判断刹车状态。
这种方案是很难达到很高的准确率的,因为对于芯片来说,它无法判断产生的加速度是在加速还是在刹车。
假设自行车匀速前进的时候,三轴加速度的值与静止状态是一样的,因此无法判断此时的加速度值与前进方向的关系。
本设计选择方案2,选择加速度芯片。
考虑到酷炫,所以采用了全彩灯珠。
根据色光三原色原理,红绿蓝三种颜色的LED灯珠足以产生绚丽的色彩。
在设计原理图的时候,主要参考了正点原子的战舰STM32开发板和github上的项目ProgrammableLED。
在设计PCB的时候,首先考虑了板子的尺寸。
由于要使用电池供电,所以板子的大小就有了限制。
查阅到电池盒的尺寸后,确定了板子的尺寸为3.3cm*6cm,双面板,单面放置贴片元器件。
在确定器件封装的时候,充分考虑了手工焊接的限制和本人焊接的水平,多数阻容器件采用了0805这样的较大封装。
值得一提的是,在PCB设计过程中得到了专业硬件工程师的指导,在确定板子尺寸和器件封装后,器件采用了手工布局,具体的布局和布线流程是这样的:
1.将MCU放在最中间的位置上。
2.根据接插件的特殊要求放置接插件。
比如电源接入口必须放在左端,而红外激光灯放在上端。
3.放置有特殊要求的器件,如为了美观,要将两个全彩灯珠对称放在MCU两端。
易发热的器件离其它器件远一点。
4.将电源相关的器件放置在电源接入口的附近。
主要是一些电容,将这些电容排列整齐并且大容值的放在前边。
5.根据与MCU管脚的连接关系,选取器件的放置区域。
如某器件与芯片连接的管脚在右边,则尽量将此器件放置在芯片右边。
6.考虑到减小焊接难度,将相似器件放在一块。
完成布局以后一定要手工布线。
一是因为手工布线可以加深对板子的理解,调试的时候效率会高很多。
二是因为自动布线会产生较多的过孔,而打过孔的钻头是易坏部件,会增加成本,并且如果大批量生产的话板子摆放层数较多,则下层的过孔可能很小,不合乎要求。
虽然这个设计很简单,自动布线是有效的,但是为了养成良好习惯,指导老师建议我手工布线。
手工布线中需要注意顶层和底层的线不要平行,防止信号干扰。
不要有小于90度的拐角。
根据通过的电流设置线宽,等等。
将第一版印制出来后,焊接完成,烧录程序。
发现一些错误,不得不通过割线,飞线等方式来调试。
然后在第一版上调试软件,然后基本实现了预期功能。
有些问题无法确定是软件问题还是硬件问题,所以这一步很艰难。
虽然,较为稳妥的开发流程是,先在开发板上调试代码,确认代码无误后根据预期功能对开发板进行硬件裁剪,然后制版。
这样子可以避免软件硬件问题混淆,这也是学生学习常用的开发手段。
但是工业开发是没有开发板的,直接由硬件工程师设计好板子,软件工程师写程序。
为了更好地锻炼自己,所以我采用了后者。
艰难地修正了一些错误,优化了器件布局后,发出第二版。
图3-1器件布局3D效果图
3.2电源部分的硬件设计
考虑到本设计将采用电池供电,且各个器件均可在3V电压下工作,因此电源部分设计较为简单,只采用了磁珠和电容,抑制高频噪声和信号干扰。
电池使用一段时间后会使供电电压下降,这个问题本可以通过采用升压电路来解决。
但是考虑到升压电路的效率最高只有80%多,会浪费较多电量,所以放弃了这个设计。
图3-2电源和芯片滤波电路原理图
图3-3电源模块3D效果图
3.3STM32和ADXL345硬件设计
MCU与加速度芯片都是较小的封装,手工焊接难度大。
MCU的封装为LQFP48,相邻管脚的中心距离仅仅0.5mm,手工焊接需要格外小心,要想成功焊接需要掌握一些方法。
首先,用烙铁对一个最边角的焊盘上锡,建议是1号引脚(在PCB上是小白圈标记的,在单片机封装上是凹陷的小坑标记的),然后用镊子将单片机按照正确的方位摆正,用烙铁焊接上1号引脚,多焊接周边的几个一脚也是可以的,因为这一步的目的是固定,而不是一步到位,如果歪斜,可以加热焊锡重新调整位置。
在烙铁温度350度的情况下,时间不是太长的话,芯片一般不会被烧坏。
MCU固定好之后,用较多的焊锡把其它三个边的引脚全焊上,同时要稍微用力向下按一下引脚,使引脚可以贴在焊盘上。
这时肯定会出现引脚的粘连的,这不是焊接失败,只要沿着引脚的平行方向把多余的锡带走就好。
使用烙铁带走焊锡的过程既要注意烙铁头的运动轨迹,不可贴着PCB板,以免烫断走线,又要注意操作速度,太慢的话无法带走多余的焊锡。
最后仔观察,确保没有短路。
ADXL345的芯片封装看上去好像间距较大,实则是板子焊接过程中最艰难的部分。
由于它的引脚全在底面,只能使用热风枪焊接。
首先要用酒精擦一擦焊盘,确保没有灰尘或者杂物;然后在焊盘上小心的涂上一点焊锡膏,需要保证每个触点上都有焊锡膏且焊锡膏不能过多。
然后将芯片小心放在焊盘上,注意1号引脚的位置,各个引脚与焊盘的位置对正。
用镊子固定住芯片,将热风枪的温度调整到350度左右,对准芯片加热约10秒。
小心镊子也可能会变烫,最好使用带有胶皮的镊子。
热风枪需要用最大风嘴最小风量对准芯片吹。
焊锡膏融化时,要确认芯片引脚与焊盘对准。
注意此时PCB非常烫,不要立即用手接触PCB板。
检查的时候可以用万用表确定有没有短路,根据原理图可以看到,1、6引脚联通,2、4、5引脚联通,其它脚联通的话就说明短路了。
如果有虚焊,可以用烙铁尖沾一点焊锡压一下焊盘,焊锡就会自动补到引脚和焊盘之间;如果短路就只能用风枪把ADXL345取下来重新焊接。
图3-4STM32F103C8T6原理图
图3-5ADXL345原理图
图3-6STM32F103C8T6的3D效果图
图3-7加速度芯片贴盘效果图
3.4全彩灯珠的设计
全彩灯珠可简称为RGBLED,本设计采用的是5050封装。
本质上来说RGBLED就是三个LED灯。
根据色光三原色原理,红,绿,蓝三种色的色光就足以产生其它各种颜色的光。
灯珠本身白色的,配合变换的灯光,非常漂亮。
LED灯的焊接十分简单,却容易犯错,需要注意焊接温度,不能超过315度,且尽可能在3秒钟之内完成焊接。
因为RGBLED非常容易烧坏。
LED的正负极需要事先用万用表确认。
注意3个限流电阻的阻值是不一样的,蓝色LED阻值较小。
图3-8全彩灯珠原理图
图3-9全彩灯珠贴盘效果图
3.5转向按键与红外线激光灯的设计
本设计的预期要实现转向灯功能,至少有两种方案:
其1是通过读取ADXL345的值。
转弯的时候在转弯的方向会有一个小的加速度,单纯检测这个加速度难度较大。
不过正常骑行的时候,转弯一般是需要减速的,这两个条件放在一起来检测的话可以减小难度。
这个方案的弊端是,只能在转向的操作发生之后,才显示转弯,无法在转向之前就给出指示和预警,所以舍弃此方案。
其2是主动触发的方案。
主动触发至少包括两个方法。
1是利用车架与车把的倾角变化。
直线骑行的时候车架与车把夹角是垂直的,但是转向的时候夹角就会发生变化。
如果在车架与车把之间放置金属片,使之向前骑行的时候不接触,转动车把,也就是转向的时候接触,就可以检测到转向。
这个方法的缺点也是在转向操作之后才可以做出指示,故舍弃。
2是有骑行者主动按下按键触发,就是本设计采用的方案。
转向按键是控制红外线激光灯的开关,也是模式切换的开关。
红外线激光灯是指示左右转向的信号灯。
激光灯发射出来的光投影到地面是一字线状,而不是点状。
在光线较暗的情况下可以清楚地看到地上是平行于自行车的红色线条,这样就可以警示其它车辆注意自行车的转向。
两者的逻辑关系非常简单,按左转按键,则左边的红外线激光的闪烁,左侧地面形成线状投影。
右侧亦然。
但真正实现的时候还需要考虑一些别的因素。
首先是按键的选型。
在实际使用中肯定是不能用轻触开关的,太小了。
我选择了一款较大的按键开关,有弹簧结构,自动复位。
也有螺丝与金属片,可以方便地固定线。
图3-10转向按键电路原理图
红外线激光头选用了一款3V,5mW的工业级激光灯头。
由于工作电流可能达到20mA,所以直接用单片机的引脚驱动可能是有一定的危险的,因此电路设计中采用了NPN型三极管驱动。
三极管工作在开关状态,这样子单片机的引脚只需要很小的驱动电流就可以控制红外线激光头的亮灭。
图3-11红外线激光头电路原理图
关于红外线激光头的选型也是很麻烦的一件事。
在多数人的印象中红外线激光头非常亮,但是那只是点状光源,换成线状的就会发现亮度比较低。
采用较大功率的红外线激光头的话会浪费较多的电量,同时低电压大功率的激光头非常容易损坏。
即便是本设计选用了一款工业级的激光头,也还是在调试过程中就坏掉了好几个。
如果升压,采用5V或者更高的电压,会使整个设计复杂得多。
不但需要更大的体积,来至少串联3个电池,还需要稳压管来给芯片提供合适的电压。
多次比较,本设计最终选取了这款3V,5mW的工业级激光灯头。
3.6其它硬件设计
SWD调试接口
调试接口采用了SWD接口。
用标准的JTAG调试口需要5个,而用SWD调试接口只用4根线,2个IO口,但它们达到的效果是一样的,加上SWD调试也可以使用J-LINK仿真器,所以选择SWD调试。
图3-12SWD调试接口原理图
串口和BOOT接口
串口调试是调试过程中非常有力的工具,它可以直接将需要的数据通过串口调试助手打印到电脑屏幕上,直观的看到某个变量的值或者IO口的电平状况,是单片机开发的必备接口。
所以本设计也保留了STM32的串口。
BOOT可以确定STM32的启动模式,本设计出于调试加速度芯片设定值的需要,保留了BOOT0接口,这样子就可以将加速度值写入系统存储器,再从系统存储器驱动程序,在上位机上就可以看到加速度值,极大提升了调试效率。
表3-1启动模式说明表
启动模式选择引脚
启动模式
说明
BOOT1
BOOT0
X
0
主闪存存储器
主闪存存储器被选为启动区域
0
1
系统存储器
系统存储器被选为启动区域
1
1
内置SRAM
内置SRAM被选为启动区域