
1. 项目缘起与整体方案拆解1.1 为什么选这对组合TC78B043FNG PIC18F86J11工业现场和机器人关节驱动里三相 BLDC 电机的控制方案多如牛毛从专用驱动 IC 到 DSP、再到通用 MCU 加预驱各有各的活法。我这次选TC78B043FNG搭配PIC18F86J11不是拍脑袋而是踩过几次坑之后收敛出来的结果。先说 TC78B043FNG。它是东芝那颗三相无刷电机预驱芯片内置 1.5A 栅极驱动能力支持 6 路 PWM 输入带电流检测放大器和过流、过温、欠压保护。最关键的一点它把三相桥的上下桥臂驱动逻辑、死区时间、电荷泵都集成进去了你只需要外挂 6 颗 N 沟道 MOSFET 就能搭出完整的三相逆变桥。对于 24V~48V 母线、几百瓦级别的机器人关节电机这个功率段用分立 MOS 加预驱比用集成 IPM 灵活散热也好处理。再说 PIC18F86J11。这颗 8 位 MCU 主频 64MHz带 12 位 ADC、多个 PWM 模块、正交编码器接口QEI还有 96KB Flash 和 4KB RAM。有人会问都什么年代了还用 8 位机跑 BLDC我的实测结论是对于带霍尔传感器的六步换相控制PIC18F86J11 完全够用而且它的 QEI 模块可以直接接增量式编码器做速度闭环省掉一路外部计数。它的 PWM 模块支持互补输出和可编程死区配合 TC78B043FNG 的输入逻辑非常顺手。这套组合的定位很清晰中低压、中功率、需要霍尔换相或编码器闭环的工业与机器人三相 BLDC 驱动。适合做机器人关节、AGV 驱动轮、传送带、云台、协作机器人末端执行器这类场景。如果你要做的是三相光伏逆变那种并网级的高压大功率这套方案不合适那是另一条技术路线。1.2 整体控制架构长什么样整个系统的信号流我画不出来图这里不用图但可以用文字讲清楚。母线电源经过防反接和滤波后接到三相桥的直流输入端。三相桥由 6 颗 MOSFET 组成栅极分别接到 TC78B043FNG 的 6 路输出。TC78B043FNG 的 6 路输入来自 PIC18F86J11 的 PWM 模块MCU 根据霍尔传感器或编码器的反馈决定换相时刻和占空比。电流采样用一颗低阻值分流电阻放在母线负极低端采样信号送进 TC78B043FNG 的电流检测放大器放大后的模拟电压再回到 MCU 的 ADC。这样既能做过流保护也能做简单的电流环。速度反馈方面如果电机自带霍尔就用霍尔做换相和低速测速如果带增量编码器就接 QEI 做高分辨率速度闭环。这里有个设计取舍要讲清楚为什么用低端采样而不是相电流采样。低端采样只需要一颗分流电阻和一个放大器成本低、布线简单缺点是 PWM 占空比接近 100% 时采样窗口太窄。对于机器人关节这种占空比不会长期顶满的场景低端采样完全够用。如果你要做三相维也纳 PFC 那种对电流波形要求极高的场合那就得用相电流采样甚至隔离采样那是另一个量级的设计。1.3 方案选型的几个关键考量选这套方案之前我对比过几种常见路线。用集成 IPM比如带驱动和 MOS 一体的模块省事但功率做不大散热受限而且一旦炸管整个模块报废。用 DSP 跑 FOC 性能好但开发周期长对团队要求高。用专用 BLDC 控制芯片比如某些带换相逻辑的 IC简单但灵活性差想改控制策略就抓瞎。TC78B043FNG PIC18F86J11 的组合本质上是把功率级和控制级解耦。功率级交给预驱加分立 MOS想换更大电流的 MOS 直接换预驱不用动。控制级交给通用 MCU六步换相、速度环、保护逻辑都能自己写想加什么功能加什么功能。这种解耦带来的灵活性在工业现场面对各种非标需求时特别值钱。还有一点是供货和成本。TC78B043FNG 和 PIC18F86J11 都是成熟料号不是那种生命周期末期的冷门货。PIC18 系列的工具链成熟编译器、调试器、代码示例都齐全新手也能快速上手。对于中小批量工业产品这一点比极限性能更重要。2. 核心细节解析与实操要点2.1 TC78B043FNG 的引脚逻辑与死区设置TC78B043FNG 的输入逻辑是理解整个驱动的基础。它有 6 路输入U、V、W 各上下桥但并不是简单的独立控制。芯片内部有防直通逻辑但我强烈建议在 MCU 侧也设置死区双保险。原因很简单如果只依赖芯片内部死区一旦输入信号有毛刺或者时序错乱内部逻辑可能来不及反应上下桥同时导通就是炸管。死区时间怎么算假设你用 IRF3205 这类 MOS开通延迟约 20ns关断延迟约 50ns那么死区至少要大于关断延迟减开通延迟再留余量。实际我设的是500ns 到 1us。在 PIC18F86J11 的 PWM 模块里死区时间由 PWM 控制寄存器配置计算公式是死区时间 (死区计数值) × (1 / PWM 时钟频率)假设 PWM 时钟是 64MHz死区计数值设为 32那么死区时间 32 / 64MHz 500ns。这个值在 20kHz PWM 频率下占空比损失很小但足够安全。TC78B043FNG 的电流检测放大器增益是固定的具体倍数查数据手册输出直接进 MCU 的 ADC。这里要注意放大器的输出范围要匹配 ADC 参考电压。如果放大器输出最大 3.3V而 ADC 参考是 5V那就浪费了动态范围。我的做法是把 ADC 参考设成和放大器供电一致或者用外部基准。2.2 PIC18F86J11 的 PWM 与 QEI 配置PIC18F86J11 的 PWM 模块配置有几个坑。首先是PWM 时基它可以用 Timer2 或 Timer4 作为时基。我一般用 Timer2因为它的后分频器配置灵活。PWM 频率计算公式PWM 频率 Fosc / (4 × (PR2 1) × 预分频)假设 Fosc 64MHz预分频 1想要 20kHz PWM那么 PR2 64MHz / (4 × 20kHz) - 1 799。这个值在 16 位范围内没问题。QEI 模块的配置更讲究。QEI 可以工作在正交模式或霍尔模式。如果电机带增量编码器用正交模式4 倍频计数分辨率直接翻四倍。如果只有霍尔用霍尔模式每个霍尔跳变计数一次。QEI 的计数方向自动识别速度计算就是单位时间内的计数差值。我一般用 1ms 定时中断读一次 QEI 计数算速度。这里有个细节QEI 的输入引脚要加滤波。工业现场干扰大编码器信号线上容易串进噪声导致计数错误。PIC18F86J11 的 QEI 输入有可编程数字滤波器我一般设成最大滤波强度牺牲一点响应速度换稳定性。实测下来加了滤波之后速度环的抖动明显减小。2.3 霍尔换相表的生成与优化带霍尔的三相 BLDC换相逻辑就是一张表。三个霍尔传感器相隔 120 度安装每个电周期产生 6 个状态每个状态对应一组上下桥导通组合。标准换相表如下霍尔状态 (H3 H2 H1)导通相上桥下桥001U V-UV011W V-WV010W U-WU110V U-VU100V W-VW101U W-UW这张表不是随便写的它对应的是六步换相的固定顺序。每走一步电机转过 60 电角度。换相时刻由霍尔跳变触发MCU 在霍尔中断里查表更新 PWM 输出。但实际调试时你会发现霍尔安装位置不可能完美 120 度总有几个度的偏差。这个偏差会导致换相时刻提前或滞后表现为电流波形不对称、效率下降、噪音增大。我的做法是在霍尔中断里加一个可调的换相延迟通过实验找到最佳值。具体操作是固定转速逐步调整延迟观察母线电流电流最小的那个点就是最佳换相点。还有一个技巧低速时用霍尔测速高速时切换到编码器。霍尔每 60 电角度才跳一次低速时测速分辨率太差。编码器每转几千个脉冲高速时计数溢出风险大。两者结合低速用霍尔保证换相正确高速用编码器保证速度环精度。3. 实操过程与核心环节实现3.1 硬件搭建从原理图到 PCB 的注意事项硬件这块我先说几个炸过管才总结出来的教训。第一TC78B043FNG 的电荷泵电容必须靠近芯片引脚走线越短越好。电荷泵负责给上桥驱动供电如果电容远了走线电感会导致泵电压不稳上桥驱动不足MOS 进入线性区发热炸管。我一般用 100nF 陶瓷电容紧贴引脚。第二自举二极管和自举电容。TC78B043FNG 内部有自举电路但外部自举电容还是要选好。自举电容太小上桥驱动电压保持不住太大充电时间长高频时来不及充。我一般用 1uF 陶瓷电容配合快恢复自举二极管。实测 20kHz PWM 下1uF 足够。第三分流电阻的选型。低端采样电阻的阻值决定了电流检测范围。假设你最大电流 10ATC78B043FNG 电流放大器增益是 10 倍ADC 参考 3.3V那么分流电阻最大压降 3.3V / 10 0.33V电阻值 0.33V / 10A 33mΩ。但实际要留余量我一般选 20mΩ 或 25mΩ。电阻功率 I²R 10² × 0.02 2W所以要选 3W 以上的功率电阻或者用两颗并联。第四MOS 驱动电阻。栅极串联电阻控制开关速度。电阻太小开关快但 EMI 大电阻太大开关慢但发热多。我一般先用 10Ω 起步用示波器看栅极波形如果振铃严重就加大到 22Ω 或 33Ω。实测 20kHz 下10Ω 到 22Ω 都能接受。3.2 软件框架从初始化到换相中断软件框架我分成四层硬件初始化层、换相控制层、速度环层、保护层。初始化层配置时钟、PWM、ADC、QEI、定时器、中断。换相控制层处理霍尔中断查表更新 PWM。速度环层在定时中断里计算速度跑 PI 调节器更新占空比。保护层在 ADC 中断里检查电流过流立即关断 PWM。初始化顺序很重要。先配置时钟再配置外设。PIC18F86J11 的时钟源可以用内部振荡器或外部晶振。工业场合我建议用外部晶振精度高温漂小。配置 PLL 到 64MHz 后再配置 PWM 时基、QEI、ADC。ADC 要配置成自动采样在 PWM 周期特定时刻触发避开开关噪声。换相中断是核心。霍尔信号接到 MCU 的外部中断引脚三个霍尔信号经过异或后接到一个中断引脚任何一个霍尔跳变都触发中断。中断服务程序里读三个霍尔引脚状态查表更新 PWM 输出。这里要注意中断服务程序要短只做换相不做复杂计算。速度计算放到定时中断里。速度环我用的是增量式 PI。公式是输出增量 Kp × (误差 - 上次误差) Ki × 误差增量式 PI 的好处是不需要积分限幅输出自然累加。Kp 和 Ki 的整定我一般先用经验值然后实验调整。Kp 太大速度超调振荡Ki 太大响应慢稳态误差消除慢。实测下来Kp 在 0.5 到 2 之间Ki 在 0.01 到 0.1 之间具体看电机惯量。3.3 关键参数计算与实测记录我拿一台 24V、100W、带霍尔的三相 BLDC 做实测。电机极对数是 4额定转速 3000rpm额定电流 5A。PWM 频率设 20kHz死区 500ns分流电阻 25mΩ。速度计算3000rpm 50 转/秒极对数 4电频率 50 × 4 200Hz电周期 5ms。每个电周期 6 个霍尔状态所以霍尔跳变频率 200 × 6 1200Hz。也就是说最高转速下霍尔中断每 0.83ms 触发一次。这个频率对 PIC18F86J11 来说毫无压力。电流采样最大电流 5A分流电阻 25mΩ压降 5 × 0.025 0.125V。TC78B043FNG 放大器增益假设 10 倍输出 1.25V。ADC 12 位参考 3.3V分辨率 3.3V / 4096 0.8mV。电流分辨率 0.8mV / (10 × 0.025) 3.2mA。这个分辨率做电流保护绰绰有余。实测波形空载启动占空比从 0 慢慢加到 20%电机开始转动。用示波器看霍尔信号和相电压换相时刻基本对齐。加载到额定扭矩电流稳定在 5A 左右MOS 温升约 40 度加散热片。过流保护设在 8A触发后 PWM 立即关断电机自由停车。这里有个实测发现低速时低于 100rpm霍尔测速抖动很大速度环输出波动。后来我把低速段的速度环带宽降低同时用霍尔信号做换相、用编码器做测速问题解决。如果你的电机没有编码器低速段就只能牺牲一点速度精度或者用无感算法估算速度但那是另一个话题了。4. 常见问题与排查技巧实录4.1 电机不转或抖动从电源查到换相表电机不转先查电源。母线电压有没有预驱供电有没有电荷泵电压有没有这三个电压用万用表一量就知道。如果电荷泵电压不对上桥驱动不了电机肯定不转。电荷泵电压一般是母线电压加 10V 左右如果只有母线电压说明电荷泵没工作查电荷泵电容和芯片使能引脚。如果电源正常电机抖动但不转大概率是换相表错了。霍尔状态和导通相的对应关系不同电机可能不一样。我的排查方法是手动给一个固定霍尔状态比如 001然后手动导通 U V-看电机是否往一个方向轻微转动。如果反转说明换相表顺序反了把表倒过来用。如果不动说明霍尔状态读错了查霍尔引脚定义。还有一种情况是霍尔信号有毛刺导致换相中断误触发。用示波器看霍尔信号如果有尖峰加 RC 滤波。我一般用 1kΩ 电阻加 100nF 电容截止频率约 1.6kHz对 1200Hz 的霍尔信号影响不大但能滤掉高频毛刺。4.2 过流保护误触发采样时刻与滤波过流保护误触发是常见问题。原因通常是采样时刻不对。低端采样在 PWM 周期内只有下桥导通时才有电流流过分流电阻。如果你在 PWM 周期开始时采样那时候下桥还没导通采到的是零。如果你在 PWM 周期结束时采样下桥可能已经关断了。正确的采样时刻是PWM 周期中间下桥导通期间。PIC18F86J11 的 ADC 可以配置成由 PWM 模块触发触发点设在周期中间。这样每次采样都在下桥导通时采到的电流才是真实的。另一个原因是采样信号没滤波。开关噪声会耦合到电流信号上导致 ADC 读数跳动。我在 ADC 输入加一个 RC 低通滤波截止频率约 10kHz对 20kHz PWM 的开关噪声有很好的抑制。同时软件里做多次采样取平均我一般采 4 次去掉最大最小值再平均效果很好。4.3 常见问题速查表现象可能原因排查方法解决措施电机不转电源缺失量母线、预驱、电荷泵电压查供电电路电机抖动换相表错误手动导通测试调整换相表顺序过流误触发采样时刻不对示波器看采样点改 PWM 触发点速度环振荡PI 参数不当观察速度波形降低 Kp调整 KiMOS 发热严重死区不足或驱动不足看栅极波形加大死区减小栅极电阻低速测速抖动霍尔分辨率低看速度反馈低速用编码器或降带宽高速失步换相延迟不对看电流波形调整换相延迟上桥不工作电荷泵故障量电荷泵电压查电荷泵电容4.4 几个独家避坑技巧第一个技巧上电先做自检。MCU 上电后先不启动电机而是依次检查母线电压、预驱故障引脚、霍尔信号状态。如果任何一项异常直接报错不启动。这个自检逻辑我写了不到 50 行代码但避免了无数次上电炸管。第二个技巧PWM 输出先关断再配置。PIC18F86J11 的 PWM 模块在配置过程中输出引脚可能会有毛刺。我的做法是先把 PWM 输出引脚配置成普通 IO 并输出低电平配置完 PWM 模块后再切换成 PWM 功能。这样上电瞬间不会出现上下桥同时导通的危险。第三个技巧电流环和速度环分时调试。先调电流环把电流环调稳了再调速度环。如果两个环一起调出了问题你不知道是哪个环的问题。我一般先给一个固定占空比看电流是否稳定然后加电流环最后加速度环。第四个技巧保留一份最小系统代码。调试过程中我始终保持一份能跑通的最小系统代码只做换相不做速度环不做保护。一旦复杂代码出问题回退到最小系统确认硬件没问题再逐步加功能。这个习惯帮我省了大量时间。5. 机器人应用场景的特别考量5.1 机器人关节驱动的特殊需求机器人关节和普通工业电机驱动不一样。普通工业电机往往长时间运行在固定工况机器人关节则是频繁启停、正反转、变速。这对驱动方案提出了几个额外要求。第一是动态响应。机器人关节要在毫秒级内响应速度指令变化速度环带宽要够高。我的做法是把速度环采样周期缩短到 500usPI 参数相应调整。实测下来500us 采样周期下速度环带宽可以做到 100Hz 以上满足大多数关节需求。第二是低速平稳性。机器人做精细操作时关节可能以极低速度运行比如 1rpm。这时候霍尔换相的分辨率就不够了每 60 电角度才换一次相转矩脉动大。解决方案是用正弦波驱动代替六步换相但这需要 FOC 算法PIC18F86J11 跑 FOC 有点吃力。折中方案是六步换相加 PWM 调制在换相周期内用 PWM 调节平均电压减小转矩脉动。第三是多关节同步。一个机器人有 6 个关节每个关节一套驱动6 套驱动要同步。我的做法是用 CAN 总线或者 EtherCAT 做关节间通信主控发指令各关节驱动执行。TC78B043FNG 和 PIC18F86J11 这套方案本身不带通信接口但 PIC18F86J11 有 SPI 和 UART可以外接 CAN 控制器或者 EtherCAT 从站芯片。5.2 与机器人控制器的接口设计机器人控制器和关节驱动之间接口设计很关键。我一般用CAN 总线因为 CAN 抗干扰强适合机器人这种电机多、干扰大的环境。PIC18F86J11 通过 SPI 接一颗 CAN 控制器比如 MCP2515实现 CAN 通信。接口协议我定义了几个关键指令使能、失能、设置速度、设置位置、读状态。使能指令让驱动器进入闭环模式失能让电机自由停车。设置速度指令包含目标速度和加速度驱动器内部做梯形速度规划。读状态指令返回当前位置、速度、电流、温度、故障码。这里有个细节通信超时保护。如果 CAN 总线断了驱动器收不到指令电机不能一直转。我的做法是设一个 100ms 超时超时后自动失能电机自由停车。这个保护在机器人调试时特别重要避免通信故障导致机器人失控。5.3 工业现场的抗干扰措施工业现场电磁环境恶劣变频器、继电器、接触器都在旁边干扰无处不在。这套驱动方案要稳定运行抗干扰措施必须到位。电源端母线加共模电感和 X 电容抑制共模和差模干扰。预驱供电加 LC 滤波防止电源噪声影响预驱逻辑。信号端霍尔信号和编码器信号用双绞线或屏蔽线屏蔽层单端接地。信号线上加 RC 滤波靠近 MCU 引脚。CAN 总线用双绞线两端加 120Ω 终端电阻。PCB 布局功率地和信号地分开单点接地。MOS 和预驱靠近走线短而粗。晶振靠近 MCU底下不走其他信号线。ADC 参考电压加滤波电容远离功率区域。软件端所有输入信号做数字滤波霍尔信号做消抖ADC 做多次采样平均通信做 CRC 校验。关键状态机加超时保护任何一步超时都回退到安全状态。这些措施看起来繁琐但每一条都是踩坑换来的。我见过太多驱动器在实验室跑得好好的一到现场就各种问题。抗干扰设计不是可选项是必选项。6. 调试工具与实测数据分享6.1 必备调试工具清单调试这套方案几样工具少不了。示波器是第一位至少四通道看霍尔、PWM、相电压、电流。我用的是一台 200MHz 带宽的够用。电流探头看相电流波形判断换相是否正确。逻辑分析仪抓霍尔和 PWM 时序分析换相延迟。可调电源给母线供电限流保护防止炸管。红外测温枪测 MOS 和预驱温度。软件工具方面MPLAB X IDE加XC8 编译器是 PIC18 开发的标配。PICkit 4调试器支持在线调试和烧录。串口助手看调试信息。如果做 CAN 通信还需要CAN 分析仪。6.2 实测数据与性能评估我拿这套方案驱动一台 24V、100W、4 极对、带霍尔和 1000 线编码器的 BLDC做了几组测试。空载启动到 3000rpm用时约 200ms超调约 5%稳态误差小于 1%。加载到额定扭矩转速跌落约 3%恢复时间约 50ms。低速 10rpm 运行速度波动约 5%转矩脉动约 10%。过流保护响应时间小于 10us从检测到过流到关断 PWM实测 8us。效率方面额定工况下驱动器效率约 95%MOS 温升约 40 度环境 25 度加散热片。预驱温升约 20 度。整体效率满足工业应用要求。对比六步换相和正弦驱动六步换相的转矩脉动明显大一些但实现简单对 MCU 要求低。如果应用对转矩脉动敏感比如机器人精细操作建议上 FOC。但 FOC 对 MCU 算力要求高PIC18F86J11 跑 FOC 需要优化算法或者换更高级的 MCU。6.3 后续扩展方向这套方案还有不少扩展空间。通信方面可以加 EtherCAT 从站做多轴同步。控制算法方面可以加位置环做位置控制。保护方面可以加温度传感器做温度保护。诊断方面可以加故障记录方便现场排查。如果要做无感驱动去掉霍尔用反电动势过零检测估算转子位置这套硬件也支持。反电动势信号经过分压后接到 ADC软件做过零检测。但无感驱动低速性能差启动需要特殊算法适合风机、水泵这类对低速要求不高的场景。机器人应用方面如果要做协作机器人需要力控那就得加力矩传感器做阻抗控制。这又涉及到更复杂的算法PIC18F86J11 可能不够用需要考虑升级到 32 位 MCU。但作为入门和中等复杂度应用这套方案已经能覆盖大部分需求。我个人在实际操作中的体会是这套 TC78B043FNG 加 PIC18F86J11 的组合最大的价值在于平衡。它不像集成模块那样封闭也不像全分立方案那样复杂。硬件上预驱加 MOS 的架构给了你调整功率级的自由软件上通用 MCU 给了你实现各种控制策略的自由。对于工业现场和机器人应用这种自由度往往比极限性能更重要。踩过的坑告诉我稳定可靠、易于调试、方便维护才是工业产品的核心竞争力。