好的!下面为你详细整理一份基于 DRV8870/AT8870 直流电机驱动芯片,结合 STM32CubeMX 配置,以及利用 PWM + DMA 实现可调速控制 的完整方案,包含硬件连接说明、CubeMX配置建议、驱动代码示例和关键点讲解,方便你快速上手开发。
直流电机驱动 — DRV8870/AT8870 【STM32CubeMX 配置 + 驱动代码 + PWM+DMA 可调速】
目录
- DRV8870/AT8870芯片简介
- 硬件连接说明
- STM32CubeMX配置建议
- PWM+DMA调速原理
- STM32驱动代码示例
- 调速示例说明
- 注意事项与拓展建议
1. DRV8870/AT8870芯片简介
- DRV8870 是德州仪器TI出品的一款高效、单通道直流电机驱动芯片
- 支持宽电压范围(6.5V~45V),最大输出电流可达3.6A
- 内置过流保护、过温保护、短路保护等
- 通过输入引脚控制电机的启停和转向(IN1、IN2)
- 通过PWM输入控制电机转速
2. 硬件连接说明
DRV8870引脚 | STM32连接 | 说明 |
---|---|---|
VM | 电机电源 | 6.5V~45V |
GND | GND | 公共地 |
OUT1, OUT2 | 接电机两端 | 电机接这两个引脚 |
IN1 | STM32 PWM输出 | 控制电机方向和PWM |
IN2 | STM32 GPIO | 控制电机方向 |
nFAULT | STM32 GPIO(可选) | 监测故障信号 |
- 电机两端连接 OUT1 和 OUT2
- 通过 IN1 和 IN2 控制转向
- PWM信号通过 IN1 进行调速控制
3. STM32CubeMX配置建议
- 定时器配置:
- 选择一个支持PWM输出的定时器(如TIM2)
- 配置一个PWM通道,频率根据电机特性,一般1kHz~20kHz
- 使能DMA请求(用于PWM占空比动态调整)
- GPIO配置:
- IN2 配置为普通GPIO输出,用于控制电机正反转
- nFAULT 可配置为外部中断输入(如果需要监控故障)
- DMA配置:
- 关联PWM定时器通道对应的CCR寄存器,配置内存到外设传输
4. PWM+DMA调速原理
- PWM 占空比决定电机的实际平均供电电压,进而控制转速
- DMA自动更新PWM占空比寄存器,减少CPU负载,实现平滑转速控制
- 通过预设占空比数组,DMA循环传输,实现动态调速效果
5. STM32驱动代码示例
#include "main.h"
TIM_HandleTypeDef htim2;
DMA_HandleTypeDef hdma_tim2_ch1;
// 模拟占空比数组,0~100%范围
uint32_t pwmDutyCycle[5] = {0, 250, 500, 750, 1000}; // 对应占空比0%,25%,50%,75%,100%
// 初始化PWM
void PWM_Init(void) {
HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, pwmDutyCycle, 5);
}
// 设置电机转向,IN2控制
void Motor_SetDirection(uint8_t dir) {
if(dir == 0) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET); // IN2=0,方向A
} else {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); // IN2=1,方向B
}
}
// DMA传输完成回调(循环模式下,每5个占空比轮流更新)
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
// 可加业务逻辑,如调速调整
}
// 主循环示例
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_TIM2_Init();
PWM_Init();
Motor_SetDirection(0); // 设置方向
while (1) {
// 主循环可根据业务需求调整pwmDutyCycle数据,DMA会自动刷新
}
}
6. 调速示例说明
- PWM频率由 TIM2 的
Prescaler
和Period
决定,比如:- 定时器时钟 72MHz
- 预分频器 Prescaler = 71,计数频率 = 1MHz
- 自动重载寄存器 Period = 999,PWM频率 = 1kHz
pwmDutyCycle
数组中,值范围[0, 1000]
对应占空比0%
~100%
- 通过DMA循环传输占空比数组,电机转速实现变化
7. 注意事项与拓展建议
- 电机电源与STM32地线必须共地,避免地环路
- DRV8870输入信号电压需符合芯片要求(一般3.3V MCU兼容)
- 过流保护和散热设计不可忽略
- DMA使用循环模式时,注意数据更新的同步问题
- 可添加故障检测和限流反馈,提升可靠性
发表回复