工具/软件:Code Composer Studio
您好,
我是微控制器领域的新手。
有人能告诉我这两条线路之间的区别以及如何使用它们吗?
Epwm1Regs.CMPA=600;
Epwm1Regs.half-CMPA=600;
谢谢你
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.
工具/软件:Code Composer Studio
您好,
我是微控制器领域的新手。
有人能告诉我这两条线路之间的区别以及如何使用它们吗?
Epwm1Regs.CMPA=600;
Epwm1Regs.half-CMPA=600;
谢谢你
大家好、Madhuri
首先、我想您的意思是
Epwm1Regs.CMPA.all = 600; Epwm1Regs.CMPA.half.CMPA = 600;
存在差异。 CMPA 分为两部分:用于常规 ePWM 计数器比较的 CMPA 和用于高分辨率比较的 CMPAHR (其中 HR 表示高分辨率)。 可以将每个 TBCLK 分为更多的时钟(我想最多255个)、以便 在 PWM 信号生成中实现难以置信的精度。 您可以参阅有关 ePWM 和 HRPWM 模块的文档。
因此、如果您的 PRD = 10000、并且想要生成 50%的占空比、则必须写入
Epwm1Regs.CMPA.half.CMPA = 5000;
如果要实现50.00054%的占空比、则必须写入 CMPA.half-CMPAHR 寄存器。 当然、您首先需要设置 HR 子模块。
我还认为、第一种方法甚至不会构建。
Epwm1Regs.CMPA = 600;
您可以将任何值写入 EPwmXRegs.CMPA.half-CMPA。 但该值不得大于您的周期。
只需确保:
我们假设 TBPRD = 200、计数器在递增计数模式下计数。 在本例中、您的 PWM 的精度是多少? 它是(1/200)*100%=0.5%
这意味着、您可以正确设置步骤0.5%的任何占空比:您可以设置0.0%(CMPA = 0)、10.0%(CMPA = 20)、13.5%(CMPA = 27)、30.0%(CMPA = 60)... 99.5%(CMPA = 199) 100.0%(CMPA = 200)。
所有此 CMPA 必须写入 EPwmXRegs.CMPA.half-CMPA 寄存器。
但是、如果您想要设置更精确的占空比、例如10.2%、则无法实现。 因为在这种情况下、您需要 CMPA =(10.2/100%)* TBPRD = 0.102*200 = 20.4。 但 CMPA 只能是整数值、因此只能设置 CMPA = 20或 CMPA = 21 (分别为10.0%和10.5%)。
因此、在这种情况下、高分辨率模块可以提供帮助:您可以设置 CMPA = 20 (10.0%)、而不是设置 CMPAHR 来添加缺失的0.2%。