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.
您好!
我正在尝试在代码执行之间更改 ePWM 操作限定符控制寄存器的配置。 下面是设置:
10kHz 中断频率(100us 时间周期)。 我的平均计算时间大约为10us。
比较值在 CTR = 0时以影子模式加载。
我基本上需要在下一个 CTR =0开始时执行新的配置和值。 影子模式可以很好地实现这一点。
对于 AQCTLA 和 AQCTLB 的更新、我有两个选项。
a)在计算结束时更新配置。 这可确保下一个 CTR =0的配置正确。 但是、在 CTR =0之前的一个周期内会更新不正确的配置、这可能会导致问题。
b)在下一个中断开始时更新配置。 这样、正确的配置就会在 CTR =0之后更新。 只有在达到下一个比较事件时、才会出现不正确的 PWM 行为。 但是、如果在更改配置之前发生比较事件、它仍然可能会导致问题。
我想知道是否有更好的实施方法。
谢谢、
Aditya Ghule
为什么不对 AQCTL 使用影子模式?
下面是有关如何设置此设置的部分。 这样、您就不必在准确的正确时间手动更新 AQCTL。
14.6.4 AQCTLA 和 AQCTLB 影子模式操作
为了使能动作限定器模式改变、即使相位改变、也必须在一个周期结束时发生、AQCTLA 和 AQCTLB 寄存器的影子已经被添加到 ePWM 类型2和更高版本上。 此外、还支持同步这些寄存器时的影子到活动加载。 通过 AQCTLR[SHDWAQAMODE]和 AQCTLR[SHDWAQBMODE]位启用和禁用该寄存器的隐藏功能。 这些位分别启用和禁用 AQCTLA 影子寄存器和 AQCTLB 影子寄存器。 两种加载模式的行为描述如下:影子模式:通过设置 AQCTLR[SHDEWQAMODE]位启用 AQCTLA 的影子模式、通过设置 AQCTLR[SHDEWQBMODE]位启用 AQCTLB 的影子寄存器。 对于 AQCTLA 和 AQCTLB、默认情况下会禁用影子寄存器如果启用了影子寄存器、则影子寄存器的内容会在发生由 AQCTLR[LDAQAMODE] ASYCTLR[LDAQBMODE] AQCTLR[LDAQAQAQNC]和 AQCTLR[LDAQBSYNC 寄存器位指定的以下事件之一时传输到活动寄存器:
•CTR = PRD:时基计数器等于周期(TBCTR = TBPRD)。
•CTR =零:时基计数器等于零(TBCTR = 0x00)
•CTR = PRD 和 CTR = 0
•DCAEVT1或 DCBEVT1、EPWMxSYNCI 或 TBCTL[SWFSYNC]引起的同步事件
•同步事件或由 LDAQAMODE/LDAQBMODE 进行选择
全局加载支持全局加载控制机制也可通过配置全局加载配置寄存器(GLDCFG)中的相应位来用于 AQCTLA:AQCTLA2、AQCTLB:AQCTLB2和 AQCSFRC 寄存器。 当选择全局加载模式时、对于启用了该模式的所有寄存器、从影子寄存器到活动寄存器的内容传输发生在全局影子到活动加载控制寄存器(GLDCTL)中配置位定义的相同事件。 部分介绍了全局负载控制机制
14.4.7立即加载模式:如果选择立即加载模式(即 AQCTLR[SHDWAQAMODE]= 0或 AQCTLR[SHDWAQBMODE]= 0)、则对寄存器的读取或写入将直接进入活动寄存器。 请参阅图14-22和图14-23。
此外、您还可以始终使用全局加载。 但这是您的选择。