1. PIC32实时系统概览
在嵌入式世界里,“实时”并不是“跑得快”的同义词。实时系统的严格定义是:系统对外部事件的响应必须在规定的时间约束内完成,结果的正确性同时取决于数值正确与时间正确。换句话说,一个计算结果再精确,如果错过了截止时间,在实时系统中同样算失败。PIC32作为Microchip面向中高端嵌入式控制的主力MCU系列,其外设架构、中断系统和DMA机制正是围绕这一约束设计的。
硬实时与软实时的区别
实时任务按错过截止时间的后果分为两类。硬实时(Hard Real-Time)要求任务必须在截止时间前完成,一旦超时即视为系统失效,可能造成人身伤害或设备损毁。典型例子是电机FOC电流环控制:若PWM周期为20 kHz(50 μs),电流采样与PID计算必须在下一个PWM更新点之前完成,否则输出占空比将基于过期电流值,导致转矩脉动甚至过流。软实时(Soft Real-Time)允许偶尔超时,性能下降但系统仍可接受,例如通过UART上报调试日志、刷新LCD显示界面。介于两者之间还有固实时(Firm Real-Time),超时结果无价值但不造成灾难,如视频帧丢弃。
判断一个任务属于哪一类,关键看三个参数:截止时间(Deadline)、抖动容忍度(Jitter)和超时后果。硬实时通常要求抖动在微秒级,软实时可容忍毫秒甚至几十毫秒的抖动。在PIC32上,硬实时任务一般绑定到高优先级中断,由硬件定时器触发;软实时任务则放在主循环或低优先级任务中轮询执行。
PIC32系列在实时控制中的定位
PIC32家族覆盖了从入门到高性能的多个子系列。PIC32MX主频通常在80 MHz以下,适合成本敏感的通用控制;PIC32MZ EF/DA系列主频可达200 MHz,带有FPU(浮点运算单元)和DSP指令,适合需要浮点运算的电机控制与数字电源;PIC32MK则针对多电机与工业控制,集成了多个独立的PWM模块和高速ADC。它们的共同实时特性包括:向量化中断控制器(可编程优先级与子优先级)、多通道DMA(无需CPU干预搬运ADC数据)、高速ADC(MZ系列可达12位、3.75 Msps)、以及专用PWM模块(支持互补输出与死区插入)。
这些外设的意义在于把时间确定性从CPU软件转移到硬件。例如,ADC采样由PWM周期自动触发,转换结果由DMA直接写入内存数组,CPU只在DMA完成中断中读取整块数据。这样,采样时刻的抖动仅取决于硬件触发链,不受CPU当前执行指令的影响,从而保证电流环的采样时刻严格对齐PWM中心点。
典型应用场景
PIC32在实时控制中的典型场景包括:无刷直流电机磁场定向控制(FOC),需要20 kHz电流环与1 kHz速度环的双环结构;数字电源中的LLC谐振变换器,要求PWM死区精度在纳秒级;工业伺服驱动器,需要EtherCAT或CANopen通信与位置环的同步;以及汽车电子中的电子水泵、电动座椅等。这些场景的共同点是:事件驱动、周期严格、对抖动敏感。
以FOC电流环为例,一个可参考的教学参数配置如下:PWM频率20 kHz,中心对齐模式,ADC由PWM下溢事件触发,采样两相电流,DMA将结果搬入长度为2的缓冲区,CPU在DMA中断中执行Clarke变换、Park变换、两个PI调节器、反Park变换和SVPWM占空比计算。若CPU主频为200 MHz,单次浮点乘加约5个周期,整个电流环计算量约1000条指令,耗时约5 μs,仅占50 μs周期的10%,余量充足。判断系统是否满足硬实时的依据是:用示波器观察PWM输出与ADC触发信号之间的固定延迟,若延迟抖动小于1 μs且计算从未超过周期,则电流环满足硬实时。
课程项目目标
本课程将围绕一个完整的PIC32实时控制项目展开:以PIC32MZ EF为主控,驱动一台三相无刷电机,实现电流环与速度环的闭环控制,并通过UART上报实时波形。项目目标分为四层:第一层,理解实时系统的定义与硬/软实时边界;第二层,掌握PIC32中断优先级、定时器、ADC、DMA和PWM的协同配置;第三层,实现FOC算法并测量电流环执行时间与抖动;第四层,通过串口示波器观察阶跃响应,判断系统是否满足截止时间与稳定性要求。最终交付物包括:可运行的工程代码、时序测量报告、以及一份实时性分析表,记录每个任务的周期、执行时间、截止时间和余量。