做电机控制的工程师,恐怕都有过被开关磁阻电机(SRM)折腾的经历。STEVAL-CTM015V1 是意法半导体推出的三相 SRM 驱动评估板,专门用来研究带速度/位置传感器的开关磁阻电机驱动方案。官方给它定位就一句话:SRM motor driver evaluation board,但真正把这板子点亮并跑起来,要做的事情远不止插个电、刷个固件那么简单。本文记录的就是一次完整的 STEVAL-CTM015V1 配置过程——从传感器选型和硬件接线,到定时器初始化、换相表计算,再到开环验证和常见故障排查。适合刚拿到板子、正在做 SRM 预研或者想从无感换到带传感器方案的工程师参考。
1. 为什么 SRM 控制必须依赖速度/位置传感器
1.1 SRM 的转矩产生原理:没有位置就没有“自同步”
很多刚从 BLDC/PMSM 转过来的人,第一次看到 SRM 的定转子结构都会愣一下:转子上既没有绕组,也没有磁钢,就一堆硅钢片叠出来的凸极齿,定子上也只有简单的集中绕组。整个电机看起来就像一个“铁块坨子”,然而它偏偏能转动,靠的是磁阻最小原理——定子某一相通电后,会产生磁通,转子齿会被磁拉力拽向让磁阻最小的位置,也就是与定子齿对齐的方向。
这个原理听起来简单,但控制上有个很大的问题:转子齿一旦和定子齿对齐,磁拉力就会归零,如果这时候还不换相,转子就会被“定”在那里,继续通电只会变成发热电阻,不会产生任何有效转矩。所以 SRM 永远需要“提前知道转子在哪里”,才能在正确的角度范围内给正确的相绕组通电。这个“提前知道”的动作,就是换相逻辑的基础。
换相时机不对,后果比普通电机严重得多。BLDC 换相错了顶多效率变低、电流波形难看,而 SRM 如果在电感下降区继续导通,会产生负转矩,电机不仅抖动、尖叫,电流还会瞬间飙升,功率管很容易直接烧穿。这也是为什么 SRM 的控制方案里,位置信号的地位几乎等同于“生命线”。
有人会问:能不能像 BLDC 那样做无感控制?当然能,学术界和工业界都有 SRM 无感方案,比如磁链观测、电流斜率差值法、脉冲注入法,但问题在于 SRM 的磁链和转子位置关系高度非线性,还严重受母线电压、相电流和温度影响,要做到宽速度范围、负载突变还能稳定运行,难度比 PMSM 的无感 FOC 高一个量级。尤其是零速启动和低速重载,没有可靠的初始位置,整个闭环根本建立不起来。所以工程上做 SRM,绝大多数都会先上传感器,把“位置”这个最不可控的变量变成已知量,再去调电流环和速度环。
1.2 带传感器方案与无感方案的现实对比
带传感器之后,好处是立竿见影的。首当其冲的就是启动。SRM 没有任何辅助启动绕组,也没有反电动势可用,从零速开始就得知道转子绝对位置,才能把第一步励磁落在正确相上。霍尔传感器或者绝对式编码器可以直接给出位置状态,MCU 上电瞬间就能查表决定“现在该通哪一相”,根本不需要试探性脉冲。
第二个好处是角度可以精确控制。有了位置信号,控制器可以实现提前导通、提前关断,把电流控制在电感上升段,这样可以显著降低转矩脉动和母线电流尖峰。对 SRM 这种“天生转矩脉动大”的电机来说,角度优化是改善噪声和振动最有效的手段之一,而这些都建立在连续、可靠的位置信息之上。
从调试效率来看,传感器方案也比无感方案省心很多。无感启动阶段要去调高频注入幅值、磁链收敛速度、观测器增益,中间任何一个参数不对,现象都是“电机轻微颤抖”或者“突然反转”,排查起来非常折磨人。传感器方案的启动逻辑直观,只要换相表没错,电机在极低占空比下就能平稳转起来,后续再慢慢加电流环、速度环,每一步都可以用示波器确认,调试路径清晰。
实际选型的时候,霍尔和编码器怎么选也是个问题。霍尔传感器结构简单、成本低,适合电动工具、小家电这类对启动平顺性要求不高的场景,但它的位置分辨率低,一个电气周期通常只有几个状态点,换相只能跳变,转矩脉动大,而且安装位置误差对换相精度影响明显。增量编码器价格高一些,但分辨率够高,A/B 正交信号可以做 4 倍细分,换相角可以连续调整,适合低速平稳性要求高的场合。还有一类是绝对式编码器,成本进一步上升,一般只在高价值伺服或者特殊工况下使用。STEVAL-CTM015V1 的板载接口通常对这两类传感器都做了兼容,下面我们详细拆一下硬件侧怎么接。
2. STEVAL-CTM015V1 板卡解析与传感器硬件接线
2.1 先看懂板卡的结构:控制侧、功率侧、信号接口
拿到 STEVAL-CTM015V1,第一步不是急着接电机,而是把板卡的 User Manual 和原理图 PDF 从官网拉下来,对照实物过一遍。这块板子整体分成几个区域:控制电源部分负责把外部直流输入转成板内低压供电,功率部分包括三相桥臂和预驱电路,信号部分则是电流采样、母线电压采样、温度采样和外部传感器接口。
先说安全。SRM 评估板的母线电压通常不低,STEVAL-CTM015V1 的设计目标覆盖中高压三相驱动场景,所以板上一旦接了高压输入,整个功率侧都要当“老虎”来对待。我自己的习惯是:先用低压直流源做控制逻辑调试,确认传感器信号、PWM 输出都正常后,再逐步升高母线电压。每次改接线前必须确认母线电容放电完毕,最稳的办法是用万用表电压档盯着母线电容两端等归零,别凭感觉。
定位传感器接口时需要翻一下板卡的丝印和原理图。STEVAL-CTM015V1 上通常有一个专门的多针插座,丝印一般是 HALL 或者 ENCODER 之类,所有位置信号进来都会先经过 RC 滤波、电平嵌位,再进入主控 MCU 的定时器捕获引脚。板上有没有给传感器供电的引脚、供电电压是 3.3V 还是 5V,也要从原理图上确认清楚。
我之前用这块板子时踩过一个坑:传感器插座上有一个引脚是 VCC,但默认是 3.3V 输出,而我手里的编码器需要 5V,直接插上去编码器灯亮但输出波形很弱。后来在原理图里找到供电跳线,调整到 5V 才正常。所以上电前一定要先确认传感器工作电压和板卡供电选项一致,否则很容易出现“信号看起来有,但边沿触发不了”的诡异现象。
2.2 霍尔传感器与增量编码器的接线、供电与抗干扰细节
霍尔传感器在 SRM 上通常是三只开关型霍尔,间隔一定的机械角度安装,输出三路高低电平状态。接线时除了 VCC 和 GND,三个信号输出分别接到板卡的 HALL1/HALL2/HALL3,每个信号对应 MCU 一个定时器输入通道。霍尔传感器带集电极开路输出时,需要外部上拉电阻,大多数评估板默认已经在信号线上放了 4.7kΩ 到 10kΩ 的上拉,所以只要你的霍尔是标准 OC 输出,直接插上基本就能用。
增量编码器接线稍微讲究一些。A 相、B 相、Z 相三路信号,A/B 相差 90 度电角度,MCU 通过定时器的编码器模式对两路边沿同时计数,可以实现 4 倍频细分;Z 相每转一圈一个脉冲,通常接到一个单独的外部中断引脚,用来做绝对零点校准。编码器输出有推挽和差分两类,SRM 这种功率级的开关噪声很大,我强烈建议用带 RS422 差分输出的编码器,抗共模干扰能力强很多,信号经过板载差分接收芯片后进入 MCU,误触发概率明显降低。
传感器供电也值得单独说。SRM 功率级开关瞬间会产生很大的 dI/dt,母线电压和地平面的噪声都很高,如果传感器和 MCU 共用一路电源,位置信号很容易被污染。最好给传感器单独供电,或者在供电入口加磁珠和去耦电容。信号线要采用屏蔽双绞线,屏蔽层单端接地,接在控制板的地上,不要两头接地形成地环流。
还有一个小细节:传感器信号线上通常已经有滤波电容,但如果现场电磁环境特别恶劣,可以在板卡输入端再并联一个几十皮法的小电容,用来吸收纳秒级毛刺。注意电容不能太大,否则会把信号边沿磨圆,导致编码器计数丢步。这个“滤波手感”需要实际调试时用示波器观察边沿幅度来决定。
3. 软件配置:从 CubeMX 到 SRM 换相控制的完整链路
3.1 CubeMX 初始化:定时器、ADC、调试串口一个都不能少
传感器硬件接好了,接下来就是软件。STEVAL-CTM015V1 的工程可以用 STM32CubeMX 生成底层初始化,再结合固件库手写 SRM 控制逻辑。打开 CubeMX,首先要配置的是时钟树,让主控 CPU 跑到标称最高主频,否则后面 PWM 频率、ADC 采样频率、速度环计算周期都会受限。
三相 PWM 输出通常是核心。SRM 驱动不一定需要像 BLDC 那样互补 PWM,但 STEVAL-CTM015V1 的功率级依然支持多种开关方式,我建议用高级定时器的三个互补通道输出六路 PWM,同时使能刹车输入,方便过流保护直接把 PWM 拉低。PWM 频率的选择上,SRM 的相电感小、电流纹波大,开关频率太低会导致电流峰值很大,太高又会增加开关损耗,一般在 10kHz 到 40kHz 之间折中,我调试时先用 20kHz。
传感器信号对应的定时器配置也在这里做。如果用增量编码器,把某个通用定时器(比如 TIM2)的两个通道分别接 A、B 相,在 CubeMX 中把这个定时器的 Combined Channels 设置为 EncoderMode,这样硬件会自动做正交解码,不用写中断处理,计数器的值直接代表转子位置。Z 相脉冲则接到另一个引脚并配置为外部中断,每转一圈清零一次计数,便于累计角度。
霍尔传感器的配置方式不一样。三个霍尔信号可以接到定时器的三个输入通道,也可以接普通 GPIO 并配置 EXTI 外部中断,每次任一霍尔状态跳变时,中断里读取三路电平状态,查表得到转子位置。用定时器异或输入模式也是一种办法,但中断查表最直观,我在调试阶段会先这么写,稳定之后再考虑优化。
电流采样 ADC 也不能忽略。SRM 控制需要知道相电流的大小来做电流环闭环,板载电流采样运放的输出接入 MCU 的 ADC 引脚。关键点是设置 ADC 采样触发源:用 PWM 定时器的 TRGO 事件来触发 ADC 注入组采样,保证每次采样都落在 PWM 周期的固定点,避免在 MOSFET 开关沿附近抓到巨大的尖峰。母线电压采样同样接到另一个 ADC 通道,随时监控是否过压欠压。
UART 调试口建议留一路,初期几乎全靠它。打印内容至少包括:当前转子角度、传感器累计位置、三相电流、母线电压、速度给定、速度反馈、故障标志。波特率设置高了容易丢数据,我一般先用 115200,等逻辑稳定后再考虑提高。
3.2 换相表、转子位置映射与角度计算
SRM 控制里最核心的软件逻辑,就是把传感器读到的转子位置映射成“哪些相该导通”。这一步很多入门者会懵,因为不同极数的 SRM 换相顺序完全不同,错一步电机就不转。
以三相 6/4 极 SRM 为例,定子 6 个极,转子 4 个极。转子每转过一个转子极距,也就是 90 度机械角,三相就完成一轮“导通-关断”循环,对应一个电气周期。所以电机每转一圈,经历 4 个电气周期。如果采用单相导通方式,一个电气周期内三相轮流导通,每一相导通 1/3 个电气周期,也就是 120 度电气角,相当于 30 度机械角。
在这个基础上,我们还需要给导通区间加“提前开通角”和“提前关断角”。因为相绕组有电感,电流建立需要时间,如果在电感刚进入上升区时才开通,电流还没上来转子已经跑远了,转矩输出会不足。所以高速时要提前几个电角度开通,在电感下降区到来之前也要提前关断,避免负转矩。这个提前角不是常数,需要根据转速做前馈补偿,调试阶段可以先给固定小角度,比如 5 到 10 度电角度,观察电流波形再调整。
编码器分辨率对角度精度的影响也很大。假设编码器每圈 1000 个脉冲,4 倍频后每圈有 4000 个计数单位,平均每个机械角度约 11 个计数,每个电气周期(90 度机械角)对应 1000 个计数,理论上足够做 1 度级别的换相控制。如果编码器只有 250 线,4 倍频后每圈 1000 计数,每个机械角度不到 3 个计数,高速时换相精度明显不够,就会出现电流波形畸变、转速不稳。
霍尔传感器加细分观测器可以部分弥补低分辨率问题——在相邻霍尔状态之间用速度估算角度,但实现复杂度高。我的建议是,如果不是成本极其敏感,直接上高线数编码器,省下的调试时间远大于编码器差价。
3.3 电流环与速度环参数初值怎么给
位置信号搞定后,下一步就是电流环和速度环的 PI 参数。这里我不会直接给一组“包治百病”的系数,因为参数跟相电感、母线电压、采样电阻、PWM 频率都有关系,但初值逻辑是通用的。
电流环带宽通常取开关频率的 1/10 到 1/20。20kHz 的 PWM,电流环带宽按 1~2kHz 来设计,对应的比例增益 Kp 和积分时间 Ti 需要结合电机的相电感 L 和相电阻 R。SRM 的相电感很小,尤其是在转子齿对齐位置附近,电感会降到很低,Kp 太大会导致电流振荡,太小又跟不上换相变化。建议刚开始把电流环带宽放低到 500Hz 左右,跑起来后再逐步推高。
速度环带宽比电流环低一个量级,一般 10Hz 到 50Hz 已经足够。速度环的采样周期可以用编码器更新事件触发,也可以固定时间基准,比如每 1ms 计算一次。初值给一组很保守的比例增益和很小的积分增益,观察速度阶跃响应,继续往大的调,直到出现轻微超调后再回退 20%,算是一个比较保守的整定方法。
还有一组必须确认的参数是电流和电压标定。从原理图找到电流采样电阻阻值和运放放大倍数,把 ADC 原始值换算成实际电流;母线电压的分压系数也要确认。很多调试问题不是算法错了,而是反馈数值偏了一倍,导致速度环认为已经到目标、其实电机的实际转速差着十万八千里。
4. 实测调试与故障排查实录
4.1 上电前的检查和开环小占空比验证
板子通电之前,我有一套固定流程。先用万用表量一遍母线电容两端电阻,确认没有短路;再把示波器探头夹到传感器信号线上,手动旋转电机轴,观察霍尔或编码器信号是否随角度变化,边沿是否干净。这一步一定要做,能过滤掉一半以上的低级问题。
传感器信号正常后,不要直接进闭环,先做开环验证。让 MCU 输出一组固定的换相状态,比如只让 A 相上桥臂和下桥臂以 10% 占空比导通,观察相电流波形是否和预期一致。如果电流建立正常,说明功率级、电流采样通道都工作。然后给一个很慢的换相周期,比如每 50ms 切换一相,手动旋转电机,感受是否有明显的磁阻力,确认换相顺序和传感器位置是否匹配。
安全上要特别强调一点:开环调试时母线电压先给到额定值的 10% 到 20%,比如目标母线 300V,就先用 30V 到 60V 验证逻辑。这样即使换相表错了,电流和损坏风险也小很多。
4.2 电机反转、抖动、失步时的相序判断方法
调试中遇到最多的问题就是“电机反转”和“启动抖动”。反转通常有两种原因:一是三相相序接反了,换个相序就能解决;二是传感器信号的极性映射反了,也就是霍尔状态表与实际转子位置不匹配。用示波器同时看霍尔信号和 PWM 输出,手动慢速旋转电机,记录每个霍尔状态对应的转子位置,再和程序里的换相表逐条核对,问题很快就能定位。
启动抖动则复杂一些。可能是换相表有一到两个状态错位,也可能只是占空比太小,转矩不足以克服静摩擦。先加大占空比试试,如果大占空比下依然抖,基本就是换相逻辑问题。还有一种情况是编码器的 A/B 相接反了,导致位置计数方向与电机实际旋转方向相反,位置反馈每走一步都在反向修正,整个系统震荡起来就是这个表现,交换 A、B 两相即可。
高速失步通常发生在传感器方案已经能跑低速、但转速一上去就丢步的阶段。常见原因是换相提前角没有随速度补偿,电流建立时间不变,但转子在这个时间内转过的角度变大了,导致实际导通区间落入电感下降区,转矩突然消失。另外编码器分辨率不足也会导致高速下换相滞后,检查一下位置采样周期和速度环计算周期是否足够快。
4.3 常见问题速查表
我把这段时间调试 STEVAL-CTM015V1 遇到的高频问题整理成一张表,方便后来人直接对照。
| 故障现象 | 可能原因 | 处理方法 |
|---|---|---|
| 上电后电机完全不动 | 传感器供电缺失或接线错误 | 用示波器检查霍尔/编码器供电与波形 |
| 启动抖动、咯咯响 | 换相表与传感器位置映射错误 | 慢速手动旋转电机,逐状态核对换相表 |
| 电机反转 | 相序接反或传感器 A/B 接反 | 交换任意两相输出,或交换编码器 A/B |
| 低速正常、高速失步 | 换相提前角未补偿或编码器分辨率不足 | 增加随转速变化的角度前馈;更换高线数编码器 |
| 母线过流报警 | 导通角过大或关断角太晚 | 减小提前关断角,检查电流环限幅 |
| 相电流波形严重不对称 | 某一路采样通道偏置或增益异常 | 用标准电压源校准电流采样通道 |
| 传感器信号毛刺多 | 屏蔽接地不良或滤波电容不足 | 改用差分编码器,屏蔽层单端接地 |
还有一个容易忽略的点:SRM 的电流峰值很大,母线电容上的瞬间压降会导致传感器供电电压跌落,这类问题用示波器看传感器电源波形才能发现。如果发现供电在开关瞬间有几十毫伏的跌落,可以在传感器供电端并联一个较大的电解电容,效果立竿见影。
最后再分享一个我自己的习惯:即使评测板已经帮你排好了传感器接口,也建议在正式调试前花半小时用示波器把所有位置信号和电流采样点都抄一遍,特别是了解信号的正常电平范围。我在第一次点亮这块板时,就因为提前把传感器信号和 PWM 触发时序对齐好,省下了大量排查相序的时间。传感器方案看似简单,但真正要把 SRM 调得稳定、安静、高效,每一步都需要回头用波形和数据说话。