基于STM32F4FreeRTOS的超声波测距仪的设计与制作

一 硬件电路的设计

手持式超声波测距仪共有四个模块:STM32F407VET6主控板,HC-SR05超声波模块,JY61姿态传感器和0.96寸IIC通信的OlED显示屏。

STM32F407VET6 RAM为192K,FLASH为512K,内核为ARM32位的Cortex-M4CPU最高168MHz工作频率。

HC-SR05超声波模块的Trig引脚为发射引脚,当给至少10us的高电平信号时,由555定时器产生40KHZ的脉冲信号,加到超声波探头的引脚上,使内部的压电晶片产生共振,向外发射超声波,碰到物体反射回来之后由晶体管和运算放大器LM324构成放大电路,对接收信号放大后,驱动继电器。Echo会产生一定时间的高电平,通过对时间的处理,既可以得到测量的距离。原理图如下:

JY61姿态传感器采用高精度的陀螺加速度计MPU6050,通过处理器读取MPU6050 的测量数据,然后通过串口输出。内部自带电压稳定电路,可以兼容3.3V/5V电压,并且系统模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态。模块发送至单片机每帧数据分为3个数据包,分别为加速度包,角速度包和角度包,3个数据包顺序输出。波特率115200 时每隔10ms 输出1 帧数据。数据是按照16 进制方式发送的,不是ASCII 码。每个数据分低字节和高字节依次传送,二者组合成一个有符号的short 类型的数据。

本次使用的OLED通信协议为IIC通信,I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位,当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位, 此时才认为一个字节真正的被传输完成。I2C总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和数据传输的过程是一样的。

二 软件设计

软件设计是位于FreeRTOS操作系统框架下完成的,使用的是ST官方提供的HAL库函数,整个系统共有四个任务,分别为系统运行状态异常检测任务,超声波测距任务,倾角检测任务和OLED显示任务,下面介绍整个系统设计的重要函数和四个任务的具体细节。

2.1重要函数

2.1.1 delay_us函数
由于操作系统的时钟是基于Systick滴答定时器的节拍控制的,而HAL库函数不提供us级别的延时,当使用软件模拟IIC,发射超声波时需要进行微秒级别的延时。delay_us函数是基于TIM4的计数产生的,设置计数一次的时间为1us,在初始化之后,当开始计时时,首先将TIM4的CNT寄存器的值清零,当CNT大于计时的时间时跳出函数。如下:

2.1.2 printf函数
printf在嵌入式领域不仅是一个通讯接口,还是一种调试工具,其好用程度不亚于硬件仿真。当遇到问题时,可以通过输出对应的值来观察变量时候正确,或者查看某段函数是否执行,它可以直观的使我们查看系统的运行状态。但是串口也不是在所有地方都能使用的,当某段函数对时间比较敏感时,是不能加入print函数的,比如编码器产生的外部中段等处。

2.2系统运行状态异常检测任务

当系统正常工作时,小灯D2会按照1Hz的频率闪烁,在这里将小灯的优先级设置为最低,当其他任务发生卡死时,小灯将不会闪烁,可以指示出系统的运行状态,将小灯与串口输出结合起来可以方便地查找问题所在的地方。小灯的引脚接的是PA6,当PA6为低电平时,小灯点亮。

2.3超声波测距任务

超声波测距共有三个函数,分别为超声波引脚初始化,TIM3初始化和距离测量,在初始化之后,再循环里进行距离测量函数的读取,当返回值正常时,将其赋值给全局变量Distance。在距离测量函数中首先拉高Trig的电平一段时间,然后打开计时器,等待Echo的高电平返回,若等待一段时间没有返回高电平,则函数返回异常,当有高电平返回时,计时器CNT寄存器清零,开始计时高电平的时间,当计时时间超出范围是,返回异常,否则将得到的数字进行计算即可得到超声波测量的距离。其中公式为Distance=us*17/1000。

2.4倾角检测任务

首先初始化串口1,设置波特率为115200和JY61的波特率相同,设置字长为8位,一个停止位并且没有奇偶校验。由于串口读取是在操作系统下完成的,所以无需设置串口中断,设置中断反而会影响操作系统任务之间的逻辑。在任务的循环中首先读取一位串口接收到的数据,当数据等于0x55(即等于包头)时,再次判断下一个数据是否为0x53(即角度包),否则继续判断下一个数据是否为包头,而不释放cpu进入阻塞状态,最多判断十次。当接收到的数据为角度包时,继续接受下面的八个数据,分别为pitch,yall,roll和tempperture。每个值由两个八位的二进制组成,共同构成一个带符号的short类型的数。通过公式即可准确的读取到测距仪当前的角度,从而调整合适的角度。

2.5 OLED显示任务

此测距仪使用的OLED通信方式为IIC通信,程序使用的是软件模拟的IIC代码,通过发送从机的地址和命令,可以设置OLED的显示方式,通过发送数据位,可以在OLED上显示不同的值。显示的页面分为四个部分,最上面是两条横线;然后是测量得到的距离值,单位为厘米;再下面显示的是X轴的倾斜角度;最后显示的是Y轴的倾斜角度。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Genicre_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值