ickycccc 发表于 2024-10-22 18:44:54

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

本帖最后由 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信号 不会干扰



ickycccc 发表于 2024-10-23 10:53:29

王昱顺 发表于 2024-10-23 09:26
ISP的例程要说错也没有错,不过只能采集第一个占空比和周期,后面的就需要像梁工那样做一下运算了。
简单 ...

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

王昱顺 发表于 2024-10-23 09:26:54

本帖最后由 王昱顺 于 2024-10-23 09:34 编辑

ickycccc 发表于 2024-10-23 09:03
今天翻帖子 翻到梁工你的例子,如图 你在捕获的时候有一个减法运算,但是ISP里面的示例没有 直接就是PWMB_C ...
ISP的例程要说错也没有错,不过只能采集第一个占空比和周期,后面的就需要像梁工那样做一下运算了。
简单来说,PWM捕获就是一个用定时器一直跑,然后记捕获到来时候的定时器值。
拿最简单的周期捕获来讲,每次下降沿进行一次捕获,那么按顺序捕获出来的值就像这样:
10,20,30,40,50
通过上一次减这一次,就可以得到周期为10。如果再捕获上升沿,自然就可以算出高电平和低电平时间,进而得到PWM的占空比

ickycccc 发表于 2024-10-23 09:03:27

今天翻帖子 翻到梁工你的例子,如图 你在捕获的时候有一个减法运算,但是ISP里面的示例没有 直接就是PWMB_CCR2和PWMB_CCR1用来当作周期和高电平脉宽时间, 还有一个讲解视频在描述的时候也是模棱两可。
我想问一下范例里的是不是有误啊,我用梁工的例子就能正常读取周期和高电平时间而且串口反返回的数据也是正确的(尝试很多次)
页: [1]
查看完整版本: 关于STC8H8K64U 的PWM输入捕获 求助 求助!!!