短松江月

极简 RP2040 推力采集系统

· simons ·
暂无

查看原文

RP2040单片机功能强大,用在发动机推力采集上,人机界面得以简化,新手友好。尝试按以下步骤搭建:

一、让RP2040单片机运行

注意,这一步不需要懂单片机,不需要单片机开发程序,只需要拷个文件。拿到RP2040后,按住单片机板上左边BOOT键,通过USB线插到电脑上,然后把附件的二进制文件拷到新出现的U盘上,单片机就运行起来啦!

附RP2040单片机tb图,这个程序要16M那种

Screenshot_20250613_074909.jpg
Screenshot_20250613_074909.jpg

怎么知道它是不是真的在运行呢?两个办法,一是看电脑上会出现一个新的U盘,15MB 左右,这是程序创建的单片机板载U盘。另一个办法就是接着完成第二步,接个 OLED,来个实时显示。

二、扩展附件1,连OLED显示屏

买一个SH1106的OLED,拔下单片机(断电)焊4根线:VCC接单片机5V、GND接单片机GND、SDA接单片机GP2、SCL接单片机GP3。单片机插回电脑(这时候不按BOOT键了),应该能看到OLED亮了,完成第二步!

附tb OLED图片,这两种都行

Screenshot_20250610_115153.jpg
Screenshot_20250610_115153.jpg

三、扩展附件2,连HX711

单片机断电再焊另4根线,VCC接单片机5V、GND接GND、DAT接GP4、CLK接GP5。推力传感器也按线的颜色焊到HX711板上。为了达到80Hz采样率,需要用小刀片断开HX711背后那个RATE中间细细的连接处。这样整个系统软硬件就都完成啦!重新插回电脑,手压传感器能看到OLED显示的推力变化。

附tb HX711及传感器图片,这种紫色板比较好,设置采样率rate也容易些:

Screenshot_20250610_115335.jpg
Screenshot_20250610_115335.jpg

Screenshot_20250610_115543.jpg
Screenshot_20250610_115543.jpg

完成的系统如图

IMG_20250609_212946.jpg
IMG_20250609_212946.jpg

可以装到一个聚碳酸酯盒子里,装上电池使用(这个照片里单片机还不是RP2040,仅供参考)。电池正极接到OLED的Vcc就行啦,正极线串入一个肖特基二极管(热缩管鼓起那里),以免忘了取出电池就插电脑,以及电池装反(有次黑灯瞎火搞就装反过!),我一般都是抠掉电池再插电脑或手机,勤快的可以给装上个开关。

IMG_20250712_195025_edit_178769100061262.jpg
IMG_20250712_195025_edit_178769100061262.jpg

照片中接的是30MPa压力传感器,用来测试燃烧室压力、测量燃速压力系数都很合适,这个采集盒也是兼容的,直接接上4根线就能用,校准需要找个带表头的空压机。

气压传感器型号见图,4条线的颜色跟HX711接口都是对应上的,直接兼容。

Screenshot_20250829_160830.jpg
Screenshot_20250829_160830.jpg
Screenshot_20250829_160724.jpg
Screenshot_20250829_160724.jpg

盒子的tb图片,下方10cm大的那种,聚碳酸酯材质的,盖子炸飞了都没坏!

Screenshot_20250610_120740.jpg
Screenshot_20250610_120740.jpg

再看看使用说明,是不是也很简单呢:

  1. 每次上电系统会自动去皮归零,然后进入定时采样,20ms一次。连续3个采样点推力大于50g会启动点火,然后连续采集10s后停止采样,计算并显示推力曲线及总冲量。

  2. 连接单片机到电脑或手机,会出现一个新U盘,里面有3个数据文件,一是校准文件Clb,二是运行计数Cnt,三是推力数据Run001。以后每次重新上电采集,会生成一个新的数据文件,文件名序号增Run00x。数据文件可以直接拷贝到电脑或手机上。不删除的情况下,这几个文件可以一直掉电保存,存到5000次试车数据后,文件名回到Run001覆盖之前数据。连电脑试车的情况下,也可以通过串口调试软件,实时传输推力数据至电脑。

  3. 校准,上电后(自动去皮后),拿一个已知重量的物体放推力台上(试车台竖直向下),如果物体重1000g,测得推力数值是210g,就把Clb文本文件里的1000000改成210000。再次重新上电测量,推力值就会变成1000g左右,这个值也会掉电保存,除非手动修改或删除。

系统的工作原理简介

(供爱好者研究、并提改进建议,仅关心使用的可忽略)

  1. 单片机软件,使用 Ardunio IDE 编程,主要参考 RP2040 C/C++ SDK 手册及 https://github.com/earlephilhower/arduino-pico,代码有点长 290 行,编译为二进制文件后使用。

RP2040 支持直接拷贝二进制程序,按住BOOT插USB的情况下,板载flash程序段会在电脑上显示为一个U盘,把arduino等单片机开发软件编译好的二进制文件拷到U盘里,单片机马上就会运行程序。所以不需要使用者懂单片机,不需要开发软件及准备各种库,拷完文件单片机马上就运行起来了。

  1. 单片机内部程序流程

每次重新上电后,会自动运行一次去皮程序,测推力100次,取后50次平均值作去皮值,后续测量值都会减去这个值;

启动每 20ms 一次的定时中断,指向一个推力采集程序 F_Smp;

初始化 OLED 显示;

生成或读取校准文件 Clb.txt;

板载文件系统FATFSUSB程序,自动生成或打开一个电脑能访问的新U盘,对应板载flash的数据段,用于数据存储。

进入主循环loop程序,就是不停刷新OLED,实时显示推力值display.print(F);

每20ms定时中断会打断一下loop的OLED显示,跳转至推力采集程序F_Smp,每次只采集一个数据点;

推力采集程序包含点火启动判断,连续3个采样点推力大于50g为点火开始,数据点依次存入数组F0[500]

记录点达到498也就是接近10s之后,停止中断程序,也就停止了推力采集,还设置了一个循环存储以保存点火前一小段数据点到F0数组。

最后一个采集点后,计算总冲,也就是从点火启动到最末大于50g(连续3个)的推力值 x 0.02秒累加。

最后一个采集点内还包含数据文件生成程序,第一次运行会建立计数文件Cnt.txt,从1开始以后每次加1,生成数据文件名从Run001开始,根据Cnt生成新文件名每次累加1。

最后loop主循环中OLED显示推力曲线,程序会自动调整XY显示范围。以及

FatFS.begin();
FatFS.end();
FatFSUSB.begin();

再次允许运行电脑或手机访问程序创建的板载U盘,以拷走数据或修改校准系数等。

查看源代码

另外还测试了低成本版,RP2040 2M flash单片机只要7.5元!OLED也是只要9多块钱

Screenshot_20250615_192017.jpg
Screenshot_20250615_192017.jpg

试车台可以参考以前帖子,也是结构简单,就3个零件加几颗螺丝,大L型材底座、小L型材连接、U型槽用于绑发动机。

IMG_20250512_191031.jpg
IMG_20250512_191031.jpg

IMG_20250509_210039.jpg
IMG_20250509_210039.jpg

IMG_20250415_170852.jpg
IMG_20250415_170852.jpg

最后这个是炸机的后果,以警醒大家要千万小心,要躲在掩体后面试车,祝大家玩得安全开心!