基于STM32F407的座椅展示

基于STM32F407的座椅展示

先看看成品样子、本次电路图,有图有真相

在这里插入图片描述
有朋友介绍说有个座椅展示舱,原来设备可以正常运行,但年久失修,部分器件损坏,导致不能运行,因此需要在保留原来主体结构的基础上,重新设计电器控制部分,实现原来运动。
现场勘验,设备主体分4个部分:
单椅部分
X轴,直流运行电机,有前、后限位光电开关,中间有2个接近开关,中间有一个感应开关;
Y轴,直流运行电机,有前后限位光电开关(限位位置需要和X位置配合);
旋转,无刷直流电机,带控制器,有前、中、后限位光电开关;
单椅头枕调节,直流电杠,1个线限位开关。
靠背翻转,2个电机,有前、中、后光电限位;
托腿,2个电机,有1个后限位开关。
在这里插入图片描述
双椅部分:
X轴:直流电机,有前、后限位开关;
旋转靠背,2个直流电机,有前、后限位开关;
头枕上下,2个直流电机,每个有1给下限位开关;
头枕旋转,2个直流电机,每个有前、后限位开关;
臀部顶升,1个电缸,下限位开关
腰部顶升,1个电缸,下限为开关
小凳子部分
X轴:步进电机,有驱动器,有前、后限位,中间有两个接近开关。
升降:1个电缸,下限位开关。
小桌子部分
X轴:成品门控系统,有前、后限位光电;
Y轴,1个直流电机,有前、后限位开关;
旋转,1个直流电机,有前、后限位开关。
根据现场设备调研和实际开发周期要求(要求15天开发完成),丙方确定找现成的板子做。选板如下,主角出场
在这里插入图片描述
该板主控芯片STM32F407,有24个光隔输入、16个光个输出,20路差分输出、1路485、1路232。原计划有4块,1块做主控,3块从,每块控制一部分;主控接收上位指令,根据定义自己处理或分发给对应的板子处理。随着测验的进一步进行,整体方案变更为使用两块板子,功能框图如下
在这里插入图片描述
驱动板开始选用
在这里插入图片描述
因为有些电机太大,导致在堵转情况下烧板子;老板说:这种情况宁可让烧电机都不能让烧板子,责任不一样呀。好了,新的强力驱动上场了:
在这里插入图片描述
到此,硬件的基本介绍完了。

程序设计

1:系统节拍
用TIM3做一个1ms的系统节拍,作为输入、延迟等的实际基础。
因为TIM3在APB1总线上,我们定义的APB1总线频率为84Mhz
在这里插入图片描述
因此配置TIM3参数如下
htim3.Init.Prescaler = 83;
htim3.Init.Period = 1000;
并且启动TIM3的中断:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==&htim3)
{
}
}
2:输入信号采集
因为输入信号有可能有抖动,因此需要做去抖操作。本系统中所有去抖时长都为10ms。

#define KEYDELAY 10

void Key_delay(void)
{
int i;
for(i = 0; i < MaxIn; i++)
{ //key_data确认的输入口值
if(key_data[i] != key_indata[i]) //key_indata读到的输入口值
{ //key_tmpdata临时输入值
if(key_tmpdata[i] == key_indata[i])
{
if(key_delay[i] == 0)
{
key_data[i] = key_indata[i];
}
}
else
{
key_delay[i] = KEYDELAY;
key_tmpdata[i] = key_indata[i];
}
}
}
}
该函数在主程序中循环调用。

去抖延迟部分在TIM3定时器中断中加入
for(i = 0; i < MaxIn; i++)
{
if(key_delay[i] > 0)
{
key_delay[i] --;
}
}

3:电机PWM控制
根据实际测试,本设备用定脉宽控制就可满足使用要求。
我们用TIM8作为脉冲控制定时器,配置PWM输出引脚如下
在这里插入图片描述

TIM8在APB2总线上,该总线频率168MHz。
htim8.Init.Prescaler = 41;
htim8.Init.Period = 500;
计算PWM频率为8KHz。
在CH4上接的单人椅子X轴,占空比70%时,运行速度满足要求,因此程序配置
sConfigOC.Pulse = 350;
4:步进电机脉冲控制
小凳子X轴的步进电机有专用的步进电机控制器,需要的控制信号有方向、使能、步进速度。
经测试步进电机1秒1圈的速度满足实际要求。步进电机控制器上正好有8K的细分。这样就可以用TIM8的CH1作为步进脉冲速度控制引脚。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
飞机弹射座椅运动分析涉及到多个方面的物理知识,包括力学、动力学、材料力学等,需要用到数学模型和计算方法进行分析和计算。下面是一个简单的基于C++的飞机弹射座椅运动分析程序,供参考: ```c++ #include <iostream> #include <cmath> using namespace std; const double g = 9.81; // 重力加速度 const double k = 0.5; // 空气阻力系数 const double m = 80; // 弹射座椅质量 double a(double v) { return -k * v * v / m - g; } int main() { double v0, t, dt; cout << "请输入初速度v0:"; cin >> v0; cout << "请输入总时间t:"; cin >> t; cout << "请输入时间步长dt:"; cin >> dt; double v = v0, x = 0; int i = 0; while (i*dt <= t) { double x_prev = x; x += v * dt; v += a(v) * dt; double h = x_prev - x; cout << "t=" << i*dt << "s, h=" << h << "m, v=" << v << "m/s" << endl; i++; } return 0; } ``` 该程序采用了欧拉法对运动进行数值模拟,其中: - a(v) 函数表示速度为 v 时的加速度,包括重力和空气阻力。 - v 和 x 分别表示弹射座椅的速度和位移,初始值为输入的 v0 和 0。 - i 和 dt 分别表示当前时间步数和时间步长。 - 在每个时间步中,先更新当前位置和速度,然后计算并输出当前的位移、速度和时间。 需要注意的是,该程序只是一个简单的模拟,没有考虑到实际情况中的各种影响因素,如弹射座椅的结构、材料、空气动力学特性等。实际的飞行器弹射座椅运动分析需要更为复杂的模型和算法,以及更多的实验数据和验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cetclyb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值