找回密码
 立即注册
楼主: 32G12K128

【 32G / 8H 系列的2组硬件PWM支持 2组正交编码器】,有视频讲解

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:203
  • 最近打卡:2025-09-13 10:58:14
已绑定手机

97

主题

996

回帖

2713

积分

超级版主

积分
2713
QQ
发表于 2024-6-4 16:44:36 | 显示全部楼层
若*** 发表于 2024-6-4 14:29
STC8H  2组正交编码器  程序在哪里获取?


宝,数据手册里有  https://www.stcaimcu.com/forum.p ... zE2ODA3MTc0fDF8OTg2
截图202406041644125881.jpg
热线19952583534
www.STCAI.com
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-09-16 00:46:59

0

主题

2

回帖

64

积分

注册会员

积分
64
发表于 2024-7-4 15:13:20 | 显示全部楼层
如果用了PWM1P和PWM2P接编码器,那PWM1N和PWM2N对应的引脚还可以用来做普通IO吗?
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:187
  • 最近打卡:2025-09-15 17:15:51

14

主题

130

回帖

1309

积分

金牌会员

积分
1309
发表于 2024-11-20 13:37:42 | 显示全部楼层
数码管显示很好
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-23 08:55:32

3

主题

36

回帖

163

积分

注册会员

积分
163
发表于 2025-2-20 22:19:27 | 显示全部楼层
请教各位前辈:我用STC8H1K08 SOP16接一个编码器,按照手册上范例程序“23.10.22使用高级PWM实现编码器”,编码器A相接P1.0,编码器B相应该接P1.2,但是这个MCU没有P.2,根据手册描述P1.2在P5.4口上,但是始终读取不到脉冲数字,一直是0,后来把编码器B相改接到P1.6,脉冲数字还是0,不知何故,还望各位前辈帮忙指正,谢谢!
串口通讯正常,因为我把pulse改成数值888后模拟数码管显示数值888正常。


void PWMA_config(void)
{
        PWMA_PSCR = 0;// 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1)
        PWMA_ARR  = 0xffff;// 自动重装载寄存器,  控制PWM周期
        PWMA_CNTR         = 0;//清零编码器计数器值
        PWMA_ENO    = 0;        // IO输出禁止
        PWMA_CCMR1  = 0x01+(10<<4);        // 通道1模式配置, 配置成输入通道, 0~15对应输入滤波时钟数: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
        PWMA_CCMR2  = 0x01+(10<<4);        // 通道2模式配置, 配置成输入通道, 0~15对应输入滤波时钟数: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
        PWMA_SMCR   = 2;                        // 编码器模式, 模式1或模式2: 每个脉冲两个边沿加减2.   模式3: 每个脉冲四个边沿加减4.
        PWMA_CCER1  = 0x55;                        // 配置通道输入使能和极性, 允许输入, 下降沿
        PWMA_CCER2  = 0x55;                        // 配置通道输入使能和极性, 允许输入, 下降沿        
        PWMA_PS     = 0;                        // 选择IO,0:选择P1.0 P1.2
        PWMA_IER    = 0x02;        //设置允许通道1~4中断处理
        PWMA_CR1    = 0x01;                        // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
}



void PWMA_ISR(void) interrupt 26
{
        if(PWMA_SR1 & 0x02)        //通道1 编码器中断
        {
                pulse = PWMA_CNTR;
                B_Change = 1;                //标志已有捕捉值
        }
        PWMA_SR1 =0;
}


管脚.png

微信图片_20250220220359.png

2.png
000.png
888.png




回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-23 08:55:32

3

主题

36

回帖

163

积分

注册会员

积分
163
发表于 2025-2-20 22:33:14 | 显示全部楼层
正转或者反转编码器旋钮,串口都能看到有数据发送过来,模拟数码管显示的数值是0

999.png


编码器接线是按照梁老师的这个图接线的
777.png

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-08-05 08:59:52
已绑定手机

17

主题

22

回帖

197

积分

注册会员

积分
197
发表于 2025-4-14 09:32:49 | 显示全部楼层
梁*** 发表于 2023-5-29 15:03
如果不够,还可以:
STC32G-使用外中断和一个I/O读取正交编码器-7段虚拟数码管显示

请问一下梁工,STC32G8K64的,PWMB 读编码器 7 8通道 是不是不能用?我这边中断可以进,就是计数器读不到数据,范例程序也没有用7、8通道的

点评

编码器使用通道5、6做输入。  详情 回复 发表于 2025-4-14 17:15
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:182
  • 最近打卡:2025-09-16 23:30:56

76

主题

6718

回帖

1万

积分

超级版主

积分
14163
发表于 2025-4-14 17:15:21 | 显示全部楼层
春去冬*** 发表于 2025-4-14 09:32
请问一下梁工,STC32G8K64的,PWMB 读编码器 7 8通道 是不是不能用?我这边中断可以进,就是计数器读不到 ...

编码器使用通道5、6做输入。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-09-16 13:45:07

10

主题

50

回帖

388

积分

中级会员

积分
388
发表于 2025-4-19 16:21:56 | 显示全部楼层
梁*** 发表于 2023-6-19 11:28
ADC读15通道计算VCC,5V工作的话,低于4.5V就启动掉电保存EEPROM。
建议用1ms的间隔启动ADC,在ADC中断中 ...

你好,梁工,ADC15通道,我用32G的盒子写了一个程序,读取的数值不太对,BGV是对的,反推应该是RES不对。能否麻烦抽空指点下。

Pub.rar

16.82 MB, 下载次数: 51

源程序

点评

能否具体一点说说?只说数值不太对,我没法判断。  详情 回复 发表于 2025-4-19 17:06
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:182
  • 最近打卡:2025-09-16 23:30:56

76

主题

6718

回帖

1万

积分

超级版主

积分
14163
发表于 2025-4-19 17:06:29 | 显示全部楼层
zac*** 发表于 2025-4-19 16:21
你好,梁工,ADC15通道,我用32G的盒子写了一个程序,读取的数值不太对,BGV是对的,反推应该是RES不对。 ...

能否具体一点说说?只说数值不太对,我没法判断。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-09-16 13:45:07

10

主题

50

回帖

388

积分

中级会员

积分
388
发表于 2025-4-21 09:50:05 | 显示全部楼层
梁*** 发表于 2025-4-19 17:06
能否具体一点说说?只说数值不太对,我没法判断。

按照我的理解,我在32G实验箱与工具连接的4PINXH2,5处量的电压是4.98伏,那么我通过内部ADC15通道反推得出的数值应该是4980左右,我按照手册上的程序,变化成了模块式的,程序如附件

BGV = (ID_CHIPID[7]<<8)+ID_CHIPID[8];        //从CHIPID中读取内部参考电压值这个数值读出来的是1189,即1.89V,

[09:42:31.464]接收←04 A5 08 B6 08 87 04 A5 87 A5

UART2_TxByte(ID_CHIPID[7]);==04              两个合并即为04A5=1189
UART2_TxByte(ID_CHIPID[8]);==A5
UART2_TxByte(res>>8);======08              两个合并即为08B6=2230
UART2_TxByte(res & 0xff);=====B6
UART2_TxByte(vcc>>8);======08              两个合并即为0887=2183
UART2_TxByte(vcc & 0xff);=====87
UART2_TxByte(BGV>>8);======04             两个合并即为04A5=1189
UART2_TxByte(BGV & 0xff);=====A5
UART2_TxByte(vcc);==========87
UART2_TxByte(BGV);=========A5




for (j=0;j<8;j++)                                                //8次读取ADC15通道值的平均值
{
        res += ADCRead();                                        //取8次ADC15通道数据
}
res >>= 3;                                                        //取8次数据的平均值,右移3位相当于除以8





上面这一段得出的数值res是2230


vcc = (int16)(4096L*BGV/res);                                //(12位ADC算法)计算VREF管脚电压,即电池电压
                                                                                                                //注意此电压的单位是毫伏(mv)





通过这个公式去计算即VCC等于2183,那么与我用万用表量的电压相差太大,我搞不明白其中的问题。还望抽空指点下


点评

STC32G实验箱AVREF接的是TL431,2.50V基准,读15通道计算的电压是2.50V。 [attachimg]94702[/attachimg]  详情 回复 发表于 2025-4-21 11:00
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-17 12:49 , Processed in 0.173833 second(s), 123 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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