提问人:TIW DEV 提问时间:10/22/2023 最后编辑:LundinTIW DEV 更新时间:10/23/2023 访问量:54
如何在 PIC 微处理器上存储和轻松引用大量速度数据点,以准确管理速度变化
How to store and easily reference numerous speed data points on a PIC microprocessor to accurately manage speed changes
问:
寻找有关我在 PIC 微控制器项目中遇到的问题的建议和指示。
一块板将使用PWM作为移动车辆的控制。控制电机很好,没有问题。但我正在寻找加速和减速是现实的。因此,我绘制了一些图表,用于显示加速和减速曲线(速度时间图)。
我的问题是,如何将这些内容从方格纸转移到合适的存储格式中,以便 PIC 可以轻松快速地读取和参考。因此,例如,当从开始加速时,它可以根据目标速度将它与电机所做的事情映射到适当的图形。不同的目标速度和不同的尾随权重有不同的图表。
显然,数据的分辨率越高(即每个图表的数据点越多=分辨率越高)越准确,但要存储和引用的数据点也就越多。其中一些数据点可以插值(使用下一个和上一个计算),而不必专门存储,但我尚未确定(如我怀疑的那样)这是否只是在 PIC 微控制器上增加了额外和不必要的工作。
我已经在网上搜索了存储速度曲线、处理加速度图等,但没有想出任何有用的东西。任何人都可以提供合适的数据存储的任何指示、想法和经验。显然,作为 PIC 像 MongoDB 和 MySQL 这样的东西已经过时了,它需要是一个可以以某种方式作为参考的平面数据系统,但我不能是第一个这样做的人。
答:
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 毫秒更新时,您都会增加数组的索引,例如:n
n
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作为输出时是这样。
评论