我在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中跑的。