-1

在我的爱好项目中,我开始将经典的中断驱动软件重写为带有 RTOS 的新软件。我正在使用带有 FreeRTOS 的 STM32,但这并不重要,因为我的问题通常与如何使用 RTOS 实现快速 PI 的问题有关。

  1. 思路:把电流(转矩)控制器放到一个中断中(例如:放到用于PWM的定时器的中断),然后把位置控制器放到一个线程中,或者放到一个sw定时器中。

  2. 想法将当前控制器置于线程中,女巫等待基于定时器中断的信号,在该信号将被引发。

当前控制器应该很快,所以我不能放入一个 sw 定时器,但是我读到的关于 RTOS 的文档说我应该在使用 RTOS 时将最少的代码放入中断处理函数中,而 PI 控制器不是我认为的那样。这就是为什么 1. 想法似乎有问题的原因。

但是,如果我将快速电流控制器放入一个信号比 systick 快得多的线程中,它是否能够处理它?这是一个可怕的想法吗?

所以确切的问题是:当所需频率远高于系统频率时,我应该如何使用 RTOS 实现快速 PI 控制器?

谢谢您的帮助!

4

1 回答 1

2

但是,如果我将快速电流控制器放入一个信号比 systick 快得多的线程中,它是否能够处理它?这是一个可怕的想法吗?

您根本不了解 RTOS 是什么。任务可以随心所欲地切换,并且与 timebasr RTOS 时钟无关。您可能有 10Hz 的基本 RTOS 时钟,并且每秒切换任务数百万次(假设 uC 足够快)。

如何在逻辑上实现它。

  1. 在定时器中断中,您收集传感器数据,将它们发送到 PID 主任务的队列。离开中断程序
  2. 当队列接收到您的数据时,PID 任务将运行并进行所有必要的计算。然后它将数据(使用另一个队列)发送到执行任务。然后等待来自传感器的数据(它被阻塞并且不消耗任何处理器资源)。
  3. 执行任务在从其队列中获取数据并修改当前(例如)时开始运行。然后再次等待新数据。

任务切换与 RTOS 基本时钟无关。它不像“正常”的操作系统。您决定何时将控制权传递给 RTOS(然后它将根据优先级和阻止这些任务的对象来决定执行哪个任务)。

除了队列之外,您还可以使用直接任务通知、信号量或其他可用的 IPC 原语。

于 2021-12-03T22:58:19.617 回答