首先,我们需要知道BLDC是什么,BLDC指的是无刷直流电机,无刷直流电机(Brushless Direct Current Motor, BLDCM)克服了有刷直流电机的先天性缺陷,以电子换向器取代了机械换向器,所以无刷直流电机既具有直流电机良好的调速性能等特点,又具有交流电机结构简单、无换向火花、噪音小,寿命长,运行可靠和易于维护等优点。无刷直流电机的实质是直流电源输入,采用电子逆变器将直流电转换为交流电,有转子位置反馈的三相交流永磁同步电机。
电机工作的基本原理
右手螺旋定则,用右手握住通电螺线管,使四指弯曲与电流方向一致,那么大拇指所指的那一端就是通电螺旋管的N极。
PC8 | PWDT_IN0 |
PC7 | PWDT_IN1 |
PC6 | PWDT_IN2 |
VR:AD调速
PC1 | ADC_IN9 |
电机驱动IO引脚
PB5 | PWM1_CH0 |
PB4 | PWM1_CH1 |
PB8 | PWM1_CH2 |
PB7 | PWM1_CH3 |
PB10 | PWM1_CH4 |
PB9 | PWM1_CH5 |
电机驱动程序
void BLDC_PhaseSwitch(int16_t motorDir, uint8_t hallStatus)
{
if(motorDir == 1)
{
switch (hallStatus)
{
case 5://B+,A-
BLDC_PwmUpdate(PHASEB, PHASEA);
break;
case 1: //B+,C-
BLDC_PwmUpdate(PHASEB, PHASEC);
break;
case 3: //A+,C-
BLDC_PwmUpdate(PHASEA, PHASEC);
break;
case 2:// A+,B-
BLDC_PwmUpdate(PHASEA, PHASEB);
break;
case 6: //C+,B-
BLDC_PwmUpdate(PHASEC, PHASEB);
break;
case 4://C+,A-
BLDC_PwmUpdate(PHASEC, PHASEA);
break;
default:
BLDC_Stop();
break;
}
}
else if(motorDir == 2)
{
switch (hallStatus)
{
case 5://A+,B-
BLDC_PwmUpdate(PHASEA, PHASEB);
break;
case 1: //C+,B-
BLDC_PwmUpdate(PHASEC, PHASEB);
break;
case 3: //C+,A-
BLDC_PwmUpdate(PHASEC, PHASEA);
break;
case 2:// B+,A-
BLDC_PwmUpdate(PHASEB, PHASEA);
break;
case 6: //B+,C-
BLDC_PwmUpdate(PHASEB, PHASEC);
break;
case 4://A+,C-
BLDC_PwmUpdate(PHASEA, PHASEC);
break;
default:
BLDC_Stop();
break;
}
}
}
main.c文件
int main(void)
{
GPIO_LedInit();
MC_PWDT1_Init();
CTU_Config();
ADC_init();
TIMER_PrdInit();
BLDC_PWM_Init();
//发波调试
g_startupPwmRatio = ratio_q12(10);//30
BLDC_SetMotorSpeed(g_startupPwmRatio);
g_hallStatus = PWDT_GetHallStatus(PWDT1) & 0x07;
BLDC_PhaseSwitch(1,g_hallStatus);
while(1)
{
GPIO_ToggleLedPrd();
if(g_scanKeyTime >= SCAN_KEY_INTVL)
{
g_scanKeyTime = 0;
AdjustPwmVal = (g_ADCValueBuffer[0]*100)>>12;//AD调速
if(AdjustPwmVal != AdjustPwmValpre)
{
if(AdjustPwmVal > 80)
{
AdjustPwmVal = 80;
}
else if(AdjustPwmVal < 8)
{
AdjustPwmVal = 8;
}
g_startupPwmRatio = ratio_q12(AdjustPwmVal);//30
BLDC_SetMotorSpeed(g_startupPwmRatio); //设置速度
}
}
if(g_hallStatus != g_hallStatuspre)
{
BLDC_PhaseSwitch(1,g_hallStatus);//换相
g_hallStatuspre = g_hallStatus;
}
}
}
编译工程,下载程序运行可直以看到电机成功转动起来,用示波器可以看到三相线上的输出电压波形图如下:
程序在此
请看调速波形动态图,哈哈
本帖最后由 仙景 于 2020-11-24 10:58 编辑
一看就是专业搞电机的!
引用: w494143467 发表于 2020-11-24 13:36 一看就是专业搞电机的!
版主是做什么的,电机控制也是一个方向
引用: freebsder 发表于 2020-11-24 13:10 厉害了
简单控制,简单运行
引用: 仙景 发表于 2020-11-26 08:57 版主是做什么的,电机控制也是一个方向
我是搞智能穿戴设备的,偶尔玩玩物联网。
引用: w494143467 发表于 2020-11-26 09:08 我是搞智能穿戴设备的,偶尔玩玩物联网。
那你可以参加论坛的物联网大赛,简直就是为你订做的
引用: 仙景 发表于 2020-11-26 09:13 那你可以参加论坛的物联网大赛,简直就是为你订做的
哈哈,参加了,就是不知道能不能过申请哈~
楼主有没有了解过dsp28027+drv8305的驱动方法呀,急求!
引用: MianQi 发表于 2021-3-18 09:14 为什么6个管子都是NPN型,而不是一半NPN一半PNP呢?“互补”,在哪里体现呢?
互补是指PWM波形,不是只MOS管。MOS管用NPN和PNP都行,PNP内阻大一些,热量大点,NPN就是要升压。