Thread 中讨论的其他器件:controlSUITE
工具/软件:Code Composer Studio
您好!
我尝试生成一个二次 PWM 来控制100Hz 的5V 直流电机速度。 根据 TI 示例、我完成了以下代码:
(笑声)
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; //将电阻器上拉参数设置为使用 el GPIO0 como EPWM1A
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; //准备好 GPIO0参数使 EPWM1A 具有功能
unsigned int epwm1Periodo = 46921;
unsigned int epwm1DuttyCycle = 26921;
空 InitEPwm (空)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
EPwm1Regs.TBCTL.bit.CTRMODE = 0x0; // generar diente de Sierra de tipo 向上计数模式
EPwm1Regs.TBPRD = epwm1Periodo; // India el periodo del diente de Sierra Segun la fórmula TPWM =(TBPRD+1) x TTBCLK 参数递增计数模式
EPwm1Regs.TBCTL.bit.PHSEN = 0x0; //从 tiempo 基址去 fase TBPHS
EPwm1Regs.TBPHS.Half.TBPHS = 0x0000; // se setea la fase a cero
EPwm1Regs.TBCTR = 0x0000; // se iniciza el contador
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x5; // TBCLK = SYSCLKOUT /(HSPCLKDIV×CLKDIV)(Valor /32)
EPwm1Regs.TBCTL.bit.CLKDIV = 0x1; // TBCLK = SYSCLKOUT /(HSPCLKDIV×CLKDIV)(Valor /1)-时钟 del PWM 特性 de SYSCLKOUT (150MHz)
EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0x0; // se setean los registros Shadow a cero
EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0x0; // se setean los registros Shadow a cero
EPwm1Regs.CMPCTL.bit.LOADAMODE = 0x0; // Carga el registro cuando TBCTR toma valor 0
EPwm1Regs.CMPCTL.bit.LOADBMODE = 0x0; // Carga el registro cuando TBCTR toma valor 0
EPwm1Regs.CMPA.half.CMPA = epwm1DuttyCycle; // se setea un valor de comparación ó n con el diente de Sierra en Herzios
EPwm1Regs.AQCTLA.bit.ZRO = 0x2; //将 PWM1A "置为零
EPwm1Regs.AQCTLA.bit.CAU = 0x1; //在事件 A 上"清除"PWM1A、递增计数
EPwm1Regs.ETSEL.bit.INTSEL = 0x1; // se selectiona la interrupción 0 para el PWM (La interrupción cambiará ó n el valor de comparación ó n)
EPwm1Regs.ETSEL.bit.INTEN = 1; // se habilita la interrupción ó n
EPwm1Regs.ETPS.bit.INTPRD = 0x3; // se genera la interrupción ó n despus que se hayan productido 3 eventos asociados a la interrupción ó n
EPwm1Regs.AQSFRC.ALL = 0x0000; //动作限定符 s/w 强制寄存器
EPwm1Regs.AQCSFRC.ALL = 0x0000; //动作限定符连续 s/w 强制寄存器
EPwm1Regs.DBCTL.bit.OUT_MODE = 0; //禁用死区
EPwm1Regs.PCCTL.bit.CHPEN = 0; // PWM 斩波器单元被禁用
EPwm1Regs.TZCTL.bit.TZA = 0x3; //针对输出 A 禁用跳闸操作
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
EINT;
ERTM;
}
然后在中断上、以下代码:
中断空 EPWM1_INT_ISR (空) // PIE3.1 @ 0x000D60 EPWM1_INT
{
EPwm1Regs.CMPA.half.CMPA =(无符号整型) 20000;
EPwm1Regs.ETCLR.bit.INT = 1; //清除此计时器的 INT 标志
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3; //确认此中断以接收来自组3的更多中断
IER |= M_INT3;
}
n´t 编译正确、但在调试程序时会在中断上停止。 使用测试仪、GPIO0上的电压在 Aprox 2、5V 上为n´t μ A、这与 dutty 周期类似。 原因可能是什么?
谢谢、
Pablo González í a