找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5826|回復(fù): 10
收起左側(cè)

STC單片機ADC電壓采集數(shù)值不穩(wěn)定

[復(fù)制鏈接]
ID:608872 發(fā)表于 2021-10-26 17:33 | 顯示全部樓層 |閱讀模式
本帖最后由 yinnan128 于 2021-10-27 09:43 編輯

       原來用可調(diào)電阻分壓ADC采集電壓顯示3.90V很穩(wěn)定沒有跳動,現(xiàn)在取消可調(diào)電阻,改用固定阻值電阻分壓1/3,用按鍵控制程序++、--,變量Calibration校正電壓,但加了這個變量后ADC顯示的電壓在4.38V—4.46V之間跳動不穩(wěn)定,正常顯示應(yīng)該是3.90V+0.5V=4.40V。不知道為什么加了變量后電壓不穩(wěn)定了呢?(看了壇友留言,補充一下:改成按鍵控制,不加校正變量,ADC顯示電壓也是穩(wěn)定的)             本來是打算改變MCU_V的值來校正電壓的,但因為分壓3倍后,ADC數(shù)值要*3才能顯示正確電壓,所以每++、--,MCU_V的值,電壓顯示的步進最小就是0.03V,但電壓顯示穩(wěn)定。才改用上面的方法。


u8  BT_V[2],Calibration=50;
u16 MCU_V=370;//數(shù)字除以100等于單片機供電電壓(ADC參考電壓)
u32 ADC_V;

/*******************************************************************************
* 功  能:初始化ADC
* 描  述:   
*******************************************************************************/
void ADC_init()               
{
P1ASF=0X00;//把P1口設(shè)置為非模擬功能
CLK_DIV |= 0x20; //00100000、ADRJ 為 1,ADC_RES 存放高兩位結(jié)果,ADC_RESL 存放低 8 位結(jié)果
ADC_RES=0;//清除高位轉(zhuǎn)換結(jié)果寄存器
ADC_RESL=0;//清除低位轉(zhuǎn)換結(jié)果寄存器        
}

/*******************************************************************************
* 功  能:讀取ADC
* 描  述:   
*******************************************************************************/
void ADC_duqu()
{
ADC_CONTR = 0x8a;//10001010,啟動ADC電源和設(shè)置P1.2口為ADC輸入并且540個時鐘轉(zhuǎn)換一次
delay_ms(1);
while(!(ADC_CONTR&0X10));        //等待轉(zhuǎn)換完成
ADC_V=ADC_RES*256+ADC_RESL;     //獲取ADC結(jié)果
ADC_CONTR&=~0x10;//0x82 清除ADC標志位
}

/*******************************************************************************
* 功  能:ADC電壓轉(zhuǎn)換
* 描  述:   
*******************************************************************************/
void ADC_zhuanhuan()
{
ADC_V=ADC_V*MCU_V/1024*3+Calibration;//檢測電壓經(jīng)過電阻分壓減小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;     //計算電壓百分位
}

回復(fù)

使用道具 舉報

ID:908826 發(fā)表于 2021-10-26 19:12 | 顯示全部樓層
我個人覺得采樣濾波試試???我自己的看法,謝謝批評指正
回復(fù)

使用道具 舉報

ID:883242 發(fā)表于 2021-10-26 19:58 | 顯示全部樓層
不穩(wěn)定應(yīng)該是外接信號改變了導(dǎo)致的,軟件里面加濾波即可解決。
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2021-10-27 09:12 | 顯示全部樓層
STC的ADC誤差最大誤差大概可以達到5個位左右,具體也沒有計算,數(shù)據(jù)手冊里的的
像你這個,盡量采用中斷,1樓也說了,開啟濾波
進行5次ADC,把最大數(shù)據(jù)和最小數(shù)據(jù)去掉,取中間3次,總和就是*3的效果了
總體要比單次*3好
回復(fù)

使用道具 舉報

ID:420836 發(fā)表于 2021-10-27 09:26 | 顯示全部樓層
電阻可能不夠好,從而導(dǎo)致測量漂移。
回復(fù)

使用道具 舉報

ID:608872 發(fā)表于 2021-10-27 09:43 | 顯示全部樓層
TTQ001 發(fā)表于 2021-10-27 09:26
電阻可能不夠好,從而導(dǎo)致測量漂移。

改成按鍵控制,不加校正變量,ADC顯示電壓也是穩(wěn)定的
回復(fù)

使用道具 舉報

ID:608872 發(fā)表于 2021-10-27 09:44 | 顯示全部樓層
13205495918 發(fā)表于 2021-10-26 19:12
我個人覺得采樣濾波試試???我自己的看法,謝謝批評指正

改成按鍵控制,不加校正變量,ADC顯示電壓也是穩(wěn)定的,硬設(shè)計方面應(yīng)該沒有問題,就是加了校正變量引起的跳動
回復(fù)

使用道具 舉報

ID:608872 發(fā)表于 2021-10-27 09:44 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-10-27 09:12
STC的ADC誤差最大誤差大概可以達到5個位左右,具體也沒有計算,數(shù)據(jù)手冊里的的
像你這個,盡量采用中斷,1樓也 ...

改成按鍵控制,不加校正變量,ADC顯示電壓也是穩(wěn)定的,硬設(shè)計方面應(yīng)該沒有問題,就是加了校正變量引起的跳動
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2021-10-27 15:19 | 顯示全部樓層
ADC_V=ADC_V*MCU_V/1024*3+Calibration;
Calibration這玩意是干嘛的?
對比于沒有加這個,如果是穩(wěn)定的,那就說明Calibration是變化的,那么,這個是在哪里變化的?
只取一次ADC結(jié)果直接顯示,在正常情況下,90%的概率就是跳動的,因為ADC本身的誤差,就算電源和取樣電壓都是穩(wěn)定的,但每次ADC的結(jié)果都是有可能變化的
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2021-10-28 10:24 | 顯示全部樓層
單看這幾段程序,是看不出問題的。
或許問題出在其它地方。如多通道切換的方式……。
回復(fù)

使用道具 舉報

ID:867005 發(fā)表于 2021-10-30 15:21 | 顯示全部樓層
在軟件里加一下濾波,也可以看看是否是硬件的問題
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表