<th id="alkcr"><pre id="alkcr"></pre></th>

  • 打印

    [電機應用] PWM死區配置方法

    [復制鏈接]
    352|2
    跳轉到指定樓層
    樓主
    本帖最后由 AutochipsMCU 于 2019-9-4 17:37 編輯

    本帖主要解決客戶針對死區配置的一些疑問,供參考。
    電機控制輸出的PWM波形有兩種:同相輸出和互補輸出。都需要帶死區配置。
    組合模式+互補輸出:
    1. void BLDC_PWM_Init(void)
    2. {
    3.     ///Init PWM Channel
    4.     //如果上半橋高有效,則PWM需設為PWM_PWM_HIGHTRUEPULSE,如果上半橋低有效,則PWM需設為PWM_PWM_LOWTRUEPULSE
    5.     PWM_PWMInit(PWM2, PWM_PWMMODE_COMBINE, PWM_PWM_HIGHTRUEPULSE);
    6.     PWM_SetModValue(PWM2, BLDC_PWM_PERIOD);
    7.     /*
    8.         PWM禁止輸出時,單獨配置上下橋臂極性。0:高電平有效,1:低電平有效。
    9.         在接電機前,先check默認時,PWM輸出電平是否會讓MOS管導通,如果會則需要check配置是否與硬件不符。
    10.     */
    11.     //CH0,CH2,CH4為上橋臂,CH1,CH3,CH5為下橋臂。極性值設為0表示高有效,設為1表示低有效。
    12.     PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL0, 0);//High Bridge Active level: High
    13.     PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL2, 0);
    14.     PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL4, 0);
    15.     PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL1, 0); //Low Bridge Active Level: High
    16.     PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL3, 0);
    17.     PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL5, 0);
    18.     /*
    19.         設置死區插入時間
    20.         設置死區時間=prescalerValue對應寄存器的分頻值*deadtimeValue/BUS_CLK
    21.         注意prescalerValue設置的寄存器DTSET[TPSC]值,需轉成分頻值。
    22.         對應分頻值:0b0x為1分頻;0b10為4分頻,0b11為16分頻
    23.         deadtimeValue值范圍為0-63
    24.     */
    25.     PWM_PWMDeadtimeSet(PWM2, 2, 12);// Deadtime = 4*12/48000000 = 1us
    26.     //打開組合通道互補模式(可不設置,默認為打開)
    27.     PWM_ComplementaryModeConfig(PWM2, 1);
    28.     //配置FALUT相關
    29.     PWM_SetFaultPirority(PWM2, PWM_EXTERNAL_FAULT2,0);  //故障輸入極性為高電平有效
    30.     PWM_FaultEnable(PWM2, PWM_EXTERNAL_FAULT2);//使能FAULT2
    31.     PWM_FaultIntEnable(PWM2);
    32.     PWM_FaultModeSel(PWM2, PWM_FAULT_MANUAL_CLEAR); //手動清除故障
    33.     PWM_SetCallback(PWM2, BLDC_PWM_FaultCallback);
    34.     NVIC_EnableIRQ(PWM2_IRQn);
    35.     //使能初始化觸發器,當PWM計數器等于CNTIN寄存器時,允許產生觸發。
    36.     PWM_SetExternalTrigger(PWM2, 1 << 6);  //set PWM2 Init Trigger Source
    37.     ///PWM Start
    38.     PWM_ClockSet(PWM2, PWM_CLOCK_SYSTEMCLOCK, 0);
    復制代碼
    組合模式+同相輸出
    1. void BLDC_PWM_Init(void)
    2. {
    3. ///Init PWM Channel
    4. //如果上半橋高有效,則PWM需設為PWM_PWM_HIGHTRUEPULSE,如果上半橋低有效,則PWM需設為PWM_PWM_LOWTRUEPULSE
    5. PWM_PWMInit(PWM2, PWM_PWMMODE_COMBINE, PWM_PWM_HIGHTRUEPULSE);
    6. PWM_SetModValue(PWM2, BLDC_PWM_PERIOD);
    7. /*
    8. PWM禁止輸出時,單獨配置上下橋臂極性。0:高電平有效,1:低電平有效。
    9. 在接電機前,先check默認時,PWM輸出電平是否會讓MOS管導通,如果會則需要check配置是否與硬件不符。
    10. */
    11. //CH0,CH2,CH4為上橋臂,CH1,CH3,CH5為下橋臂。極性值設為0表示高有效,設為1表示低有效。
    12. PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL0, 0);//High Bridge Active level: High
    13. PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL2, 0);
    14. PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL4, 0);
    15. PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL1, 1); //Low Bridge Active Level: Low
    16. PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL3, 1);
    17. PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL5, 1);
    18. /*
    19. 設置死區插入時間
    20. 設置死區時間=prescalerValue對應寄存器的分頻值*deadtimeValue/BUS_CLK
    21. 注意prescalerValue設置的寄存器DTSET[TPSC]值,需轉成分頻值。
    22. 對應分頻值:0b0x為1分頻;0b10為4分頻,0b11為16分頻
    23. deadtimeValue值范圍為0-63
    24. */
    25. PWM_PWMDeadtimeSet(PWM2, 2, 12);// Deadtime = 4*12/48000000 = 1us
    26. //關閉組合通道互補模式(默認為打開)
    27. PWM_ComplementaryModeConfig(PWM2, 0);
    28. //配置FALUT相關
    29. PWM_SetFaultPirority(PWM2, PWM_EXTERNAL_FAULT2,0); //故障輸入極性為高電平有效
    30. PWM_FaultEnable(PWM2, PWM_EXTERNAL_FAULT2);//使能FAULT2
    31. PWM_FaultIntEnable(PWM2);
    32. PWM_FaultModeSel(PWM2, PWM_FAULT_MANUAL_CLEAR); //手動清除故障
    33. PWM_SetCallback(PWM2, BLDC_PWM_FaultCallback);
    34. NVIC_EnableIRQ(PWM2_IRQn);
    35. //使能初始化觸發器,當PWM計數器等于CNTIN寄存器時,允許產生觸發。
    36. PWM_SetExternalTrigger(PWM2, 1 << 6); //set PWM2 Init Trigger Source
    37. ///PWM Start
    38. PWM_ClockSet(PWM2, PWM_CLOCK_SYSTEMCLOCK, 0);
    39. }
    復制代碼
    劃重點:
    在配置PWM時,PWM互補輸出和極性需要同時進行配置。
    如果是互補輸出,上下橋MOS管有效極性是相同的(都是高有效或低有效)。
    如果是同相輸出,上下橋MOS管有效極性是相反的(上橋臂高有效,則下橋臂是低有效。反之)。

    如果PWM同相輸出,有效極性也配成相同,是不帶死區的,配置了死區也不會生效。


    使用特權

    評論回復
    沙發
     樓主 | 2019-9-4 17:41 | 只看該作者
    本帖最后由 AutochipsMCU 于 2019-9-4 17:42 編輯

    代碼里面居然不能高亮。
    再貼一下關鍵配置:
    互補輸出:
    //CH0,CH2,CH4為上橋臂,CH1,CH3,CH5為下橋臂。極性值設為0表示高有效,設為1表示低有效。
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL0, 0);//High Bridge Active level: High
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL2, 0);
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL4, 0);
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL1, 0); //Low Bridge Active Level: High
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL3, 0);
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL5, 0);
    PWM_PWMDeadtimeSet(PWM2, 2, 12);// Deadtime = 4*12/48000000 = 1us
    //打開組合通道互補模式(可不設置,默認為打開)
    PWM_ComplementaryModeConfig(PWM2, 1);

    同相輸出:
    //CH0,CH2,CH4為上橋臂,CH1,CH3,CH5為下橋臂。極性值設為0表示高有效,設為1表示低有效。
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL0, 0);//High Bridge Active level: High
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL2, 0);
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL4, 0);
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL1, 1); //Low Bridge Active Level: Low
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL3, 1);
    PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL5, 1);
    PWM_PWMDeadtimeSet(PWM2, 2, 12);// Deadtime = 4*12/48000000 = 1us
    //關閉組合通道互補模式(默認為打開)
    PWM_ComplementaryModeConfig(PWM2, 0);

    使用特權

    評論回復
    板凳
    | 2019-10-3 10:25 | 只看該作者
    謝謝分享!

    使用特權

    評論回復
    掃描二維碼,隨時隨地手機跟帖
    您需要登錄后才可以回帖 登錄 | 注冊

    本版積分規則

    我要發帖 投訴建議 創建版塊 申請版主

    快速回復

    您需要登錄后才可以回帖
    登錄 | 注冊
    高級模式

    論壇熱帖

    在線客服 快速回復 返回頂部 返回列表
    成人短片线上看