1. 项目背景与核心器件选型
在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然占据着重要地位。然而传统的电机驱动方案存在效率低、发热严重、控制精度不足等问题。最近我在一个智能家居窗帘控制项目中,通过采用东芝TC78H660FTG电机驱动IC搭配STM32G431RB主控的方案,成功实现了高效率、低噪声的电机控制系统。
TC78H660FTG是东芝推出的双通道有刷直流电机驱动IC,采用VQFN16封装(3×3mm),具有以下突出特性:
- 工作电压范围宽:2.5V-18V
- 每通道持续输出电流达1.5A(峰值2A)
- 内置低导通电阻MOSFET(上桥+下桥=0.6Ω typ.)
- 支持PWM恒流控制
- 集成欠压锁定(UVLO)、过流保护(ISD)和热关断(TSD)
STM32G431RB则是STMicroelectronics推出的Cortex-M4内核微控制器,具有:
- 170MHz主频,213DMIPS性能
- 128KB Flash,32KB SRAM
- 高级定时器支持6路PWM互补输出
- 内置运算放大器比较器,可直接连接电机电流检测电阻
2. 硬件电路设计详解
2.1 电源架构设计
系统采用12V/2A直流电源适配器供电,电源架构分为三级:
- 第一级:12V直接供给TC78H660FTG的VM引脚(电机驱动电源)
- 第二级:通过AMS1117-3.3将12V降压至3.3V给STM32供电
- 第三级:TC78H660FTG的VCC引脚需要5V逻辑电源,由3.3V通过电荷泵升压得到
关键提示:VM和VCC必须分开供电,避免电机大电流波动影响控制逻辑稳定性。实测显示,共用电源会导致PWM控制异常。
2.2 电机驱动电路
TC78H660FTG的典型应用电路如下:
// 电机接口 MOTOR1+ --> OUT1A MOTOR1- --> OUT1B MOTOR2+ --> OUT2A MOTOR2- --> OUT2B // 控制接口 IN1 <-- STM32 TIM1_CH1 IN2 <-- STM32 TIM1_CH2 PWM <-- STM32 TIM1_CH1N (互补PWM)保护电路设计要点:
- 每个电机端口并联100nF陶瓷电容+100uF电解电容
- VM引脚就近放置10uF低ESR钽电容
- 电机线缆采用双绞线减少EMI
2.3 电流检测设计
为实现电流闭环控制,在电机回路串联0.1Ω/1%精度采样电阻:
- 采样电压经STM32内置OPAMP放大10倍
- 输出连接至ADC1_IN5(PA0引脚)
- 同时连接COMP1用于过流保护
校准方法:
- 在静止状态下读取ADC基准值
- 施加已知负载记录ADC变化量
- 通过最小二乘法拟合电流-ADC曲线
3. 软件控制策略实现
3.1 PWM生成配置
使用STM32G431RB的高级定时器TIM1生成PWM:
// TIM1初始化 htim1.Instance = TIM1; htim1.Init.Prescaler = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 159; // 20kHz PWM (170MHz/160) htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim1); // PWM通道配置 sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 80; // 初始占空比50% sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);3.2 电机控制状态机
设计五状态控制模型:
- 初始化状态:所有IO置低,TC78H660FTG进入待机模式
- 正转状态:IN1=H, IN2=L, PWM使能
- 反转状态:IN1=L, IN2=H, PWM使能
- 刹车状态:IN1=H, IN2=H
- 故障状态:触发过流或过热保护时进入
状态转换触发条件:
- 正/反转命令:通过UART或按键输入
- 堵转检测:电流持续>1.8A达500ms
- 温度保护:NTC检测>85℃
3.3 速度闭环控制
采用增量式PID算法:
typedef struct { float Kp, Ki, Kd; float prev_error; float integral; } PID_Controller; float PID_Update(PID_Controller* pid, float error, float dt) { float derivative = (error - pid->prev_error) / dt; pid->integral += error * dt; pid->prev_error = error; // 抗积分饱和 if(pid->integral > 1000) pid->integral = 1000; if(pid->integral < -1000) pid->integral = -1000; return pid->Kp*error + pid->Ki*pid->integral + pid->Kd*derivative; }速度检测方法:
- 对于带编码器的电机:通过TIM2编码器接口计数
- 对于无编码器电机:通过反电动势估算(需禁用PWM时采样)
4. 系统优化与实测性能
4.1 效率提升措施
死区时间优化:
- 实测显示150ns死区时间可平衡开关损耗和交叉导通
- 通过TIM1的BDTR寄存器配置:
TIM1->BDTR |= (9 << TIM_BDTR_DTG_Pos); // 150ns @170MHz
同步整流控制:
- 在PWM关断期间自动切换MOSFET方向
- 通过TC78H660FTG的STBY引脚实现快速切换
动态PWM频率调整:
- 低速时用10kHz PWM减少开关损耗
- 高速时用20kHz PWM降低噪声
4.2 实测性能对比
| 指标 | 传统L298N方案 | TC78H660方案 | 提升幅度 |
|---|---|---|---|
| 空载电流 | 120mA | 35mA | 70.8% |
| 满载效率 | 78% | 92% | +14pp |
| 温升(1A负载) | 45℃ | 22℃ | 51% |
| PWM响应时间 | 1.2ms | 0.3ms | 75% |
4.3 典型问题解决
问题1:电机启动时偶尔出现异常振动
- 原因:PWM占空比从0%突变导致
- 解决:采用软启动策略,占空比从10%开始以5%/ms速率递增
问题2:高速运行时电流采样不准
- 原因:PWM噪声干扰ADC采样
- 解决:
- 在采样电阻两端加RC滤波(1kΩ+100nF)
- 使用定时器触发ADC在PWM中点采样
问题3:TC78H660FTG偶尔进入保护
- 排查:发现VM电源走线过长导致电压跌落
- 改进:在芯片VM引脚增加220uF电解电容
5. 进阶应用扩展
基于此基础框架,还可实现以下高级功能:
位置伺服控制:
- 结合AS5600磁编码器实现±1°精度
- 采用位置-速度-电流三环控制
网络化控制:
- 通过STM32的CANFD接口组网
- 实现多电机同步控制(如机械臂应用)
能量回馈:
- 在刹车时通过Boost电路将能量回充至电源
- 需修改驱动电路增加MOSFET和电感
这个方案经过三个月的实际运行测试,在智能窗帘、医疗设备等多个项目中表现稳定。特别是在低噪声要求场景下,其优化的PWM控制算法使得电机运行几乎无声,这是传统驱动方案难以达到的。