找回密码
 立即注册
查看: 234|回复: 18

请教关于读取多路PWM的问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-06-13 08:10:35

2

主题

10

回帖

70

积分

注册会员

积分
70
发表于 2025-6-4 14:33:26 | 显示全部楼层 |阅读模式
修改一下,我用的是32G8K64,
我的目的是需要读取4路PWM的高电平宽度,然后还要输出2路PWM,
但是按照我学习例程的方法只能读取2路,不会读取4路,
请哪位大神指导一下,谢谢!程序如下:




void PWM_Config()                                                        // PWM初始化设置
{
//--------------------------PWMA设置-CC1捕获上升沿、CC2捕获下降沿-----------------------        
        PWMA_CCER1 = 0x00;                                        // 关闭通道
        PWMA_CCMR1 = 0x01;                                         // CC1通道配置为输入,映射在TI1FP1上
        PWMA_CCMR2 = 0x02;                                         // CC2通道配置为输入,映射在TI1FP2上
        PWMA_CCER1 = 0x11;                                        // 使能CC1、CC2通道
        PWMA_CCER1 |= 0x00;                                        // 设置CC1捕获上升沿
        PWMA_CCER1 |= 0x20;                                        // 设置CC2捕获下降沿

        PWMA_CCER2 = 0x00;                                        // 关闭通道
        PWMA_CCMR3 = 0x01;                                         // CC3通道配置为输入,映射在TI1FP3上
        PWMA_CCMR4 = 0x02;                                         // CC4通道配置为输入,映射在TI1FP4上
        PWMA_CCER2 = 0x11;                                        // 使能CC3、CC4通道
        PWMA_CCER2 |= 0x00;                                        // 设置CC3捕获上升沿
        PWMA_CCER2 |= 0x20;                                        // 设置CC4捕获下降沿

        PWMA_IER = 0x1e;                                                 // 使能CC2捕获中断
        PWMA_CR1 |= 0x01;                                         // 使能PWMA计数器,启动PWM定时器
        

        PWMB_PSCRH = (u16)(PWMB_PSC >> 8);
        PWMB_PSCRL = (u16)(PWMB_PSC);        // 预分频
        
        PWMB_CCER1 = 0x00;                                        // 关闭通道
        PWMB_CCMR1 = 0x60;                                         // 通道模式配置为输出,PWM模式1
        PWMB_CCMR2 = 0x60;          //原值0x30   设置 CC6 为 PWMB 输出模式,翻转电平
        PWMB_CCER1 = 0x11;                                        // 使能捕获/比较通道5,使能CCR预装载,原来值05

        PWMB_CCR5H = (u16)(22 >> 8);
        PWMB_CCR5L = (u16)(22 );                  
        PWMB_CCR6H = (u16)(22 >> 8);                                // 设置 CC6 初始占空比 0 %
        PWMB_CCR6L = (u16)(22 );
        
        PWMB_ARRH = (u16)(PWMB_PERIOD >> 8);
        PWMB_ARRL = (u16)(PWMB_PERIOD);                        // 设置周期
        
        PWMB_ENO = 0x55;                                                // 使能PWM5,6,7,8输出
        PWMB_BKR = 0x80;                                                // 使能PWMB主输出
        PWMB_CR1 |= 0x01;                                         // 使能PWMB计数器,启动PWM定时器

}


回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:99
  • 最近打卡:2025-06-16 09:28:47

733

主题

1万

回帖

1万

积分

管理员

积分
16635
发表于 2025-6-4 17:01:42 | 显示全部楼层
Ai8051U 可以
截图202506041708519381.jpg

截图202506041709303239.jpg
截图202506041701365171.jpg


截图202506041702412369.jpg

截图202506041704317690.jpg
以上,这捕捉 4路 高电平输入

下面还有 3路 PCA/CCP/PWM 做 3路 PWM 输出
截图202506041705249302.jpg
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:94
  • 最近打卡:2025-06-16 11:51:06

74

主题

6089

回帖

1万

积分

超级版主

积分
12721
发表于 2025-6-4 16:57:51 | 显示全部楼层
如果要测量高电平时间和周期时间,则2个PWM通道只能测1路输入信号。
如果只测量高电平时间,则一组PWM能测4路信号,
但4路信号的最小高电平时间或最小低电平时间有限制,不能小于4us,
因为要进入中断读取处理数据。

上述两种方式处理方法不同,你需要哪一种?

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:499
  • 最近打卡:2025-06-16 10:06:31
已绑定手机
已实名认证

112

主题

2390

回帖

6014

积分

版主

积分
6014
发表于 2025-6-5 07:50:34 | 显示全部楼层
如果是使用PWMA和PWMB的情况下,就是只能捕获2路高电平宽度,输出4路PWM
不过,如果你捕获的高电平信号比较宽的情况下,可以尝试CC1设置上升沿,捕获后记下当前的PWM计数值,然后切换到下降沿捕获,再次捕获后再切换回上升沿,如此循环。就可以一组PWM同时捕获4路PWM高电平了
不过唯一需要注意的就是,切换PWM寄存器需要时间,如果高电平时间比较短,那么就没办法用这个方法了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-06-13 08:10:35

2

主题

10

回帖

70

积分

注册会员

积分
70
发表于 2025-6-5 14:04:07 | 显示全部楼层
梁*** 发表于 2025-6-4 16:57
如果要测量高电平时间和周期时间,则一组PWM只能测2路信号。
如果只测量高电平时间,则一组PWM能测4路信号 ...

我只测量高电平时间,时间在1000US以上,就是不会处理,采集高电平时间后根据时间去调节2路输出的PWM占空比

点评

测量4路高电平时间,去调节2路PWM输出,请详细说出其映射关系,否则没人能知道你想要什么。  详情 回复 发表于 2025-6-5 14:44
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-06-13 08:10:35

2

主题

10

回帖

70

积分

注册会员

积分
70
发表于 2025-6-5 14:06:45 | 显示全部楼层
王*** 发表于 2025-6-5 07:50
如果是使用PWMA和PWMB的情况下,就是只能捕获2路高电平宽度,输出4路PWM
不过,如果你捕获的高电平信号比较 ...

这个有例程可以看下吧?

点评

可以看下技术手册  详情 回复 发表于 2025-6-5 15:05
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:94
  • 最近打卡:2025-06-16 11:51:06

74

主题

6089

回帖

1万

积分

超级版主

积分
12721
发表于 2025-6-5 14:44:55 | 显示全部楼层
czl*** 发表于 2025-6-5 14:04
我只测量高电平时间,时间在1000US以上,就是不会处理,采集高电平时间后根据时间去调节2路输出的PWM占空 ...

测量4路高电平时间,去调节2路PWM输出,请详细说出其映射关系,否则没人能知道你想要什么。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:499
  • 最近打卡:2025-06-16 10:06:31
已绑定手机
已实名认证

112

主题

2390

回帖

6014

积分

版主

积分
6014
发表于 2025-6-5 15:05:53 | 显示全部楼层
czl*** 发表于 2025-6-5 14:06
这个有例程可以看下吧?

可以看下技术手册
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-06-13 08:10:35

2

主题

10

回帖

70

积分

注册会员

积分
70
发表于 2025-6-5 19:00:59 | 显示全部楼层
梁*** 发表于 2025-6-5 14:44
测量4路高电平时间,去调节2路PWM输出,请详细说出其映射关系,否则没人能知道你想要什么。 ...

他们之间没有关系,我只是在这个项目里需要同时读取4路PWM的高电平时间,然后还需要用到2路PWM输出

点评

请下载参考: 03-PWMA-4个捕获通道 04-PWMB-4个捕获通道 STC8H系列-高级PWM范例程序下载,2024/1/3 更新 https://www.stcaimcu.com/thread-1779-1-1.html (出处: 国芯技术交流网站) STC32G-高级PWM范例程序下载 ht  详情 回复 发表于 2025-6-5 20:34
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:94
  • 最近打卡:2025-06-16 11:51:06

74

主题

6089

回帖

1万

积分

超级版主

积分
12721
发表于 2025-6-5 20:34:08 | 显示全部楼层
czl*** 发表于 2025-6-5 19:00
他们之间没有关系,我只是在这个项目里需要同时读取4路PWM的高电平时间,然后还需要用到2路PWM输出 ...

请下载参考:
03-PWMA-4个捕获通道
04-PWMB-4个捕获通道

STC8H系列-高级PWM范例程序下载,2024/1/3 更新
https://www.stcaimcu.com/thread-1779-1-1.html
(出处: 国芯技术交流网站)

STC32G-高级PWM范例程序下载
https://www.stcaimcu.com/thread-1778-1-1.html
(出处: 国芯技术交流网站)
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 12:55 , Processed in 0.188460 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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