找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4827|回复: 10
收起左侧

STC单片机ADC电压采集数值不稳定

[复制链接]
ID:608872 发表于 2021-10-26 17:33 | 显示全部楼层 |阅读模式
本帖最后由 yinnan128 于 2021-10-27 09:43 编辑

       原来用可调电阻分压ADC采集电压显示3.90V很稳定没有跳动,现在取消可调电阻,改用固定阻值电阻分压1/3,用按键控制程序++、--,变量Calibration校正电压,但加了这个变量后ADC显示的电压在4.38V—4.46V之间跳动不稳定,正常显示应该是3.90V+0.5V=4.40V。不知道为什么加了变量后电压不稳定了呢?(看了坛友留言,补充一下:改成按键控制,不加校正变量,ADC显示电压也是稳定的)             本来是打算改变MCU_V的值来校正电压的,但因为分压3倍后,ADC数值要*3才能显示正确电压,所以每++、--,MCU_V的值,电压显示的步进最小就是0.03V,但电压显示稳定。才改用上面的方法。


u8  BT_V[2],Calibration=50;
u16 MCU_V=370;//数字除以100等于单片机供电电压(ADC参考电压)
u32 ADC_V;

/*******************************************************************************
* 功  能:初始化ADC
* 描  述:   
*******************************************************************************/
void ADC_init()               
{
P1ASF=0X00;//把P1口设置为非模拟功能
CLK_DIV |= 0x20; //00100000、ADRJ 为 1,ADC_RES 存放高两位结果,ADC_RESL 存放低 8 位结果
ADC_RES=0;//清除高位转换结果寄存器
ADC_RESL=0;//清除低位转换结果寄存器        
}

/*******************************************************************************
* 功  能:读取ADC
* 描  述:   
*******************************************************************************/
void ADC_duqu()
{
ADC_CONTR = 0x8a;//10001010,启动ADC电源和设置P1.2口为ADC输入并且540个时钟转换一次
delay_ms(1);
while(!(ADC_CONTR&0X10));        //等待转换完成
ADC_V=ADC_RES*256+ADC_RESL;     //获取ADC结果
ADC_CONTR&=~0x10;//0x82 清除ADC标志位
}

/*******************************************************************************
* 功  能:ADC电压转换
* 描  述:   
*******************************************************************************/
void ADC_zhuanhuan()
{
ADC_V=ADC_V*MCU_V/1024*3+Calibration;//检测电压经过电阻分压减小3倍,要*3还原
BT_V[0]=ADC_V/100%10+0x30; //计算电压个位
BT_V[1]=ADC_V/10%10+0x30;  //计算电压十分位
BT_V[2]=ADC_V%10+0x30;     //计算电压百分位
}

回复

使用道具 举报

ID:908826 发表于 2021-10-26 19:12 | 显示全部楼层
我个人觉得采样滤波试试???我自己的看法,谢谢批评指正
回复

使用道具 举报

ID:883242 发表于 2021-10-26 19:58 | 显示全部楼层
不稳定应该是外接信号改变了导致的,软件里面加滤波即可解决。
回复

使用道具 举报

ID:401564 发表于 2021-10-27 09:12 | 显示全部楼层
STC的ADC误差最大误差大概可以达到5个位左右,具体也没有计算,数据手册里的的
像你这个,尽量采用中断,1楼也说了,开启滤波
进行5次ADC,把最大数据和最小数据去掉,取中间3次,总和就是*3的效果了
总体要比单次*3好
回复

使用道具 举报

ID:420836 发表于 2021-10-27 09:26 | 显示全部楼层
电阻可能不够好,从而导致测量漂移。
回复

使用道具 举报

ID:608872 发表于 2021-10-27 09:43 | 显示全部楼层
TTQ001 发表于 2021-10-27 09:26
电阻可能不够好,从而导致测量漂移。

改成按键控制,不加校正变量,ADC显示电压也是稳定的
回复

使用道具 举报

ID:608872 发表于 2021-10-27 09:44 | 显示全部楼层
13205495918 发表于 2021-10-26 19:12
我个人觉得采样滤波试试???我自己的看法,谢谢批评指正

改成按键控制,不加校正变量,ADC显示电压也是稳定的,硬设计方面应该没有问题,就是加了校正变量引起的跳动
回复

使用道具 举报

ID:608872 发表于 2021-10-27 09:44 | 显示全部楼层
Y_G_G 发表于 2021-10-27 09:12
STC的ADC误差最大误差大概可以达到5个位左右,具体也没有计算,数据手册里的的
像你这个,尽量采用中断,1楼也 ...

改成按键控制,不加校正变量,ADC显示电压也是稳定的,硬设计方面应该没有问题,就是加了校正变量引起的跳动
回复

使用道具 举报

ID:401564 发表于 2021-10-27 15:19 | 显示全部楼层
ADC_V=ADC_V*MCU_V/1024*3+Calibration;
Calibration这玩意是干嘛的?
对比于没有加这个,如果是稳定的,那就说明Calibration是变化的,那么,这个是在哪里变化的?
只取一次ADC结果直接显示,在正常情况下,90%的概率就是跳动的,因为ADC本身的误差,就算电源和取样电压都是稳定的,但每次ADC的结果都是有可能变化的
回复

使用道具 举报

ID:123289 发表于 2021-10-28 10:24 | 显示全部楼层
单看这几段程序,是看不出问题的。
或许问题出在其它地方。如多通道切换的方式……。
回复

使用道具 举报

ID:867005 发表于 2021-10-30 15:21 | 显示全部楼层
在软件里加一下滤波,也可以看看是否是硬件的问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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