财富娱乐现场真人: [电机应用] PWM死区配置方法

永利游戏开户直营
167|1
楼主
本帖最后由 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);

扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

永利游戏开户直营 快速回复 返回顶部 返回列表
9亿KG开元棋牌 www.8181msc.com www,740,com网上娱乐场 利华彩票正规直营网 2000彩娱乐平台网上娱乐场
必赢全场返水 齐发娱乐网址导航 大西洋游戏假网代理最高占成 金牛国际城网开户 赌王代理专员
申博娱乐城开户官网 路虎logo 百川棋牌官方網站 华人彩票登录地址直营网 m88明升备用网址手机app
永利娱乐登入 网络彩票平台怎么赚钱 九五至尊城线路检测中心登入 博e百升级版 必發女优AG国际