当前位置: 首页 > news >正文

电机驱动基础

电机驱动基础

  • 一,电机的精确控制
  • 二,PWM基础
    • 1,占空比(Duty Cycle):
    • 2,PWM频率:
    • 3,STM32中PWM实现
    • 4,PWM参数选择技巧
  • 三,电机驱动系统
    • 1,电机驱动系统的组成
    • 2,驱动芯片的必要性
  • 四,开环控制和闭环控制
    • 1,开环控制 - 简单但不精确
    • 2,闭环控制 - 复杂但精确

一,电机的精确控制

电机控制技术让我们能够将数字世界的"想法"转化为物理世界的"行动"。
观察一下你身边的智能设备(扫地机器人、无人机、3D打印机等),想想它们是如何实现精确运动控制的?
扫地机器人:使用编码器电机控制移动,通过轮速差实现转向,激光雷达配合电机实现精确导航和路径规划。
无人机:四个无刷电机分别控制,通过调节不同电机的转速实现前后左右和旋转运动,电机响应速度直接影响飞行稳定性。
3D打印机:X、Y、Z轴使用步进电机实现精确定位,挤出机使用直流电机控制材料供给,每一层的精度都依赖电机的准确控制。
核心作用:电机控制技术是这些设备的"肌肉系统",将数字指令转化为精确的物理运动,是实现智能化的关键技术基础。

二,PWM基础

PWM(脉冲宽度调制)是一种通过改变脉冲宽度来控制平均功率的技术。在电机控制中,PWM是实现速度调节的核心方法。

1,占空比(Duty Cycle):

高电平时间占整个周期的百分比
0% 占空比 = 电机停止
50% 占空比 = 电机半速运行
100% 占空比 = 电机全速运行

2,PWM频率:

PWM信号的重复频率
太低(<100Hz):电机会产生明显的振动和噪音
适中(1-20kHz):平衡控制精度和开关损耗
太高(>50kHz):开关损耗增大,效率降低

3,STM32中PWM实现

// 1. 定时器PWM初始化(在CubeMX中配置后自动生成)
void MX_TIM1_Init(void) {htim1.Instance = TIM1;htim1.Init.Prescaler = 72-1;        // 72MHz/72 = 1MHzhtim1.Init.CounterMode = TIM_COUNTERMODE_UP;htim1.Init.Period = 1000-1;         // 1MHz/1000 = 1kHz PWMhtim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;HAL_TIM_PWM_Init(&htim1);
}// 2. 启动PWM输出
void Motor_PWM_Start(void) {HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}// 3. A4950电机驱动控制函数(-100到+100对应反转到正转)
int8_t Motor_SetSpeed(Motor_t* motor, int8_t speed) {// 参数和速度范围检查if (motor == NULL || speed < -100 || speed > 100) {return -1;  // 参数错误}// A4950控制逻辑:if (speed == 0) {// 停止:DIR=0, PWM=0HAL_GPIO_WritePin(motor->hw.dir_port, motor->hw.dir_pin, GPIO_PIN_RESET);__HAL_TIM_SET_COMPARE(motor->hw.htim, motor->hw.channel, 0);} else if (speed > 0) {// 正转:DIR=0, PWM=速度值HAL_GPIO_WritePin(motor->hw.dir_port, motor->hw.dir_pin, GPIO_PIN_RESET);__HAL_TIM_SET_COMPARE(motor->hw.htim, motor->hw.channel, speed);} else {// 反转:DIR=1, PWM=100+负数值HAL_GPIO_WritePin(motor->hw.dir_port, motor->hw.dir_pin, GPIO_PIN_SET);__HAL_TIM_SET_COMPARE(motor->hw.htim, motor->hw.channel, 100 + speed);}return 0;  // 成功
}

4,PWM参数选择技巧

频率选择:电机PWM频率通常选择1-20kHz,既避免听觉噪音,又保证控制精度
分辨率选择:1000级分辨率(0-999)通常足够,提供0.1%的控制精度
死区时间:对于H桥驱动,需要设置死区时间防止上下管同时导通

为什么PWM能够控制电机速度?如果PWM频率太低会发生什么? 试想一下,如果用手动开关来快速开关电机电源,会是什么效果?
PWM控制电机速度的原理:
PWM通过快速开关电源,电机感受到的是平均电压。占空比越大,平均电压越高,电机转速越快。这就像调节水龙头,虽然水压固定,但通过控制开关时间比例来调节平均流量。
PWM频率太低的后果:
• 电机会产生明显的振动和噪音(能听到"嗡嗡"声)
• 转速不稳定,出现明显的脉动
• 电机发热增加,效率降低
• 控制精度下降
手动开关的效果:
如果用手动开关,由于人手速度有限(最快几Hz),电机会出现明显的启停,无法形成连续转动,就像老式电风扇档位切换时的顿挫感。

三,电机驱动系统

1,电机驱动系统的组成

MCU(微控制器)- 大脑
负责决策和控制逻辑,生成PWM信号,处理传感器反馈。 就像人的大脑,决定要做什么动作。

驱动芯片 - 肌肉
将MCU的弱电信号放大为强电信号,为电机提供足够的电流。 就像人的肌肉,将神经信号转化为实际的力量。

电机 - 执行器
将电能转化为机械能,产生旋转运动。 就像人的手脚,执行具体的动作。

2,驱动芯片的必要性

MCU的输出能力:电压3.3V,电流几十毫安
电机的需求:电压6-12V,电流几百毫安到几安培
这就像用小水管的水压去推动大水轮 - 力量不够!
驱动芯片就是"水泵",将小水流变成大水流。

常见驱动芯片对比:

芯片型号最大电流工作电压特点
TB6612FNG1.2A2.7-5.5V小型项目首选,效率高
L298N2A5-35V经典选择,应用广泛
DRV88331.5A2.7-10.8V集成度高,体积小
// A4950ELJTR-T引脚连接(双电机驱动)
STM32引脚    ->  A4950引脚    ->  功能说明
PE11(PWM)    ->  PWM1         ->  电机1的PWM速度控制
PE9          ->  DIR1         ->  电机1方向控制
PE14(PWM)    ->  PWM2         ->  电机2的PWM速度控制
PE13         ->  DIR2         ->  电机2方向控制
3.3V         ->  VCC          ->  逻辑电源
GND          ->  GND          ->  公共地
7.4V         ->  VM           ->  电机电源A4950引脚连接
// A4950控制逻辑(快慢衰减模式)
DIR=0, PWM=速度值     ->  正转(慢衰减)
DIR=1, PWM=100+负值   ->  反转(快衰减)
DIR=0, PWM=0          ->  停止

如果直接用MCU的GPIO引脚连接电机会发生什么? 为什么A4950只需要一个方向控制引脚(DIR)而不是两个
直接用GPIO连接电机的后果:
• 电流不足:STM32的GPIO最大输出电流只有25mA,而电机需要几百毫安甚至几安培
• 电压不匹配:GPIO输出3.3V,电机通常需要6-12V
• 损坏MCU:电机的反电动势可能损坏GPIO引脚
• 无法反转:GPIO只能输出单向电压,无法实现电机反转
A4950的单引脚控制优势:
A4950采用先进的快慢衰减控制模式:
• DIR=0:慢衰减模式,适合正转和停止,运行平稳
• DIR=1:快衰减模式,适合反转,制动效果好
这比传统的双引脚H桥控制更简单,同时避免了直通风险,提高了可靠性。

四,开环控制和闭环控制

1,开环控制 - 简单但不精确

优点:结构简单,成本低,响应快
缺点:精度差,易受干扰,无法自我纠正
适用场景:精度要求不高的场合,如风扇调速

// 开环控制:直接设置PWM值
void OpenLoop_Control(void) {// 设置电机速度为50%Motor_SetSpeed(500);  // 0-1000对应0%-100%// 问题:不知道电机实际转速是多少// 负载变化时,实际转速会变化// 电池电压下降时,转速也会下降
}

2,闭环控制 - 复杂但精确

优点:精度高,抗干扰能力强,能自我纠正
缺点:结构复杂,成本高,需要传感器
适用场景:精度要求高的场合,如机器人定位

// 闭环控制:根据反馈调节PWM值
void ClosedLoop_Control(void) {int16_t target_speed = 1000;  // 目标转速:1000 RPMint16_t actual_speed = Encoder_GetSpeed();  // 读取实际转速int16_t error = target_speed - actual_speed;  // 计算误差// 根据误差调节PWM(简单比例控制)static uint16_t pwm_value = 500;if (error > 0) {pwm_value += 10;  // 实际转速低,增加PWM} else if (error < 0) {pwm_value -= 10;  // 实际转速高,减少PWM}// 限制PWM范围if (pwm_value > 1000) pwm_value = 1000;if (pwm_value < 0) pwm_value = 0;Motor_SetSpeed(pwm_value);
}

踩油门踏板是开环控制还是闭环控制? 定速巡航功能是开环控制还是闭环控制?为什么?
踩油门踏板:开环控制
• 司机踩油门只是给发动机一个"期望输出"
• 不知道车辆实际速度是多少
• 上坡时需要司机主观判断加大油门
• 没有自动反馈调节机制
定速巡航:闭环控制
• 设定值:司机设定目标速度(如120km/h)
• 传感器:车速传感器实时检测当前速度
• 控制器:ECU比较目标速度和实际速度
• 执行器:自动调节油门开度
• 反馈:持续监控速度变化并调
这就是为什么定速巡航能在上坡下坡时自动保持恒定车速的原因!

http://www.lqws.cn/news/509275.html

相关文章:

  • Rust 项目实战:多线程 Web 服务器
  • 第1篇:环境搭建与第一个Gin应用
  • 数字图像处理——滤波器核(kernel)
  • 构建你的 AI 模块宇宙:Spring AI MCP Server 深度定制指南
  • macOS 26 Tahoe
  • 2025年应用材料、机械与制造工程国际会议(ICAMMME 2025)
  • Starrocks 低基数全局字典优化
  • 桌面小屏幕实战课程:DesktopScreen 8 非易失性存储器NVS
  • 市面上重要的AI开发工具和框架
  • C++038(指针)
  • ci | cd
  • OpenHarmony如何获取app_signature证书指纹
  • jenkinsfile调用groovy
  • 如何为虚拟机上的 Manjaro Linux启用 VMware 拖放功能
  • API测试工具Parasoft SOAtest:应对API变化,优化测试执行
  • 简单项目 esp8266 红外接收 2025年6月24日21:35:32
  • JavaScript 存储对象 sessionStorage (会话存储) 和 localStorage(本地存储)
  • 正点原子——直流无刷电机-霍尔传感基本实现流程
  • WEB安全--Java安全--jsp webshell免杀1
  • leetcode114-二叉树展开为链表
  • 人机交互动画制作新突破!文本驱动扩散框架HOIDiNi:一句话驱动虚拟人高精度操作物体。
  • 美团小程序闪购 mtgsig1.2
  • 关于 Babel 编译后的 Generator 状态机结构解析
  • 读取ILA数据进行MATLAB分析
  • 软件行业如何权衡“统一规范“与“灵活创新“?
  • Vue.js 列表过滤实现详解(watch和computed实现)
  • PYTHON从入门到实践4-数据类型
  • 原子操作(CAS)
  • OSS跨区域复制灾备方案:华东1到华南1的数据同步与故障切换演练
  • 嵌入式开发学习日志Day8(ARM体系架构——按键、蜂鸣器及中断)