TI中文支持网
TI专业的中文技术问题搜集分享网站

CLA中可以使用变量给PWM的寄存器赋值吗?

 我在CLA的task1中操作PWM寄存器,但是遇到了以下问题:
    编程方法1:EPwm2Regs.CMPA.half.CMPA=1400;
                        EPwm2Regs.CMPB=100;
    编程方法2:int    DutyA;
                        int    DutyB;
                        DutyA=1400;
                        DutyB=100;
                        EPwm2Regs.CMPA.half.CMPA=DutyA;
                        EPwm2Regs.CMPB=DutyB;
    采用编程方法1编程调试输出的波形是想要的,也是跟程序代码相符合的PWM波形。但是采用编程方法2编程调试输出的波形是不正确的。
    如果在CPU的main函数中按照这两种编程方法进行编程,输出的波形是一样的,并且都是正确的,但是为什么在CLA中进行这样的编程操作输出的波形是不一样的呢?
    因为我要进行PWM占空比的调制,所以DutyA和DutyB都是经过公式计算得到的值,因此CMPA和CMPB只能通过变量赋值,不知道该怎么解决这个问题?请大家帮忙分析一下,谢谢。

mangui zhang:

你好 在C++下你的这种方式2应该可以正常工作

在C下这种变量等式相互赋值  不匹配会出现问题

 我在CLA的task1中操作PWM寄存器,但是遇到了以下问题:
    编程方法1:EPwm2Regs.CMPA.half.CMPA=1400;
                        EPwm2Regs.CMPB=100;
    编程方法2:int    DutyA;
                        int    DutyB;
                        DutyA=1400;
                        DutyB=100;
                        EPwm2Regs.CMPA.half.CMPA=DutyA;
                        EPwm2Regs.CMPB=DutyB;
    采用编程方法1编程调试输出的波形是想要的,也是跟程序代码相符合的PWM波形。但是采用编程方法2编程调试输出的波形是不正确的。
    如果在CPU的main函数中按照这两种编程方法进行编程,输出的波形是一样的,并且都是正确的,但是为什么在CLA中进行这样的编程操作输出的波形是不一样的呢?
    因为我要进行PWM占空比的调制,所以DutyA和DutyB都是经过公式计算得到的值,因此CMPA和CMPB只能通过变量赋值,不知道该怎么解决这个问题?请大家帮忙分析一下,谢谢。

Eric*:

回复 mangui zhang:

你好,

可是在主程序中这两种操作方式都没有问题,两种方式都可以输出正确的波形~

只是在CLA中方式2输出不正确。

 我在CLA的task1中操作PWM寄存器,但是遇到了以下问题:
    编程方法1:EPwm2Regs.CMPA.half.CMPA=1400;
                        EPwm2Regs.CMPB=100;
    编程方法2:int    DutyA;
                        int    DutyB;
                        DutyA=1400;
                        DutyB=100;
                        EPwm2Regs.CMPA.half.CMPA=DutyA;
                        EPwm2Regs.CMPB=DutyB;
    采用编程方法1编程调试输出的波形是想要的,也是跟程序代码相符合的PWM波形。但是采用编程方法2编程调试输出的波形是不正确的。
    如果在CPU的main函数中按照这两种编程方法进行编程,输出的波形是一样的,并且都是正确的,但是为什么在CLA中进行这样的编程操作输出的波形是不一样的呢?
    因为我要进行PWM占空比的调制,所以DutyA和DutyB都是经过公式计算得到的值,因此CMPA和CMPB只能通过变量赋值,不知道该怎么解决这个问题?请大家帮忙分析一下,谢谢。

Hank Zhao:

回复 Eric*:

您好,您在CLA程序调试时单步一下,看看这两种不同的赋值方式造成的差别是什么。

 我在CLA的task1中操作PWM寄存器,但是遇到了以下问题:
    编程方法1:EPwm2Regs.CMPA.half.CMPA=1400;
                        EPwm2Regs.CMPB=100;
    编程方法2:int    DutyA;
                        int    DutyB;
                        DutyA=1400;
                        DutyB=100;
                        EPwm2Regs.CMPA.half.CMPA=DutyA;
                        EPwm2Regs.CMPB=DutyB;
    采用编程方法1编程调试输出的波形是想要的,也是跟程序代码相符合的PWM波形。但是采用编程方法2编程调试输出的波形是不正确的。
    如果在CPU的main函数中按照这两种编程方法进行编程,输出的波形是一样的,并且都是正确的,但是为什么在CLA中进行这样的编程操作输出的波形是不一样的呢?
    因为我要进行PWM占空比的调制,所以DutyA和DutyB都是经过公式计算得到的值,因此CMPA和CMPB只能通过变量赋值,不知道该怎么解决这个问题?请大家帮忙分析一下,谢谢。

囧:

回复 Eric*:

如果要在CLA中使用变量需要在.cla中先声明,定义位置,然后在task8中初始化才能正常使用。

 我在CLA的task1中操作PWM寄存器,但是遇到了以下问题:
    编程方法1:EPwm2Regs.CMPA.half.CMPA=1400;
                        EPwm2Regs.CMPB=100;
    编程方法2:int    DutyA;
                        int    DutyB;
                        DutyA=1400;
                        DutyB=100;
                        EPwm2Regs.CMPA.half.CMPA=DutyA;
                        EPwm2Regs.CMPB=DutyB;
    采用编程方法1编程调试输出的波形是想要的,也是跟程序代码相符合的PWM波形。但是采用编程方法2编程调试输出的波形是不正确的。
    如果在CPU的main函数中按照这两种编程方法进行编程,输出的波形是一样的,并且都是正确的,但是为什么在CLA中进行这样的编程操作输出的波形是不一样的呢?
    因为我要进行PWM占空比的调制,所以DutyA和DutyB都是经过公式计算得到的值,因此CMPA和CMPB只能通过变量赋值,不知道该怎么解决这个问题?请大家帮忙分析一下,谢谢。

Eric*:

回复 囧:

您好,

我需要在.cla的什么位置声明?比如说我使用的是task1,那么我需要在task1-8之外声明是吧?就是声明为全局变量?然后在task8中对变量初始化?

可以这样声明之后编译出现以下warning:  .bss_cla without a SECTIONS specification ,我使用的是28035_RAM_CLA_lnk.cmd文件,

请各位帮忙分析以下原因,谢谢~

 我在CLA的task1中操作PWM寄存器,但是遇到了以下问题:
    编程方法1:EPwm2Regs.CMPA.half.CMPA=1400;
                        EPwm2Regs.CMPB=100;
    编程方法2:int    DutyA;
                        int    DutyB;
                        DutyA=1400;
                        DutyB=100;
                        EPwm2Regs.CMPA.half.CMPA=DutyA;
                        EPwm2Regs.CMPB=DutyB;
    采用编程方法1编程调试输出的波形是想要的,也是跟程序代码相符合的PWM波形。但是采用编程方法2编程调试输出的波形是不正确的。
    如果在CPU的main函数中按照这两种编程方法进行编程,输出的波形是一样的,并且都是正确的,但是为什么在CLA中进行这样的编程操作输出的波形是不一样的呢?
    因为我要进行PWM占空比的调制,所以DutyA和DutyB都是经过公式计算得到的值,因此CMPA和CMPB只能通过变量赋值,不知道该怎么解决这个问题?请大家帮忙分析一下,谢谢。

囧:

回复 Eric*:

请参考以下例程来定义CLA的变量的定义:

C:\TI\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVACI_Sensorless_CLA_F2803x

另外你现在用的是在RAM中跑的CLA的 CMD,建议使用FLASH中跑的。

赞(0)
未经允许不得转载:TI中文支持网 » CLA中可以使用变量给PWM的寄存器赋值吗?
分享到: 更多 (0)