我使用 STM32F103 驱动一个无刷电机,
首先通过短时间的定向电流确认UVW 和霍尔的关系
Tim8Drv0:U+V- 霍尔:6
Tim8Drv1:U+W- 霍尔:4
Tim8Drv2:V+W- 霍尔:5
Tim8Drv3:V+U- 霍尔:1
Tim8Drv4:W+U- 霍尔:3
Tim8Drv5:W+V- 霍尔:2
做出一个顺时针驱动表,得到每个霍尔信号往前两步获得驱动信号:
const pMDrvFun DrvATab[]={
NULL,
Tim8Drv5, //霍尔信号1
Tim8Drv1, //霍尔信号2
Tim8Drv0, //霍尔信号3
Tim8Drv3, //霍尔信号4
Tim8Drv4, //霍尔信号5
Tim8Drv2, //霍尔信号6
NULL,
};
驱动代码如下
[url=]复制[/url]
void MotorRun(INT16U pwm)
{
static INT8U hallbak;
INT8U hallcur;
hallcur=(GPIOB->IDR)&0x07;
if(hallcur!=hallbak && hallcur!=0 && hallcur!=7)
{
hallbak=hallcur;
DrvATab[hallcur](pwm);
}
}
这个速度 能达到 880rpm
我根据这个表 做电机反转,pwm的载波都是一致的
const pMDrvFun DrvBTab[]={
NULL,
Tim8Drv1, //霍尔信号1
Tim8Drv3, //霍尔信号2
Tim8Drv2, //霍尔信号3
Tim8Drv5, //霍尔信号4
Tim8Drv0, //霍尔信号5
Tim8Drv4, //霍尔信号6
NULL,
};
得到的转速是 440rpm
修改反转表
const pMDrvFun DrvCTab[]={
NULL,
Tim8Drv2, //霍尔信号1
Tim8Drv4, //霍尔信号2
Tim8Drv3, //霍尔信号3
Tim8Drv0, //霍尔信号4
Tim8Drv1, //霍尔信号5
Tim8Drv5, //霍尔信号6
NULL,
};
得到的转速也是 440rpm 附近,而且C表噪声比B表大
|