本帖最后由 yinwuqing110 于 2021-2-17 16:33 编辑
大年初六,春节假期即将结束,重新拾起“ATC杯”项目,前面帖子也提到了该开发套件包含了控制板与电机驱动板,两块板通过IDC接口总线连接,在《ATC AC78xx Motor Demo Board Guide》文档中提及到电路供电部分需要注意。
正如上图所示,如果外部供电从低压驱动线路接口输入12V,则需要注意图中所指出的,两个焊点是否需要短路取决于控制板与功率管同时都要满足有电压输入。起初在淘宝上买了个带霍尔传感的无刷直流电机,只从J15端子输入12V,结果没有注意给控制板供12V电压,以为连接了JLink、调试串口就足够了,其实不然,控制板需要电机的反馈信号,必须有12V电压输入到控制板中。总而言之,对于该Demo板,其MCU控制板和功率板的12V输入只需接一路即可,如果电机额定电压为12V,那么将功率板中的功率管供电模式选择跳点(靠近D5)短接即可,不需要再额外供电;如果电机的额定电压大12V,那么功率管就需要单独供电;需要将功率板上的功率管供电模式选择跳点(靠近D5)断开,电源从J15端输入。
本人在淘宝上买了一个尼得科无刷直流电机,带霍尔接口,宝贝详情如下:
该电机的线路分布如下:
再结合Demo板与电机连接图与J5管脚分布原理图,依葫芦画瓢,便可知板上实物接线方法。
采用“motorapp20201104(AC781x)”例程,与大伙来温习一下四种方式的调试流程图。
带霍尔传感器BLDC调试流程图
无感BLDC调试流程图
带霍尔的FOC调试流程图
无感FOC调试流程图
由于使用的是带霍尔的BLDC小马达,因此如果采用工作模式二运行,在工程源码中需要打开有关BLDC的宏定义。
void App_BLDC_Hall(void)
{
DEBUGMSG(DEBUG_ZONE_INFO, ("[BLDC]App_BLDC_Hall\r\n"));
BLDC_GPIO_Initialize();
Motor_Encoder_Gpio_Init();
BLDC_TIM_Initialize();
BLDC_Parameters_Initialize();
BLDC_CTU_Init();
BLDC_ADC_Init();
#if (defined BLDC_HALL)
BLDC_Hall_PWDT_Initialize();
#elif (defined BLDC_ENCODER)
ENCODER_SpeedParameter_Initialize();
#endif
BLDC_PWM_Initialize();
PWM_ComplementaryModeConfig(PWM2, 0);
BLDC_DEBUG_Initialize();
#if (defined INIT_POS_CTRL)
BLDC_InitPos_Initialize();
#endif
while (1)
{
BLDC_Keys_Read();
if (g_bldc1msTime)
{
g_bldc1msTime = 0;
#if (defined BLDC_HALL)
BldcHallMachine();
#elif (defined BLDC_ENCODER)
BldcEncoderMachine();
#endif
}
}
}
在“bldc_app.h”中宏定义#define BLDC_HALL 1
在“bldc_app.c”文件中,在函数BLDC_Hall_Task()中稍作修改,即可改变其方波模式驱动电机。
void BLDC_Hall_Task(void)
{
int16_t tmpRpm = 0;
uint8_t tmpPhase = 0;
if (PWDT_GetOverflowFlag())
{
PWDT_ClrOverflowFlag();
g_motorFeedbackRpm = 0;
}
if (PWDT_GetReadyFlag())
{
PWDT_ClrReadyFlag();
tmpPhase = PWDT_GetHallStatus() & 0x07;
g_hallPhase[g_hallCnt] = g_currentPhase;
g_hallCnt ++;
if (g_hallCnt >= 6)
{
g_hallCnt = 0;
g_hallStateValid = BLDC_Hall_ValidityCheck(g_hallPhase);
}
//g_hallStateValid = BLDC_Hall_ValidityCheck(g_hallPhase);
if (tmpPhase != g_currentPhase)
{
g_currentPhase = tmpPhase;
tmpRpm = BLDC_Hall_SpeedGet() * 60 / PAIR_NUM;
g_motorFeedbackRpm = (g_motorFeedbackRpm * 7 + tmpRpm) >> 3;
g_motorFeedbackRpm = (g_motorFeedbackRpm < MOTOR_MAX_RPM) ? g_motorFeedbackRpm : MOTOR_MAX_RPM;
}
BLDC_Hall_Run(s_motorDir, g_currentPhase);
if (!g_motorStartReady)
{
if ((g_motorFeedbackRpm >= MOTOR_MIN_RPM) && (g_state == STATE_START))
{
g_startReadyCnt ++;
if (g_startReadyCnt == 6)
{
g_startReadyCnt = 0;
g_motorStartReady = 1;
//g_motorRefRpm = MOTOR_MIN_RPM;
DEBUGMSG(DEBUG_ZONE_INFO, ("[BLDC_HALL]Motor Startup Ready\r\n"));
}
}
else
{
g_startReadyCnt = 0;
}
}
else
{
if (s_hallStateCnt < HALL_WORK_STABILITY_CNT)
{
s_hallStateCnt++;
}
else if (s_hallStateCnt == HALL_WORK_STABILITY_CNT)
{
s_hallStateCnt ++;
g_motorRefRpm = g_motorFeedbackRpm;
g_state = STATE_RUN;
// g_speedPid.pidOut = s_motorSpeed * 328 / 10;
}
}
}
}
将稍作修改的工程编译ok后下载到开发板中,然后采用带霍尔BLDC方波模式启动,操作及效果见如下视频
https://v.youku.com/v_show/id_XNTEwNDc5MjkxMg==.html
连续转到效果如下:
|