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.

TMS320F28335: 的EPWM模块错误控制寄存器TZFRC.OST位强制置位后,为什么相应PWM输出口持续输出高电平?

Part Number: TMS320F28335


各位好:

      基于28335实际需求设计了一个PWM开和PWM关的程序,使用了EPWM1、EPWM3两个模块,主要思路如下:通过寄存器TZFRC.OST置位实现PWM信号关断,通过对寄存器TZCLR.OST置位实现PWM信号开启,其中主程序初始化时,运行了PWM关程序,在程序运行期间,检测到按键1按下,则启动PWM,检测到按键2按下,则关闭PWM,按键程序检测无误,在DSP芯片上电后,出现了以下问题无法解决:

      1、芯片初上电还未运行前,EPWM1和EPWM3输出的IO口电平持续为高电平;

      2、程序开始运行后,检测到按键2按下后,EPWM信号停止,但EPWM1和EPWM3输出的IO口电平持续为高电平;

      3、GPIOA的其他口的电平也呈现高低不同,比如GPIO15电平为高、GPIO11电平就为低,实际上程序中并未使用到这两个IO口,也未作任何配置,不知为何呈现这种状况;

      4、程序其他地方用到了ECAP1,IO口为GPIO24,检测IO口电压为1.8V,与CPU内核电压相同,不知为何缘故?

附PWM开关程序:

#define mPWM_ON() {EALLOW; \
EPwm3Regs.TZCLR.bit.OST = 1; \
EDIS;}

#define mPWM_OFF() {EALLOW; \
EPwm3Regs.TZFRC.bit.OST = 1;\
EDIS;}

#define mSPWM_ON() {EALLOW; \
EPwm1Regs.TZCLR.bit.OST = 1;\
EDIS;}

#define mSPWM_OFF() {EALLOW; \
EPwm1Regs.TZFRC.bit.OST = 1;\
EDIS;}

  • 1、芯片初上电还未运行前,EPWM1和EPWM3输出的IO口电平持续为高电平;

    首先,这几个PWM口对应的GPIO是有上拉电阻但默认是没有使能的,你可以检查一下程序中是否有使能。如果没有使能的话,有可能是处于随机状态,此时结合外部电路的电位就有可能检测到高电平。不过一般为了保险起见,PWM口对应的IO口都会在硬件上做外部弱上下拉处理,防止上电期间误动作。

    2、程序开始运行后,检测到按键2按下后,EPWM信号停止,但EPWM1和EPWM3输出的IO口电平持续为高电平;

    这个要看你设置的TZ动作是什么,也就是TZCTL的设置了

    3、GPIOA的其他口的电平也呈现高低不同,比如GPIO15电平为高、GPIO11电平就为低,实际上程序中并未使用到这两个IO口,也未作任何配置,不知为何呈现这种状况;

    这个你仔细看一下datasheet的6.2 Signal Descriptions就明白了,跟1是一样的情况。GPIO0~11默认未使能上拉,复位期间电平应该是随机的。GPIO12~87默认使能上拉。

    4、程序其他地方用到了ECAP1,IO口为GPIO24,检测IO口电压为1.8V,与CPU内核电压相同,不知为何缘故?

    你是在连接了外部电路的情况下测到的电压吗?如果是的话大概率跟外部电路相关,如果要测量实际IO口电压最好是在悬空的状态下测。当然,如果悬空状态下还是1.8V,那可能就是管脚有问题了。。。

  • 首先非常感谢您的解答,解决了困扰我一周的问题,关于第4个问题,做一个补充,我都是空板测试的,所以引脚都是悬空的,通过示波器观测,GPIO口的电压稳稳的在1.8V,后面我又专门导入了ECAP的测试程序,测试结果正常,表明ECAP模块也是正常的,在ECAP的测试程序中,GPIO的引脚也是1.8V。

  • 你好,工程师将在工作时间为你解答。

  • 好的,感谢你的反馈。可能是引脚悬空受到电磁干扰导致。