Per aspera ad astra,或者我是如何制造火箭的。第2部分。在STM32和BMP280上组装高度计





你好! 



上一部分中,我停止了我的火箭成功起飞并着陆的事实,甚至安装了高度计。在本文中,我将告诉您如何基于STM32 Nucleo L031K6和BMP 280压力传感器制作一个简单的高度计,该传感器还将所有数据存储在闪存中。



铁的选择 



高度计的基本要求:



  1. 高度读数速度很高,因为火箭不在其最高点停留太长时间了,我想知道最大高度;

  2. 低功耗,以免放大电池;

  3. 整个结构尺寸小。



基于它们,我将STM32 Nucleo L031K6用作微控制器(高速,低电流消耗,小尺寸)。我决定使用BMP280气压计测量海拔高度(与MK相同的原因)。我还添加了一个按钮,按下该按钮将开始记录高度。好吧,所有电子设备都由通过适配器连接CR2032电池供电。结果,我们得到了以下方案:







使用的模块


STM32 Nucleo L031K6





BMP280





CR2032



代码开发



您可以在我的github上找到代码STM32引脚已在IAR的CubeMX中配置。为了与BMP280配合使用,我使用了该库,并添加了使用气压公式计算海拔高度并使用读取频率,滤波等所需的参数初始化传感器的功能。由于我想测量相对于地面的飞行高度,因此我必须首先计算我所在地区高于海平面的高度,将其设为“零”,然后测量相对于其的飞行高度。测量频率为10Hz。



写入闪存的操作如下:



STM32 L031K6中的内存组织




  • 对于所有测量,我从0x08006000到0x08007FFF地址分配了8 KB

  • 一维分配2个字节

  • 我在Flash中写下了4个字节,即一次进行了两次测量

  • 最大测量次数为4096,足以记录约7分钟的飞行

  • 以厘米为单位记录的高度,以提高准确性



在记录了如下

  1. 如果写迭代器是偶数,则将当前高度存储在该变量的下半部分中,并将其数据写入闪存;

  2. 如果写入迭代器为奇数,则将当前高度加到该单词的上半部分,并将其与要写入Flash的数据一起保存到变量中,并将此变量保存到Flash单元中



结果,该程序算法如下:



  1. 开启后,我们等待5秒钟以按下按钮以开始高度测量。

  2. 如果未按下按钮,则我们点亮内置LED并开始通过UART传输记录在闪存中的海拔数据

  3. , .

  4. «» Flash- .

  5. UART , ;

  6. .



当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并成功着陆。因此,该测试是完全成功的。我确定高度计正在工作,并开始开发新的车载设备。



结论



最后,我完全组装了适合小型火箭模型的紧凑型高度计测试成功,电子设备在起飞和降落后幸存下来,并测量了飞行高度。这是我完成高度计开发项目的地方,也许将来我会在其中一枚火箭中使用它,因为了解飞行高度有时非常有用(例如,如果您发射火箭以达到最大或特定高度)。现在,正如我说的那样,我正在开发带有无线电发射器的车载摄像头,因为我不想失去使用如此精密电子设备的火箭弹。 



感谢您的关注!



All Articles