如何在 PIC 微处理器上存储和轻松引用大量速度数据点,以准确管理速度变化

How to store and easily reference numerous speed data points on a PIC microprocessor to accurately manage speed changes

提问人:TIW DEV 提问时间:10/22/2023 最后编辑:LundinTIW DEV 更新时间:10/23/2023 访问量:54

问:

寻找有关我在 PIC 微控制器项目中遇到的问题的建议和指示。

一块板将使用PWM作为移动车辆的控制。控制电机很好,没有问题。但我正在寻找加速和减速是现实的。因此,我绘制了一些图表,用于显示加速和减速曲线(速度时间图)。

我的问题是,如何将这些内容从方格纸转移到合适的存储格式中,以便 PIC 可以轻松快速地读取和参考。因此,例如,当从开始加速时,它可以根据目标速度将它与电机所做的事情映射到适当的图形。不同的目标速度和不同的尾随权重有不同的图表。

显然,数据的分辨率越高(即每个图表的数据点越多=分辨率越高)越准确,但要存储和引用的数据点也就越多。其中一些数据点可以插值(使用下一个和上一个计算),而不必专门存储,但我尚未确定(如我怀疑的那样)这是否只是在 PIC 微控制器上增加了额外和不必要的工作。

我已经在网上搜索了存储速度曲线、处理加速度图等,但没有想出任何有用的东西。任何人都可以提供合适的数据存储的任何指示、想法和经验。显然,作为 PIC 像 MongoDB 和 MySQL 这样的东西已经过时了,它需要是一个可以以某种方式作为参考的平面数据系统,但我不能是第一个这样做的人。

C 嵌入式 存储 速度 图片

评论

0赞 Fe2O3 10/23/2023
斜率 = 上升/运行...加速度 = delta 速度 / delta 时间...这很难吗?
0赞 Kozmotronik 10/23/2023
我们在这里谈论的是什么型号的 PIC?您的数据会有多大?
1赞 TIW DEV 10/23/2023
@Fe203 是的,它是......如果您试图让模型车辆像真实车辆一样做出反应,那么在后面有 50 吨负载的情况下从 0 加速到 60(无论速度范围、英里/小时或公里/小时),那么该图将不是一条直线。这是一个缓慢的加速,然后在特定点,加速度降低,同时仍试图达到最高速度。因此,现实表示不能是容易建模的直线图。这是我的问题。
0赞 TIW DEV 10/23/2023
@Kozmotronik PIC 型号可能会有所不同,我正在寻找 18F66K80 - 但如果需要更改它可以。数据完全取决于分辨率,在基本最小值下,每个目标速度可能是 10 个条目,每个条目以 1/10 的间隔给出 0 和目标速度之间的加速率。或者,它可能是 30 个条目,间隔为 1/30,以提供更精确的详细信息。该决定可能取决于存储方法和事先知情同意的可用存储空间。

答:

1赞 Lundin 10/23/2023 #1

MCU需要知道的是它应该在某个时间点发出的占空比。因此,如果我们假设 16 位 PWM,数据可能如下所示:

static const uint16_t duty_cycle[n] = 
{
  0,
  1,
  3
  ...
};

存储在闪存中的普通数组,其中是输出曲线所需的时间周期数。例如,如果您需要在 1000 毫秒的时间内进行加速,并且每 10 毫秒更新一次 PWM,则为 1000/10 = 100。每次发生 10 毫秒更新时,您都会增加数组的索引,例如:nn

void some_timer_isr (void)
{
  static int i=0;
  uint16_t update = duty_cycle[i];
  PWM_REGISTER = update;
  i++;
}

评论

0赞 TIW DEV 10/24/2023
谢谢你。我没有考虑过的有趣方法,但确实很明显。这也使数据的分辨率(步数)成为现实。在那里战斗的食物,谢谢。
1赞 Lundin 10/24/2023
@TIWDEV 这通常是您对任何嵌入式系统中的任何非线性曲线进行建模的方式,至少在涉及PWM作为输出时是这样。