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

版本 da5a5ab31f0c46782953cb0ab7de8284fc901758

embedded/ADC

Changes from da5a5ab31f0c46782953cb0ab7de8284fc901758 to b1f09094207ac330f6a64be5e4ddebe3fbd37b64

---
title: 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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 此模式只會針對單一通道執行單次轉換,且完成轉換後則停止。
- 可用來檢查電壓來決定系統是否可以啟動。

.. image:: /SSM.png

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

.. image:: /MSM.png

- 下圖是個例子:

.. image:: /MSMex.png

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

.. image:: /SCM.png

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

.. image:: /MCM.png

ADC Voltage Measurement
------------------------
::

  ConvertedVoltage = ConvertedValue*VDD/4095;

ADC Temperature Measurement
----------------------------
.. image:: /formula.png
::
  
  ConverTemp= ((((ConverValue*VDD)/4095)-V25)/Slope + 25;

Demo
=========

.. image:: /ADC_battery.jpg

.. image:: /ADC_pin.jpg


Questions
=========
- 1. ADC的轉換時間有多快?

Ans: 不一定隨著條件而變,Sample Time跟温度以及内部電路的rc有關, Tconv = Sample Time + 12 cycles ( 12-bit resolution ) ,Sample Time為[3 - 480] 

cycles ,Total conversion time = [0.50 - 16.40] µs,with ADCCLK = 30MHz ,所以我們選擇的取樣時間必須 > 16.4µs 。

.. image:: /table7.jpg

- 2. Bandwidth大小為多少?
<<<<<<< edited

- 3. 頻率響應為多少,可容忍的最大頻率呢?
=======
-3. 頻率響應為多少,可容忍的最大頻率呢?
>>>>>>> 70113e04be8cca7f2eaa0f5818c7d1c682778ab3

Ans: 在Datasheet中,因為我們參考電壓VDD為2.97V,故Frequency為[0.6-36]MHz

.. image:: /table6.jpg

- 4. ADC在Stm32的flow中,會經過的,會用到的電路和元件有哪些?

Ans: 有External Event Trigger(e.g. timer capture,EXTI),GPIO ports,External/Internal Reference Voltage,Analog to Digital convert core,

     Temperature Sensor,Analog Multiplexer,Injected/Regular data register,Analog watchdog,Address/date bus,ADC Clock...。

`STM32F407xx Reference Manual<http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf>`_ 參照P264 ADC block diagram 

- 5. 測試的接法?
- 6. ADC的公式在哪裡找到?
    `STM32F407xx Reference Manual<http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf>`_ 在 10.10 Temperature sensor 中溫度轉換公式為

::

    Temperature (in °C) = {(VSENSE – V25) / Avg_Slope} + 25
    Where: V25 = VSENSE value for 25° C、 Avg_Slope = average slope of the temperature vs. VSENSE curve (given in mV/°C or μV/°C)

- 7. 溫度的範圍?
    `STM32F407xx Reference Manual<http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf>`_ 在 10.10 Temperature sensor 中提到 Supported temperature range: –40 to 125 °C, Precision: ±1.5 °C。

- 8. 當在測量輸出電壓時,三用電表在pin腳上量到的電壓大小與gdb上所取得到的值得誤差有多少?
- 9. 如何先做溫度上的校準?
- 10. 整個程式上的架構為如何?
- 11. 如何選擇mode? Scan or Continuous?
Ans:
     - Two groups => a.Regular group。(16 channels)   b.Injected group。(2 channels)
     - 1.Single conversion mode => ADC dose one conversions。
     - 2.Continuous conversion mode => ADC stars a new conversion as soon as is finishes one。
     - 3.Scan mode => This mode is used to scan a groupof analog channels。
     - 4.Discontinuous mode => Regular group。( n conversions,n<=8 )
- Two groups => a.Regular group。(16 channels)   b.Injected group。(2 channels)
- 1.Single conversion mode => ADC dose one conversions。
- 2.Continuous conversion mode => ADC stars a new conversion as soon as is finishes one。
- 3.Scan mode => This mode is used to scan a groupof analog channels。
- 4.Discontinuous mode => Regular group。( n conversions,n<=8 )

- 12. 若想要取得其他外部Sensor的Anolog值,要如何取得?
    利用GPIO,設定要接出的Pin腳,並連接至外部訊號上。
- 13. 頻率除以4要幹嘛?不除頻又會怎樣?
- 14. ExternalTrigConvEdge和ExternalTrigConv是甚麼?觸發又是在幹嘛?
- 15. DMA跟ADC之間是在幹嘛的?
    DMA透過ADC得到溫度,不需要透過CPU來做處理,DMA直接將直存在memory上。

- 16. 為什麼要設定DMA,照我們我的作法是跑迴圈的方式去polling溫度的值?要做DMA的話會花幾個cycle?
- 17. DMA_Mode_Circulur這mode在做甚麼用?
    主要用來處理circular buffers和連續的data flow(像是ADC的scan mode)。當此模式啟動時,會將要傳送的資料載入在stream config所設定的初始值,且DMA request會持續服務。

- 18. DMA2_Stream0是甚麼?為什麼是以Stream的方式?
    DMA Stream 提供了一個source to destination的單方向傳輸的連結,像是周邊到記憶體或是記憶體到周邊。

- 19. 用while loop可能會取得錯誤的值,也可能會浪費資源?
- 20. 溫度的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>`_