-1

我正在为火箭发动机试验台设计控制器和数据采集单元。该系统需要控制测试台上的多个执行器,并且还能够将收集到的数据传输回主机,团队将在主机上安全地观看实时数据/摄像头馈送。

总体设计要求如下:

  • 以 1KHz 从约 15 个模拟传感器采集数据
  • 控制测试台上的执行器,包括阀门和点火开关
  • 将数据实时传回我们避难所的主机
  • 接受来自主机的控制,例如手动阀门驱动、测试序列修改、序列中止等。

在为这个系统布置软件时,我不确定从哪里开始。我正在考虑使用运行频率为 180 MHz 的 STM32 ARM Cortex-M4 处理器。我无法弄清楚我应该如何解决这个问题。我曾考虑过使用 RTOS 系统,但根据我所看到的情况,这些系统会产生大量开销,因为调度程序必须运行每个滴答声,因此运行速度更快。我反复考虑的另一个想法是状态机与一些基于定时器的中断相结合,用于读取然后将数据发送回 PC。任何有关如何解决此问题以最小化代码复杂性的建议将不胜感激。谢谢。

编辑:有人告诉我要澄清一些有关系统技术规格的事情。

我的执行器包括:

  • 6 个螺线管(通过继电器/MOSFET 进行数字控制,每秒切换一次)
  • 2 个直流电机(在 PID 回路中使用 PWM 输出驱动,需要能够可控地斜坡位置)
  • 一个点火器,再次通过继电器/MOSFET控制

我的传感器包括:

  • 8 个压力传感器(模拟电压)
  • 4 个热电偶(模拟电压)
  • 2 个电机编码器(正交编码器)
  • 1个光传感器(模拟电压)
  • 1 个称重传感器(模拟电压)

理想情况下,所有收集的数据(所有上述传感器)加上一些额外的数据(时间戳、电机设置位置、螺线管位置)都会实时流回主机。

4

1 回答 1

0

鉴于使用 PWM 和 PID 进行电机控制,您需要指定所需的分辨率,无论是在 PWM 定时器滴答声还是 ADC 读取中。这是最关键的部分。如果 ADC 的分辨率高于您指定的分辨率,也没有什么坏处。必须相应地设计 PCB,在电阻器等方面具有足够的分辨率。

完成此操作后,找到具有足够精确 ADC 的 MCU。我想 12 位分辨率对于大多数应用程序来说已经足够了,但我不知道你的具体情况。

接下来,您需要决定您希望 PID 有多快。PWM 上的输出是否会导致在下一个周期读取 ADC,或者您是否可以满足于较慢的响应?这里的实时瓶颈将是 ADC 转换时钟,而不是 CPU。

系统的其余部分似乎根本不是时间紧迫的 - 您只需要确保同步读取/设置所有内容。与主机之间的数据传输最好通过 CAN 完成,因为它具有硬实时特性。似乎您不需要大量的带宽。

我使用运行在 16MHz 上的裸机 16 位 MCU 设计了与此非常相似的系统。处理速度确实不是一个大问题,但满足实时截止日期才是。这意味着您可以忘记使用像 Rasp PI 这样的 Linux 玩具,这完全不可能。而且 RTOS 可能是矫枉过正,因为它主要增加了额外的复杂性。

具有足够 ADC 分辨率和 CAN 的裸机 Cortex M 似乎是一个不错的选择。如果您可以远离浮点,那也很好 - 取决于您需要的高级数学。如果你不需要比 PID 更高级的东西,它可以用定点实现就好了。(或者 PI,因为这通常最适合快速电机控制系统。)

于 2020-03-17T08:02:20.383 回答