电机-3-[无刷直流电机]六步换相控制实验
控制信号以及端口属性选择
BLDC六步换相驱动用到的信号有:
1)INU、INV、INW:控制三组MOS管开关
2)ENU、ENV、ENW:使能STSPIN830的三组MOS管
3)H1、H2、H3:HALL传感器接口
本次实验不需调速,INU/V/W没有用到PWM比较输出。直接在上一个实验工程上修改,HALL管脚无需修改。

配置工程
点击鼠标左键,将PA8,PA9,PA10,PB13,PB14,PB15设置为“GPI0-0UTPUT"

修改定时器2输入捕获中断回调函数,根据HALL值实现三组MOS管的六步换相控制:
switch(HALL)//逆时针旋转,注意用12伏供电,由于没有调速功能,24伏供电电机可能会发烫
{
case 5://电流C进A出
HAL_GPIO_WritePin(INU_GPIO_Port,INU_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(INW_GPIO_Port,INW_Pin,GPIO_PIN_SET);
AEN_BDN_CEN();
break;
case 4://电流C进B出
HAL_GPIO_WritePin(INW_GPIO_Port,INW_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(INV_GPIO_Port,INV_Pin,GPIO_PIN_RESET);
ADN_BEN_CEN();
break;
case 6://电流A进B出
HAL_GPIO_WritePin(INU_GPIO_Port,INU_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(INV_GPIO_Port,INV_Pin,GPIO_PIN_RESET);
AEN_BEN_CDN();
break;
case 2://电流A进C出
HAL_GPIO_WritePin(INU_GPIO_Port,INU_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(INW_GPIO_Port,INW_Pin,GPIO_PIN_RESET);
AEN_BDN_CEN();
break;
case 3://电流B进C出
HAL_GPIO_WritePin(INV_GPIO_Port,INV_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(INW_GPIO_Port,INW_Pin,GPIO_PIN_RESET);
ADN_BEN_CEN();
break;
case 1://电流B进A出
HAL_GPIO_WritePin(INV_GPIO_Port,INV_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(INU_GPIO_Port,INU_Pin,GPIO_PIN_RESET);
AEN_BEN_CDN();
break;
default:
break;
}
六步换相的三组MOS管使能控制代码:
void AEN_BEN_CDN(void)
{
HAL_GPIO_WritePin(ENU_GPIO_Port,ENU_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(ENV_GPIO_Port,ENV_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(ENW_GPIO_Port,ENW_Pin,GPIO_PIN_RESET);
}
void AEN_BDN_CEN(void)
{
HAL_GPIO_WritePin(ENU_GPIO_Port,ENU_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(ENV_GPIO_Port,ENV_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(ENW_GPIO_Port,ENW_Pin,GPIO_PIN_SET);
}
void ADN_BEN_CEN(void)
{
HAL_GPIO_WritePin(ENU_GPIO_Port,ENU_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(ENV_GPIO_Port,ENV_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(ENW_GPIO_Port,ENW_Pin,GPIO_PIN_SET);
}
注意这里有坑,启动之后转子并不会转动因为没有动,所以没有中断,没有中断就导致不会换相,这里拨动一些即可

浙公网安备 33010602011771号