地瓜patch 发表于 2025-8-10 20:36

电机pwm调压调速

PWM(脉宽调制)调压调速是直流电机控制中最常用的方法之一,它通过快速开关电源来控制电机的平均电压,从而实现调速。
PWM调速工作原理:通过改变脉冲宽度(占空比)来调节电机的平均电压
占空比 = 导通时间 / 周期时间
平均电压 = 电源电压 × 占空比
PWM调速优点:效率高(开关损耗小);调速范围宽;控制简单;可实现数字控制。
PWM调速实现方式主要有
1. H桥PWM控制,可实现正反转和调速,四种工作模式:正向驱动,反向驱动,正向制动,反向制动
2. 单极性PWM控制,一个开关管工作于PWM模式,另一个常通适用于单向调速
3. 双极性PWM控制,两个开关管同时工作于PWM模式,可快速响应,减少电流波动
PWM频率选择:一般1kHz-20kHz,高频可减少噪声和电流波动,但开关损耗增加
占空比调节:0%-100%可调,实际应用中需考虑死区时间
实际应用考虑因素
电机特性匹配:启动电流限制,反电动势处理,
保护电路:过流保护,过压保护,温度保护
滤波电路:减少PWM谐波对电源的干扰
控制算法:开环控制(简单应用),闭环控制(带速度/位置反馈)
典型应用电路
[电源] → → [驱动电路] → → [电机]
                ↑
         [控制信号]

基础代码
#define MOTOR_PIN P1_0
unsigned char pwm_duty = 50;// 占空比 0-100
unsigned char pwm_counter = 0;
// 定时器0初始化
void timer0_init() {
    TMOD |= 0x01;   // 设置定时器0为模式1
    TH0 = 0xFF;   // 设置定时初值
    TL0 = 0x9C;   // 约100us中断一次
    ET0 = 1;      // 开启定时器0中断
    EA = 1;         // 开启总中断
    TR0 = 1;      // 启动定时器0
}

// 定时器0中断服务函数
void timer0_isr() interrupt 1 {
    TH0 = 0xFF;   // 重新加载初值
    TL0 = 0x9C;   
    pwm_counter++;
    if(pwm_counter >= 100) {
      pwm_counter = 0;
    }   
    if(pwm_counter < pwm_duty) {
      MOTOR_PIN = 1;// 开启电机
    } else {
      MOTOR_PIN = 0;   // 关闭电机
    }
}


带PID控制的PWM调速
#define MOTOR_PIN P1_0
#define ENCODER_PIN P3_2// 编码器输入
unsigned char pwm_duty = 0;
unsigned int actual_speed = 0;
unsigned int target_speed = 1000;// 目标转速(根据编码器脉冲计算)
// PID参数
float Kp = 0.5, Ki = 0.01, Kd = 0.1;
float error = 0, last_error = 0, integral = 0, derivative = 0;
// 定时器初始化
void timer_init() {
    // 初始化代码...
}
// 编码器计数中断
void encoder_isr() interrupt 0 {
    actual_speed++;// 简单计数,实际应根据时间计算转速
}
// PID计算
void pid_control() {
    last_error = error;
    error = target_speed - actual_speed;
   
    integral += error;
    if(integral > 100) integral = 100;
    if(integral < -100) integral = -100;
   
    derivative = error - last_error;
   
    pwm_duty = Kp * error + Ki * integral + Kd * derivative;
   
    if(pwm_duty > 100) pwm_duty = 100;
    if(pwm_duty < 0) pwm_duty = 0;
   
    actual_speed = 0;// 重置计数
}



注意事项
PWM频率选择要合适,通常1kHz-20kHz之间
电机启动时需要较大电流,可能需要特殊处理
加入死区时间防止H桥上下管直通
实际项目中需要考虑电机保护(过流、过热等)


王栋春 发表于 2025-8-10 21:55

坛友是手机端发帖吗?为何我这无法用手机端发帖。

地瓜patch 发表于 2025-8-11 08:53

王栋春 发表于 2025-8-10 21:55
坛友是手机端发帖吗?为何我这无法用手机端发帖。

坛友,用电脑啊
页: [1]
查看完整版本: 电机pwm调压调速