分享到plurk 分享到twitter 分享到facebook

版本 970b02b5d64478041461126abacb425711944a5f

ADC

Introduction

數位類比轉換器(Analog-to-digital coverter),用於將類比形式的連續訊號轉換為數位形式的離散訊號的一類設備。

.. image:: /圖片2.png 取樣率(Sampling rate) ———————- - 類比訊號在時域上是連續的,因此可以將它轉換為時間上連續的一系列數位訊號。這樣就要求定義一個參數來表示新的數位訊號取樣自類比訊號速率。 - 這個速率稱為轉換器的取樣率(sampling rate)或取樣頻率(sampling frequency)。

解析度(Resolution)

  • 對於允許範圍內的類比訊號,它能輸出離散數位訊號值的個數。
  • 這些訊號值通常用二進制數來存儲,因此解析度經常用位元作為單位,且這些離散值的個數是2的冪指數。
  • 例如,一個具有8位解析度的類比數位轉換器可以將類比訊號編碼成256個不同的離散值(因為2^8 = 256)。

.. image:: /adc_convert.png

ADC on STM32F4

  • 共有3個12-bit ADC 在開發板上,且可量測16個外部訊號源及2個內部訊號源。
  • 有12-bit, 10-bit, 8-bit or 6-bit共4種可選擇的解析度。
  • 每個通道的A/D轉換可以使用單次、連續、掃描或間斷模式執行。
  • ADC的結果可以左對齊或右對齊的方式儲存於16-bit暫存器中。

.. image:: /ADC on STM32F4

Independent Mode

Single-channel, single conversion mode ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 此模式只會針對單一通道執行單次轉換,且完成轉換後則停止。 - 可用來檢查電壓來決定系統是否可以啟動。

Multichannel (scan), single conversion mode ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 此模式可使用多個通道依序執行單次轉換,最多可以達到16個通道且可使用不同的取樣時間及不同的通道順序。 - 可用來檢查多種訊號(如電壓、壓力、溫度等)來確保系統可以啟動。

Single-channel continuous conversion mode ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 此模式以單一通道連續執行轉換。 - 可讓ADC在背景連續執行,且CPU不會干預。 - 另外可利用DMA的circular mode降低CPU的負擔。 - 可用來監控電池電壓或是量測溫度。

Multichannel (scan) continuous conversion mode ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 此模式與Multichannel (scan), single conversion mode類似,但執行至最後一個通道後不會停止,而是會回到第一個通道執行轉換。 - 可用來量測多組電壓及溫度,像是電池充電器,可監控每個電池的電壓及溫度,當電壓或溫度到達最達最大值時必須能將電池斷路。

ADC Voltage Measurement

::

ConvertedVoltage = ConvertedValue*VDD/4095;

ADC Temperature Measurement

.. image:: /formula.png ::

ConverTemp= ((((ConverValue*VDD)/4095)-V25)/Slope + 25;

Questions

    1. ADC的轉換時間有多快?
    1. Bandwidth大小為多少?
    1. 頻率響應為多少,可容忍的最大頻率呢?
    1. ADC在Stm32的flow中,會經過的,會用到的電路和元件有哪些?
    1. 測試的接法?
    1. ADC的公式在哪裡找到?
    1. 溫度的範圍?
    1. 當在測量輸出電壓時,三用電表在pin腳上量到的電壓大小與gdb上所取得到的值得誤差有多少?
    1. 如何先做溫度上的較準?
    1. 整個程式上的架構為如何?
    1. 如何選擇mode? Scan or Continuous?
    1. 若想要取得其他外部Sensor的Anolog值,要如何取得?
    1. 頻率除以4要幹嘛?不除頻又會怎樣?
    1. ExternalTrigConvEdge和ExternalTrigConv是甚麼?觸發又是在幹嘛?
    1. DMA跟ADC之間是在幹嘛的? DMA透過ADC得到溫度,不需要透過CPU來做處理,DMA直接將直存在memory上。
    1. 為什麼要設定DMA,照我們我的作法是跑迴圈的方式去polling溫度的值?要做DMA的話會花幾個cycle?
    1. DMA_Mode_Circulur這mode在做甚麼用?
    1. DMA2_Stream0是甚麼?為什麼是以Stream的方式?
    1. 用while loop可能會取得錯誤的值,也可能會浪費資源?
    1. 溫度的sampling rate設成20MHz會不會太高,或許1KHz會差不多,開發程式中要call api時,config中值是否可參數化?

Reference

  • Analog-to-digital converter - Wikipedia, the free encyclopedia<http://en.wikipedia.org/wiki/Analog-to-digital_converter>_

  • 稀里糊塗學 STM32 - 第四講:白駒過隙</embedded/learn-stm32-part-4.pdf>_

  • STM32F407xx Datasheet<http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/DM00037051.pdf>_

  • STM32F407xx Reference Manual<http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf>_

  • STM32™’s ADC modes and their applications<http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00258017.pdf>_