验证X/Y存在推力的时候缺少一个图表示
一、项目背景:
前期,本人进行了TVC固体矢量发动机相关的研发工作。然而,由于发动机试车事故导致发动机报废,再加上我高三备考的压力,不得不中断了矢量发动机的研发工作。在之前的事故调查中,发现了火箭发动机设计上存在的一些不足之处,特别是在发动机的密封性方面。因此,我希望通过此次申请,能再次开始矢量火箭发动机的研发工作,并对发动机密封性不足的问题进行优化。
二、项目目的:
针对矢量发动机的研发环节,本人将会围绕以下四个方面进行设计工作:
第一方面:研发出矢量推力控制系统,确保该控制系统能够根据箭体姿态变化不断调整发动机的推力方向。
第二方面:对研发的矢量推力控制系统进行代码验证,确保代码的可行性和可靠性。
第三方面:进行矢量发动机的推力测试,评估发动机的推力性能和矢量推力控制能力。
第四方面:整合所获得的发动机测试数据,并利用这些数据对后期发动机进行迭代升级,以改进其性能。
三、设计范围:
该项目是针对固体矢量火箭发动机进行研发、测试和优化的三个方面的设计工作。
四、火箭发动机对箭体姿态调节原理:
发动机通过舵机驱动拉杆来控制矢量喷口的偏转,从而引起燃气流向的改变,进而导致推力方向的变化。同时,这也可以纠正箭体的偏转角度,使得箭体能够实现竖直飞行,达到对箭体姿态进行调节的目的。
五、研究计划:
TVC固体探空火箭发动机的制造过程将包括以下四个阶段的研发:
第一阶段:搭建矢量推力试车平台。
第二阶段:研发矢量发动机,并进行相关代码的验证,以确保矢量推力控制系统的可行性和稳定性。
第三阶段:将对研发的矢量发动机进行推力测试,并通过测试数据的分析来评估发动机的优缺点。
第四阶段:将设计过程与经验分享到KC平台,并对未来的发动机图稿进行迭代设计。
六、实施过程:
1、发动机矢量控制系统机械结构与相应建模和仿真
火箭矢量发动机的全向偏流矢量控制系统的机械结构由球型底座、球型喷口、矢量控制环、矢量拉杆、舵机臂和舵机组成。舵机臂通过连接舵机和矢量拉杆的方式,实现了矢量控制的动作。矢量拉杆的下端连接着矢量控制环,而矢量控制环与球型喷口和球型底座共同构成了矢量喷口的整体结构。在设计上,矢量控制环的力臂整体向后弯曲,并且与球头的连接点正好与球座中心面共面,以确保与拉杆成正交关系,这样就可以保证X轴和Y轴的控制相互独立,彼此不会产生干扰,整体能够良好配合。在发动机未使用时,舵机臂与拉杆的夹角为90度,这时喷口的偏转角度为零。当启用发动机并且火箭的姿态发生变化时,控制系统会向舵机发送指令,舵机会驱动舵机臂向上或向下转动,角度范围约为0至30度。若需要改变推力方向,舵机臂会驱动矢量拉杆控制球型喷口的偏转。例如,若需要球型喷口沿X轴偏转30度,舵机A需要将舵机臂转动15度以拉动矢量拉杆A的长度n(该长度为舵机与舵机臂连接处圆心到舵机臂与矢量拉杆连接处圆心)。舵机B的舵机臂和拉杆B保持不变。在两个拉杆的拉力下,矢量控制环会带动球型喷口改变燃气流向,从而实现矢量调节的目的。若需要球型喷口沿Y轴有最大距离,则与X轴调节相反的操作即可。若需要火箭在X轴上达到最大偏转角度,需要舵机A和舵机B同时向下偏转30度。在两个拉杆的牵引下,矢量控制环会带动球型喷口和舵机转动相同角度,从而实现球型喷口沿-Y轴的最大偏移。对于其他方向的调节,只需通过舵机A和舵机B的上下偏转来进行调节即可。
喷嘴设计图
发动机喷嘴静态力学仿真结果(由于设置的室压在2.1MPa有点高导致发动机欠膨胀)
2、发动机矢量控制系统设计
①原理:
②具体设计:
需要将MPU6050和Arduino连接起来。连接方式如下:
- 将MPU6050的VCC引脚连接到Arduino的5V引脚上,以提供电源。
- 将MPU6050的GND引脚连接到Arduino的GND引脚上,以建立共地。
- 将MPU6050的SCL引脚连接到Arduino的A5引脚上,用于SPI通信。
- 将MPU6050的SDA引脚连接到Arduino的A4引脚上,用于SPI通信。
舵机与Arduino的连接方式如下:
- 将舵机的信号线连接到Arduino的2号数字引脚,用于接收PWM信号。
- 将舵机的VCC引脚连接到Arduino的5V引脚,用于电源供应。
- 将舵机的GND引脚连接到Arduino的GND引脚上,以建立共地。
③验证矢量控制可行性:
通过运行代码,可以验证矢量控制的可行性。连接舵机和矢量控制拉杆后,观察舵机的运动情况。如果方案可行,那么可以进一步测试发动机在不同角度和方向上的变化,观察矢量喷口是否能够随着发动机的变化作出相应的调整。
④代码库:
// 导入所需库
#include <Wire.h>
#include <Servo.h>
// 定义MPU6050传感器的地址
const int MPU6050_addr = 0x68;
// 定义舵机引脚
const int servoPin1 = 9; // 第一个舵机连接到D9引脚
const int servoPin2 = 10; // 第二个舵机连接到D10引脚
// 创建舵机对象
Servo servo1;
Servo servo2;
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 初始化MPU6050传感器
Wire.begin();
Wire.beginTransmission(MPU6050_addr);
Wire.write(0x6B); // PWR_MGMT_1寄存器地址
Wire.write(0); // 将PWR_MGMT_1寄存器设置为0(唤醒传感器)
Wire.endTransmission(true);
// 连接舵机引脚
servo1.attach(servoPin1);
servo2.attach(servoPin2);
}
void loop() {
// 读取MPU6050传感器的姿态数据
int16_t gyroX, gyroY, gyroZ;
Wire.beginTransmission(MPU6050_addr);
Wire.write(0x43); // GYRO_XOUT_H寄存器地址
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_addr, 6, true);
gyroX = Wire.read() << 8 | Wire.read();
gyroY = Wire.read() << 8 | Wire.read();
gyroZ = Wire.read() << 8 | Wire.read();
// 将姿态数据映射到舵机角度范围内(-15到15度)
int servoAngle1 = map(gyroX, -32768, 32767, -15, 15);
int servoAngle2 = map(gyroY, -32768, 32767, -15, 15);
// 控制舵机角度
servo1.write(servoAngle1 + 90); // 舵机1角度范围(0到180度)
servo2.write(servoAngle2 + 90); // 舵机2角度范围(0到180度)
delay(100);
3、发动机燃料选择
正常情况下通用标准配方为KN(硝酸钾)65% 、SB(山梨醇)35%。如果要加入Al或者Fe2O3,则比例需要进行轻微调整:KN 64% Al/Fe2O3 1% SB 35%。在混合加入时,请控制SB的融化温度在约100℃左右。在加入KN时,边加入边搅拌SB,随后充分混合后加入Al/Fe2O3即可。最后,将混合物倒入模具中进行塑形。请注意,浇筑好后的燃料需要进行密封和干燥保存。
该燃料的具体数值如下:
理论比冲:164s
理论特征速度:938m/s
实际特征速度:914m/s
理论燃烧温度:1327摄氏度
实际燃烧温度:1247摄氏度
理论密度:1.841g/cm^3
熔铸密度:1.82g/cm^3
对于采用KNSB燃料的发动机计算公式如下:
F = m˙ * ue注:平均质量流量计算:m˙ = m / t其中m为燃料质量,t为燃烧时间
已知:燃料密度ρ取KNSB的熔铸密度,即ρ=1.82g/cm^3,设计中的发动机燃料管内径为50mm,高为250mm,故V = π * r^2 * h,其中π取3.14。
因此V = 490.7cm^3(该结果为估值)
因此,最终得到m = ρ * V = 893.1g = 0.8931kg(估值),但是在制作过程中,质量肯定会大于该值。
燃烧时间t为3s
最终得到m˙ = m / t = 0.2977kg/s
由准备的KNSB数据可得,实际特征速度为914m/s,因此ue = 914m/s
故可得F = m˙ * ue = 272.1N(估值)
最终推力理论值为272.1N。
4、 推力测试系列
(1)非矢量测试:推力测试平台采用铝合金架构,压力传感器的承受范围为0~100Kg,即支持0~981N(1kg=9.81N)的推力。本项目中的推力测试平台采用水平测试方式,以更好地接近理想情况下发动机的最大推力。在水平测试中,通过水平放置燃料,可以忽略重力的影响,从而在测试过程中仅测量到推力,并且是最大推力。如果需要测试火箭发动机在接近实际状态下的推力,可以采用发动机喷口面向地面的竖直测试。由于发动机产生的推力会受到发动机自身重力和燃料变化的重量影响,因此竖直测试的结果与实际状态下的推力测试结果大致相同。通过竖直测试,可以更好地反映发动机在真实飞行情况下的推力变化。
试车台结构与测试方法:
压力传感器与隔板通过镶嵌式结构相连,二者通过螺丝固定在试车台的铝合金架中。滑轨与发动机固定架相连。在未启动发动机的情况下,确保喷口的圆心与压力传感器的中心保持在水平线上,然后进行发动机推力测试并绘制图像。
压力传感器与隔板镶嵌式连接
①使用SD卡收集数据
首先需要对SD卡进行初始化,然后将推力测试数据以CSV格式存储到SD卡中。在插入SD卡读卡器后,使用csv模块读取数据。最后,可以使用Excel将数据导入并绘制推力测试数据的曲线图。需要注意的是,应变式压力传感器的输出结果单位是kg,需要将其转换为N,可以使用重力加速度9.81 m/s²进行转换(1kg=9.81N)。
Arduino代码:
#include <SPI.h>
#include <SD.h>
File myFile;
// pressure sensor is connected to A0 pin
int sensorPin = A0;
float pressure;
void setup() {
Serial.begin(9600);
if (!SD.begin(4)) {
Serial.println("Initialization failed!");
return;
}
Serial.println("Initialization done.");
}
void loop() {
pressure = analogRead(sensorPin) * (5.0 / 1023.0) * 9.81; // Convert the analog reading to pressure in Newton
myFile = SD.open("data.csv", FILE_WRITE);
if (myFile) {
myFile.println(pressure);
myFile.close();
}
else {
Serial.println("error opening the file");
}
delay(1000);
}
Python代码:
import csv
import matplotlib.pyplot as plt
# Read data from a CSV file
with open('data.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
pressures = []
for row in readCSV:
pressure = float(row[0]) # Convert string to float
pressures.append(pressure)
# Plot the data
plt.plot(pressures)
plt.xlabel('Time (s)')
plt.ylabel('Thrust (N)')
plt.show()
②实时传输数据
首先需要对SD卡进行初始化,然后将推力测试数据以CSV格式存储到SD卡中。在插入SD卡读卡器后,使用csv模块读取数据。最后,可以使用Excel将数据导入并绘制推力测试数据的曲线图。需要注意的是,应变式压力传感器的输出结果单位是kg,需要将其转换为N,可以使用重力加速度9.81 m/s²进行转换(1kg=9.81N)。
(2)矢量测试:
①X/Y方向推力验证:矢量发动机与普通非矢量发动机的测试不同,因为矢量发动机需要改变喷口的方向,这会导致推力方向的变化。根据牛顿第三定律,作用力与反作用力大小相等、方向相反且作用在同一直线上。因此,在水平测试中,非矢量状态下的推力始终作用在与压力传感器中心水平线上,对普通非矢量发动机的测试结果几乎没有影响。但对于矢量发动机而言,喷口方向发生改变,因此测量到的推力是实际推力的分力。在这种情况下,如果喷口中心轴线相对于水平线有偏转角度θ,测量到的径向力为Fa,则实际推力为Fb。据此,可以推导出理论计算公式Fb=Fa/cosθ,因此在测试台上对矢量发动机进行测试时X/Y方向存在推力且不能忽略。
②测试矢量推力方案设计:
常规的压力传感器无法测量X/Y方向上的推力大小。为了测量X/Y方向上的推力大小,需要使用昂贵的三维压力传感器,它可以同时测量X轴、Y轴和Z轴的力。通过分析三个方向的输出值,可以测试推力的大小和方向。例如,如果X轴和Y轴的输出值都为正,而Z轴的输出值为负,可以推断出力的方向指向X轴和Y轴的正方向,与Z轴相反。考虑到成本因素,我们决定使用3个压力传感器,并将它们安装在不同的位置上。通过比较每个传感器的输出值,并绘制推力图像,可以判断推力的大小和方向。
③判断原理:
如果一个传感器的输出值较大,而其他传感器的输出值较小,可以推断出力的方向是指向那个输出值较大的传感器的方向
④具体设计:
首先,将压力传感器分别安装在不同的位置上(采用等边三角形形式,三个传感器均匀分布)。然后,将每个压力传感器的信号线、电源线和接地线分别连接到Arduino控制主板相应的引脚上。将串联的压力传感器的信号引脚分别连接到Arduino主板的A0、A1、A2模拟输入引脚上。所有压力传感器的电源引脚连接到Arduino的电源引脚上,地线引脚连接到Arduino主板的GND引脚上。通过USB接口将Arduino主板连接到电脑端。在电脑端使用Python对数据进行矢量计算,然后使用Matplotlib绘制推力-时间图像,以判断推力的大小和方向。
⑤相应代码:
Arduino代码:
void setup() {
Serial.begin(9600);
}
void loop() {
int pressure1 = analogRead(A0); // read from sensor 1
int pressure2 = analogRead(A1); // read from sensor 2
int pressure3 = analogRead(A2); // read from sensor 3
// Convert to Newton
float pressure1_N = pressure1 * (5.0 / 1023.0) * 9.81;
float pressure2_N = pressure2 * (5.0 / 1023.0) * 9.81;
float pressure3_N = pressure3 * (5.0 / 1023.0) * 9.81;
// Construct a string to send to computer
String toSend = String(pressure1_N) + "," + String(pressure2_N) + "," + String(pressure3_N);
Serial.println(toSend);
delay(1000);
}
Python代码:
import serial
import time
import numpy as np
import matplotlib.pyplot as plt
# set up the serial line
ser = serial.Serial('COM3', 9600)
time.sleep(2)
# Create placeholders for data
times = []
pressures1, pressures2, pressures3 = [], [], []
total_force = []
start_time = time.time()
# Loop to continually read from Arduino
while True:
try:
data_line = ser.readline().strip().decode()
pressure1_N, pressure2_N, pressure3_N = map(float, data_line.split(","))
pressures1.append(pressure1_N)
pressures2.append(pressure2_N)
pressures3.append(pressure3_N)
# Compute vector sum of forces (assuming equal angles between the sensors)
total_force.append(np.sqrt(3)*(pressure1_N + pressure2_N+ pressure3_N)/2)
times.append(time.time() - start_time)
# Real-time plot of thrust over time
plt.figure(1)
plt.clf()
plt.plot(times, pressures1, label='Sensor 1')
plt.plot(times, pressures2, label='Sensor 2')
plt.plot(times, pressures3, label='Sensor 3')
plt.plot(times, total_force, label='Total force')
plt.legend()
plt.pause(0.01)
except Exception as e:
print(e) # for debugging purposes
break
七、总结:
以上就是设计的内容,对于后面设计的过程以及记录将会通过KC论坛、短视频拍摄的方式进行展示,此外需要进行强调的是TVC探空固体火箭的设计有两方面火箭发动机本身设计和推力平台搭建两个方面。
用途 | 规格型号 | 单价(元) | 数量 | 单位 | 合计(元) |
---|---|---|---|---|---|
矢量发动机金属打印部分 | 不锈钢316L | 92 | 5 | 460 | |
DS2115舵机 | 25kg | 63 | 2 | 126 | |
碳纤维管 | 外径50mm内径45mm高250mm | 104 | 1 | 104 | |
环氧树脂管 | 内径40mm外径44mm高250mm | 14 | 6 | 84 | |
拉杆 | 2号M3 | 4.5 | 4 | 18 | |
Arduino UNO R3 | 64 | 2 | 128 | ||
MPU-6050六轴传感器模块 | 18.2 | 1 | 18.2 | ||
应变式压力传感器 | 100kg | 173 | 3 | 519 | |
铝合金框架 | 4040LZ | 43.6 | 2 | m | 87.2 |
普通3D打印 | PLA | 32 | 7 | 224 | |
降压模块 | UBEC-15 | 15 | 2 | 30 | |
航模锂电池 | 3C 2200mAh 25C 11.1V | 42 | 1 | 42 | |
螺丝杆 | M3*100 | 4.55 | 3 | 13.65 | |
长杆螺丝 | M6*300 | 5.37 | 4 | 21.48 | |
内6角螺丝钉 | M3 | 21.5 | 1 | 套 | 21.5 |
碳纤维定制挡板 | 48 | 2 | 96 |
膜片式压力传感器它的弹性敏感元件为周边固定圆形金属平膜片。膜片受压力变形时,中心处径向应变和切向应变均达到正的最大值,而边缘处径向应变达到负的最大值,切向应变为零
力传感器是一种能够直接测量物体所受力的传感器。它可以通过测量物体所受力的大小和方向来确定径向力。力传感器通常具有较高的精度和灵敏度,适用于精确的径向力测量。
为什么每句话包括代码都像GPT分开生成的,连起来牛头不对马嘴
试车台的型材组装还可以“穿模配合”
你没用过shapr3d 嘛,演示过程而已,当你写好代码再使用后ChatGPT会给代码做出修改注解意思
引用荷城工业_Nitload_Industry发表于5楼的内容代码注释不都是自己即时编写或后期自己补充吗?
是的
200字以内,仅用于支线交流,主线讨论请采用回复功能。