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

为什么Ecap模块捕捉50hz的接收机输出的PWM 不成功,既没有周期也没有高电平

如题:

问题描述:我使用Ecap模块捕捉航模接收机输出的50hz脉冲,通过高电平的不同,来点亮不同的灯;但是

程序进入不了Read_radio()函数,逻辑上也没有错误,请教下 问题出在哪里?

void InitECapture1(void)
{

ECap1Regs.ECEINT.all = 0x0000; //禁止所有捕获中断
ECap1Regs.ECCLR.all = 0xFFFF; //清除所有CAP中断标志位
ECap1Regs.ECCTL1.bit.CAPLDEN = 0x0; //在捕捉时间禁止CAP1-CAP4寄存器装载
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0x0; //确保计数器停止
ECap1Regs.ECCTL1.bit.PRESCALE=0x0; //预分频:1

// 配置ECCTL寄存器
ECap1Regs.ECCTL2.bit.CAP_APWM= 0x0; //0选择 CAP模式:1选择APWM模式
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0x1; //置0运行于连续模式,置1运行于单次模式
ECap1Regs.ECCTL2.bit.STOP_WRAP = 0x1; //在单次模式下:置3事件4停止;置2事件3停止;置1事件2停止;置0事件1停止
//在连续模式下:置3事件4清除;置2事件3清除;置1事件2清除;置0事件1清除

ECap1Regs.ECCTL1.bit.CAP1POL = 0x0; //置0上升沿触发,置1下降沿触发
ECap1Regs.ECCTL1.bit.CAP2POL = 0x1; //
ECap1Regs.ECCTL1.bit.CAP3POL = 0x0; //
ECap1Regs.ECCTL1.bit.CAP4POL = 0x1; //

ECap1Regs.ECCTL1.bit.CTRRST1 = 0x1; //置1时间差间隔运行,置0绝对时间标签运行
ECap1Regs.ECCTL1.bit.CTRRST2 = 0x1; //
ECap1Regs.ECCTL1.bit.CTRRST3 = 0x1; //
ECap1Regs.ECCTL1.bit.CTRRST4 = 0x1; //

ECap1Regs.ECCTL2.bit.SYNCI_EN = 0x0; //0禁止sync-in;1使能sync-in
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0x2; //0直通sync-in=sync-out;1选择CTR=PRD内部同步信号为sync-out;2禁止sync-out
ECap1Regs.ECCTL1.bit.CAPLDEN = 0x1; //0禁止CAP1-4寄存器在捕捉时间装载

ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0x1; //启动计数器
ECap1Regs.ECCTL2.bit.REARM = 0x1; //单次强制
ECap1Regs.ECCTL1.bit.CAPLDEN = 0x1; //使能捕捉单元,在捕捉时间的时刻;使能CAP1-CAP4寄存器加载

ECap1Regs.ECEINT.bit.CEVT2 = 0x1; //4事件=中断

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

interrupt void ecap1_isr(void)
{
//声明局部变量
int ecap1_TSt1;
int ecap1_TSt2;

//提取捕捉到的脉冲
ecap1_TSt1 = ECap1Regs.CAP1; //时间戳t1
ecap1_TSt2 = ECap1Regs.CAP2; //时间戳t2

//中断计数器
ECap1IntCount++;
//匹配脉冲宽度,并置标志位

if((RC_INPUT_PERIO-(ecap1_TSt1*TIME_ELEMENT+ecap1_TSt2*TIME_ELEMENT))<1000)
{
Read_radio(ecap1_TSt2*TIME_ELEMENT);
}

//中断相关配置
ECap1Regs.ECCLR.bit.CEVT2 = 0x1; //
ECap1Regs.ECCLR.bit.INT = 0x1;
ECap1Regs.ECCTL2.bit.REARM = 0x1; //持续捕捉外部信号

// Acknowledge this interrupt to receive more interrupts from group 4
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void Read_radio(int rc_input)
{

if((rc_input-AUX_INPUT_1)<100)
{
ctr_mode_flag=MANNAL_CTR_FLAG; //自主飞行模式
//////////////////////////////////////////
LED1=1; //LED1灭
LED2=0; //LED1亮
//////////////////////////////////////////
DELAY_US(100000);
}
else if((rc_input-AUX_INPUT_0)<100)
{
ctr_mode_flag=AUTO_CTR_FLAG; //遥控飞行模式
//////////////////////////////////////////
LED1=0; //LED1亮
LED2=1; //LED1灭
///////////////////////////////////////////
DELAY_US(100000);
}
else
{
LED1=1; //LED1灭
LED2=1; //LED1灭
//Fail();
}

}

/////////////////////////////////////////////////////////////////////////////////////////

#define TIME_ELEMENT 0.00667 //系统时基,6.67ns

#define AUX_INPUT_0 1900//287999 //aux=0 高电平1900us
#define AUX_INPUT_1 1100//164917 //aux=1 高电平1100us
#define RC_INPUT_PERIO 20000//2879998 //接收机输出PWM周期,20000us

///////////////////////////////////////////////////////////////////////////////////////////////////////

jiangkun gong:

除此之外,使用航模接收机输出给Ecap捕捉每次中断停止查看ECap1Regs.CAP1和ECap1Regs.CAP2的数值,都不一样,

但是使用Epwm模块产生50hz的脉冲给Ecap捕捉,每次中断停止查看ECap1Regs.CAP1和ECap1Regs.CAP2的数值是一样,

这是为什么呢?

赞(0)
未经允许不得转载:TI中文支持网 » 为什么Ecap模块捕捉50hz的接收机输出的PWM 不成功,既没有周期也没有高电平
分享到: 更多 (0)