版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机自行车转向灯控制系统的软件设计案例目录TOC\o"1-3"\h\u26518单片机自行车转向灯控制系统的软件设计案例 1326701.1STM32固件库开发概述 1325901.2程序代码结构 125841.3main.c结构说明 3267731.4按键功能软件设计 4151671.5ADXL345的软件设计 7309291.6模式切换的软件设计 81.1STM32固件库开发概述在设计过程中选择了一套STM32固件库,其中设置了很多函数,在应用过程中可通过函数对各个寄存器进行操作控制。可实现的功能主要如初始化IO口或者寄存器集成而满足效率要求。这种情况下写代码的时候可不需要考虑到寄存器。STM32在应用过程中可直接操作寄存器,此种模式下进行开发过程中,需要用户对寄存器的应用熟悉了解。不过其中的寄存器数量多这种情况下全部熟悉这些寄存器也不满足实际情况,因而应该进行一定的总体认识。由于单片机的代码主要有C语言编写,这种语言在编程领域被广泛的应用,其属于一种面向过程的语言,为满足寄存器的操作要求,可直接将寄存器操作封装在函数中,从而为其后的操作提供支持和便利。固件库开发可很好的满足效率要求。由于官方固件库的强大,这样在进行设计和编程时组建代码就可满足要求。在设计过程中具体分析考虑函数的预期功能,对固件库函数的使用相关情况熟悉了解,从而高效的利用。1.2程序代码结构这种代码的优势表现为方便调试,易维护,在不断的修改基础上实现设计目的。相关情况如下:1.按照硬件区分,各种模块进行分区分文件放置。1.同类型硬件设置在不同的函数中而提高处理性能。1.不同的函数根据相关的应用情况进行设置确定出适宜的关键字。1.函数的命名根据其功能相关情况进行确定。5.中断相关的函数主要是根据功能进行设计确定出宏定义。6.一般情况下不应用到局部静态变量。单片机模块化编程过程中应该对这些予以重视,确保实现功能目标。表4-1程序中.c文件功能表文件名可实现的功能acc_sensor.c在应用过程中可进行加速度传感器的读、写相关操作break_light.c初始化和处理函数,满足对应的控制应用要求button.c按键定义进行一定的设置函数light.c呼吸灯模式相关的中断控制,且实现一定调节目的state.c初始化相关的函数led.c初始化和中断处理,满足灯控制相关要求power.c定义引脚,为其后的调用提供支持xl345.cSPI接口处理,满足一定的数据通信要求以上.c文件的功能存在一定的差异性,不过对比分析可知其结构基本上相一致,以button.c为例对其功能情况进行具体说明。表4-2button.c结构说明结构功能举例头文件定义添加到文件#include"stm32f10x.h"#include"utils.h"#include"button.h"宏定义将引脚、中断处理等系统底层的功能起别名,方便阅读#defineBTN_RIGHT_PINGPIO_Pin_1 #defineBTN_RIGHT_IRQ EXTI1_IRQn中断初始化设定中断的名字、优先级、触发方式,管脚映射等staticvoid_initButton(void)staticvoid_initAntiShakeTimer(void)中断处理函数或者功能处理函数根据预期功能执行相应的处理任务voidBTN_LEFT_IRQROUTINE(void)voidBTN_ANTISHAKE_IRQROUTINE(void)1.3main.c结构说明本文设计过程中根据控制要求,而确定出适宜主函数,其是基于模块化模式设计的,相对简洁。功能封装处理,这样也使得主函数很简洁。Main.c中代码如下:#include"stm32f10x.h"#include"utils.h"#include"acc_sensor.h"#include"display_state.h"#include"button.h"#include"led.h"#include"xl345.h"#include"power.h"intmain(){ PWR_SetUnusedPin(); HW_CommonInit(); LED_Init(); //初始化升压电路引脚 HW_InitSysTick(); ACC_Init(); STATE_Init();从ADXL读数据,开启定时器 BTN_Init(); //按键和定时器的初始化 while(1){PWR_EnterSLEEPMode();//开始休眠,等待中断 }}具体分析可知其结构主要包括头文件和主函数,后者主要是进行初始化,在一定条件下可进入睡眠,等待中断。while(1)主要的作用是进入睡眠模式,而更好的满足功耗要求。这种状态下其中的Cortex-M3内核停止,不过其他的单元如NVIC、系统时钟等保持运行状态,因而在应用过程中可基于ADXL345芯片进行中断控制,唤醒处理器。1.4按键功能软件设计模式切换过程中为更好的满足有要求需要设置按键,左右转向设置了按键,这种情况下三个按键全部放在车把上也不满足应用要求,因而设计过程中选择长按左或者右按键实现切换控制功能。按键功能的逻辑控制相关情况如下,在运行过程中检测到外部中断线1和2电平为高情况下消抖,长时间高则可判断出按键按下了,这种条件下检测确定出为长按则开始进行模式切换而满足控制要求。在设计过程中需要重点考虑到消抖和确定按键时长相关的延时。delay函数可满足延时要求,这样可不需要消耗电能,设置定时器也可以满足这种要求。本文也时对比分析而选择定时器来消抖,用延时函数进行分析确定出长按状态,原因如下所示:在正常骑行中,由于颠簸相关因素的影响,这种很容易出现一些干扰问题,如导致外部中断引脚产生瞬间的干扰电流,这种情况下可能出现误判问题。也就是在没有按键的情况下,读到上升电流。在实际应用过程中此处的消抖功能主要是消除没有按下按键,去除与此相关的干扰问题。而此时唤醒单片机,进行相应的延时处理并没有实际的意义,不满足省电效果相关要求。处理器继续休眠情况下可实现延时功能。确定按下按键后,接着基于延时函数进行判断分析确定出按键的时间长短,具体分析可知这种操作的原因在于如下两方面;一方面单片机已经唤醒,这种情况下进行延时处理不会导致浪费电量;此外也可以避免按键的定时器中断相关的干扰问题,更好的满足安全性要求。定时器中断的优先级高,这种情况下通过定时器中断也会引发相关丢失问题,因而应该适当的进行优化。按键的定时器中断和外部中断存在密切关系,对比分析可知二者的优先级均为1,不过在控制过程中前者不会被外部中断打断,外部中断的执行了过程中可实现相关这种终端控制。而第二次电平判断发生在定时中断模式下。因而是外部中断线对应的延时函数。相关情况具体如下
等待2触发定时器2开启等待2触发定时器2开启进入引脚电平 30毫秒过后进入引脚电平干扰,不处理读取电平右按键处理函数左按键处理函数判断按键干扰,不处理读取电平右按键处理函数左按键处理函数判断按键低电平 高电平 PB2为高电平 PB1为高电平图4-1按键触发流程图
左/右按键处理函数左/右按键处理函数用时约2秒用时约2秒再次检测再次检测切换模式 是短按 长按切换模式闪烁8次闪烁8次 图4-2按键处理流程图1.5ADXL345的软件设计ADXL345与单片机在进行数据通信过程中应用到SPI协议,相关情况具体如下。刹车状态可以基于如下的方式进行判断;先确定出X,Y,Z轴加速度均值,且对比分析实测值和此均值的差异,且进行判断分析确定出是否有状态变化。从而大幅度降低安装倾斜造成的误差问题。不过安装时也应该尽量使加速度芯片与地面垂直,从而有效的提高检测质量,控制错误率。在此过程中需要分析水平和竖直方向的加速度,在发现连续震动情况下进行唤醒操作而满足要求。参数的调整过程中对比分析而要用到BOOT启动功能,在flash中记录测量结果,下次调用过程中可直接进行取出。这样可以收集确定出相关加速度值,下次调整参数而更好的满足效率要求。现在加速度传感器的参数可根据要求进行灵活的调节,且灵敏度也处于较低水平,有较高的性能优势。ADXL芯片与单片机可以工序的进行通信,相应的数据传输流程如下次所示。
判断时间长度亮红灯亮黄灯,计时30秒单片机推出睡眠模式唤醒判断时间长度亮红灯亮黄灯,计时30秒单片机推出睡眠模式唤醒加速度芯片检测到连续震动判断加速度判断加速度 刹车 没有刹车判断刹车状态判断刹车状态 刹车 没刹车 没超过超过30秒关闭LED关闭LED,休眠图4-3加速度芯片与单片机通信流程图1.6模式切换的软件设计本设计中单片机对应的运行模式可划分为两种,分别为休眠和正常模式。具体分析可知其中正常模式主要包括刹车灯、呼吸灯模式。以下对二者的区别相关情况进行说明图4-3正常模式与睡眠模式图在应用过程中可以实现一定状态切换功能,刹车灯、呼吸灯模式通过标志位g_DisState进行确定,而实现切换功能。enumDISPLAY_STATE{ STATE_BREAK_LIGHT, //刹车灯 STATE_COLORLIGHT,//呼吸灯 STATE_MAX,//重新回到刹车灯};刹车灯是初始状态可以通过此函数值进行判断,且模式切换时应用到g_DisState++,在应用过程中可以据此方便的求二环标志位而满足应用要求,对比分析可知这种设置在逻辑上简单的。voidSTATE_NextState(void){g_DisState++; if(STATE_MAX==g_DisState){ } STATE_SetState; return;}不同模式的处理函数功能存在一定的差异性,不过在应用过程中都需要应用到指针函数切换而满足相关要求。typedefvoid(*ACC_)(u8irq); 通过以上的字符串设置了一个函数指针,在应用过程中需要设置函数的参数和类型,基于对应的g_handle
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026福建福州现代中学教师招聘24人备考题库有答案详解
- 2026西昌人力资源开发有限公司西昌市昊至辰房地产开发有限责任公司项目招聘1人备考题库附答案详解(满分必刷)
- 2026西藏林芝墨脱县人民医院招聘人员7人备考题库有完整答案详解
- 2026西藏阿里地区普兰县审计局招聘审计协助人员的2人备考题库及答案详解(夺冠)
- 2026贵州六盘水钟山区首钢水钢医院助理全科医生培训招录10人备考题库及完整答案详解1套
- 2026贵州毕节织金县人民医院社会招聘合同制工作人员6人备考题库及1套参考答案详解
- 2026贵州省茅台学院招聘1人备考题库含答案详解(典型题)
- 2026贵州贵阳白云城市运营维护投资(集团)股份公司招聘1人备考题库附答案详解(考试直接用)
- 2026贵州遵义仁怀市人民医院助理全科医生培训(西医)招聘25人备考题库带答案详解
- 2026贵州黔东南州镇远赵树国医院招聘备考题库及一套答案详解
- 中国鼻咽癌诊治指南(2026版)
- 市场监督管理局全流程市场监管工作手册(标准版)
- 国航股份信息管理部校园招聘笔试题库2026
- 2026贵州磷化集团社会招聘77人笔试历年备考题库附带答案详解
- 水利站人员培训考核制度
- 统编人教版五年级语文下册《田忌赛马》示范教学课件
- 急性气管支气管炎课件教学
- 压力仪表培训课件
- 房屋结构改造合同范本
- 卒中绿色通道与团队快速反应流程优化
- 人教版七年级下册语文诗歌鉴赏及答案
评论
0/150
提交评论