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

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

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6093

回帖

1万

积分

超级版主

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-06-11 15:10:27

9

主题

44

回帖

345

积分

中级会员

积分
345
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6093

回帖

1万

积分

超级版主

积分
12733
发表于 2025-4-21 11:00:44 | 显示全部楼层
zac*** 发表于 2025-4-21 09:50
按照我的理解,我在32G实验箱与工具连接的4PINXH2,5处量的电压是4.98伏,那么我通过内部ADC15通道反推得 ...

STC32G实验箱AVREF接的是TL431,2.500V基准,读15通道计算的电压是2.500V。
测试结果截图.png

01B-读取15通道ADC计算AVREF电压-串口1(P3.1)返回结果.rar (116.35 KB, 下载次数: 11)

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-06-11 15:10:27

9

主题

44

回帖

345

积分

中级会员

积分
345
发表于 2025-4-21 15:22:57 | 显示全部楼层
梁*** 发表于 2025-4-21 11:00
STC32G实验箱AVREF接的是TL431,2.500V基准,读15通道计算的电压是2.500V。

感谢梁工,我这边也可以读出来了,也发现了一个不一样,就是你给的文档里面的STC32G.H文件和我们下载的不一样,这个里面有更新迭代吗?


另,当我使用外部电源的时候,用这个15通道,是不是需要添加基准电源。
                    
[14:53:05.957]接收←ADC15=2572,  AVREF=1.895V
                    
[14:53:07.469]接收←ADC15=2571,  AVREF=1.896V
                    
[14:53:07.972]接收←ADC15=2577,  AVREF=1.891V
                    
[14:53:08.477]接收←ADC15=2572,  AVREF=1.895V
                    
[14:58:11.361]接收←ADC15=2491,  AVREF=1.957V这几个是模板程序读出来的
                    
[14:58:11.864]接收←ADC15=2488,  AVREF=1.959V
                    
[14:58:15.887]接收←ADC15=2498,  AVREF=1.951V
                    
[15:04:21.656]接收←ADC15=1950,  AVREF=2.500V
                    
[15:04:22.159]接收←ADC15=1950,  AVREF=2.500V
                    
[15:10:32.703]接收←ADC15=1950,  AVREF=2.500V
                    
[15:10:33.205]接收←ADC15=1949,  AVREF=2.501V
                    
[15:11:05.857]接收←ADC15=1949,  AVREF=2.501V
                    
[15:11:06.359]接收←ADC15=1949,  AVREF=2.501V
                    
[15:11:06.864]接收←ADC15=1950,  AVREF=2.500V
                    

点评

我的头文件,基础定义跟公司提供的是一样的,我在此基础上,增加了很多宏定义,不用更新到KEIL中。 ADC15测量的是1.19V对应AVREF为参考电压的ADC值,4096*1.19/adc15计算出来的是AVREF引脚的电压,你AVREF接的是什么  详情 回复 发表于 2025-4-21 16:00
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6093

回帖

1万

积分

超级版主

积分
12733
发表于 2025-4-21 16:00:10 | 显示全部楼层
zac*** 发表于 2025-4-21 15:22
感谢梁工,我这边也可以读出来了,也发现了一个不一样,就是你给的文档里面的STC32G.H文件和我们下载的不 ...

我的头文件,基础定义跟公司提供的是一样的,我在此基础上,增加了很多宏定义,不用更新到KEIL中。
ADC15测量的是1.19V对应AVREF为参考电压的ADC值,4096*1.19/adc15计算出来的是AVREF引脚的电压,你AVREF接的是什么电压?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-06-11 15:10:27

9

主题

44

回帖

345

积分

中级会员

积分
345
发表于 2025-4-21 17:00:32 | 显示全部楼层
梁*** 发表于 2025-4-21 16:00
我的头文件,基础定义跟公司提供的是一样的,我在此基础上,增加了很多宏定义,不用更新到KEIL中。
ADC15 ...

AVREF的电压我就明白了,我正常都是直接接VCC,那么应该反馈的就是VCC的电压

点评

不管怎么接,计算出的都是AVREF电压,将AVREF于VCC连接,则VCC=AVREF。  详情 回复 发表于 2025-4-21 20:20
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6093

回帖

1万

积分

超级版主

积分
12733
发表于 2025-4-21 20:20:52 | 显示全部楼层
zac*** 发表于 2025-4-21 17:00
AVREF的电压我就明白了,我正常都是直接接VCC,那么应该反馈的就是VCC的电压 ...

不管怎么接,计算出的都是AVREF电压,将AVREF于VCC连接,则VCC=AVREF。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-06-11 15:10:27

9

主题

44

回帖

345

积分

中级会员

积分
345
发表于 2025-4-22 13:46:41 | 显示全部楼层
梁*** 发表于 2025-4-21 20:20
不管怎么接,计算出的都是AVREF电压,将AVREF于VCC连接,则VCC=AVREF。

如果要没有AVREF的引脚能用这种方式吗?
我不明白这个原理,感谢赐教

点评

没有单独AVREF引脚的,内部已经将AVREF和VCC连在了一起。 原理: adc15 = 4096 * 1.19/AVREF,则AVREF = 4096*1.19/adc15,读取15通道计算出来的电压是AVREF的电压。  详情 回复 发表于 2025-4-22 20:51
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6093

回帖

1万

积分

超级版主

积分
12733
发表于 2025-4-22 20:51:56 | 显示全部楼层
zac*** 发表于 2025-4-22 13:46
如果要没有AVREF的引脚能用这种方式吗?
我不明白这个原理,感谢赐教

没有单独AVREF引脚的,内部已经将AVREF和VCC连在了一起。
原理: adc15 = 4096 * 1.19/AVREF,则AVREF = 4096*1.19/adc15,读取15通道计算出来的电压是AVREF的电压。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 20:58 , Processed in 0.139933 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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