單片機如何通過ADC模塊采集模擬信號?
朋友們好,我是電子及工控技術,我來回答這個問題。眾所周知單片機是一種超大規模的集成電路,它只能“讀懂”并處理數字信號,對于連續量的模擬信號則無能為力。單片機通過ADC(模數轉換)芯片實現對模擬量的處理是單片機處理模擬信號的一種最常見的辦法。下面和朋友們聊一聊單片機是如何通過ADC(模數轉換)模塊去采集模擬信號的。
無ADC采集模塊的單片機對模擬信號的處理早期的單片機內部沒有帶ADC(模數轉換)模塊,比如我們以前常用的AT89C51/S51系列的8位單片機,在使用這種單片機進行模擬信號的處理時通常要在單片機外部增設ADC(模數轉換)芯片比如常用的有ADC0809、ADC0832和PCF8591等芯片,它的主要作用是能夠把連續的模擬量變化為離散的數字信號,然后再把這個數字信號通過排線送入到單片機中進行讀取處理。這種處理的方法是通過軟件與硬件相結合的方法實現了對模擬信號的采集處理的。
1、第一步是對模擬量的采樣
我們先說說ADC(模數轉換)芯片轉換的過程,對于連續的模擬量比如溫度、壓力、速度等要通過一定的感應器先把這些物理量轉換成電壓信號,這個電壓信號就是模擬信號,它通入到ADC芯片的輸入端口時,ADC芯片內部的電路首先要做的事情就是把這個連續變化的模擬信號轉變為離散的模擬量,有點類似把一根曲線在一定間隔的時間內把它分切成一段一段的,如下圖所示的那樣。這個過程就是對模擬量進行“采樣”的過程。
2、第二步是對離散過后的模擬量進行“取樣”
ADC(模數轉換)電路中的取樣就是對采集到的離散的模擬量進行取樣保持,以便能為后續的電路“捕捉”到所采集的信號,否則的話由于速度過快不能夠完全取出所采樣的信號就會造成采樣信號的缺失,造成轉換誤差過大。一般ADC中都有取樣保持電路用來完成這項“任務”。
3、第三步是對取樣的電壓量進行量化與編碼
為了說明量化與編碼的方法我們來舉個例子,例如把0V到1V的模擬電壓分成8份,每一份只占其中的八分之一,這樣就把1V的電壓量進行了量化,然后把每一份的電壓值在用一個二進制的代碼表示出來。這樣在ADC(模數轉換)芯片中大體經過這幾個步驟就完成了從模擬量到數字量的轉換任務。
4、軟件的處理
以上是用硬件來完成從模擬量到數字量的轉換,那么剩下的任務就應該交給單片機里的軟件來完成了。首先要把單片機與ADC芯片設置好接口電路,為它們進行數據流通做好準備,進入單片機內部后就開始有軟件接手處理發送來的數據了。根據ADC不同的特性有的采用并口線,有的采用串口線,比如PCF8591模數轉換芯片就采用了IIC方式與單片機進行“交流”的。
在軟件上的程序除了主程序外還要有對送入單片機里的數據進行轉換處理的子程序,顯示數值的子程序等,如果用IIC進行與單片機“交流”的話還需要IIC通信協議程序。所以用內部不帶ADC模塊的單片實現單片機對模擬信號的處理比較繁瑣一些。
有ADC采集模塊的單片機對模擬信號的處理隨著技術的發展,現在很多兼容C51單片機的芯片內部都設置了ADC轉換模塊,對于一些16位和32位高端單片機都設置了不止一路ADC模塊,比如STM32系列的單片機,不僅有ADC模塊還有DCA模塊等用起來十分方便。用這類單片機處理模擬量只要對GPIO口進行配置和調用相應的ADC庫函數就可以了,使用起來比較方便。
以上就是我對這個問題的回答,歡迎朋友們參與討論,敬請關注電子及工控技術,感謝點贊。