电机-4-[无刷直流电机]速度开环控制实验

PWM调速

把连续的开通转变为开/关交替的PWM形式,来实现直流无刷电机的调速控制。CA、CB、AB、AC、BC、BA
image

因为需要调速,INU、INV、INW需要设置为PWM比较输出。修改PA8,PA9,PA10管脚,修改INU、INV、INW的属性为TIM_CH1,TIM_CH2,TIM_CH3。注意HALL1/2/3及使能信号ENU/V/W不用修改。
image

image

配置时钟

TIM1设置:Clock Source选择内部时钟,通道1-3选择PWM输出。配置定时器TIM1的PWM输出为中心对称模式,预分频系数(PSC)为0,计数周期(ARR)为8500。

image

PWM频率 = 170MHz / (8500*2) = 10kHz

将TIM1的PWM生成模式改为模式2,计数器的值大于比较捕获寄存器CCR值时输出有效电平。
image

实现代码

添加开启定时器1三个PWM通道输出的语句:

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);

添加AD采样并给pwm_value赋值的代码,pwm_value用来调节定时器的PWM占空比,从而调节速度:

HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,10);
adc value=HAL ADC GetValue(&hadc1);
HAL_Delay(10);
pwm value=adc value*2;	// 这里是为了满足pwm占空比的满量程

修改定时器2输入捕获中断回调函数根据霍尔传感器反映的转子位置,分别使能和关闭对应的相,并通过定时器的CCR寄存器设置占空比,实现六步换相控制中的速度调节:

switch(HALL)
{
    case 5://电流C进A出
        TIM1->CCR1=8500;//A相低电平
        TIM1->CCR3=pwm_value;
        AEN_BDN_CEN();
        break;
    case 4://电流C进B出
        TIM1->CCR2=8500;//B相低电平
        TIM1->CCR3=pwm_value;
        ADN_BEN_CEN();
        break;
    case 6://电流A进B出
        TIM1->CCR2=8500;//B相低电平
        TIM1->CCR1=pwm_value;
        AEN_BEN_CDN();
        break;
    case 2://电流A进C出
        TIM1->CCR3=8500;//C相低电平
        TIM1->CCR1=pwm_value;
        AEN_BDN_CEN();
        break;
    case 3://电流B进C出
        TIM1->CCR3=8500;//C相低电平
        TIM1->CCR2=pwm_value;
        ADN_BEN_CEN();
        break;
    case 1://电流B进A出
        TIM1->CCR1=8500;//A相低电平
        TIM1->CCR2=pwm_value;
        AEN_BEN_CDN();
        break;
    default:
        break;
}
posted @ 2026-09-13 17:01  灵垚克府  阅读(4)  评论(0)    收藏  举报