高压无感bldc方案,主控芯片apt32f1023。 接口包括 高压无感bldc方案,主控芯片apt32f1023。 接口包括启停控制,正反转控制,旋钮调速控制。 资料包括原理图,pcb,程序。

无感BLDC的控制总让人头秃,尤其是高压场景下既要性能又要稳定。最近折腾APT32F1023搞了套高压无感方案,实测驱动800W电机稳如老狗,分享几个关键实现点。

先看硬件配置,APT32F1023这颗国产MCU真香——72MHz主频带硬件乘除法器,6路PWM互补输出自带死区控制,关键是有个16位高精度ADC。原理图上MOS驱动用的是HIP4081A,配合自举电路实现高压侧驱动,这部分布线要注意栅极电阻靠近MOS管放置。

启动控制最考验技术,这里用三段式启动:

void Motor_Start(void)
{
    // 预定位阶段
    PWM_Output(PhaseA_H, DUTY_10); //强制A相导通
    delay_ms(500);
    
    // 外同步加速
    for(uint8_t i=0;i<50;i++){
        Commutation_Next();  //强制换相
        delay_us(2000 - i*30);
    }
    
    // 切入反电动势检测
    BEMF_Check_Enable = 1;
}

预定位时的占空比不能太大,否则电机可能"咯噔"一下抖动。切入闭环的时机要根据电机特性调整,我们在ADC里做了个速度阈值判断,超过200RPM才切换。

正反转实现有个骚操作——直接改换相顺序表:

const uint8_t PhaseOrder_CW[6] = {0x05,0x01,0x03,0x02,0x06,0x04}; //正转
const uint8_t PhaseOrder_CCW[6] = {0x06,0x02,0x03,0x01,0x05,0x04}; //反转

void Set_Direction(MotorDir dir)
{
    if(dir == CW){
        memcpy(CurrentPhaseOrder, PhaseOrder_CW, 6);
    }else{
        memcpy(CurrentPhaseOrder, PhaseOrder_CCW, 6); 
    }
    // 立即执行换相避免失步
    Commutation_Force();
}

注意切换方向时要立即执行换相,否则可能造成堵转。实测中加了方向切换去抖动,防止操作面板误触发。

调速部分用ADC采集电位器信号,但要注意软件滤波:

#define SPEED_FILTER_COUNT 8
uint16_t Speed_ADC_Filter(void)
{
    static uint16_t filter_buf[SPEED_FILTER_COUNT];
    static uint8_t filter_index = 0;
    uint32_t sum = 0;
    
    filter_buf[filter_index++] = ADC_GetValue(3);
    if(filter_index >= SPEED_FILTER_COUNT) filter_index = 0;
    
    for(uint8_t i=0;i<SPEED_FILTER_COUNT;i++){
        sum += filter_buf[i];
    }
    return (sum >> 3); // 8次平均
}

滑动滤波比复杂的算法更实用,采样周期建议在1ms左右。ADC校准记得上电时先读取零点值,硬件上要在电位器两端并104电容。

遇到最坑的问题是过零检测——高压下的反电动势毛刺特别多。后来用比较器+迟滞比较搞定:

void BEMF_Init(void)
{
    CMP_InitTypeDef cmp;
    cmp.CMP_Channel = CMP_CHANNEL_1;
    cmp.CMP_Hysteresis = CMP_HYSTERESIS_50MV; //迟滞电压设大点
    cmp.CMP_OutputPolarity = CMP_OUTPUTPOL_NORMAL;
    APT_CMP_Init(&cmp);
    
    ADC_Filter_Enable(ADC_CH7, ENABLE); //开启硬件滤波
}

比较器输出接外部中断,在PWM波形的特定点采样。注意中断响应时间要足够快,必要时把中断优先级提到最高。

这套方案跑起来后,实测效率比之前用的STM32方案高了3%,看来APT32F1023的PWM死区控制确实精准。最后提醒下PCB布局:高压部分和信号地要分区域布局,MOS驱动信号走线尽量等长,软件上做好过流保护,别问我怎么知道的(烟雾报警器响了两次...)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐