找回密码
 立即注册
楼主: mzh00

STC8G1K08-20,ADC采样的数据不稳定

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:404
  • 最近打卡:2025-08-22 13:50:51
已绑定手机

14

主题

145

回帖

720

积分

高级会员

积分
720
发表于 2023-7-15 15:46:21 | 显示全部楼层
之前用15f的ADC测量波动也很大,各方面原因都有自己做的外部参考电压不准,程序写的也不完美,最后用平均值滤波效果好了很多
回复

使用道具 举报 送花

1

主题

22

回帖

85

积分

注册会员

积分
85
发表于 2023-7-20 11:40:14 | 显示全部楼层
现在移植了:开天斧3.1版-P1.7采样直流电压-50Hz交流电压计算有效值-串口1返回虚拟数码管显示  的示例程序
if(B_ADC_OK)        // 800次采样完成,计算有效值
                {
                        B_ADC_OK = 0;
                        
                        adc_avr = adc_sum / ADC_NUM;                //
                        //if(!P35)        zero = adc_avr;                        //  如果 用这段程序 ,数据不正确
                        zero = adc_avr;                        //每次清0,数据上来看上去是正常,这是啥原因?
回复

使用道具 举报 送花

1

主题

22

回帖

85

积分

注册会员

积分
85
发表于 2023-7-20 11:42:09 | 显示全部楼层
因为是要测电压是否稳定可靠,所以不能用平均滤波,现在是每100MS判断 一次,电压是否正常,如果 不正常,马上切到断电状态。

点评

100ms判断一次是很方便使用平均值滤波的。用1KHz的速度做ADC,100次就是100ms。  详情 回复 发表于 2023-7-20 14:18
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 2023-7-20 14:18:29 | 显示全部楼层
mzh*** 发表于 2023-7-20 11:42
因为是要测电压是否稳定可靠,所以不能用平均滤波,现在是每100MS判断 一次,电压是否正常,如果 不正常, ...

100ms判断一次是很方便使用平均值滤波的。用1KHz的速度做ADC,100次就是100ms。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-08-16 22:19:00

2

主题

130

回帖

736

积分

高级会员

积分
736
发表于 2025-5-27 23:35:44 | 显示全部楼层
很喜欢看这样的讨论
学无止境
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-08-23 14:59:59
已绑定手机

4

主题

28

回帖

220

积分

中级会员

积分
220
发表于 2025-7-20 10:34:21 | 显示全部楼层
最近我也用这个芯片的ADC采集,我感觉挺稳定的啊。我遇到了用P3.0和P3.1作为ADC使用的问题,会不会不能使用?

点评

那么多通道,尽量偏开P3.0 P3.1 。 如果你实在要用P3.0 P3.1做ADC输入,串口通信使用P3.6 P3.7,则建议如下: 1、由于ADC输入端通常要求对地接一个1nF~100nF电容,而这个电容接在P3.0 P3.1又会影响通信异常导致不能  详情 回复 发表于 2025-7-20 13:35
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 2025-7-20 13:35:25 | 显示全部楼层
dmvi*** 发表于 2025-7-20 10:34
最近我也用这个芯片的ADC采集,我感觉挺稳定的啊。我遇到了用P3.0和P3.1作为ADC使用的问题,会不会不能使用 ...

那么多通道,尽量偏开P3.0 P3.1 。

如果你实在要用P3.0 P3.1做ADC输入,串口通信使用P3.6 P3.7,则建议如下:
1、由于ADC输入端通常要求对地接一个1nF~100nF电容,而这个电容接在P3.0 P3.1又会影响通信异常导致不能下载程序,所以建议先给IC下载程序后再焊接,如果要在线下载则要设置开关或跳线,下载程序时断开ADC输入电路。
2、下载程序时,确认不要勾选“下次下载时使能USB-ISP模式”。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-12 10:00:26
已绑定手机

2

主题

39

回帖

162

积分

注册会员

积分
162
发表于 2025-8-4 13:10:14 | 显示全部楼层
梁*** 发表于 2025-7-20 13:35
那么多通道,尽量偏开P3.0 P3.1 。

如果你实在要用P3.0 P3.1做ADC输入,串口通信使用P3.6 P3.7,则建议 ...

我使用的8pin的 mcu, 使用了p3.0 做usart的读(单读不写),然后p3.1 做adc采样, 这时adc的结果会明显数值抖动很大,测试了,要是不使用usart功能的话,就非常稳定。 这个感觉是usart打开时和adc会冲突,请问这个有没有什么解决办法?可以让"p3.0 做usart的读" 和“p3.1 做adc” 同时工作? (另外还做一个验证测试,要是p3.0和p3.1轮流做 adc采样,也是同样产生这样的结果,但是如果只是单使用p3.1,就非常稳定, 感觉会不会这样就忙不过来呢? )

点评

你使用串口发送脚做ADC输入,你是怎么监控ADC值的?  详情 回复 发表于 2025-8-4 13:44
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 2025-8-4 13:44:18 | 显示全部楼层
aer*** 发表于 2025-8-4 13:10
我使用的8pin的 mcu, 使用了p3.0 做usart的读(单读不写),然后p3.1 做adc采样, 这时adc的结果会明显数 ...

你使用串口发送脚做ADC输入,你是怎么监控ADC值的?
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-12 10:00:26
已绑定手机

2

主题

39

回帖

162

积分

注册会员

积分
162
发表于 2025-8-4 14:24:51 | 显示全部楼层
梁*** 发表于 2025-8-4 13:44
你使用串口发送脚做ADC输入,你是怎么监控ADC值的?

你好,这个是要做一个servo的程序,
1.  p3.1采集电位器的电位值, adc使用了10bit的采样,即0-1023,名为 adc_input_value.  
2,  当p3.0这个usart输入一个控制值时(命名为target_input_value),会使用p5.4 p5.5 输出控制双向电调, 去转动电位器。
3.  程序不间断的循环判断,当adc采样值 adc_input_value 和 target_input_value相差不过超2时,停止转动。   即servo到达指定的角度。  

测试1, usart:
1.  使用usart (p3.0+ timer1)  输入一个控制值, 如512,
2.  看到电机开始驱动电位器转动, 但到达512附近时,无法停止转动,不停在正反的抖动。


测试2, pwm:
1.  使用pwm (p3.0  + timer 0),  输入一个PWM 控制值, 如512,
2.  看到电机开始驱动电位器转动, 然后很精准的停在512这个目标角度


点评

单看这个描述感觉是一个pin上同时用两种外设互相干扰了。 请问输入周期是多少呢,是否尝试分时复用,ADC采集时取消设置串口试下?  详情 回复 发表于 2025-8-4 14:40
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-24 04:09 , Processed in 0.121602 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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