This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我正在尝试将特定的死区时间
在 HRPWM 模式下工作、因此死区时钟*2速率系统时钟= 10ns (100 MHz)
我想设置 FED = 90nSec、因此计算了以下值
DBFED = feed/(2*TBCLK)=90nSec/5nSec = 18 DBCYC
因此我将其插入到 DBFED、
但使用示波器 I measurement ~80nSec DB:
当我 将 DBFED 更改为20时、它适合相关 DB (每 增加一次 DBCYC、5nSec):
为什么会有2个 DBCYC 偏移? 如何解决这个问题?
我在 https://www.ti.com/content/dam/videos/external-videos/9/3816841626001/6304743885001.mp4/subassets/epwm_dead-band_submodule_slides.pdf 上工作
谢谢!
迈克尔
我认为它与直流有关、当开始在直流= 0.1上运行代码时、我得到了正确的死区:
当仅更改设置了新 D.C.的 CMPA 时(不触摸 DB 寄存器)、因此我将 DB 降至80nSec:
还指出 CMPHR 寄存器出于某种原因正在移动 DB:
当 CMPHR = 0X0100时:
当 CMPHR = 0XFF00时:
再说一次、DBFED 根本没有变化。
我想的另一个 问题是、在 PWM 的可变频率中(可变 TBPRD)、我有同样的问题:
正在研究频率 为200kHz、TBPRD = 250、且 DBRED DBFED 如下所示-
我具有以下死区
当将频率更改为300kHz 时、TBPRD = 167 和 DBRED DBFED 保持不变-
我具有以下死区
请帮助:)
Michael、您好!
感谢您提供所有信息-您还可以帮助简要总结目前的问题吗? 您似乎已经找到了最初的帖子/问题;CMPAHR 无法正常工作的问题是否符合您的预期? 或者它是不是不符合预期的死区?
是否正在使用其他 HR 配置(TBPRDHR、死区 HR 等)? 还是仅通过 CMPxHR 来控制高分辨率占空比?
如果您可以为您尝试实现的波形提供更多背景信息(或者添加图表可能有用)、通常会有所帮助。
此致、
艾里森
尊敬的 Allison:
因此、主要问题是死区始终无法准确、我会根据本文中的计算方法设置 DBRED 和 FED:
https://www.ti.com/lit/an/sprad12a/sprad12a.pdf?ts = 1713270874468 第5章.
以及使用高电平有效互补模式时、测量的 DB 与所需的 DB 不同。
我正在使用所有 HRPWM 功能 TBPRDHR 、死区 HR、DUTY。
我将尝试 在 B 与 A 互补时实现 HRPWM A、B 信号、死区为90nSec。
我确实获得了所需的 DB、但当由于某种原因开始更改 CMPAHR 值时、DB 会缩小
例如、当我将 CMPAHR 的默认值设置为0x0100且 CMPA 时、我得到的 DB 为90nSec:
例如,当我将 CMPAHR 更改为0x8000时,我得到的 DB 为85nSec (参见 DBRED DBFED 不会改变):
即使我将 CMPAHR 更 改为0X0A00、情况也会更糟(请参阅 DBRED DBFED 不会更改):
为什么?
谢谢!
迈克尔
您能帮助我理解吗? 当使用 HRDB 时、死区或死区时间由 EPWMA (CMPA)生成。 因此、修改 HRPWM (CMPAHR)会改变占空比、但不会再次调整 DB/HRDB、这是我从该 HRPWM 系统接口识别的。
本质上、我可以相对于 EPWMA 调整 HRDB、但当我通过 CMPAHR 寄存器更改 HRPWM 时、HRDB 仍对应于 EPWMA、而不是 HRPWM。 这使得它对 CMPAHR 的全刻度看起来是"盲"的、这就是为什么我在之前的响应中观察到了在死区时间上的10nSec 差值。
Michael、您好!
您能否分享您的 PWM 配置/初始化? 我想知道还有哪些用于背景的其他设置。
您是否启用了半周期时钟? 您是否也在向 CMPBHR 写入数据?
此致、
艾里森
尊敬的 Allison:
当然、这里有更多详细信息:
计数器模式-上-下计数模式
AQ:
数据库:
HRPWM:
还有其他信息吗?
您是否还在写信给 CMPBHR
否、我正在仅更新 CMPA:CMPAHR
Michael、您好!
您能否 共享完整的 ePWM 初始化和 SysConfig 文件、以便我也可以使用相同的 ePWM/HRPWM 配置?
您是否还可以启用半周期时钟、确保使用自动转换、并实现与 CMPAHR 相同的 CMPBHR 值?
另请注意、DBRED 和 DBFED 值必须大于3才能使用高分辨率死区。
此致、
艾里森
尊敬的 Allison:
很抱歉我的回复延迟了。
我将从 board.c 添加配置(C 代码、而不是大量屏幕截图)
HRPWM_setEmulationMode(PWM_BASE, EPWM_EMULATION_FREE_RUN); HRPWM_setClockPrescaler(PWM_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1); EPWM_setTimeBasePeriod(PWM_BASE, 250); HRPWM_setupEPWMLinks(PWM_BASE, EPWM_LINK_WITH_EPWM_1, EPWM_LINK_TBPRD); HRPWM_setTimeBaseCounter(PWM_BASE, 0); HRPWM_setTimeBaseCounterMode(PWM_BASE, EPWM_COUNTER_MODE_UP_DOWN); HRPWM_setCountModeAfterSync(PWM_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC); HRPWM_disablePhaseShiftLoad(PWM_BASE); HRPWM_setPhaseShift(PWM_BASE, 0); EPWM_setCounterCompareValue(PWM_BASE, EPWM_COUNTER_COMPARE_A, 250); HRPWM_setCounterCompareShadowLoadMode(PWM_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO_PERIOD); HRPWM_setupEPWMLinks(PWM_BASE, EPWM_LINK_WITH_EPWM_1, EPWM_LINK_COMP_A); EPWM_setCounterCompareValue(PWM_BASE, EPWM_COUNTER_COMPARE_B, 1); HRPWM_setCounterCompareShadowLoadMode(PWM_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO_PERIOD); EPWM_setupEPWMLinks(PWM_BASE, EPWM_LINK_WITH_EPWM_1, EPWM_LINK_COMP_B); HRPWM_setActionQualifierShadowLoadMode(PWM_BASE, EPWM_ACTION_QUALIFIER_A, EPWM_AQ_LOAD_ON_CNTR_ZERO_PERIOD); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB); HRPWM_setActionQualifierShadowLoadMode(PWM_BASE, EPWM_ACTION_QUALIFIER_B, EPWM_AQ_LOAD_ON_CNTR_ZERO_PERIOD); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB); HRPWM_setActionQualifierAction(PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB); HRPWM_setDeadBandDelayPolarity(PWM_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW); HRPWM_setDeadBandDelayMode(PWM_BASE, EPWM_DB_RED, true); HRPWM_setRisingEdgeDelayCountShadowLoadMode(PWM_BASE, EPWM_RED_LOAD_ON_CNTR_ZERO); HRPWM_disableRisingEdgeDelayCountShadowLoadMode(PWM_BASE); HRPWM_setRisingEdgeDelayCount(PWM_BASE, 9); HRPWM_setDeadBandDelayMode(PWM_BASE, EPWM_DB_FED, true); HRPWM_setFallingEdgeDeadBandDelayInput(PWM_BASE, EPWM_FED_LOAD_ON_CNTR_ZERO); HRPWM_disableFallingEdgeDelayCountShadowLoadMode(PWM_BASE); HRPWM_setFallingEdgeDelayCount(PWM_BASE, 18); HRPWM_setDeadBandControlShadowLoadMode(PWM_BASE, EPWM_DB_LOAD_ON_CNTR_ZERO_PERIOD); HRPWM_setDeadBandCounterClock(PWM_BASE, EPWM_DB_COUNTER_CLOCK_HALF_CYCLE); HRPWM_setTripZoneAction(PWM_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW); HRPWM_setTripZoneAction(PWM_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_LOW); HRPWM_enableADCTrigger(PWM_BASE, EPWM_SOC_A); HRPWM_enableAutoConversion(PWM_BASE); HRPWM_setMEPEdgeSelect(PWM_BASE, HRPWM_CHANNEL_A, HRPWM_MEP_CTRL_RISING_AND_FALLING_EDGE); HRPWM_setCounterCompareShadowLoadEvent(PWM_BASE, HRPWM_CHANNEL_A, HRPWM_LOAD_ON_CNTR_ZERO_PERIOD); HRPWM_setMEPEdgeSelect(PWM_BASE, HRPWM_CHANNEL_B, HRPWM_MEP_CTRL_RISING_AND_FALLING_EDGE); HRPWM_setCounterCompareShadowLoadEvent(PWM_BASE, HRPWM_CHANNEL_B, HRPWM_LOAD_ON_CNTR_ZERO_PERIOD); HRPWM_enablePeriodControl(PWM_BASE); HRPWM_setDeadbandMEPEdgeSelect(PWM_BASE, HRPWM_DB_MEP_CTRL_RED_FED);
Michael、您好!
非常感谢您发送此内容。 请再花2-3天的时间对此进行研究。 请随时更新任何进度/发现/问题。
此致、
艾里森
Michael、您好!
对于周末的延误、我们深表歉意。 我仍在尝试在我的设置中复制此行为、但会让您随时了解最新进度。
此致、
艾里森
Michael、您好!
很抱歉耽误了很长时间-我一直在尝试实施 SysConfig .c 设置、但仍然无法复制您在该主题前面的示波器捕获中显示的信号。 您可以考虑发送完整的项目(仅包含 PWM 和 HRPWM 实施)、以便我可以查看正确的信号吗?
还想检查您是否有机会验证我之前(下面)建议的内容? 我没有在 SysConfig .c 中实现 CMPBHR。 您如何更新这些 HR 值?
您是否还可以启用半周期时钟,确保使用自动转换,并实现与 CMPAHR 相同的 CMPBHR 值? [/报价]您是否有进一步的发展?
此致、
艾里森