找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC單片機ADC差分采樣或輪詢采樣程序如何編寫?

  [復(fù)制鏈接]
ID:686513 發(fā)表于 2021-12-30 20:00 | 顯示全部樓層 |閱讀模式
本帖最后由 zhth1979 于 2022-1-4 08:52 編輯

STC  ADC輪詢采樣例程有嗎?  采用的傳感器是壓阻式壓力傳感器,共四個腳,供電:一個正一個負,兩個輸出:一個正極輸出,一個負極輸出。有氣壓時,測量兩個輸出腳為0到60mV的變化。原有電路這兩上輸出腳都分別接在ADC口上。這種情況是不是要分別檢測這兩個腳的值,結(jié)果再相減。最好有STC8H3k系列的單片機例程參考。 22.png 1.png 2.png
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2021-12-30 23:35 | 顯示全部樓層
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. sfr     ADC_CONTR   =   0xbc;
  4. sfr     ADC_RES     =   0xbd;
  5. sfr     ADC_RESL    =   0xbe;
  6. sfr     ADCCFG      =   0xde;

  7. sfr     P_SW2   =   0xba;
  8. #define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)

  9. sfr     P0M1    =   0x93;
  10. sfr     P0M0    =   0x94;
  11. sfr     P1M1    =   0x91;
  12. sfr     P1M0    =   0x92;
  13. sfr     P2M1    =   0x95;
  14. sfr     P2M0    =   0x96;
  15. sfr     P3M1    =   0xb1;
  16. sfr     P3M0    =   0xb2;
  17. sfr     P4M1    =   0xb3;
  18. sfr     P4M0    =   0xb4;
  19. sfr     P5M1    =   0xc9;
  20. sfr     P5M0    =   0xca;
  21. bit ACD_DN;
  22. void main()
  23. {
  24.     P0M0 = 0x00;
  25.     P0M1 = 0x00;
  26.     P1M0 = 0x00;
  27.     P1M1 = 0x00;
  28.     P2M0 = 0x00;
  29.     P2M1 = 0x00;
  30.     P3M0 = 0x00;
  31.     P3M1 = 0x00;
  32.     P4M0 = 0x00;
  33.     P4M1 = 0x00;
  34.     P5M0 = 0x00;
  35.     P5M1 = 0x00;

  36.     P1M0 = 0x00;                                //設(shè)置P1.0為ADC口
  37.     P1M1 = 0x01;
  38.     P_SW2 |= 0x80;
  39.     ADCTIM = 0x3f;                              //設(shè)置ADC內(nèi)部時序
  40.     P_SW2 &= 0x7f;
  41.     ADCCFG = 0x0f;                              //設(shè)置ADC時鐘為系統(tǒng)時鐘/2/16
  42.     ADC_CONTR = 0x80;                           //使能ADC模塊

  43.     while (1)
  44.     {
  45.                 if(!ACD_DN)
  46.                 {
  47.                         ADC_CONTR |= 0x40;                      //啟動AD轉(zhuǎn)換
  48.                         _nop_();
  49.                         _nop_();
  50.                         ACD_DN = 1;
  51.                 }else{
  52.                         if(ADC_CONTR & 0x20)            //查詢ADC完成標志
  53.                         {
  54.                                 ADC_CONTR &= ~0x20;                     //清完成標志
  55.                                 P2 = ADC_RES;                           //讀取ADC結(jié)果
  56.                                 ACD_DN = 0;
  57.                         }                       
  58.                 }
  59.                 //Do other thing
  60.     }
  61. }

復(fù)制代碼


回復(fù)

使用道具 舉報

ID:313048 發(fā)表于 2021-12-31 10:40 | 顯示全部樓層
差分輸入采樣的,可以用單片機自帶的差分采樣去采集,或者通過外圍電路轉(zhuǎn)為單信號去采集。
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2021-12-31 12:24 | 顯示全部樓層
首先,你計算好沒有?0-60mV的電壓,對應(yīng)的12位ADC,如果參考電壓是5V,那么ADC的數(shù)字量是很少的
推薦用外部ADC,MCP3421這個還行,只是有點慢,但對于壓力傳感器來說,足夠了

回復(fù)

使用道具 舉報

ID:686513 發(fā)表于 2021-12-31 12:39 | 顯示全部樓層
AUG 發(fā)表于 2021-12-31 10:40
差分輸入采樣的,可以用單片機自帶的差分采樣去采集,或者通過外圍電路轉(zhuǎn)為單信號去采集。

STC8H3k32s2單片機說明書里找了,沒有自帶的差分采樣。
回復(fù)

使用道具 舉報

ID:686513 發(fā)表于 2021-12-31 12:40 | 顯示全部樓層

這是P1.0查詢一次的結(jié)果嗎?
回復(fù)

使用道具 舉報

ID:686513 發(fā)表于 2021-12-31 12:42 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-12-31 12:24
首先,你計算好沒有?0-60mV的電壓,對應(yīng)的12位ADC,如果參考電壓是5V,那么ADC的數(shù)字量是很少的
推薦用外部ADC ...

參考電壓為2.5V,變化是0.3mv一個PSI.
回復(fù)

使用道具 舉報

ID:301191 發(fā)表于 2021-12-31 16:51 | 顯示全部樓層
頂一下
回復(fù)

使用道具 舉報

ID:130230 發(fā)表于 2021-12-31 17:59 | 顯示全部樓層
你要用差分輸入的引腳才可以,不是為了求差。差分是為了抑制干擾,你概念理解錯了。
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2021-12-31 18:09 | 顯示全部樓層
zhth1979 發(fā)表于 2021-12-31 12:42
參考電壓為2.5V,變化是0.3mv一個PSI.

2.5v 參考電壓, 即2500mv, 0.3mv 變化即約  1/8333 的差異, 12位ADC 滿量程則為 4096,可以區(qū)分 1/4096 的變化差異, 硬件上就滿足不了,你也不需要考慮軟件如何實現(xiàn)了。
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2021-12-31 18:53 | 顯示全部樓層
zhth1979 發(fā)表于 2021-12-31 12:42
參考電壓為2.5V,變化是0.3mv一個PSI.

就算是0.3mV一個位,那不也就200個數(shù)字量而已嗎?那就是說,你不管是測量什么,最大量程只能是0-199,個人感覺這沒啥用
如果一定要用這個方案,個人推薦參考電壓使用2.048V,不要用2.5V
回復(fù)

使用道具 舉報

ID:686513 發(fā)表于 2022-1-3 10:50 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-12-31 18:53
就算是0.3mV一個位,那不也就200個數(shù)字量而已嗎?那就是說,你不管是測量什么,最大量程只能是0-199,個人感覺 ...

200個量就夠了,實際使用到的只需要150個就夠了。
回復(fù)

使用道具 舉報

ID:686513 發(fā)表于 2022-1-3 10:52 | 顯示全部樓層
jizhongbiao 發(fā)表于 2021-12-31 17:59
你要用差分輸入的引腳才可以,不是為了求差。差分是為了抑制干擾,你概念理解錯了。

這個單片機好像沒有差分輸入功能 ,但我看到別人同類產(chǎn)品,用的單片機也沒有差分功能,用了兩個ADC口,不知道如何實現(xiàn)的。
回復(fù)

使用道具 舉報

ID:686513 發(fā)表于 2022-1-3 10:58 | 顯示全部樓層
jizhongbiao 發(fā)表于 2021-12-31 17:59
你要用差分輸入的引腳才可以,不是為了求差。差分是為了抑制干擾,你概念理解錯了。

兩個結(jié)果求差的結(jié)果和(ADC1-GND)-(ADC2-GND)不是一樣嗎?
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2022-1-3 18:48 | 顯示全部樓層
傳感器的1腳接ADC的地,單片機上面的AGnd,3腳接到一個ADC,這應(yīng)該就可以了
然后進行ADC看一下結(jié)果 51hei截圖20220103184623.png

回復(fù)

使用道具 舉報

ID:686513 發(fā)表于 2022-1-4 08:51 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-1-3 18:48
傳感器的1腳接ADC的地,單片機上面的AGnd,3腳接到一個ADC,這應(yīng)該就可以了
然后進行ADC看一下結(jié)果

這樣接不就是單端輸入了嗎?傳感器部分按樣板線路已經(jīng)做好了。
回復(fù)

使用道具 舉報

ID:301191 發(fā)表于 2022-1-6 04:40 | 顯示全部樓層
頂一下
回復(fù)

使用道具 舉報

ID:82067 發(fā)表于 2022-1-7 15:34 | 顯示全部樓層
還是用放大器放大一下吧,這個太小了,測不了
回復(fù)

使用道具 舉報

ID:313048 發(fā)表于 2022-1-7 16:26 | 顯示全部樓層
zhth1979 發(fā)表于 2021-12-31 12:39
STC8H3k32s2單片機說明書里找了,沒有自帶的差分采樣。

用運放吖,芯片沒有就用運放,運放差分放大就可以了,只用單片機1個IO
回復(fù)

使用道具 舉報

ID:625730 發(fā)表于 2022-1-14 17:11 | 顯示全部樓層
zhth1979 發(fā)表于 2022-1-4 08:51
這樣接不就是單端輸入了嗎?傳感器部分按樣板線路已經(jīng)做好了。

傳感器有說明書吧?可以參考推薦的電路,很多Vout-接地就可以用了,單端也不是不可以。
回復(fù)

使用道具 舉報

ID:169891 發(fā)表于 2022-1-27 16:17 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-1-3 18:48
傳感器的1腳接ADC的地,單片機上面的AGnd,3腳接到一個ADC,這應(yīng)該就可以了
然后進行ADC看一下結(jié)果

這個沒看懂啊,ADC的地和AGnd不是一個地嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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