找回密码
 立即注册
查看: 347|回复: 3

关于STC8H8K64U 的PWM输入捕获 求助 求助!!!

[复制链接]

1

主题

2

回帖

23

积分

新手上路

积分
23
发表于 2024-10-22 18:44:54 | 显示全部楼层 |阅读模式
本帖最后由 ickycccc 于 2024-10-22 18:47 编辑

我是用烧录软件里的范例去捕获PWM,这里使用了PWM5 和PWM1P通道,两个通道都试过了。
问题:
1.通过串口将得到的计数点cnt的值打印出来,。但是通过串口打印出来的值占空比时间(高电平脉宽时间)和脉宽周期的比值并不等于我发出的PWM信号。
2.当发出的PWM信号占空比接近50%的时候,串口打印的两个值也对不上而且误差很大。
3.范例里的程序一个计数点“cnt”是多少时间这个怎么去计算?
下面是一次串口打印的数据 :

                   Period Time: 44722
                    Duty Cycle Time: 55070
                    Period Time: 44630
                    Duty Cycle Time: 55109
                    Period Time: 44737
                    Duty Cycle Time: 55119
                    Period Time: 44694
                    Duty Cycle Time: 55101
                    Period Time: 44742


上面串口打印的数据由50%占空比输入的PWM信号生成的,但是数据有问题



使用的代码如下:
void PWMB_ISR() interrupt 27 {
    unsigned int cnt;


                if (PWMB_SR1 & 0x02)
    {
        PWMB_SR1 &= ~0x02;


        cnt = PWMB_CCR5;                        //CC1捕获周期宽度
                        printf("Period Time: %u\n", cnt);  // 打印占空比时间
    }


    if (PWMB_SR1 & 0x04) {                      // 检查CC6捕获中断
        PWMB_SR1 &= ~0x04;                      // 清除中断标志
        cnt = PWMB_CCR6 ;                        // CC6捕获占空比(高电平宽度)
        printf("Duty Cycle Time: %u\n", cnt);  // 打印占空比时间
    }
}
补充:这个PWM信号是由另一块STC8H8K发出来的PWM信号 不会干扰



50%的占空比

50%的占空比
回复

使用道具 举报 送花

1

主题

2

回帖

23

积分

新手上路

积分
23
发表于 2024-10-23 10:53:29 | 显示全部楼层
王*** 发表于 2024-10-23 09:26
ISP的例程要说错也没有错,不过只能采集第一个占空比和周期,后面的就需要像梁工那样做一下运算了。
简单 ...

对,ISP的例程只采集一个通道,但是那个例子运行之后采集不对 他分两次捕获  一次上升沿一次下降沿 没有进行加减运算,所以我觉得两次捕获的时间分别是第一次上升沿和第二次上升沿的间隔时间,第一次下降沿和第二次下降沿的时间,如截图记录的这两次时间直接就表示了高电平时间和周期时间
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-10-23 09:26:54 | 显示全部楼层
本帖最后由 王昱顺 于 2024-10-23 09:34 编辑
icky*** 发表于 2024-10-23 09:03
今天翻帖子 翻到梁工你的例子,如图 你在捕获的时候有一个减法运算,但是ISP里面的示例没有 直接就是PWMB_C ...

ISP的例程要说错也没有错,不过只能采集第一个占空比和周期,后面的就需要像梁工那样做一下运算了。
简单来说,PWM捕获就是一个用定时器一直跑,然后记捕获到来时候的定时器值。
拿最简单的周期捕获来讲,每次下降沿进行一次捕获,那么按顺序捕获出来的值就像这样:
10,20,30,40,50
通过上一次减这一次,就可以得到周期为10。如果再捕获上升沿,自然就可以算出高电平和低电平时间,进而得到PWM的占空比
截图202410230934098720.jpg
回复 支持 反对

使用道具 举报 送花

1

主题

2

回帖

23

积分

新手上路

积分
23
发表于 2024-10-23 09:03:27 | 显示全部楼层
今天翻帖子 翻到梁工你的例子,如图 你在捕获的时候有一个减法运算,但是ISP里面的示例没有 直接就是PWMB_CCR2和PWMB_CCR1用来当作周期和高电平脉宽时间, 还有一个讲解视频在描述的时候也是模棱两可。
我想问一下范例里的是不是有误啊,我用梁工的例子就能正常读取周期和高电平时间而且串口反返回的数据也是正确的(尝试很多次)
截图202410230903108147.jpg
截图202410230903241278.jpg

点评

ISP的例程要说错也没有错,不过只能采集第一个占空比和周期,后面的就需要像梁工那样做一下运算了。 简单来说,PWM捕获就是一个用定时器一直跑,然后记捕获到来时候的定时器值。 拿最简单的周期捕获来讲,每次下降沿  详情 回复 发表于 2024-10-23 09:26
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:30 , Processed in 0.136659 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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