使用 RTOS 实现(直流电机)PI 电流控制器的正确方法 [关闭]
Posted
技术标签:
【中文标题】使用 RTOS 实现(直流电机)PI 电流控制器的正确方法 [关闭]【英文标题】:Proper way to implement (DC motor) PI current controller with RTOS [closed] 【发布时间】:2022-01-10 05:45:38 【问题描述】:在我的爱好项目中,我开始将经典的中断驱动软件重写为带有 RTOS 的新软件。我正在使用带有 FreeRTOS 的 STM32,但这并不重要,因为我的问题通常与如何使用 RTOS 实现快速 PI 的问题有关。
想法: 将当前(扭矩)控制器放入一个中断(例如:用于PWM的定时器的中断),然后将位置控制器放入一个线程,或者放入一个sw定时器。
想法 将当前控制器置于线程中,女巫等待基于定时器中断的信号,在该信号将被引发。
当前控制器应该很快,所以我不能放入一个 sw 定时器,但是我阅读的有关 RTOS 的文档说我应该在使用 RTOS 时将最少的代码放入中断处理函数中,而 PI 控制器不是我想的那样。这就是为什么 1. 的想法似乎有问题的原因。
但是,如果我将快速电流控制器放入一个信号比 systick 快得多的线程中,它是否能够处理它?这是一个糟糕的主意吗?
所以确切的问题是:当所需频率远高于系统频率时,我应该如何实现一个带有 RTOS 的快速 PI 控制器?
感谢您的帮助!
【问题讨论】:
【参考方案1】:但是如果我把快速电流控制器放到一个线程中 发出的信号比 systick 快得多,它是否能够在 全部?这是一个糟糕的主意吗?
您根本不了解 RTOS 是什么。任务可以随心所欲地切换,并且与 timebasr RTOS 时钟无关。您可能有 10Hz 的基本 RTOS 时钟,并且每秒切换任务数百万次(假设 uC 足够快)。
如何在逻辑上实现它。
-
在您收集传感器数据的定时器中断中,将它们发送到 PID 主任务的队列。离开中断程序
当队列接收到您的数据时,PID 任务将运行并执行所有必要的计算。然后它将数据(使用另一个队列)发送到执行任务。然后等待来自传感器的数据(它被阻塞并且不消耗任何处理器资源)。
执行任务从队列中获取数据并修改当前(例如)时开始运行。然后再次等待新数据。
任务切换与 RTOS 基本时钟无关。它不像“正常”的操作系统。您决定何时将控制权传递给 RTOS(然后它将根据优先级和阻止这些任务的对象来决定执行哪个任务)。
您可以使用直接的任务通知、信号量或其他可用的 IPC 原语来代替队列。
【讨论】:
以上是关于使用 RTOS 实现(直流电机)PI 电流控制器的正确方法 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
2021-02-27 永磁同步电机 自抗扰控制 PI调节器 矢量控制 SVPWM