硬件環境: STM8SF103 TSSOP20封裝
因為項目需要用到AD采樣電池電壓,於是便開始了使用STM8S ADC進行采樣,也就有了下文。
手冊上對STM8S ADC的管腳描述如下:
STM8SF103這款芯片是TSSOP 20管腳封裝,如下:
STM8SF103這款芯片能用的是5個AD采樣通道,分別是AIN2~AIN6。其實是還有一個通道AIN7,但手冊並沒有對其描述。
這里還有一個很奇怪的地方,從ST資料中找到一個與上面的表數據不同的地方,如:
很明顯的說STM8S103是存在這個AIN7通道的,再加上另外5個通道,應該是6個通道才對。
要做AD采樣,首先要解決的就是AD的參考電壓,之前查看手冊上並沒有描述AIN7通道,有的僅僅是幾個外部采樣通道。AIN7通道是內部通道,用於提供一個恆定的電壓參考值。
從別的資料找到下面這句話,很明顯是存在這么一個通道的,后面測試也證明這個是正確的。
第一步已經解決了,找到了一個參考電壓,但這個電壓到底是多少,手冊也沒有找到痕跡。只能是根據公式自己算出來。
Vin = (ADC * Vref) / 1024
Vref = Vin * 1024 / ADC (根據Vin這個恆定的值算出參考電壓,這里的參考電壓就是VCC且是變化的。實際上真正的參考電壓是由AIN7提供的1.22V)
使用VCC做為參考電壓,VCC很明顯可以使用萬用表先測出來,1024是因為STM8S這款的AD是10位精度。
我測試的VCC為3.19V,AD值基本上是出於穩定狀態392左右,392 * 3.19 / 1024 = 1.221171875 自然就算出了參考電壓值,這里取1.22。為了證明這個值是正確的,
使用電池供電,VCC為2.93V。分別采樣8次,計算每一次的VCC電壓。
n AD值 VCC
1 432 2.89V
2 429 2.91V
3 429 2.91V
4 429 2.91V
5 430 2.90V
6 430 2.90V
7 430 2.90V
8 431 2.89V
另外又使用3.19V進行測試,采樣值也是很接近的,平均3.20左右。
還有另外一款STM8S903也有該采樣通道AIN7,所有的AIN通道有8個,7個內部加上1個外部通道。如果沒有能夠提供參考電壓,則必須使用外部器件供一個參考電壓給AINx。可選用TL430。
由此可以看出: AIN7通道一定是存在於STM8S103的,並且參考電壓為1.22V。
后記:
經本人測試確實如以上網友所說。
我用STM32 AD大半年也沒有覺得哪里不好。只有設置和程序不對的問題,AD多通道,不同通道之間不需要延時等待。最多做了8通道加一溫度,數值都是對的。但是AD采樣的值不是固定的,有個上下波動。這個和參考電壓有關。加軟件濾波有助於改善波動。(具體版上有ADC值校准的帖子,可以搜下)
其次,ADC采樣多通道必須要用DMA傳輸,DMA傳輸要注意設置buffersize以及起始地址。AD多通道之間要排好順序。再則就是先使能DMA,再使能ADC轉換。順序不要錯了,否則有的你玩的。
因為沒有外部基准電壓,而采用內部基准往往就是 VDDA的電壓,面對大批量產品,往往此電壓差異較大,如何消除此影響呢,
1、可以采用一路AD 連接一個類似 TL431的外部參考標准電壓來獲得 VDDA 的電壓 從而 消除VDDA的不定值對要測AD的影響。
2、VDDA上連接一個 與電源電壓相差不大的高精准電源,比如可以用TL431組成一個3.3v基准,但考慮TL431基准2.5,穩壓到3.3需要加電阻匹配,電阻的誤差也要考慮,所以此方案沒采用。