找回密码
 立即注册
查看: 1511|回复: 8

请教大神,编码器+PWM怎么同时使用

[复制链接]

1

主题

2

回帖

15

积分

新手上路

积分
15
发表于 2023-5-13 21:09:09 | 显示全部楼层 |阅读模式
我使用STC32G12K128,现在需要出两对独立频率一样的互补pwm,两路独立编码器。有个问题是,
能不能一个编码器接一个高级pwm,并且同时再接一对互补pwm(比如pwma接一个编码器同时出两路互补pwm)


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-5-14 13:15:16 | 显示全部楼层
本帖最后由 梁工 于 2023-5-14 20:10 编辑

某一组PWM用于编码器,就不能再用做PWM或其他功能,因为PWM定时器被占用了。
可以PWMB【PWM4, PWM5, PWM6, PWM7】用于编码器,并且只能接一个编码器。
PWMA用于4路PWM(带互补输出),PWM1P/PWM1N, PWM2P/PWM2N, PWM3P/PWM3N, PWM4P/PWM4N。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2023-5-14 13:52:23 | 显示全部楼层
我不懂这个PWM, 猜测:
楼主 用
PWMA组的4对来产生4对的PWM
对外输出,
===PWM1P/PWM1N, PWM2P/PWM2N, PWM3P/PWM3N, PWM4P/PWM4N

===PWMA组的4对,如已部分用做PWM输出,就不能再用于编码器输入

楼主 用  PWM B组,只能接1个编码器
PWMB组的【PWM4, PWM5】,TI5/TI6,  用于编码器
或 PWMB组的【PWM6, PWM7】,TI7/TI8,  用于编码器

====但 PWMB组只能支持1个编码器,要支持更多编码器只能再考虑用外部中断  ?


楼主要 再支持 第2个 编码器,大家一起来帮忙

冲哥说:
I/O口外部中断+普通I/O方向检测;
或者, D触发器做鉴相电路加上定时器的输入也可


回复 支持 反对

使用道具 举报 送花

1

主题

2

回帖

15

积分

新手上路

积分
15
发表于 2023-5-14 22:02:44 | 显示全部楼层
对,我现在的问题就是有两个编码器要使用,但是这样就占满两个pwm了。我想到的是用io口的中断来处理,但是我编码器大约3kHz触发,担心影响其他程序,有一个对延时要求比较高的一个pid闭环在里面。

点评

用一个外中断+一个IO读编码器,30KHz都可以的,跑24MHz或以上,中断处理一般就是2us而已。  详情 回复 发表于 2023-5-15 08:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2023-5-14 22:22:30 | 显示全部楼层
那你将 STC32G12K128-35MHz-LQFP48/32 改成 STC32G8K64-42MHz-LQFP48/32 !
主频改用 42MHz, 一下子提高了 7MHz, 够了
变量用 edata
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-5-15 08:21:44 | 显示全部楼层
msu*** 发表于 2023-5-14 22:02
对,我现在的问题就是有两个编码器要使用,但是这样就占满两个pwm了。我想到的是用io口的中断来处理,但是 ...

用一个外中断+一个IO读编码器,30KHz都可以的,跑24MHz或以上,中断处理一般就是2us而已。
回复 支持 反对

使用道具 举报 送花

1

主题

2

回帖

15

积分

新手上路

积分
15
发表于 2023-5-17 00:18:02 | 显示全部楼层
谢谢大神
我现在的想法是用tim定时器的外部输入做计数源,我用的是AB线的,想知道正反,所以能不能在计数器在用作外部触发做计数源的时候还能触发上升沿中断这样的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-5-17 15:33:39 | 显示全部楼层
STC32G使用外中断INT0或INT1接正交编码器的例子已好,请移步下载:

STC32G-使用外中断和一个IO读取正交编码器-7段虚拟数码管显示
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2291
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-05-01 06:58:22

5

主题

184

回帖

1335

积分

金牌会员

积分
1335
发表于 2023-5-17 16:53:43 | 显示全部楼层
本帖最后由 jmg 于 2023-5-17 17:02 编辑
msu*** 发表于 2023-5-14 22:02
对,我现在的问题就是有两个编码器要使用,但是这样就占满两个pwm了。我想到的是用io口的中断来处理,但是 ...
but my encoder triggers at about 3kHz,

Do you need to count every edge, or are you ok with one count every 4 edges ?

If one count every 4 edges is ok, you can edge interrupt on one Quad line, and check the other line for direction information.

If you need to count every edge, it looks like INT0 and INT1 can react to both edges, so using two interrupts enabled for both edges (_/= and =\_ ) interrupts can use a table or state engine to react on every edge.
1.png
So can the counter be triggered to rise when it is used as an external trigger as the counting source?

You need UP/DOWN for a quad encoder, and the STC8 timers are all UP only, so a software counter is needed, the hardware counters cannot be used.
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 14:35 , Processed in 0.124035 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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