1. 项目概述与核心价值
在工业自动化、家电以及各类需要电机驱动的设备中,三相交流感应电机因其结构简单、坚固耐用、成本低廉而得到广泛应用。然而,传统的变频驱动方案通常只关注电机控制本身,其前端通常采用简单的二极管整流桥加一个大容量电解电容的方案。这种方案虽然成本低,但会从电网汲取脉冲状的峰值电流,导致输入电流波形严重畸变,产生大量谐波,功率因数(PF)极低,通常只有0.5-0.7。这不仅增加了对电网的污染,违反了如IEC 61000-3-2等国际电磁兼容标准,也意味着用户需要为更多的无功功率付费,系统效率大打折扣。
功率因数校正(PFC)技术正是为了解决这一问题而生。它的核心目标,是让从电网汲取的电流波形,尽可能地跟随输入电压波形,且呈正弦形状,从而实现接近1的功率因数。过去,PFC电路往往作为一个独立的、由专用芯片控制的模块,放置在整流桥和电机驱动逆变器之间,这无疑增加了系统的复杂性和成本。
本文要探讨的,正是一个极具性价比的工程实践:如何利用一颗MC68HC908MR32这款8位微控制器,在单一芯片上同时实现三相交流电机的V/Hz变频控制和数字升压型功率因数校正(Boost PFC)。这个方案的精妙之处在于“合二为一”,通过精心设计的软件架构和中断调度,让一个原本看似性能有限的单片机,同时驾驭两个实时性要求很高的控制任务。这不仅显著降低了硬件BOM成本,减少了PCB面积,还因为所有控制逻辑都集中在软件中,使得系统具备了通过软件升级来灵活调整控制策略、适应不同电机或能效标准的强大能力。对于从事电机驱动、电源设计或嵌入式系统开发的工程师而言,理解这种集成化设计思路,对于开发高性能、低成本且符合法规的下一代产品,具有非常重要的参考价值。
2. 系统整体设计与核心思路拆解
2.1 系统架构与硬件框图解析
整个系统的核心思想是“一芯两用”。MC68HC908MR32作为唯一的大脑,需要同时处理来自电机侧和电网侧的两套传感器信号,并生成相应的PWM控制信号。其系统硬件架构可以清晰地分为几个部分:
- 主控与接口层:以MC68HC908MR32及其外围电路(MR32控制板)为核心。该单片机集成了电机控制所需的6通道互补PWM发生器、多路ADC、定时器(用于输入捕获和输出比较)以及SCI串口等丰富外设,为双任务控制提供了硬件基础。控制板还提供了人机接口(启停开关、方向开关、调速电位器)和状态指示LED。
- 信号隔离层:光耦隔离板。这是工业级设计的关键,它提供了控制板(低压侧)与功率板(高压侧)之间的电气隔离屏障。所有模拟量(如电流、电压反馈)和数字量(如PWM信号、故障信号)都通过光耦进行传输,确保了控制电路的安全和抗干扰能力。
- 功率执行层:三相高压功率级板。这是能量转换的舞台,包含:
- 输入整流与PFC级:由单相桥式整流器、Boost PFC电感、PFC开关管(MOSFET)和PFC二极管构成。
- 直流母线:大容量电解电容(Bulk Capacitor),用于稳定PFC输出的高压直流。
- 逆变器级:由6个IGBT构成的三相全桥,将直流母线电压逆变为可变频变压的三相交流电,驱动电机。
- 辅助电路:包括IGBT门极驱动、电流采样(分流电阻)、温度检测、制动电路(Brake IGBT)以及为低压侧供电的辅助电源。
注意:硬件设计中的“接地”概念至关重要。系统存在两个地:控制地(GND)和功率地(PGND)。两者必须在物理上和电气上通过隔离器件(如光耦、隔离运放)完全分开,仅在一点通过磁珠或0欧电阻单点连接,以防止功率地的大噪声串扰到敏感的控制电路。
2.2 软件架构与双任务协同策略
在单个MCU上跑两个闭环控制算法,最大的挑战是实时性和资源分配。MC68HC908MR32的CPU主频有限,必须通过巧妙的中断和任务调度来实现。本设计采用了基于定时器中断的“时间片”与“事件驱动”相结合的架构。
核心调度策略如下:
高优先级、固定频率任务——电机控制PWM中断:
- 角色:系统的心跳。将PWM频率设置为16kHz,并配置为中心对齐互补模式。每个PWM周期(或每N个周期)产生一次中断。
- 在中断服务程序(ISR)中执行:这是电机控制的主循环。在此中断中,程序会顺序执行:读取ADC获取直流母线电压/电流、检测故障、计算速度误差、运行速度PI控制器、查询V/Hz曲线得到电压幅值、更新正弦波表指针、计算并更新三个相位PWM寄存器的值(PVAL1, PVAL3, PVAL5)。这个过程必须在一个PWM周期内完成,否则会导致输出波形畸变。
中优先级、与电网同步的任务——PFC控制:
- 同步事件(Input Capture):利用定时器的输入捕获功能,捕捉来自硬件电路的电网电压过零(Zero-Crossing, ZC)信号。这个信号是PFC算法的时间基准,确保电流调制与电网电压同频同相。
- 电流波形生成(Output Compare):在捕获到过零信号后,启动一个输出比较通道。该通道被编程为在半个工频周期(50Hz时为10ms)内产生多个比较匹配中断。在每个中断点(称为“里程碑”),程序会改变PFC开关管(连接在Timer B的PWM通道)的占空比,从而塑造输入电感电流,使其呈阶梯状逼近正弦波。
- 电压环控制(ADC中断):在PFC电流波形的某个特定“台阶”期间,启动ADC采样直流母线输出电压。采样完成后进入ADC中断服务程序,运行电压PI调节器,计算出为维持母线电压稳定(如375V)所需的电流幅值,并更新下一个工频周期的电流台阶高度。
为什么选择阶梯波而非连续正弦波?这是对8位MCU计算能力的一种妥协。生成完美的正弦波参考信号需要高分辨率和高频率的PWM更新,计算量大。而采用如图3所示的5个时间间隔、2个电流电平的阶梯波,既能有效降低谐波含量以满足IEC 61000-3-2 Class A标准,又将计算量控制在MCU可承受范围内。通过优化台阶的宽度和高度,可以在性能与复杂度之间取得最佳平衡。
2.3 关键外设资源分配清单
为了让设计更清晰,下表列出了MC68HC908MR32有限的外设资源是如何被精准分配给两个任务的:
| 外设模块 | 分配给电机控制的任务 | 分配给PFC的任务 | 说明 |
|---|---|---|---|
| PWM模块 | 通道0,1,2,3,4,5 (6路) | 通道 (Timer B) | 电机PWM用于驱动三相逆变器的6个IGBT;PFC PWM用于控制Boost电路的开关管。 |
| 定时器A (TIMA) | 输入捕获 (IC) 用于测速 | 输入捕获 (IC) 用于电网过零检测;输出比较 (OC) 用于PFC电流台阶计时 | TIMA功能强大,通过分时复用服务于两个任务。需注意中断优先级设置。 |
| ADC模块 | 通道:速度电位器、直流母线电流、温度等 | 通道:直流母线电压 | ADC需在不同时间点被两个任务触发,需做好仲裁或顺序采样。 |
| GPIO | 控制LED、读取开关状态 | PFC使能/禁止信号 | 用于人机交互和系统状态控制。 |
| SCI | PC-Master通信 | (不直接使用) | 用于上位机监控、调试和参数设置。 |
这种资源分配方案要求软件开发者在编写代码时,必须严格规划各个中断的使能/禁止时机,避免冲突。例如,在PFC的过零捕获中断中,可能需要暂时禁止电机测速的输入捕获中断,以防止噪声误触发。
3. 核心算法深度解析与实现要点
3.1 数字功率因数校正(PFC)算法实现细节
PFC算法采用峰值电流控制的升压(Boost)型拓扑。其软件流程(对应图2)是一个典型的状态机,围绕电网半周期运行。
1. 初始化与同步阶段:系统上电后,PFC算法初始化相关寄存器,然后等待第一个电网过零(ZC)信号。这个信号由硬件比较器电路产生,连接到MCU的输入捕获引脚。一旦捕获到上升沿/下降沿,即进入PFCzc()中断服务程序。
2. 电流波形生成阶段(PFCwave()):这是塑造输入电流的核心。程序使用一个指针变量(如Point)来追踪当前所处的“里程碑”。参考图4,一个半周期被分为5个时间间隔(t1至t5)。
- 在
PFCzc()中,启动第一个输出比较,设定t1(例如848µs)后中断。 - 进入
PFCwave()中断后,根据Point的值(1到5),执行以下操作: a.设置电流电平:通过写Timer B的PWM占空比寄存器,将Boost开关管的导通时间设置为对应Curr_level1或Curr_level2的值,从而控制电感电流的平均值。 b.启动电压采样:当Point等于2时(即第二个台阶),启动ADC对直流母线电压进行采样。这是一个关键设计点,选择在电流波形相对平稳的阶段采样,可以避免开关噪声干扰。 c.规划下一个中断:计算并设置下一个时间间隔(t2,t3...)的输出比较寄存器值,然后退出中断。 - 当
Point达到5(最后一个台阶),意味着半个周期结束。此时,禁用输出比较中断,重新使能输入捕获中断,等待下一个过零信号,开始新的周期。
3. 电压环控制阶段(PFCcntrl()):当ADC完成对直流母线电压的采样后,触发ADC中断,进入PFCcntrl()函数。
- PI调节器:将采样的电压值
Out_volt_new与目标值Out_Volt_Max(如375V)比较,得到误差。该误差经过一个数字PI控制器运算,输出一个新的电流命令值I_ref。PI参数需要仔细整定,以保证母线电压的稳定性和动态响应速度。 - 电流限幅与分配:计算出的
I_ref需要经过限幅处理(防止过流),然后根据输入电压瞬时值(可通过软件估算或硬件采样)和阶梯波形的占空比,分解为两个电流电平值Curr_level1和Curr_level2,用于下一个半周期的波形生成。
实操心得:PFC电流环的“隐式”控制本方案采用的是“电压环外环 + 开环电流波形生成”的策略,而非更复杂的双环(电压外环+电流内环)控制。电流环实际上是开环的,其跟踪性能依赖于前馈计算和电路参数的准确性。优点是计算量小,适合8位MCU。缺点是抗输入电压扰动和负载扰动的能力稍弱。在实际调试中,务必确保
Curr_level1/2的计算公式准确,并且电感值、输入电压采样等参数要尽可能精确。
3.2 电机V/Hz控制算法详解
V/Hz控制是交流感应电机最简单的变频调速方法,其核心是保持气隙磁通恒定。
1. 速度命令处理与斜坡函数:速度给定可以来自电位器(手动模式)或PC-Master(自动模式)。软件不会直接将这个给定值作为控制量,而是会经过一个加速/减速斜坡处理,生成平滑的速度命令V_com_actual。这能防止电机启停时产生过大的冲击电流和机械应力。斜坡的斜率(加速/减速时间)是可调参数,需要根据电机和负载的惯性来设定。
2. 速度闭环与PI控制器:系统通过安装在电机轴上的测速发电机(Tacho)获取实际转速V_tacho。速度误差e = V_com_actual - V_tacho被送入数字PI控制器。
- 比例项(P):提供快速响应,误差越大,纠正力越强。
- 积分项(I):消除静差。即使误差很小,积分项会持续累积,直到误差为零。
- 输出限幅:PI控制器的输出
V_out(即逆变器输出频率)必须进行限幅,防止超出电机或逆变器的安全范围。
3. V/Hz曲线计算:得到目标频率V_out后,需要查找或计算对应的输出电压幅值Amplitude。如图8所示,V/Hz曲线通常分为两段:
- 低频区域(0 ~ Boost频率):由于定子电阻压降的影响,为了维持磁通恒定,需要额外提供一个“电压提升(Boost Voltage)”。这段曲线通常是一个固定的电压值或一个较小的斜率。
- 恒转矩区域(Boost频率 ~ 基频):电压与频率成线性正比关系,即
V/f = 常数。 - 恒功率区域(高于基频):电压达到逆变器所能输出的最大值(通常为母线电压决定),保持恒定,频率继续升高,电机进入弱磁调速状态。 软件中通常以表格或分段线性函数的形式实现此曲线。
RAMP.C函数就是负责这部分计算。
4. 正弦PWM(SPWM)生成:这是将频率和电压指令转化为实际驱动信号的关键步骤。
- 正弦波表:在ROM中预存一个正弦函数表(通常只存0-90度,利用对称性还原整个周期)。为了提升直流母线电压利用率,表中存储的往往是注入三次谐波的正弦波,即马鞍形波(SVPWM的简化实现),其峰值更低,允许在相同直流电压下输出更高的基波电压。
- 指针与增量:根据目标频率
V_out,计算出一个指针增量Table_inc。在每个PWM中断中,三相的指针各自增加Table_inc(B相和C相指针有120度和240度的初始偏移),然后查表得到该时刻三相的调制波瞬时值。 - 幅值调制:将查表得到的瞬时值(范围0-
PWM_MOD/2)与Amplitude相乘,并进行限幅,最终得到写入PWM值寄存器PVAL1、PVAL3、PVAL5的实际值。中心对齐的PWM模式会硬件自动生成互补带死区的驱动信号。
3.3 双任务中断调度与资源共享实战
让两个实时控制环路在单核MCU上和谐共处,是项目成功的关键。以下是一个典型的中断优先级和时序安排建议:
- 最高优先级:故障中断(如过流FAULT2)。一旦硬件检测到异常,必须立即封锁所有PWM输出,保护系统。此中断应能打断任何其他任务。
- 高优先级:电机控制PWM重载中断。这是电机控制的节拍器,必须准时执行。其周期是固定的(例如62.5µs @ 16kHz)。
- 中优先级:PFC相关的定时器中断。包括电网过零捕获中断(用于同步)和PFC电流台阶的输出比较中断(用于波形生成)。这些中断的时序与工频(20ms或16.7ms周期)相关,实时性要求稍低于PWM中断。
- 低优先级:ADC转换完成中断、软件定时器中断(用于后台任务,如LED闪烁、通信处理)等。
关键冲突与解决方案:
- ADC争用:电机控制和PFC都需要ADC。解决方案是分时复用。在PWM中断的服务程序中,安排采样电机控制所需的信号(如母线电流、温度)。在PFC电流波形的特定台阶(如
Point=2时),启动ADC采样母线电压,并在其专属的ADC中断中处理。需要清晰规划ADC通道的切换顺序。 - 计算负荷:在PWM中断中完成所有电机控制计算可能时间紧张。优化策略包括:使用查表代替复杂三角函数计算;将PI控制器等运算拆解,不一定每个PWM周期都更新全部参数;使用汇编语言编写最耗时的核心函数。
- 状态机管理:整个软件应是一个清晰的状态机(如图6)。从“待机”到“运行”,再到“故障”和“恢复”,每个状态决定了哪些中断使能、哪些任务执行。例如,在故障状态,所有PWM输出被禁止,但PFC的电压环可能仍需维持母线电压。
4. 硬件设计要点与调试经验
4.1 关键硬件电路设计考量
电流采样电路:
- 电机相电流:通常使用低感抗、高精度的分流电阻(Shunt Resistor)串联在逆变器下桥臂或直流母线上。采样信号需经过运放放大和滤波。必须使用“开尔文连接(Kelvin Connection)”将采样点直接引到电阻两端,以消除PCB走线电阻引入的误差。
- PFC电感电流:同样可采用分流电阻。采样时刻至关重要,通常选择在PFC开关管导通的中间时刻采样,以获得平均电流值。
- 运放选择:需高共模抑制比(CMRR)、低失调电压、足够带宽的运放。滤波电路的时间常数要权衡响应速度和抗噪能力。
电压采样与过零检测电路:
- 直流母线电压:通过高阻值电阻分压网络采样,同样需要滤波。分压电阻的精度和温度稳定性会影响控制精度。
- 电网电压过零检测:通常采用比较器电路。将衰减后的交流电压与一个参考电压(如地)进行比较,输出方波信号。需要在比较器输入端加入适当的迟滞(施密特触发器),以防止噪声引起误触发。这个信号的边沿是否干净,直接决定了PFC的同步质量。
IGBT/MOSFET驱动电路:
- 隔离驱动:功率管(IGBT)的驱动信号必须与控制信号隔离。通常使用专用的光耦驱动器(如HCPL-316J)或变压器驱动器。
- 死区时间:MC68HC908MR32的PWM模块可硬件生成死区时间(DEADTM寄存器)。死区时间必须设置合理(通常2-3µs),太短可能导致上下桥臂直通,炸管;太长则会增加输出波形畸变和损耗。
- 负压关断:对于IGBT,采用负压关断(如-5V到-8V)可以增强抗干扰能力,防止误导通。
保护电路:
- 过流保护:除了软件检测,必须有硬件快速保护。采样电阻两端的电压可通过比较器与设定阈值比较,一旦超过,比较器输出直接连接到MCU的故障输入引脚(如FAULT2),该引脚能硬件级快速关闭PWM输出。
- 过温保护:功率板上的温度传感器(如NTC热敏电阻或二极管)信号送入MCU的ADC,软件周期性监测,超温则进入故障状态。
4.2 系统调试步骤与技巧
调试此类系统应遵循“先静后动,先低压后高压,先开环后闭环”的原则。
第一阶段:低压上电,检查基础功能
- 断开电机和主电源,仅给控制板和功率板的低压部分(如15V、5V)供电。
- 使用调试器(如MMDS/MMEVS)连接MCU,下载程序。
- 检查所有电源电压是否正常。
- 通过软件控制IO口,手动点亮控制板上的LED,验证MCU基本运行和GPIO控制正常。
- 在开环模式下,让电机PWM输出一个固定的占空比和频率(如10Hz)。用示波器测量功率级驱动芯片的输入信号,确认6路PWM波形正常,互补对称,且死区时间正确。此时功率级高压仍不上电!
第二阶段:PFC电路单独调试
- 连接PFC电路(整流桥、电感、开关管、二极管、母线电容),但逆变器部分不接电机。主电源通过一个调压器接入,先从低电压(如50V AC)开始。
- 将PFC目标电压设为一个较低的安全值(如100V DC)。
- 上电,用示波器观察:
- 电网电压和过零检测信号:确认过零信号边沿清晰,与电压过零点对齐。
- PFC开关管驱动信号:应能看到与电网同步的、占空比变化的PWM波。
- 电感电流波形:应呈现阶梯状,跟随输入电压的包络。如果电流波形震荡或畸变,可能是电流采样电路有问题,或PI参数不合理。
- 直流母线电压:应能稳定在设定值。缓慢升高输入电压,观察母线电压是否保持稳定。
- 逐步增加输入电压至额定值,调整PFC电压环的PI参数,直到动态响应(如负载阶跃变化时)既快速又平稳,无超调或振荡。
第三阶段:电机控制开环调试
- 保持PFC工作,为直流母线建立稳定电压。逆变器输出端先不接电机,接一个三相阻性负载(如灯泡)。
- 在开环V/Hz模式下,给定一个低速(如5Hz)。用示波器测量逆变器三相输出线电压(U-V, V-W, W-U)。应能看到幅值和频率正确的三相SPWM波形。
- 缓慢增加频率,观察输出电压幅值是否按V/Hz曲线上升。检查三相波形是否对称。
第四阶段:闭环联调
- 连接电机,确保机械部分安全。
- 先测试速度开环(V/Hz)运行。给定一个低速,启动电机,观察是否平稳启动,有无异常噪音或震动。逐步升速。
- 启用速度闭环(接入测速反馈)。首先将PI参数设置为零(纯P控制),给一个小的比例增益。给定一个速度,观察电机能否稳定在设定值附近。如果震荡,减小P;如果响应太慢,增大P。
- 加入积分项(I)。I的作用是消除静差。从小值开始增加,观察系统响应。PI整定是一个试错过程,可参考“先调P,后调I”的原则,在阶跃响应中观察超调量和稳定时间。
避坑指南:常见问题与排查
- 电机启动时过流故障:可能是启动Boost电压不足,或加速斜坡太快。尝试增加V/Hz曲线低频段的电压提升量,或延长加速时间。
- PFC工作时电感啸叫:通常是电流环不稳定或采样噪声大。检查电流采样电路的滤波参数,确保采样信号干净。降低PFC电流环的带宽(减小PI参数)。
- 高速运行时波形畸变:可能是直流母线电压因负载加重而下降(PFC响应不足),或者死区时间补偿不当。检查PFC电压环的动态性能,或微调死区补偿参数(如果有的话)。
- MCU频繁复位或跑飞:重点检查电源完整性(PCB的退耦电容是否足够且靠近MCU)、地线布局(数字地和模拟地分割与单点连接是否正确),以及中断服务程序是否过长,导致看门狗(COP)复位。优化代码,确保中断函数执行时间远小于中断周期。
5. 软件工程化与扩展思考
5.1 代码架构与模块化设计
为了实现可维护和可扩展的代码,建议采用模块化设计:
main.c:主循环和系统状态机管理。isr.c:集中存放所有中断服务程序。包括PWM中断、定时器捕获/比较中断、ADC中断、故障中断等。pfc.c/pfc.h:PFC算法所有函数和变量声明。motor_ctrl.c/motor_ctrl.h:电机控制算法所有函数和变量声明,包含V/Hz、PI控制器、斜坡函数、SPWM生成等。hal.c/hal.h:硬件抽象层,封装对MCU外设(PWM、ADC、GPIO、定时器)的直接寄存器操作。上层应用代码通过调用HAL函数来操作硬件,提高可移植性。pc_master.c:PC通信协议解析与处理。parameters.h:集中定义所有系统参数,如PI系数、V/Hz曲线表、保护阈值、PFC台阶时间等。这样调试时只需修改这个头文件即可。
5.2 通过PC-Master进行调试与监控
原设计中的PC-Master工具是一个强大的调试助手。它通过SCI串口与MCU通信,可以实现:
- 实时监控:图形化显示速度给定、实际速度、母线电压、电流、温度等关键变量波形。
- 在线调参:无需重新编译下载程序,直接修改RAM中的PI参数、V/Hz曲线、保护阈值等,立即观察效果。
- 数据记录:捕获启动、调速、故障等瞬态过程的数据,用于离线分析。
- 命令控制:发送启动、停止、转向、速度设定等命令。
在实际项目中,即使不沿用原版的PC-Master,也强烈建议设计一个类似的简易串口通信协议,这能极大提升开发调试效率。
5.3 系统扩展与优化方向
基于这个基础框架,可以进行多方面的优化和扩展:
- 无传感器控制:对于某些不需要高精度调速的应用,可以省去测速发电机,采用基于模型参考自适应(MRAS)或滑模观测器(SMO)的无传感器速度估算算法,进一步降低成本。
- 更先进的控制算法:如果MCU资源有富余,可以将V/Hz控制升级为矢量控制(FOC),以获得更快的动态响应和更优的低速转矩性能。但这需要对MCU进行升级(如使用Cortex-M内核的32位MCU)。
- 功能安全:增加更多的软件保护逻辑,如堵转检测、缺相检测、IGBT退饱和监测等,提升系统可靠性。
- 通信接口:增加CAN、EtherCAT等工业现场总线接口,方便集成到更大的自动化系统中。
这个基于MC68HC908MR32的设计方案,虽然以今天的眼光看其主控芯片已属旧款,但其系统架构思想、软硬件协同设计方法、以及在一个资源受限的平台上实现复杂双任务控制的工程技巧,至今仍然具有极高的学习价值和借鉴意义。它生动地展示了如何通过精妙的软件设计,让硬件发挥出最大潜能,最终打造出一个稳定、高效且低成本的电机驱动系统。