找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1773|回復(fù): 27
打印 上一主題 下一主題
收起左側(cè)

STC單片機(jī)用鋰電池供電讀電壓問題?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
STC用鋰電池供電并讀取電壓時(shí)會出現(xiàn)AD數(shù)據(jù)偏差大或不穩(wěn)定,根本識別不了,如果用5V供電就沒問題,不知道各位大佬有沒遇到過?是否有方法解決?請看下面硬件線路是否合理?

df16ed809e02dfd8efd657e088b5cc4.jpg (447.33 KB, 下載次數(shù): 15)

df16ed809e02dfd8efd657e088b5cc4.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:879348 發(fā)表于 2024-8-30 08:13 | 只看該作者
因?yàn)镾TC沒有內(nèi)部參考,當(dāng)負(fù)載變化,ADC也會變化,最簡單的是供電2.5V LDO
不加也可以同時(shí)間讀取15通道,計(jì)算轉(zhuǎn)化一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:1034262 發(fā)表于 2024-8-30 09:50 | 只看該作者
如果電池是接在單片機(jī)的VCC上,則讀ADC的15通道得到adc15,計(jì)算得到VCC電壓:
VCC = 1.19*1024/adc15,不需要外部電路,非常方便,準(zhǔn)確度高。如果你的VCC波動大,加數(shù)字濾波即可穩(wěn)定。
回復(fù)

使用道具 舉報(bào)

地板
ID:277550 發(fā)表于 2024-8-30 09:57 | 只看該作者
哪個(gè)系列的單片機(jī)  
電路中其他的外設(shè)有多大影響

等等因素
回復(fù)

使用道具 舉報(bào)

5#
ID:322939 發(fā)表于 2024-8-30 13:56 | 只看該作者
這個(gè)型號的芯片讀內(nèi)部基準(zhǔn)電壓沒有15通道 ,只能讀ROM,RAM和CHIPID這3種方式,真麻煩。
回復(fù)

使用道具 舉報(bào)

6#
ID:332444 發(fā)表于 2024-8-30 14:03 | 只看該作者
從外面建立比較電路作為開關(guān)量送給單片機(jī)或是光耦信號給單片機(jī)可參https://blog.csdn.net/xianfajush ... 1018.2226.3001.4450
回復(fù)

使用道具 舉報(bào)

7#
ID:401564 發(fā)表于 2024-8-30 14:32 | 只看該作者
LAW1100 發(fā)表于 2024-8-30 13:56
這個(gè)型號的芯片讀內(nèi)部基準(zhǔn)電壓沒有15通道 ,只能讀ROM,RAM和CHIPID這3種方式,真麻煩。

圖片上的是STC8H1K08,這款是有內(nèi)部穩(wěn)定的參考電壓的
回復(fù)

使用道具 舉報(bào)

8#
ID:322939 發(fā)表于 2024-8-30 14:54 | 只看該作者

8H的是讀內(nèi)存里的電壓

51hei圖片_20240830145341.jpg (678.7 KB, 下載次數(shù): 15)

51hei圖片_20240830145341.jpg
回復(fù)

使用道具 舉報(bào)

9#
ID:322939 發(fā)表于 2024-8-30 16:07 | 只看該作者
用5V供電ADC讀出來沒問題,用電池供電讀出來卻是0
回復(fù)

使用道具 舉報(bào)

10#
ID:624769 發(fā)表于 2024-8-30 21:45 | 只看該作者
電池供電的話,直接讀15通道,就能算出電池電壓了.
回復(fù)

使用道具 舉報(bào)

11#
ID:322939 發(fā)表于 2024-8-31 08:40 | 只看該作者
188610329 發(fā)表于 2024-8-30 21:45
電池供電的話,直接讀15通道,就能算出電池電壓了.

沒用過這功能,
unigned int Temp=0;
unigned int  sum=0;
float voltage=0.0;
Temp=Get_Adc(15);//此數(shù)值17440(這是在5V供電下調(diào)試打印出來的數(shù)值)
voltage=(float)(1.19*1024)/Temp*100;放大100倍
voltage結(jié)果等于0.846V;這是VCC電壓??
回復(fù)

使用道具 舉報(bào)

12#
ID:322939 發(fā)表于 2024-8-31 08:41 | 只看該作者
ADC15通道能測量VCC電壓,那測量其它通道(如電流取樣電壓)是否可以測量?
回復(fù)

使用道具 舉報(bào)

13#
ID:624769 發(fā)表于 2024-8-31 09:26 | 只看該作者
LAW1100 發(fā)表于 2024-8-31 08:40
沒用過這功能,
unigned int Temp=0;
unigned int  sum=0;

STC8H 系列是 12位ADC  ADC讀值應(yīng)該是在 0~4095 之間,你17440是怎么來的?
正常情況下,讀取15通道,根據(jù)你電池供電電壓的不同,應(yīng)該得到 1100~1300左右的值,讀取 BGV 記錄得到 15通道電壓為:1193mv 左右的出廠測定的電壓值, 按 ADCValue 1300 為 1193mv 就可以逆算出 滿量程 4095 對應(yīng)的電源電壓為:3758mv
回復(fù)

使用道具 舉報(bào)

14#
ID:322939 發(fā)表于 2024-8-31 15:17 | 只看該作者
188610329 發(fā)表于 2024-8-31 09:26
STC8H 系列是 12位ADC  ADC讀值應(yīng)該是在 0~4095 之間,你17440是怎么來的?
正常情況下,讀取15通道,根 ...

我是用串口打印出來的(17440),8H系列AD有兩種,10位和12位,網(wǎng)上有的算法是分開算的(如AD10位就讀1024,12位的讀4096),不知能不能測量其它通道的電壓?如果不行就轉(zhuǎn)芯片了。多謝!
回復(fù)

使用道具 舉報(bào)

15#
ID:322939 發(fā)表于 2024-8-31 15:18 | 只看該作者
感謝各位大佬的意見!
回復(fù)

使用道具 舉報(bào)

16#
ID:322939 發(fā)表于 2024-8-31 15:36 | 只看該作者
unigned int Temp=0;
unigned int  sum=0;
float voltage=0.0;
unigned chai  i;
for(i=0;i<32;i++)
{
Temp+=Get_Adc(15);//
}
Temp= Temp>>5;//此數(shù)值濾波后2040(這是在5V供電下調(diào)試打印出來的數(shù)值)
voltage=(float)(1.19*4095)/Temp;
voltage結(jié)果等于2.38875V;如果這是VCC電壓那就相差太遠(yuǎn)了,不知是不是算法問題還是其它問題?
回復(fù)

使用道具 舉報(bào)

17#
ID:624769 發(fā)表于 2024-9-1 19:31 | 只看該作者
LAW1100 發(fā)表于 2024-8-31 15:36
unigned int Temp=0;
unigned int  sum=0;
float voltage=0.0;

除非你的供電電池 真的是2.4V 電池,不然,你的代碼100%有問題,正常鋰電池供電 讀取15通道,瀆值應(yīng)當(dāng)是 1200左右的, 你能讀出 2040 那么代碼肯定不對,就好像你之前說 讀出來17440 一樣,你還是仔細(xì)檢查你的代碼吧,不用折騰那些有的沒有的所謂濾波,你先確保你 ADC_Value 讀出來的東西 是對的。
回復(fù)

使用道具 舉報(bào)

18#
ID:401564 發(fā)表于 2024-9-2 00:13 | 只看該作者
LAW1100 發(fā)表于 2024-8-31 15:36
unigned int Temp=0;
unigned int  sum=0;
float voltage=0.0;

unigned int Temp=0;這個(gè)聲明看一下
你就知道怎么回事了
12位數(shù)據(jù)累加32次,會不會溢出呢?
回復(fù)

使用道具 舉報(bào)

19#
ID:71955 發(fā)表于 2024-9-2 22:02 來自手機(jī) | 只看該作者
亮出你封裝的Get_Adc(15)函數(shù)就一目了然了,15通道ADc好像是二進(jìn)過制1111,你搞個(gè)15上去是什么意思呢
回復(fù)

使用道具 舉報(bào)

20#
ID:71955 發(fā)表于 2024-9-2 22:34 | 只看該作者
不好意思小弟不才,忘記自己是初學(xué)者亂回復(fù).15就是1111
回復(fù)

使用道具 舉報(bào)

21#
ID:322939 發(fā)表于 2024-9-3 14:42 | 只看該作者
15通道除了測量VCC外,不知能不能測其它通道的電壓?
回復(fù)

使用道具 舉報(bào)

22#
ID:1128898 發(fā)表于 2024-9-3 19:21 | 只看該作者
可能是封裝問題
回復(fù)

使用道具 舉報(bào)

23#
ID:541750 發(fā)表于 2024-9-4 11:12 | 只看該作者
你好,我看到你STC 1.19V基準(zhǔn)電壓問題,后面解決了嗎?我也碰到這個(gè)問題了,能否向你請教 一下, 我的VX  13757468658
回復(fù)

使用道具 舉報(bào)

24#
ID:541750 發(fā)表于 2024-9-4 11:13 | 只看該作者
你好,我看到你STC 1.19V基準(zhǔn)電壓問題,后面解決了嗎?我也碰到這個(gè)問題了,能否向你請教 一下,我輸入5V,測試出來輸出 為什么只有3.0V
回復(fù)

使用道具 舉報(bào)

25#
ID:541750 發(fā)表于 2024-9-4 12:22 | 只看該作者
#define ADC_Power 0x8f        //ê1ÄüADCÄ£¿é                ′ò¿aADC                ½«ADCòy½ÅéèÖÃμ½P55
#define ADC_Start 0x40        //¿aê¼ADC×a»»
#define ADC_Flag 0x20        //×a»»íê3é±ê־λ
#define ADC_SYS 0x2f        //½«ADCÏμí3ê±Öóé趨ÎaSYSclk/2/16  óò¶ÔÆë

unsigned int VDDA; // VDDAμÄμçÑ1Öμ μ¥λoá·ü
unsigned int *BGV; // Äú2¿2ο¼μçÑ1Öμ μ¥λoá·ü

void AD_Init()
{
//        ADC_RES = 0;
//        ADC_RESL = 0;
        P_SW2|= 0x80;
        ADCTIM=0x3f;
        P_SW2 &= 0x7f;
        ADCCFG=ADC_SYS;
        ADC_CONTR=ADC_Power;
        BGV = (unsigned int idata *)0xef;
        delay_ms(1);       
}

unsigned int ADC_Get()
{       
        unsigned int res;
        ADC_CONTR |= ADC_Start;
//        ADCCFG=ADC_SYS;
    _nop_();
    _nop_();
    _nop_();
    while((ADC_CONTR & ADC_Flag) == 0);   //μè′yíê3é
    ADC_CONTR &= ~ADC_Flag;     //Çå3yíê3é±ê־λ
        res =((unsigned int)ADC_RES << 8) | ADC_RESL;
        return res;

}

void Fetch_VDDA(void)
{
  unsigned int res=0;
  unsigned char i;

  ADC_CONTR = ADC_Power; // ê1ÄüADCÄ£¿é 2¢Ñ¡Ôñμú15í¨μà
  ADC_Get();
  ADC_Get();
  for(i=0;i<8;i++)
  {
    res+=ADC_Get();
  }
  res>>=3; // ¶áè¡8′Î è¡Æ½¾ùÖμ
  VDDA = (unsigned int)(1023L*(*BGV/res)); // μÃ3öμĽá1ûμ¥λêÇoá·ü
}
回復(fù)

使用道具 舉報(bào)

26#
ID:541750 發(fā)表于 2024-9-4 12:22 | 只看該作者
這個(gè)代碼測試出來的電壓是3069,錯在哪里?
回復(fù)

使用道具 舉報(bào)

27#
ID:71955 發(fā)表于 2024-9-4 23:26 來自手機(jī) | 只看該作者
VDDA = (unsigned int)(1023L*(*BGV/res));改成VDDA = (unsigned int)(1023L*(1190/res));可以了。8H不支持內(nèi)存讀內(nèi)部參考電壓參
回復(fù)

使用道具 舉報(bào)

28#
ID:322939 發(fā)表于 2024-9-6 09:46 | 只看該作者
如果只能測量15通道VDD電壓而不能測量其它通道電壓,那就不合適這個(gè)項(xiàng)目,只能轉(zhuǎn)其它芯片了,多謝各位了!
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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