所有教程由网友发布,仅供参考,请谨慎采纳。科创不对教程的科学性、准确性、可靠性负责。
极简RP2040推力采集系统
Tangshm2025/06/10电子技术喷气推进 IP:北京

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

1,让RP2040单片机运行

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


attachment icon1_F711_RP2040.ino.uf2253.00KBUF23次下载

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

Screenshot_20250613_074909.jpg

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

2,扩展附件1,连OLED显示屏

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

附tb OLED图片,这两种都行

Screenshot_20250610_115153.jpg

3,扩展附件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_115543.jpg

完成的系统如图

IMG_20250609_212946.jpg

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

IMG_20250512_184342.jpg

盒子的tb图片大的那种,盖子炸飞了都没坏!

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手册及XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

2单片机内部程序流程

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

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

初始化OLED显示;

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

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

进入主循环loop程序,就是不停刷新OLED,实时显示推力值XXXXXXXXXXint(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显示范围。以及

XXXXXXXXgin();
FatFS.end();
XXXXXXXXXXXgin();

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

源代码以文本文件附上:


attachment icon1_F711_RP2040.txt7.87KBTXT4次下载

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

Screenshot_20250615_192017.jpg

程序需要这个2M flash的

attachment iconF711_RP2040_2M.ino.uf2252.50KBUF21次下载

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

IMG_20250512_191031.jpgIMG_20250509_210039.jpgIMG_20250415_170852.jpg

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







[修改于 1天6时前 - 2025/06/15 19:33:33]

来自:电子信息 / 电子技术航空航天 / 喷气推进动手实践:实验报导严肃内容:教程/课程
3
5
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
ZZCjas
6天6时前 IP:湖北
944778

好教程😆,感谢大佬分享!


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
柠檬酸hp
6天3时前 IP:江苏
944785

厉害


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Tangshm作者
3天16时前 IP:北京
944840

更正了一个小bug:Screenshot_20250613_094031_edit_489800961236198.jpg

这里x1.0先转换成浮点数。


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

Tangshm
机友
文章
9
回复
73
学术分
0
2024/11/16注册,3时37分前活动

研究神经科学的火箭工程师

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:北京
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的