你好!
在上一部分中,我停止了我的火箭成功起飞并着陆的事实,甚至安装了高度计。在本文中,我将告诉您如何基于STM32 Nucleo L031K6和BMP 280压力传感器制作一个简单的高度计,该传感器还将所有数据存储在闪存中。
铁的选择
高度计的基本要求:
- 高度读数速度很高,因为火箭不在其最高点停留太长时间了,我想知道最大高度;
- 低功耗,以免放大电池;
- 整个结构尺寸小。
基于它们,我将STM32 Nucleo L031K6用作微控制器(高速,低电流消耗,小尺寸)。我决定使用BMP280气压计测量海拔高度(与MK相同的原因)。我还添加了一个按钮,按下该按钮将开始记录高度。好吧,所有电子设备都由通过适配器连接的CR2032电池供电。结果,我们得到了以下方案:
使用的模块
STM32 Nucleo L031K6
BMP280
CR2032
STM32 Nucleo L031K6
BMP280
CR2032
代码开发
您可以在我的github上找到代码。STM32引脚已在IAR的CubeMX中配置。为了与BMP280配合使用,我使用了该库,并添加了使用气压公式计算海拔高度并使用读取频率,滤波等所需的参数初始化传感器的功能。由于我想测量相对于地面的飞行高度,因此我必须首先计算我所在地区高于海平面的高度,将其设为“零”,然后测量相对于其的飞行高度。测量频率为10Hz。
写入闪存的操作如下:
STM32 L031K6中的内存组织
- 对于所有测量,我从0x08006000到0x08007FFF地址分配了8 KB
- 一维分配2个字节
- 我在Flash中写下了4个字节,即一次进行了两次测量
- 最大测量次数为4096,足以记录约7分钟的飞行
- 以厘米为单位记录的高度,以提高准确性
而在记录了如下:
- 如果写迭代器是偶数,则将当前高度存储在该变量的下半部分中,并将其数据写入闪存;
- 如果写入迭代器为奇数,则将当前高度加到该单词的上半部分,并将其与要写入Flash的数据一起保存到变量中,并将此变量保存到Flash单元中
结果,该程序的算法如下:
- 开启后,我们等待5秒钟以按下按钮以开始高度测量。
- 如果未按下按钮,则我们点亮内置LED并开始通过UART传输记录在闪存中的海拔数据
- , .
- «» Flash- .
- UART , ;
- .
当STM由CR2032通过3.3V引脚供电时,我发现代码不起作用。问题在于,当通过此支路加电时,有必要拆焊SB9 (位于MK背面的RX和TX引脚旁边), 否则板将不断重启。
现在需要检查高度计的准确性。用卷尺测量,我开始将高度计升高到不同的高度,然后看它能测量什么。测试结果位于github上的相应文件夹中。文本文件包含来自STM的原始数据,而Excel表包含所有测试的精美图形。精度对应于规定的-±10厘米。应该记住我以厘米为单位测量高度所以表中的数字很大。
组装高度计
由于火箭在着陆过程中会猛烈撞击地面,因此必须妥善固定所有电子设备,以免在晃动甚至是模块本身时接线不会掉落。将高度计放置在3D打印的安装座中的头部整流罩中(那里有足够的空间,并且由于重心向头部整流罩的移动而增加了稳定性)。 STM'ka垂直站立,BMP280的触点向上,并在底座下粘贴了一个用于CR2032的适配器。由于它不适合火箭主体,因此有必要将负接触部分磨掉一点。在3D打印支架侧壁上的触点旁边,我做了一个垂直凹槽,将负号从CR2032中拉出,然后在正号下钻了一个孔,将电线穿过了它。我曾想过用一个自攻螺钉将测高仪固定在整流罩上,所以表壳上有一个孔,但后来他放弃了这个主意。
3D打印的安装模型
组装的高度计块
我将按钮粘在BMP280旁边,将其余模块安装在适当的位置,焊接所有电线,并
将高度计紧紧地插入火箭整流罩中。为了使它在撞击后不会在任何地方飞走,我从支架上的孔中拉出一条松紧带,将火箭主体和整流罩连接起来。
组装好的高度计。前
视图后视图。您会看到将高度计连接到火箭的橡皮筋高度
计已准备就绪!现在我必须进行测试,这意味着我又去了训练场!
高度计发射和测量结果
不幸的是,最初是从错误的引擎开始的,这是我在上一篇文章中写到的。
结果,结果如下图所示:
水平-测量编号。每10次测量-1秒。垂直-高度(厘米)
火箭起飞15m,然后冲入地面。在经过最高点之后,经过1秒钟后,开始出现某种异常:在值12m之后,由于某种原因,读数降至-8m。这是在引擎第二次启动时发生的(不应该如此),因此我不排除故障引擎会以某种方式影响高度计。在所有其他测试中,它都能正常工作,因此,这显然不是电子问题。通常,高度计的测试仅成功了一半,因为在飞行的后半段出现了异常。您可以在github上找到该图本身,它称为rocket_flight_fall_test。
修理完火箭后,我再次去了测试现场,这次测试成功了。飞行非常好,高度计读数稳定并且与飞行一致。航班时间表如下:
水平-测量编号。每10次测量-1秒。垂直高度-以厘米为单位
火箭爬升了150m并成功着陆。因此,该测试是完全成功的。我确定高度计正在工作,并开始开发新的车载设备。
结论
最后,我完全组装了适合小型火箭模型的紧凑型高度计。测试成功,电子设备在起飞和降落后幸存下来,并测量了飞行高度。这是我完成高度计开发项目的地方,也许将来我会在其中一枚火箭中使用它,因为了解飞行高度有时非常有用(例如,如果您发射火箭以达到最大或特定高度)。现在,正如我说的那样,我正在开发带有无线电发射器的车载摄像头,因为我不想失去使用如此精密电子设备的火箭弹。
感谢您的关注!