找回密码
 立即注册
查看: 251|回复: 0

求助,PWM输入捕获的疑问。

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-03-10 12:50:25
已绑定手机

17

主题

28

回帖

254

积分

中级会员

积分
254
发表于 2024-6-29 02:52:57 | 显示全部楼层 |阅读模式
本帖最后由 capcomsnk 于 2024-6-29 02:53 编辑

        u16 PWM_LOW;  
        u8 pwm_low = 0;

        // 预分频 24Mhz /(23+1)=1Mhz        为 1us。
        PWMA_PSCRH = 0x00; // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1),
        PWMA_PSCRL = 0x17; // 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).

        //(CC3捕获TI4上升沿,CC2捕获TI4下降沿),在CC4中断里用CC4捕获值减去CC3的捕获值,得到高电平宽度。
        PWMA_CCER2 = 0x00;
        PWMA_CCMR3 |= 0x30;       // 采样8次
        PWMA_CCMR3 |= 0x02;       // CC3为输入模式,且映射到TI4FP3上
        PWMA_CCMR4 |= 0x30;       // 采样8次
        PWMA_CCMR4 |= 0x01;       // CC4为输入模式,且映射到TI4FP4上
        PWMA_CCER2 = 0x11;         // 使能CC3/CC4上的捕获功能
        PWMA_CCER2 |= 0x00;       // 设置捕获极性为CC3的上升沿
        PWMA_CCER2 |= 0x20;       // 设置捕获极性为CC4的下降沿
        PWMA_CR1 = 0x01;            // 使能计数器

        PWMA_PS |= 0x40; //   选择捕获脚位  P2.6
        PWMA_IER = 0x08; //  使能CC3获中断  测低电平

void PWMA_ISR_Handler(void) interrupt PWMA_VECTOR
{
         if (PWMA_SR1 & 0x08) // CC3IF 捕获/比较中断
        {
                PWMA_SR1 &= ~0x08;

                cnt1 = (PWMA_CCR3H << 8) + PWMA_CCR3L;
                cnt2 = (PWMA_CCR4H << 8) + PWMA_CCR4L;
                cnt = cnt1 - cnt2;  //测低电平

                PWM_LOW[pwm_low] = cnt;//低电平脉宽赋值给数据
                pwm_low++;


                if (pwm_low > 16)
                pwm_low = 0;        
        }
}




上面的代码是连接获取16个低电平脉宽的值,根据样例修改而来,已经可以捕获且可进入中断。  
实际的波形(下图)低电平的脉宽都是一样的。

波形图

波形图

而捕获的值却是

数据

数据


不知是哪里没有操作对。 是不是计时器溢出导致的?如果是的话,该怎么弄?谢谢了。


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 00:52 , Processed in 0.135388 second(s), 45 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表