3. 案例3

案例3:利用示波器观察电机电流波形诊断堵转 学习卡片

任务定义

本案例针对直流有刷电机在运行中因机械卡滞导致的堵转故障,要求完成以下闭环:搭建一个可复现的电机电流采样与堵转诊断实验环境,通过示波器观察正常启动与堵转时的电流波形差异,识别堵转特征(电流急剧上升并维持在高位),并实现一种基于电流阈值的控制策略调整——检测到堵转后自动切断PWM输出,避免持续过流损坏电机与驱动电路。

实验系统构成

系统由四部分组成:STM32F103微控制器(产生PWM并执行堵转保护逻辑)、MOSFET全桥驱动电路、直流有刷电机(额定电压12V,堵转电流约2A)、以及电流采样电阻(0.1Ω)与示波器探头。电流采样电阻串联在电机低端与地之间,示波器使用差分探头或单端探头测量采样电阻两端电压,通过欧姆定律换算为电流值。

STM32F103 PWM输出 PA0 ADC采样 PA1 MOSFET H桥 IR2104驱动 Vgs=12V 直流电机 12V 1A R=0.1Ω 示波器 CH1: 电流波形 PWM 电机供电 电流路径 采样电压 → ADC CH1探头

电流波形特征与堵转识别

正常启动时,电机电流波形呈现典型的指数上升过程:启动瞬间电流从0快速上升至启动峰值(约1.5~2倍额定电流),随后在数百毫秒内衰减至额定电流附近(约1A),波形呈“尖峰后回落”形态。堵转发生时,电机转子无法转动,反电动势为零,电流将直接上升至堵转电流(由电源电压除以电枢电阻决定,本系统约2A),并持续维持在该高位不回落。示波器上可清晰观察到:正常启动波形有衰减过程,而堵转波形是一条平坦的高电平直线。

控制策略调整实现

在STM32固件中实现堵转保护逻辑:通过ADC以1kHz采样率采集采样电阻电压,换算为电流值。当检测到电流连续50ms超过1.8A(堵转阈值的90%),判定为堵转状态,立即将PWM占空比置为0,切断电机供电,并置位故障标志。故障解除需人工复位或等待3秒后自动尝试恢复。

// 堵转检测与保护 - 基于STM32 HAL库
#include "stm32f1xx_hal.h"

#define PWM_TIM        TIM3
#define PWM_CHANNEL    TIM_CHANNEL_1
#define SENSE_ADC      ADC1
#define SENSE_CHANNEL  ADC_CHANNEL_1   // PA1
#define STALL_CURRENT  1.8f            // 堵转电流阈值(A)
#define STALL_TIME_MS  50              // 持续判定时间(ms)
#define NOMINAL_DUTY   50              // 正常运行占空比(%)

ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim3;
uint8_t stall_flag = 0;

float read_motor_current(void) {
    HAL_ADC_Start(&hadc1);
    if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
        uint32_t adc_val = HAL_ADC_GetValue(&hadc1);
        // 采样电阻0.1Ω, ADC参考3.3V, 12位分辨率
        // 电压 = adc_val * 3.3 / 4096, 电流 = 电压 / 0.1
        return (float)adc_val * 3.3f / 4096.0f / 0.1f;
    }
    return 0.0f;
}

void stall_protection_task(void) {
    static uint32_t stall_counter = 0;
    float current = read_motor_current();

    if (current > STALL_CURRENT) {
        stall_counter++;
        if (stall_counter >= STALL_TIME_MS) {  // 1ms周期调用
            // 堵转确认 - 切断PWM
            __HAL_TIM_SET_COMPARE(&htim3, PWM_CHANNEL, 0);
            stall_flag = 1;
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);  // 故障LED
        }
    } else {
        stall_counter = 0;
        if (stall_flag == 0) {
            // 正常运行 - 恢复设定占空比
            __HAL_TIM_SET_COMPARE(&htim3, PWM_CHANNEL, NOMINAL_DUTY);
        }
    }
}

// 1ms定时器中断回调中调用 stall_protection_task()
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if (htim == &htim3) {
        stall_protection_task();
    }
}

示波器观测与验证方法

按以下步骤进行实验验证:

  1. 将示波器CH1探头连接至采样电阻两端,设置垂直刻度200mV/div(对应2A/div),水平刻度100ms/div,触发电平设为500mA上升沿触发。
  2. 给电机空载启动,观察并记录正常启动电流波形,确认存在“尖峰后回落”特征。
  3. 用手或机械夹具阻止电机轴转动(模拟堵转),再次启动电机,观察电流波形是否持续维持在高位不回落。
  4. 验证保护动作:堵转后约50ms,PWM输出被切断,电流波形降至0,故障LED点亮。

判定标准:正常启动波形峰值约1.5~2A并在0.5s内回落至1A附近;堵转时电流上升至约2A并保持平坦;保护动作后电流在50ms内降为0。若示波器观察到上述三种状态,则诊断与保护逻辑验证通过。

关键参数与注意事项

采样电阻功率需满足P=I²R=2²×0.1=0.4W,选用1W以上封装。示波器探头地线应尽量短接至采样电阻地端,避免引入开关噪声。PWM频率设为20kHz,超出音频范围且利于电流连续。堵转阈值需根据实际电机参数调整,取额定电流的1.5~2倍较为合适,本案例电机额定1A,阈值设为1.8A。