☰
STM32 FOC (五):基于 FreeRTOS 的控制与通信解耦架构实现
2026/11/5 2:04:57 网站建设 项目流程


一、 背景与痛点
在完成无电流环 FOC 速度闭环开发后,裸机架构暴露出明显的局限性。
FOC 的底层控制(PID、SVPWM)对时序要求极严,通常需要挂载在硬件定时器(如 TIM3)中断下运行。然而,系统还需要周期性读取 I2C 编码器(AS5600)、上报串口数据以及刷新状态指示灯。

在裸机轮询或单一中断架构下,I2C 动辄数百微秒的阻塞时间,极易打乱高频控制周期的节拍;若将外设通信与 FOC 算法堆砌在同一循环,会导致代码耦合度高、系统响应迟滞。为此,本阶段通过引入 FreeRTOS,将系统架构重构为前后台分离与多任务并发的模型。

二、 系统架构设计
重构的核心思想是“高频控制与低频通信彻底解耦”。系统被划分为以下两个层级:

硬件中断层(实时控制):TIM3 中断(周期 2ms)。该中断只负责读取缓存数据、运行速度环 PID 与 SVPWM 算法,并更新 PWM 寄存器。绝对隔离任何阻塞式外设操作。

RTOS 任务层(非实时通信):利用 FreeRTOS 创建多个独立任务,交由调度器管理:

Task_Sensor:周期读取 I2C 编码器数据并更新全局变量。

Task_Display:周期性通过串口上报电机实时转速与角度,供上位机 VOFA+ 观测。

Task_LED:设备运行状态指示。

三、 关键技术点与配置机制
1. 系统时基分离
引入 RTOS 后,系统的时基管理必须明确隔离。FreeRTOS 的内核调度默认使用 SysTick 作为心跳,而 HAL 库也需要 SysTick 来支持 HAL_Delay 等函数。
解决方案:在 CubeMX 的 SYS 配置中,将 HAL 库的 Timebase Source 从 SysTick 切换到 TIM2。由此,TIM2 专供 HAL 库,SysTick 专供 RTOS 调度,两者互不干涉,从根本上避免了底层时序冲突。

2. 核心数据流向
为了消除中断中的 I2C 等待,系统采用全局变量作为共享内存的机制:

后台 Task_Sensor 独立完成 I2C 时序交互与角度解算。

解算完成后的机械角度存入全局变量 g_current_mech。

TIM3 中断触发时,直接读取该全局变量进行微分测速与 FOC 运算。即使 I2C 通信偶发阻塞,也仅会降低数据刷新率,绝不会导致电机控制中断死锁。

四、 运行效果与成果
重构后的系统在多任务并发下运行稳定,实现了以下成果:

控制链路的绝对稳定:无论后台串口打印多么频繁,或 I2C 总线受到何种干扰,TIM3 的 PWM 输出节拍极其稳定,电机运转平滑,彻底根除了以往因通信阻塞导致的电机抽搐或停转现象。

多任务无阻塞并行:

PB0 和 PB1 引脚分别挂载了两个任务,以 100ms 和 500ms 的不同频率独立闪烁,验证了 RTOS 调度器的正常运行。

串口以 100ms 周期持续输出电机实时状态,供上位机绘制波形。

底层电机控制逻辑丝毫不受影响。

代码结构标准化:底层硬件操作留存于 main.c,业务调度逻辑存于 freertos.c。算法层、驱动层、应用层界限分明,为后续扩展 OLED 屏幕、CAN 通信等外设打好了架构基础。

五、 总结
本次重构验证了 RTOS 在电机控制等强实时系统中的实用价值。通过将非实时任务从核心控制环路中剥离,系统不仅获得了抗通信阻塞的能力,其可扩展性与可维护性也得到了本质提升。后续如果引入电流环(ADC 采样),该架构同样具备足够的余量来支撑更复杂的控制算法。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询