找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)ADC每次采樣后需要清除結(jié)果嗎?平均值怎么計(jì)算

  [復(fù)制鏈接]
ID:608872 發(fā)表于 2021-9-24 16:16 | 顯示全部樓層 |閱讀模式
本帖最后由 yinnan128 于 2021-9-24 17:02 編輯

       用的是STC15W,現(xiàn)在ADC采樣顯示的電壓浮動(dòng)很大,鋰電3.66V供電SX1308升壓到12V,然后用78L05降壓到5V給單片機(jī)和LCD1602供電,ADC測(cè)量鋰電池的電壓顯示3.50-3.74之間跳動(dòng),可以使用軟件濾波嗎,還是這個(gè)浮動(dòng)范圍必須用硬件解決。
       ADC每次采樣后,下次采樣前,寄存器里的結(jié)果都需要清零嗎?我現(xiàn)在是0.5秒采樣一次,沒(méi)有軟件濾波,現(xiàn)在想采樣12次,然后去掉一個(gè)最高和一個(gè)最低電壓,程序應(yīng)該怎么寫(xiě)求平均值呢
       一下是我寫(xiě)的部分程序/*******************************************************************************
* 功  能:初始化ADC
* 描  述:   
*******************************************************************************/
void ADC_init()               
{
P1ASF=0X04;//把P1.2設(shè)置為模擬功能
P1M1=0X04;//把P1.2引腳工作模式設(shè)為高阻抗
P1M0=0X00;//把P1.2引腳工作模式設(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;//啟動(dòng)ADC電源和設(shè)置P1.2口為ADC輸入并且540個(gè)時(shí)鐘轉(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平均值
* 描  述: 累加10次平均值  
*******************************************************************************/
void ADC_PingJun()
{
??????
}

/*******************************************************************************
* 功  能:ADC電壓轉(zhuǎn)換
* 描  述:   
*******************************************************************************/
void ADC_zhuanhuan()
{
ADC_V=(ADC_V*500/1024)*2;  //500代表參考電壓5V
BT_V[0]=ADC_V/100%10+0x30;
BT_V[1]=ADC_V/10%10+0x30;
BT_V[2]=ADC_V%10+0x30;
}

回復(fù)

使用道具 舉報(bào)

ID:514901 發(fā)表于 2021-9-24 16:48 | 顯示全部樓層
可以,連續(xù)采集20次,給20個(gè)數(shù)據(jù)排序,取中間10數(shù)據(jù)求平均值
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-9-24 16:48 | 顯示全部樓層
STC系列單片機(jī),如果沒(méi)有 Verf 引腳的話,不管用外部參考基準(zhǔn),還是內(nèi)部參考基準(zhǔn),都會(huì)受到VCC的波動(dòng)影響,因?yàn),都是在假定VCC 為1023的前提下,給出的測(cè)量值,所以,VCC要保證,在獲取外部被測(cè)值,和獲取基準(zhǔn)參考值時(shí),電壓的絕對(duì)穩(wěn)定,你升壓到12V,在用7805降壓的話,這個(gè)電壓,絕對(duì)波動(dòng)的非常厲害。

我比較好奇的是: 你既然用的是 STC15W 系列,為啥不直接鋰電給單片機(jī)供電?非要搞這么一個(gè)升壓再降壓后的不穩(wěn)定電壓給單片機(jī)供電呢?實(shí)在是不太理解。
回復(fù)

使用道具 舉報(bào)

ID:359272 發(fā)表于 2021-9-24 16:53 | 顯示全部樓層
首先要排除供電異常。然后考慮軟件過(guò)濾,一介滯后濾波
回復(fù)

使用道具 舉報(bào)

ID:608872 發(fā)表于 2021-9-24 17:00 | 顯示全部樓層
本帖最后由 yinnan128 于 2021-9-24 17:08 編輯
188610329 發(fā)表于 2021-9-24 16:48
STC系列單片機(jī),如果沒(méi)有 Verf 引腳的話,不管用外部參考基準(zhǔn),還是內(nèi)部參考基準(zhǔn),都會(huì)受到VCC的波動(dòng)影響, ...

升12V控制10V的MOS管導(dǎo)通,STC15W可以用3.3V,但LCD1602用3.3V點(diǎn)不亮,也需要一個(gè)穩(wěn)定的5V做ADC基準(zhǔn)電壓
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-9-24 22:42 | 顯示全部樓層
yinnan128 發(fā)表于 2021-9-24 17:00
升12V控制10V的MOS管導(dǎo)通,STC15W可以用3.3V,但LCD1602用3.3V點(diǎn)不亮,也需要一個(gè)穩(wěn)定的5V做ADC基準(zhǔn)電壓

你升壓再降壓之后的5V電壓,絕對(duì)不如直接鋰電池的電壓來(lái)的,穩(wěn)定。
你ADC只是為了測(cè)量供電的鋰電池的話,你單片機(jī)用鋰電池供電,只需要用ADC去測(cè)內(nèi)部基準(zhǔn)電壓,得到的值反算1023,就能知道鋰電池電壓,反而更準(zhǔn)確更方便。 最后,你單片機(jī)3.3V,LCD1602 5V,完全也是可以的呀,無(wú)非多幾個(gè)上拉電阻,但是,穩(wěn)定性和可靠性,會(huì)比都接那個(gè)升壓再降壓的5V要高很多。
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2021-9-24 22:42 | 顯示全部樓層
反正都是STC的,干嘛不換成STC8G的,這個(gè)系列內(nèi)部參考電壓是相對(duì)穩(wěn)定的,可以在電壓不穩(wěn)定時(shí)通過(guò)內(nèi)部參考電壓來(lái)計(jì)算,引腳也有和15W系列一樣的,STC8G系列的還內(nèi)置了上拉電阻,也可以開(kāi)機(jī)低電平,反正是比15W系列好用,DIY最佳單片機(jī)
回復(fù)

使用道具 舉報(bào)

ID:608872 發(fā)表于 2021-9-25 21:14 | 顯示全部樓層
188610329 發(fā)表于 2021-9-24 22:42
你升壓再降壓之后的5V電壓,絕對(duì)不如直接鋰電池的電壓來(lái)的,穩(wěn)定。
你ADC只是為了測(cè)量供電的鋰電池的話 ...

15W沒(méi)有內(nèi)部基準(zhǔn)電壓,只能外接。經(jīng)你提示現(xiàn)在也是考慮鋰電池降壓3.3V給單片機(jī),LCD不變還是12V降5V,這樣減小對(duì)ADC的影響
回復(fù)

使用道具 舉報(bào)

ID:608872 發(fā)表于 2021-9-25 21:17 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-9-24 22:42
反正都是STC的,干嘛不換成STC8G的,這個(gè)系列內(nèi)部參考電壓是相對(duì)穩(wěn)定的,可以在電壓不穩(wěn)定時(shí)通過(guò)內(nèi)部參考電壓 ...

前段時(shí)間STC8G價(jià)格太貴,貨也不好難,就拿了穩(wěn)定供貨的15W,不知道現(xiàn)在價(jià)格和排貨什么情況
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2021-9-25 21:38 | 顯示全部樓層
本帖最后由 wulin 于 2021-9-25 21:42 編輯

1.STC15W系列典型工作電壓范圍2.4~5.5V
2.STC15W系列ADC有內(nèi)部基準(zhǔn)電壓,ADC的第9通道就是用來(lái)測(cè)試內(nèi)部BandGap參考電壓的
3.ADC_RES、ADC_RESL不必清除,新數(shù)據(jù)會(huì)覆蓋掉原來(lái)數(shù)據(jù)
4.最簡(jiǎn)單濾波方法是多次取樣,取平均值
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-9-25 22:48 | 顯示全部樓層
yinnan128 發(fā)表于 2021-9-25 21:14
15W沒(méi)有內(nèi)部基準(zhǔn)電壓,只能外接。經(jīng)你提示現(xiàn)在也是考慮鋰電池降壓3.3V給單片機(jī),LCD不變還是12V降5V,這 ...

STC15W 有內(nèi)部基準(zhǔn)電壓的。
P1ASF  = 0x00;  就是測(cè)內(nèi)部基準(zhǔn)電壓的,
具體內(nèi)部基準(zhǔn)電壓的值可以在ISP上讀取,或者,程序內(nèi),讀取Code 區(qū)最末尾的15個(gè)關(guān)鍵參考字節(jié),建議直接ISP上通過(guò)檢測(cè)MCU觀察后,寫(xiě)入程序。
通過(guò)已知的內(nèi)部基準(zhǔn)電壓(大約1300mv 左右) *  1023  / 通過(guò)P1ASF = 0x00; 測(cè)出測(cè)量值后,得到的就是你的輸入電壓(鋰電池電壓)了。相對(duì)要簡(jiǎn)單很多。
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2021-9-26 14:01 | 顯示全部樓層
yinnan128 發(fā)表于 2021-9-25 21:17
前段時(shí)間STC8G價(jià)格太貴,貨也不好難,就拿了穩(wěn)定供貨的15W,不知道現(xiàn)在價(jià)格和排貨什么情況

15W也是有內(nèi)部參考電壓的,也是很穩(wěn)定的
但是每片的內(nèi)部參考電壓都有所不同,所以,15W是要先用精確的VCC測(cè)量好內(nèi)部參考電壓是多少,才能準(zhǔn)確的使用,很是麻煩
如果想要穩(wěn)定的ADC,可以通過(guò)2.8V或者3.0V的LDO給單片機(jī)供電,增加兩個(gè)電阻取樣,這樣的成本增加5毛左右,比增加幾塊錢(qián)的單片機(jī)好點(diǎn)
回復(fù)

使用道具 舉報(bào)

ID:968695 發(fā)表于 2021-9-27 20:34 | 顯示全部樓層
可以用定時(shí)器設(shè)置采樣頻率,在規(guī)定時(shí)間內(nèi)采樣n次再去掉幾個(gè)最大值最小值后取平均值這就是簡(jiǎn)單的軟件濾波
回復(fù)

使用道具 舉報(bào)

ID:637144 發(fā)表于 2021-10-4 16:01 來(lái)自手機(jī) | 顯示全部樓層
直接用冒泡算法
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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