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

TM4C123gh6pmPWM模块Fault信号问题

怎么使用PWM模块的的Fault信号禁止六路PWM信号的输出???

uint16_t Fault;

int main(void)
{

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);

     GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2);

      IntMasterEnable();

      IntEnable(INT_PWM0_FAULT);

      GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,FALSE);
      Fault=GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_2);
      while(Fault==1)
      {
         PWM0faultIntHandler();
      }

      for(;;) //infinite loop
      {}

}

void
PWM0faultIntHandler(void)
{
     //清除错误中断
     PWMFaultIntClear(PWM0_BASE);
     PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_4_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_5_BIT, false);
}

这样写为什么不可以呢?

     

Maka Luo:

另外你现在出现的问题主要是什么,描述清楚。

LiangLiang wang1

怎么使用PWM模块的的Fault信号禁止六路PWM信号的输出???

uint16_t Fault;

int main(void){

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);

     GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2);

      IntMasterEnable();

      IntEnable(INT_PWM0_FAULT);

      GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,FALSE);      Fault=GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_2);

PB2.0 作为输出,你怎么读取Fault值。

      while(Fault==1)      {         PWM0faultIntHandler();      }

      for(;;) //infinite loop      {}

}

voidPWM0faultIntHandler(void){     //清除错误中断     PWMFaultIntClear(PWM0_BASE);     PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);     PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false);     PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false);     PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false);     PWMOutputState(PWM0_BASE, PWM_OUT_4_BIT, false);     PWMOutputState(PWM0_BASE, PWM_OUT_5_BIT, false);}

这样写为什么不可以呢?

     

LiangLiang wang1:

回复 Maka Luo:

就算改成用PD2引脚来读取PB2引脚的值还是不行

GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_PIN_2); Fault=GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_2);

现在的问题是Fault的值一直是0,没法进入PWM0faultIntHandler()中断处理函数

LiangLiang wang1:

回复 Maka Luo:

有没有使用PWM0FAULT0的例子?不知道怎么使用它检测故障信号禁止PWM输出!

Maka Luo:

回复 LiangLiang wang1:

GPIO读,怎么能对GPIO进行写操作呢。

PB2信号是什么?

LiangLiang wang1

就算改成用PD2引脚来读取PB2引脚的值还是不行

GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_PIN_2); Fault=GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_2);

现在的问题是Fault的值一直是0,没法进入PWM0faultIntHandler()中断处理函数

LiangLiang wang1:

回复 Maka Luo:

想用PB2来模拟故障信号,PD2为PWM模块的Fault接收信号,将PB2与PD2短接。当PB2为高电平时PD2接收到一个故障信号而进入PWM0FaultIntHandler()中断处理函数,禁止六路PWM输出,起到故障保护的作用。

就是想实现这样的功能,请问该怎么在程序里面进行设置呢?

xyz549040622:

回复 LiangLiang wang1:

你现在的问题是就没有进去中断,好好检查下为什么进不去中断呢?这里有个怀疑的问题,那就是你PB2和PD2短接的问题,你可以试试直接短路PD2为GND和VCC试试。

LiangLiang wang1:

回复 xyz549040622:

如果把PD2配置为PWM0Fault0是不是经过下面三步就可以了?

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

    GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_2);

    GPIOPinConfigure(GPIO_PD2_M0FAULT0);

然 后设置PWMOutputFaultLevel(PWM0_BASE, PWM_OUT_0_BIT|PWM_OUT_1_BIT|PWM_OUT_2_BITPWM_OUT_3_BIT|

                                                                                       PWM_OUT_4_BIT|PWM_OUT_5_BIT,false)

当PD2接受到高电平时,六路PWM就按指定电平输出,即PWM被锁死,是这样吗?

xyz549040622:

回复 LiangLiang wang1:

最主要的,增加中断向量表的配置,进行中断的配置。IO的配置的话,可以用TI专门的引脚配置工具试试,看看缺少了哪一步的配置。

LiangLiang wang1:

回复 xyz549040622:

有PWMFault信号设置成功的程序吗,贴上来参考一下,谢谢!

xyz549040622:

回复 LiangLiang wang1:

这个模块没有用过。官方也是没有提供例程的,只能自己写了。

赞(0)
未经允许不得转载:TI中文支持网 » TM4C123gh6pmPWM模块Fault信号问题
分享到: 更多 (0)