linxi6414 发表于 2022-8-23 23:58

求助关于STC15W408AS的PCA脉冲宽度的采集问题

本帖最后由 linxi6414 于 2022-8-24 00:01 编辑

需要对一个2K频率的脉冲进行脉冲宽度采集,需要同时采样高电平的时间和低电平的时间,因为输入的频率会有一定的漂移,需要同时测量高低电平的时间,然后算出占空比,程序中要得到的是占空比,现在测试发现无论怎么调,高低电平的时间都是一样的,调占空比的时候,数据会从0-993之间变化,但是PWM_L和PWM_H同时变化,实际输入的脉冲用逻辑分析仪观察是没有问题的,可以1%-99%变化,程序如下:
#include "STC15F2K60S2.H"
#include"PPCA.h"

sbit PWM_IN = P1^0;//CCP1PWM脉冲输入引脚,频率约为2K的PWM 占空比为1%-99%可调

unsigned char PCADAT_L=0,PCADAT_H=0,CCP_ER=0;
unsigned int PWM_L=0,PWM_H=0,PWM_DAT=0;

void PPCA_Init(void)//PCA初始化函数
{         
    CCON = 0;                     //初始化PCA控制寄存器
                                    //PCA定时器停止
                                    //清除CF标志
                                    //清除模块中断标志
    CL = 0;                         //复位PCA寄存器
    CH = 0;
    CMOD = 0x01;                  //设置PCA时钟源为系统时钟/12,使能PCA定时器溢出中断
   
    CCAP1L = 0;                     //PCA模块1实现16位捕获
    CCAP1H = 0;                     //初始化PCA模块1
    CCAPM1 = 0x31;                  //PCA模块1为16位捕获模式(上升沿/下降沿捕获,可测高电平或者低电平宽度),且产生捕获中断
    CR = 1;                         //PCA定时器开始工作                                       
}

void PCA_isr() interrupt 7
{
    if (CF)                         //判断是否为PCA计时溢出中断
    {
      CF = 0;
      if(CCP_ER<10)
      {
            CCP_ER++;
      }
    }
    if (CCF1)                     //判断是否为CCF1中断(捕获中断)
    {
      CCF1 = 0;
      PCADAT_L= CCAP1L;//保存本次的捕获值
      PCADAT_H= CCAP1H;
      CH=0;//如果此处不清零,采集到的数据是乱的,并且上面的CF会发生中断
      CL=0;
      PWM_DAT=PCADAT_H;
      PWM_DAT<<=8;
      PWM_DAT|=PCADAT_L;
      if(PWM_IN)
      {
            PWM_L=PWM_DAT;                  
      }
      else
      {
            PWM_H=PWM_DAT;      
      }
    }
}



linxi6414 发表于 2022-8-28 19:54

自己顶一下。

linxi6414 发表于 2022-8-29 15:53

自这边需要的应用是采集占空比,需要同时采集高电平和低电平的时间,然后算出占空比,频率会有一定的波动。如果说只是采集高电平时间或者低电平时间,肯定会有误差。

linxi6414 发表于 2022-9-1 21:49

自已再顶顶。

linxi6414 发表于 2022-9-2 21:49

自己再顶顶。

STCMCUNT018 发表于 2022-9-3 11:05

参考这个参考程序


linxi6414 发表于 2022-9-4 10:37

STCMCUNT018 发表于 2022-9-3 11:05
参考这个参考程序

这边要的是占空比,这个是捕获宽度,不一样吧,好像,因为输入的脉冲宽度和频率都会有变化。但是频率变化的范围较小,占空比变化的范围较大。

STCMCUNT018 发表于 2022-9-8 10:04

linxi6414 发表于 2022-9-4 10:37
这边要的是占空比,这个是捕获宽度,不一样吧,好像,因为输入的脉冲宽度和频率都会有变化。但是频率变化 ...


linxi6414 发表于 2022-9-9 09:03

根本就没有啊,兄弟,都是同样的程序,都是测量脉冲宽度的,没有测量占空比的。我需要同时得到高电平时间和低电平时间。

STCMCUNT018 发表于 2022-9-9 11:33

用 2路CCP/PCA/PWM 去测量

lyjian 发表于 2022-9-10 08:38

linxi6414 发表于 2022-9-9 09:03
根本就没有啊,兄弟,都是同样的程序,都是测量脉冲宽度的,没有测量占空比的。我需要同时得到高电平时间和 ...
高脉宽+低脉宽=周期,高脉宽/周期=占空比。
占空比、周期之类,都可以通过采集脉宽得到。
页: [1]
查看完整版本: 求助关于STC15W408AS的PCA脉冲宽度的采集问题