一笔长空 发表于 2023-7-15 15:46:21

之前用15f的ADC测量波动也很大,各方面原因都有自己做的外部参考电压不准,程序写的也不完美,最后用平均值滤波效果好了很多

mzh00 发表于 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,数据上来看上去是正常,这是啥原因?

mzh00 发表于 2023-7-20 11:42:09

因为是要测电压是否稳定可靠,所以不能用平均滤波,现在是每100MS判断 一次,电压是否正常,如果 不正常,马上切到断电状态。

梁工 发表于 2023-7-20 14:18:29

mzh00 发表于 2023-7-20 11:42
因为是要测电压是否稳定可靠,所以不能用平均滤波,现在是每100MS判断 一次,电压是否正常,如果 不正常, ...

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

zengchang 发表于 2025-5-27 23:35:44

很喜欢看这样的讨论

dmvision 发表于 2025-7-20 10:34:21

最近我也用这个芯片的ADC采集,我感觉挺稳定的啊。我遇到了用P3.0和P3.1作为ADC使用的问题,会不会不能使用?

梁工 发表于 2025-7-20 13:35:25

dmvision 发表于 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模式”。

aerror 发表于 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,就非常稳定, 感觉会不会这样就忙不过来呢? )

梁工 发表于 2025-8-4 13:44:18

aerror 发表于 2025-8-4 13:10
我使用的8pin的 mcu, 使用了p3.0 做usart的读(单读不写),然后p3.1 做adc采样, 这时adc的结果会明显数 ...

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

aerror 发表于 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这个目标角度


页: 1 2 [3] 4 5
查看完整版本: STC8G1K08-20,ADC采样的数据不稳定