请问哪位大哥,我用EasyArm8962编写了下面这个程序,想试着通过按键KEY1改变PWM的输出方式,为什么我的GEN0能够实现按键就正常翻转,而GEN1输出是翻转了,但是幅值变得小的很多,现在纠结中。
#include "systemInit.h"
#include "pwm.h"
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOE);
GPIOPinTypeIn(GPIO_PORTE_BASE,GPIO_PIN_2);
GPIOIntTypeSet(GPIO_PORTE_BASE,GPIO_PIN_2,GPIO_LOW_LEVEL);
GPIOPinIntEnable(GPIO_PORTE_BASE,GPIO_PIN_2);
IntEnable(INT_GPIOE);
IntMasterEnable();
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOG);
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);
SysCtlPWMClockSet(SYSCTL_PWMDIV_1);
GPIOPinTypePWM(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1);
GPIOPinTypePWM(GPIO_PORTF_BASE,GPIO_PIN_0);
GPIOPinTypePWM(GPIO_PORTG_BASE,GPIO_PIN_1);
GPIOPinTypePWM(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1);
PWMGenConfigure(PWM_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);
PWMGenConfigure(PWM_BASE,PWM_GEN_1,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);
PWMGenConfigure(PWM_BASE,PWM_GEN_2,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);
PWMGenPeriodSet(PWM_BASE,PWM_GEN_0,6000);
PWMPulseWidthSet(PWM_BASE,PWM_OUT_0,4000);
PWMDeadBandEnable(PWM_BASE,PWM_GEN_0,60,60);
PWMGenPeriodSet(PWM_BASE,PWM_GEN_1,6000);
PWMPulseWidthSet(PWM_BASE,PWM_OUT_2,4000);
PWMDeadBandEnable(PWM_BASE,PWM_GEN_1,60,60);
PWMGenPeriodSet(PWM_BASE,PWM_GEN_2,6000);
PWMPulseWidthSet(PWM_BASE,PWM_OUT_4,4000);
PWMDeadBandEnable(PWM_BASE,PWM_GEN_2,60,60);
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinTypeOut(GPIO_PORTA_BASE,GPIO_PIN_4);
GPIOPinTypeOut(GPIO_PORTC_BASE,GPIO_PIN_5);
GPIOPinTypeOut(GPIO_PORTB_BASE,GPIO_PIN_6);
PWMOutputState(PWM_BASE,PWM_OUT_0_BIT|PWM_OUT_1_BIT|PWM_OUT_2_BIT|PWM_OUT_3_BIT|PWM_OUT_4_BIT|PWM_OUT_5_BIT,false);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0x00);
GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_5,0x00);
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_6,0x00);
PWMGenEnable(PWM_BASE,PWM_GEN_0);
PWMGenEnable(PWM_BASE,PWM_GEN_1);
PWMGenEnable(PWM_BASE,PWM_GEN_2);
for (;;)
{
}
}
void GPIO_Port_E_ISR(void){
unsigned long ulStatus;
static unsigned long temp=0;
ulStatus=GPIOPinIntStatus(GPIO_PORTE_BASE,true);
GPIOPinIntClear(GPIO_PORTE_BASE,ulStatus);
if(temp%3==0){
PWMOutputState(PWM_BASE,PWM_OUT_0_BIT|PWM_OUT_1_BIT|PWM_OUT_2_BIT|PWM_OUT_3_BIT|PWM_OUT_4_BIT|PWM_OUT_5_BIT,false);
PWMOutputInvert(PWM_BASE,PWM_OUT_0_BIT|PWM_OUT_1_BIT,false);
PWMOutputState(PWM_BASE,PWM_OUT_0_BIT|PWM_OUT_1_BIT,true);
PWMOutputInvert(PWM_BASE,PWM_OUT_2_BIT|PWM_OUT_3_BIT,false);
PWMOutputState(PWM_BASE,PWM_OUT_2_BIT|PWM_OUT_3_BIT,true);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,~(GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_4)));
}
if(temp%3==1){
PWMOutputState(PWM_BASE,PWM_OUT_0_BIT|PWM_OUT_1_BIT|PWM_OUT_2_BIT|PWM_OUT_3_BIT|PWM_OUT_4_BIT|PWM_OUT_5_BIT,false);
PWMOutputInvert(PWM_BASE,PWM_OUT_0_BIT|PWM_OUT_1_BIT,true);
PWMOutputState(PWM_BASE,PWM_OUT_0_BIT|PWM_OUT_1_BIT,true);
PWMOutputInvert(PWM_BASE,PWM_OUT_2_BIT|PWM_OUT_3_BIT,true);
PWMOutputState(PWM_BASE,PWM_OUT_2_BIT|PWM_OUT_3_BIT,true);
GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_5,~(GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_5)));
}
if(temp%3==2){
PWMOutputState(PWM_BASE,PWM_OUT_4_BIT|PWM_OUT_5_BIT|PWM_OUT_2_BIT|PWM_OUT_3_BIT|PWM_OUT_0_BIT|PWM_OUT_1_BIT,false);
PWMOutputState(PWM_BASE,PWM_OUT_2_BIT|PWM_OUT_3_BIT,true);
PWMOutputState(PWM_BASE,PWM_OUT_4_BIT|PWM_OUT_5_BIT,true);
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_6,~(GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_6)));
}
temp++;
SysCtlDelay(10*(TheSysClock/3000));
while(GPIOPinRead(GPIO_PORTE_BASE,GPIO_PIN_2)==0x00);
SysCtlDelay(10*(TheSysClock/3000));
}
回复 楼主 zengweitotty 的帖子
有时间我也测一下
回复 楼主 zengweitotty 的帖子
您的意思是说,您的程序实现的逻辑是正确的,只是PWM_OUT_2输出的电压幅值不是3.3V?不翻转的时候幅值正常吗?这个看起来像是硬件上的问题。
回复 板凳 锐鑫同创 的帖子
现在用了例子烧写进去,发现输出的电压远远小于3.3V,可能是硬件问题吗??想不通的哈
回复 4楼 zengweitotty 的帖子
您检查一下您板子的硬件及原理图吧,PWM输出电平应该和VCC相同,是不是接大负载了?
引用: 原帖由 zengweitotty 于 2011-4-13 14:40 发表
现在用了例子烧写进去,发现输出的电压远远小于3.3V,可能是硬件问题吗??想不通的哈
怎么测的?PWM信号有占空比,平均电压当然低于Vcc,要用示波器看,另外,如果负载过重要加缓冲。