打印
[STC单片机]

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

[复制链接]
1103|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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;//CCP1  PWM脉冲输入引脚,频率约为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 | 只看该作者
自已再顶顶。

使用特权

评论回复
5
linxi6414|  楼主 | 2022-9-2 21:49 | 只看该作者
自己再顶顶。

使用特权

评论回复
6
STCMCUNT018| | 2022-9-3 11:05 | 只看该作者
stc-isp-15xx-v6.90H.zip (14.13 MB) 参考这个参考程序


使用特权

评论回复
7
linxi6414|  楼主 | 2022-9-4 10:37 | 只看该作者
STCMCUNT018 发表于 2022-9-3 11:05
参考这个参考程序

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

使用特权

评论回复
8
STCMCUNT018| | 2022-9-8 10:04 | 只看该作者
linxi6414 发表于 2022-9-4 10:37
这边要的是占空比,这个是捕获宽度,不一样吧,好像,因为输入的脉冲宽度和频率都会有变化。但是频率变化 ...


使用特权

评论回复
9
linxi6414|  楼主 | 2022-9-9 09:03 | 只看该作者
根本就没有啊,兄弟,都是同样的程序,都是测量脉冲宽度的,没有测量占空比的。我需要同时得到高电平时间和低电平时间。

使用特权

评论回复
10
STCMCUNT018| | 2022-9-9 11:33 | 只看该作者
用 2路CCP/PCA/PWM 去测量

使用特权

评论回复
11
lyjian| | 2022-9-10 08:38 | 只看该作者
linxi6414 发表于 2022-9-9 09:03
根本就没有啊,兄弟,都是同样的程序,都是测量脉冲宽度的,没有测量占空比的。我需要同时得到高电平时间和 ...

高脉宽+低脉宽=周期,高脉宽/周期=占空比。
占空比、周期之类,都可以通过采集脉宽得到。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

623

帖子

5

粉丝