胡孙杰,彭时翔,张小西,曹德友
(浙江长江汽车电子有限公司,浙江温州,325000)
随着自行车技术的不断发展,骑行速度越来越快;同时出现了自行车速度过快刹车不及时造成人员身体伤害的事件不断发生。因此设计一款体积小、操作方便的便携式自行车车速报警系统,它能实时显示当前自行车的速度,超出设定速度发出蜂鸣报警,同时能实时显示当前环境温度、电池电量及自动计算并显示当前自行车行驶里程。
本文主要对单片机、霍尔测速原理、DS18B20 温度采集、EEPROM 数据存储、蜂鸣器控制原理、ADC 电压采集及OLED 显示原理的阐述与总结,对本文所描述的STM32F103CBT6 控制的自行车速度检测显示报警系统的系统原理的阐述,以及对控制程序的原理进行解析。
系统设计思路如下:在骑行过程中当自行车轮胎旋转一圈走过的距离即为轮胎的周长C,采集轮胎旋转的圈数即可得出自行车走过的总距离。因此如果将一个永磁铁安装在自行车轮毂上,与磁铁对应的霍尔传感器装在固定支架上,单片机就可采集到的轮胎的旋转状态。单片机可计算单位时间T 内收到的脉冲数n 得出实时速度V=nC/T;总里程数S 为所收到脉冲数总数m 与轮胎周长乘积C 及S=mC。当轮胎都为标准的尺寸规格时,在首次安装时提示选择轮胎尺寸查表可得对应的周长;如规格不在表格中可选择手动输入当前轮胎周长或直径单位为毫米。
图1 为系统设计框图。本系统采用STM32F103CBT6单片机对自行车速度传感器霍尔脉冲信号的采集计算,同时通过DS18B20 采集环境温度,通过OLED 显示模块显示自行车实时速度、里程、环境温度、电池电量,通过AT24C02 存储自行车轮胎尺寸、总里程、限速设定挡位等配置信息,当速度超出设定值时通过蜂鸣器、LED 指示灯、液晶显示提示发出报警提示骑行人员减速。
图1 系统框图
系统采用单节3.7V 锂电池供电,同时单片机采集电池电压当电压过低时提示充电或更换电池。系统设计主要涉及以下几个环节:单片机实现总体控制,YS282 霍尔脉冲信号采集、按键控制输入、DS18B20 环境温度采集、AT24C02通讯控制、蜂鸣器报警控制电路和OLED 显示屏并口通讯控制。
系统的硬件电路包括霍尔脉冲采集,DS18B20 环境温度采集电路,电源供电模块及ADC 电池电压采集电路,OLED 显示屏控制电路,蜂鸣器、LED 报警电路,按键输入,EEPROM 系统参数存储、单片机系统[1]等部分组成,下面进行详细说明。
本系统采用脉冲计数法测量速度;采集自行车转轴旋转圈数转化成单片机可以识别的脉冲信号进行计算可获得自行车速度。霍尔传感器因结构简单安装方便,抗灰尘、油污等优点广泛应用各种工业场所,采用YS282是一款高灵敏度高稳定的单极型霍尔效应传感器;OUT 脚作为霍尔信号输出至单片机信号采集脚,增加1k 电阻上拉增加驱动能力,同时增加滤波电容过滤干扰。霍尔传感器硬件接口电路见图2。
图2 YS282 硬件连接电路
本系统采用STM32F103CBT6 实现速度、温度、电压等信号采集、计算显示、报警等功能。如图3 所示单片机最小系统包括上电复位电路、编程口、晶振、单片机等在内的单片机最小系统,单片机采用3.3V 低电压电源供电可显著降低系统功耗。
图3 单片机最小系统原理图
本系统选用ATK-0.96"OLED 模块用于显示交互;该模块尺寸只有0.96 寸分辨率却达到了128×64;采用先进的SSD1306 驱动芯片,内部集成升压电路只需3.3V即可工作[2],硬件设计无需再增加DC-DC 电路使系统设计更简单,模块接口电路见图4;采用3.3V 电压供电,通讯接口采用并口通讯,同时可以通过单片机IO控制显示屏复位。
图4 OLED 硬件接口电路
当前系统采用无源蜂鸣器作为声音报警器件;无源蜂鸣器与扬声器相同是利用电磁感应现象,直接接入直流电无法产生声音,只在接通或断开时产生声音。蜂鸣器控制电路见图5,包括S8050 驱动开关三极管,1N4148 保护二极管用于吸收反向电动势;R8、R9三极管驱动偏置电阻;控制信号采用单片机PA2 脚TIM2_CH3采用2700Hz 50%占空比的PWM 控制。
DS18B20 是一款高精度温度测量芯片。通过单线总线实现通讯控制,温度传感器最低可检测维度-55℃,最高可高档+125℃;完全能满足本系统设计要求。通过通讯口可以配置相应寄存器设定温度传感器的数字转换精度转换速度。在-10℃~+85℃误差仅为0.4℃。DS18B20 硬件接口电路详见图6 所示,采用3.3V 供电,数据通讯线DQ 通过R7 上拉至电源,C3 为滤波电容。
图6 DS18B20 硬件连接电路
本系统采用单节锂电池供电,电池电压3.7V 而单片机等芯片供电电压为3.3V;因此采用TPS7A6133 进行减压。电池电压采集采用两个10k 电阻进行分压后再输入至单片机AD 采集口,当电池电压低于3.2V 时发出低电量提示。系统电路见图7 所示。
图7 系统电源供电模块及电池电压采集模块
为了防止系统断电时设置参数丢失,本系统选择AT24C02保存系统参数。AT24C02是一款COMSEEPROM,内部容量为256 个字节。模块接口电路见图8所示;采用3.3V 电压供电,通讯采用I2C 串口通讯,WP 写保护引脚直接接地允许读写操作;SDA、SCL 引脚分别通过R40、R39 上拉至电源;由于系统只接了一个AT24C02 因此所有地址选择引脚A0、A1、A2 可以全部接地。
图8 AT24C02A 模块接口电路
系统程序流程图见图9 所示。首先对系统参数进行初始化,接下来对按键模块、ADC 电源电压采集模块、定时器模块、AT24C02 通讯控制模块[3]、OLED 显示模块、PWM蜂鸣器控制模块、DS18B20 模块进行初始化,启动看门狗模块,读取AT24C02 系统参数,初始化系统参数。然后进入主程序,循环读取霍尔传感器脉冲计算自行车实时速度并判断是否超速,读取环境温度,按键检测,读取电池电压判断电量,刷新OLED 显示,看门狗喂狗。
图9 主程序流程图
STM32F103CBT6 的通用定时器是一个通过可编程预分频器驱动的16 位自动装载计数器构成。STM32F103CBT6的通用定时器可以被用于测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等[4]。
本系统采用TIM2 定时器设置10ms 定时中断,用于系统各处理周期计数。TIM3 设置频率为2700HZ 占空比为50%的PWM 输出用超速时的蜂鸣器报警控制输出;TIM1设置为输入捕获用于霍尔脉冲测速。
SSD1306 的控制显示器的分辨率为128×64,显存总共有8 页每页包含了128 字节总共2K。对应的在单片机的内部建立一个2K 的GRAM,因此在每次修改显示内容时只修改单片机上的GRAM,然后把单片机内部的数据写入到OLED 即可,无需再读取显示内容再做修改,大大简化了测序设计流程。
I2C 总线是一种两线式串行总线;是单片机与外围设备连接最常用的一种通讯总线;只需两根数据线即可实现数据双向通讯,最高速度可达400kbps 以上。
本系统采用单片机的IO 口来模拟I2C 通讯。程序实现包括:①初始化函数实现I2C 通讯接口初始化:将SDA(PB7)设置为双向数据口,SCL(PB6)设置为输出口;②起始信号函数;③停止信号函数;④等待应答函数;⑤产生ACK 函数;⑥发送一个字节函数;⑦读一个字节函数[5]。
DS18B20 是通过1-Wrie 总线即“一线总线”接口进行通讯控制的,采用严格的信号时序,以保证数据的完整性。共有6 种信号类型:复位脉冲、应答脉冲、写0、写1、读0 和读1。所有这些信号,除了应答脉冲以外,都由单片机发出同步信号。并且发送所有的命令和数据都是字节的低位在前。这里我们简单介绍这几个信号的时序:
(1)复位脉冲和应答脉冲
通信都是以初始化序列开始。①MCU 输出低电平,保持低电平时间至少480μs,以产生复位脉冲;②MCU 释放总线,延时15~60μs,并进入接收模式(Rx);③接着DS18B20 拉低总线 60~240μs,以产生低电平应答脉冲,若为低电平,再延时480μs。
(2)写时序
写时序包括写0 时序和写1 时序。所有写时序至少需要60μs,且在2 次独立的写时序之间至少需要1μs 的恢复时间,两种写时序均起始于MCU 拉低总线。写1 时序:MCU 输出低电平,延时2μs,然后释放总线,延时60μs。写0 时序:MCU 输出低电平,延时60μs,然后释放总线,延时2μs。
(3)读时序
DS18B20 仅在MCU 发出读时序时,才向MCU 传输数据,所以当MCU 发出读数据命令后,必须马上产生读时序,以便DS18B20 能够传输数据。所有读时序至少需要60μs,且在2次独立的读时序之间至少需要1μs的恢复时间。每个读时序都由MCU 发起,至少拉低总线1μs。MCU 在读时序期间必须释放总线,并且在时序起始后的15μs 之内采样总线状态。
DS18B20 的典型温度读取过程为:①复位;②发SKIP ROM 命令(0XCC);③发开始转换命令(0X44);④延时;⑤复位;⑥发送SKIP ROM 命令(0XCC);⑦发读存储器命令(0XBE);⑧连续读出两个字节数据(即温度);⑨结束。
本系统采用功能强大的STM32F103CBT6 32 位单片机实现霍尔脉冲采集自行车实时速度并实时显示在128×64分辨率的OLED 显示屏上具有较好的显示效果,并用AT24C02 存储系统参数保证了系统掉电数据安全性,同时采用DS18B20 监测环境温度提示。系统实现了自行车速度/里程、电池电压、环境温度实时显示,当自行车超速时可发出蜂鸣报警提示减速,当电池电量不足提示充电或更换电池。系统小巧、稳定,适合各尺寸自行车。