电机专用MM32Motor-DK (MM32SPIN160C )
    ----使用心得


12.jpg
板子包装精美,特别细心,4个角落都用塑料片包装好,可以防止划伤,以及垫高防静电等。
电机专用MM32 Motor-DK (MM32SPIN160C )
·        输入电压范围 : 12V~28V
·        使用60V/40AN-MOS管*6
·        使用外挂(SPIN0x) GBW 6MHz 高速运放*4
·        MCU 电源使用 5V
·        支持有/无霍, 方波/弦波驱动
·        支持1/2Shunt R 三相电流采样
·        BEMF 电压回授使用ADC 采样
·        DC Bus 电压, 总电流量测
·        使用MCU内建比较器做为过电流保护
·        具VR,LED等功能
适合于多种应用场合:
- 空气净化器
- 服务器风机
- 吊扇
- 吊扇灯
- 落地扇

- 电动工具
- 吸尘器
- 无人机电调
- 水泵



123.png

我们这边测试过程中,主要使用KEIL,JLINK。

使用官方推荐的资料文件和工具。
23.jpg 我们这边测试的电机是无刷有感电机。

图示3个霍尔传感器和B相导通示意图。

34.jpg
我们调试使用的无刷电机,主要应用在筋膜枪上面。
使用官方提供的程序,进行移植,主要是要考虑换向。
首先测得电机的时序,用示波器检测传感器以及换向的信号。

345.png

上图是电机在运行过程中,霍尔电机的信号以及V相控制电平信号,使用同样的方法可以获得UVW 3相信号和霍尔传感器的关系。
456.jpg
得到这样的关系后,就可以对代码进行移植,主要更改换向部分
voidBldc_Phase_Chaneg(uint8_t step)
{
    switch(step) {
        case 1: //U+ W-
            BLDC_UL_DISABLE();
            BLDC_UH_ENABLE();
            BLDC_VL_DISABLE();;
            BLDC_VH_DISABLE();
            BLDC_WH_DISABLE();
            BLDC_WL_ENABLE();
            break;
        case 5: //V+ W-
            BLDC_UL_DISABLE();
            BLDC_UH_DISABLE();
            BLDC_VL_DISABLE();
            BLDC_VH_ENABLE();
            BLDC_WH_DISABLE();
            BLDC_WL_ENABLE();
            break;
        case 4: //V+ U-
            BLDC_UH_DISABLE();
            BLDC_UL_ENABLE();
            BLDC_VL_DISABLE();
            BLDC_VH_ENABLE();
            BLDC_WL_DISABLE();
            BLDC_WH_DISABLE();
            break;
        case 6: //W+ U-
            BLDC_UH_DISABLE();
            BLDC_UL_ENABLE();
            BLDC_VL_DISABLE();
            BLDC_VH_DISABLE();
            BLDC_WL_DISABLE();
            BLDC_WH_ENABLE();
            break;
        case 2: //W+ V-
            BLDC_UH_DISABLE();
            BLDC_UL_DISABLE();
            BLDC_VH_DISABLE();
            BLDC_VL_ENABLE();
            BLDC_WL_DISABLE();
            BLDC_WH_ENABLE();
            break;
        case 3: //U+ V-
            BLDC_UL_DISABLE();
            BLDC_UH_ENABLE();
            BLDC_VH_DISABLE();
            BLDC_VL_ENABLE();
            BLDC_WH_DISABLE();
            BLDC_WL_DISABLE();
            break;
        default:
            BLDC_UH_DISABLE();
            BLDC_UL_DISABLE();
            BLDC_VH_DISABLE();
            BLDC_VL_DISABLE();
            BLDC_WH_DISABLE();
            BLDC_WL_DISABLE();
            break;
    }
}
其中step表示霍尔传感器检测的电机所处的状态,然后根据电机的状态对UVW 3相进行控制。
堵转检测:
    if(RUN == g_tMotor.tMotorState) {
        g_tMotor.tCount.hwTimeCount ++;
        if(g_tMotor.tCount.hwTimeCount >2000) { // 2s超时,电机卡住不运转
            GATE_DRIVER_DISABLE();
            BLDC_UH_DISABLE();
            BLDC_UL_DISABLE();
            BLDC_VH_DISABLE();
            BLDC_VL_DISABLE();
            BLDC_WH_DISABLE();
            BLDC_WL_DISABLE();
            g_tMotor.tMotorState = STOP;
            g_tMotor.tCount.hwTimeCount = 0;
        }
    }
电机在运行过程中要实时检测电机是否被堵,上面是核心代码,当电机检测到霍尔传感器没有信号后,说明电机没有运转,这时就要将电机的各项通电切断,放置电流过大。
PWM调节:
                SET_DUTY_U(BLDC_TIM_PERIOD *g_tMotor.tDuty / 100);
                SET_DUTY_V(BLDC_TIM_PERIOD *g_tMotor.tDuty / 100);
                SET_DUTY_W(BLDC_TIM_PERIOD *g_tMotor.tDuty / 100);
通过设定不同的占空比,来调节电机的运转速度,高电平占空比越大,电机运转越快。
PID调节:

PID调节(PID regulating)经典控制理论中控制系统的一种基本调节方式,是具有比例、积分和微分作用的一种线性调节规律。PID调节的作用是将给定值r与被控变量的实际量测值y的偏差。 567.jpg
通过PID控制,可以调节电机的转速,使转速稳定在一定范围内。

/*PID运算函数*/
float PID_Realize(float speed) {
         floatindex;
         pid.ExpectedValue= speed;
         pid.err= pid.ExpectedValue - pid.ActualValue;
         //增量式pid公式
         floatincrementValue = pid.Kp*(pid.err - pid.err_last) + pid.Ki*pid.err +pid.Kd*(pid.err - 2 * pid.err_last + pid.err_prev);
         pid.ActualValue+= incrementValue;
         pid.err_prev= pid.err_last;
         pid.err_last= pid.err;

         returnpid.ActualValue;



经过上面的过程,电机的控制,以及调试基本上就完成了,剩下就是优化一下电机的杂音,堵转保护等。