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

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


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

PWM频率 = 170MHz / (8500*2) = 10kHz
将TIM1的PWM生成模式改为模式2,计数器的值大于比较捕获寄存器CCR值时输出有效电平。

实现代码
添加开启定时器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;
}

浙公网安备 33010602011771号