本帖最后由 遥远的牛布斯 于 2021-2-21 23:44 编辑
电动机启动: Blheli在正常的bemf(过零检测)换相闭环运行开始之前,有一个启动阶段和一个初始运行阶段。启动阶段对应标志位STARTUP_PHASE,初始运行阶段对应INITIAL_RUN_PHASE,同步闭环运行为MOTOR_STARTED。 STARTUP_PHASE阶段电机处于开环运行,类似于德国MK电调的启动阶段有一个开环加速阶段,但是我认为BLheli的开环加速阶段更贴切的名字叫半闭环启动。为啥这么叫呢,其实我一开始分析代码的时候也总受MK电调启动策略的影响,总想找出blheli的开环启动加速算法,但是最终还是失败了。Blheli的启动过程完全开环只有两步,就是开始的锁定转子位置为第一步,第二步强制换相且过零检测强制超时,到第三步换相完的时候就已经过零检测参与换相时间估算了,如果在第三步过零检测超时计数器未触发之前能够正确检测到27次(48M主频的为27*2次)的正确过零采样点则认为该次过零有效,然后就是等待一个极短时间马上换相,换相完成后等待消磁(Wt_Zc_Scan),再设置过零超时时间,再然后开始过零检测。如此循环24次如果每次换相都能正确换相则转入INITIAL_RUN_PHASE,其实INITIAL_RUN_PHASE已经处于闭环同步阶段。所以blheli的启动阶段会有过零检测参与,且过零事件发生后马上换相而不像正常闭环阶段那样还要延时15度的电角度才换相,启动阶段会产生一个比较重要的参数Comm_Period4x_H_L,这个参数是换相周期的4倍,启动阶段因为有过零点参与运算,所以换相周期这个参数是比较可靠的,切入闭环运行的时就非常顺滑了。
本文及keil工程文件地址: https://gitee.com/red_niu/blheli_s_keil
|