TC78B043FNG+PIC18F86J11三相BLDC驱动方案设计与机器人应用
2026/9/20 6:02:36 网站建设 项目流程

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-UV
011W+ V-WV
010W+ U-WU
110V+ U-VU
100V+ W-VW
101U+ W-UW

这张表不是随便写的,它对应的是六步换相的固定顺序。每走一步,电机转过 60 电角度。换相时刻由霍尔跳变触发,MCU 在霍尔中断里查表,更新 PWM 输出。

但实际调试时你会发现,霍尔安装位置不可能完美 120 度,总有几个度的偏差。这个偏差会导致换相时刻提前或滞后,表现为电流波形不对称、效率下降、噪音增大。我的做法是:在霍尔中断里加一个可调的换相延迟,通过实验找到最佳值。具体操作是:固定转速,逐步调整延迟,观察母线电流,电流最小的那个点就是最佳换相点。

还有一个技巧:低速时用霍尔测速,高速时切换到编码器。霍尔每 60 电角度才跳一次,低速时测速分辨率太差。编码器每转几千个脉冲,高速时计数溢出风险大。两者结合,低速用霍尔保证换相正确,高速用编码器保证速度环精度。

3. 实操过程与核心环节实现

3.1 硬件搭建:从原理图到 PCB 的注意事项

硬件这块,我先说几个炸过管才总结出来的教训。第一,TC78B043FNG 的电荷泵电容必须靠近芯片引脚,走线越短越好。电荷泵负责给上桥驱动供电,如果电容远了,走线电感会导致泵电压不稳,上桥驱动不足,MOS 进入线性区发热炸管。我一般用 100nF 陶瓷电容,紧贴引脚。

第二,自举二极管和自举电容。TC78B043FNG 内部有自举电路,但外部自举电容还是要选好。自举电容太小,上桥驱动电压保持不住;太大,充电时间长,高频时来不及充。我一般用 1uF 陶瓷电容,配合快恢复自举二极管。实测 20kHz PWM 下,1uF 足够。

第三,分流电阻的选型。低端采样电阻的阻值决定了电流检测范围。假设你最大电流 10A,TC78B043FNG 电流放大器增益是 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,调整 Ki
MOS 发热严重死区不足或驱动不足看栅极波形加大死区,减小栅极电阻
低速测速抖动霍尔分辨率低看速度反馈低速用编码器或降带宽
高速失步换相延迟不对看电流波形调整换相延迟
上桥不工作电荷泵故障量电荷泵电压查电荷泵电容

4.4 几个独家避坑技巧

第一个技巧:上电先做自检。MCU 上电后,先不启动电机,而是依次检查母线电压、预驱故障引脚、霍尔信号状态。如果任何一项异常,直接报错,不启动。这个自检逻辑我写了不到 50 行代码,但避免了无数次上电炸管。

第二个技巧:PWM 输出先关断再配置。PIC18F86J11 的 PWM 模块在配置过程中,输出引脚可能会有毛刺。我的做法是先把 PWM 输出引脚配置成普通 IO 并输出低电平,配置完 PWM 模块后再切换成 PWM 功能。这样上电瞬间不会出现上下桥同时导通的危险。

第三个技巧:电流环和速度环分时调试。先调电流环,把电流环调稳了再调速度环。如果两个环一起调,出了问题你不知道是哪个环的问题。我一般先给一个固定占空比,看电流是否稳定,然后加电流环,最后加速度环。

第四个技巧:保留一份最小系统代码。调试过程中,我始终保持一份能跑通的最小系统代码,只做换相,不做速度环,不做保护。一旦复杂代码出问题,回退到最小系统,确认硬件没问题,再逐步加功能。这个习惯帮我省了大量时间。

5. 机器人应用场景的特别考量

5.1 机器人关节驱动的特殊需求

机器人关节和普通工业电机驱动不一样。普通工业电机往往长时间运行在固定工况,机器人关节则是频繁启停、正反转、变速。这对驱动方案提出了几个额外要求。

第一是动态响应。机器人关节要在毫秒级内响应速度指令变化,速度环带宽要够高。我的做法是把速度环采样周期缩短到 500us,PI 参数相应调整。实测下来,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 IDEXC8 编译器是 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 给了你实现各种控制策略的自由。对于工业现场和机器人应用,这种自由度往往比极限性能更重要。踩过的坑告诉我,稳定可靠、易于调试、方便维护,才是工业产品的核心竞争力。

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

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

立即咨询