Tech Note STM32 ADC 펌웨어가이드 ( 모드와특성 ) Introduction STM32 ADC 는다양하고복잡한기능을제공하기때문에사용자요구에맞는최선의방법을선택하기위해서는 ADC 의모드와특성에대한이해를필요로한다. 또한하드웨어트리거와 DMA 를함께운용하면소프트웨어로처리할때생기는복잡함과타이밍문제를간단하게해결할수있다. ADC 의특징을다음순서로설명한다. STM32 ADC 펌웨어가이드 ( 모드와특성 ) TNK0024 STM32 ADC 펌웨어가이드 ( 타이머로 ADC 주파수설정 ) Doc ID Rev 1.0 1 / 12 www.st.com
Contents 1 STM32 ADC 특성... 3 1.1 Block 과 Channel... 3 1.2 Master 와 Slave... 3 1.3 Self Calibration... 4 1.4 Peripheral Clock Frequency... 4 1.5 Sampling time 과 Conversion time... 5 1.6 Trigger source and edge... 6 1.7 Sequencer... 7 1.8 Oversampling... 8 2 STM32 ADC 모드... 9 2.1 Regular conversion mode / Injected conversion mode... 9 2.2 Scan conversion mode... 9 2.3 Continous conversion mode... 9 2.4 Discontinous conversion mode... 9 2.5 Interleaved mode... 9 2.6 Alternate trigger mode... 10 List of tables No table of figures entries found. List of figures Figure 1. ADC Block 과 Channel... 3 Figure 2. ADC Channel... 3 Figure 3. Master 와 Slave... 4 Figure 4. ADC peripheral clock 최대주파수... 4 Figure 5. ADC clock 도메인... 5 Figure 6. APB2 사용자설정 clock 주파수... 5 Figure 7. ADC block 내부 prescaler... 5 Figure 8. Sampling time... 6 Figure 9. Conversion time... 6 Figure 10. Software trigger... 7 Figure 11. EXTI trigger... 7 Figure 12. Timer trigger... 7 Figure 13. Sequencer... 8 Figure 14. Oversampling... 8 Figure 15. Discontinuous conversion mode... 9 Figure 16. Interleave mode... 10 Figure 17. Alternate trigger mode (Discontinuous 모드 enable)... 10 Figure 18. Alternate trigger mode (Discontinuous 모드 disable)... 10 2 / 12 Doc ID Rev 1.0
1 STM32 ADC 특성 모든 STM32 MCU 라인업에공통되는 ADC 특성을설명한다. 일부디바이스마다 ADC 특성에적용할수있는값에차이가있음에유의한다. ( 예, Sampling time, Conversion time 등 ) 1.1 Block 과 Channel 현재까지출시된 STM32 MCU 의핀수많은패키지에서는최대 ADC 3 개 block (ADC1, ADC2, ADC3) 을지원하고핀수가작은패키지는 ADC 가없거나 1 개 block 만도지원한다. 각 ADC 블록별로다수의외부 channel (IN0~IN15) 과내부 channel (Vbat, Vrefint, Temperature sensor 등 ) 을지원한다. Figure 1. ADC Block 과 Channel ADC 외부입력핀하나를 ADC 한개 block 의 channel 하나만할당해서샘플링하는게 일반적이지만, ADC 외부입력핀하나를다수의 block 에서교대로샘플링 (Interleaved mode 또는 ADC block 간중복되지않는시간순서 ) 하도록설정하는것도가능하다. ( 예, PC0 번핀을 ADC1_IN1, ADC2_IN1, ADC3_IN1 에서교대로샘플링 ) Figure 2. ADC Channel 1.2 Master 와 Slave ADC Block 이 2 개또는 3 개인 MCU 에서는 ADC1 이 master 이고 ADC2 와 ADC3 은 slave 로내부연결되어있다. ( 일부 MCU (STM32L4) 는 ADC3 이 single 모드로 slave 역할을하지않음에유의한다 ) 하드웨어적으로정확히동시에 ADC1, ADC2, ADC3 이 Doc ID Rev 1.0 3 / 12 www.st.com
싱크를맞춰서샘플링을해야되는경우라면 dual simultaneous 또는 triple simultaneous 모드를사용하고이런경우내부적으로 master/slave 모드가사용된다. 그렇지않고 ADC1, ADC2, ADC3 이각각독립적인타이밍으로동작해도되는경우라면 independent mode 를사용하면되고 master/slave 의내부구조는무시된다. Figure 3. Master 와 Slave 1.3 Self Calibration STM32 일부디바이스는전원인가후또는리셋후 1 회 ADC Self Calibration 을해줘야 제대로된 ADC 값을읽을수있다. ADC 자체 deep power down 모드를지원하는 MCU 의경우에도 ADC 를다시 startup 시키고난후 1 회 ADC Self Calibration 을다시 해줘야한다. Cube HAL ADC 예제코드에서다음함수사용법을참고한다. HAL_ADCEx_Calibration_Start 1.4 Peripheral Clock Frequency 사용하려는 ADC peripheral 의최대속도 (fadc) 와어느 clock 도메인 (APB1, APB2, APB3) 에속해있는지데이터쉬트를통해확인한다. 일부최신 STM32 디바이스는 ADC peripheral clock 소스로 AHB 에서 /1,/2,/4 를하는 synchronous clock 설정과 ADC Clock Mux 에서 /1,/2,../128,/256 을하는 asynchronous clock 설정을대신제공한다. APBx clock 을사용하는 MCU 경우사용자가설정한 HCLK 설정에따라 APBx Clock 의속도도같이바뀌기때문에설정된 APBx (PCLKx) clock 주파수를 ADC 내부의 prescaler 로나눈최종 ADC peripheral clock 속도를계산한다. ( 아래예시 108 MHz / 4 = 27 MHz) ADC 내부의 prescaler 값은모든 ADC block (ADC1, ADC2, ADC3) 에공통 적용되는내용이므로 ADC1 에서 /4 를선택하면 ADC2, ADC3 도 /4 로바뀌는점에 유의한다. Figure 4. ADC peripheral clock 최대주파수 4 / 12 Doc ID Rev 1.0
Figure 5. ADC clock 도메인 Figure 6. APB2 사용자설정 clock 주파수 Figure 7. ADC block 내부 prescaler 1.5 Sampling time 과 Conversion time ADC 샘플링 1 회에항상 sampling 과 conversion 이세트로수행된다. Sampling time 은 channel 별로다르게설정할수있으나 ( 아래예시, ADC1 Channel3 (IN3) 3 cycles) Doc ID Rev 1.0 5 / 12 www.st.com
conversion time 은 ADC block 의 resolution bit 수와동일하다 ( 아래예시, 12bits resolution 은 12 cycles 이며괄호안의 15 clock cycle 은무시한다 ) 위에서 ADC peripheral clock 이 27 MHz 로설정되었기때문에 tadc 는약 37.037 ns 이며샘플링 1 회에소요되는시간은 (3 cycle + 12 cycle) x 37.037ns = 555.555ns 이다. 다음번 ADC 샘플링을딜레이없이연속수행한다면 1 sec / 555.555ns = 1.8 MSPS (Mega sample per second) 가된다. Figure 8. Sampling time Figure 9. Conversion time ADC 샘플링 cycle 은 3, 15, 28, 56, 84, 112, 144, 280 cycle 중에하나를선택할수있다. SAR 방식의 ADC 는 MCU 내부의 capacitor 를 ADC 입력핀소스로부터샘플링 cycle 시간동안충전하고 conversion 시간동안충전된전압을측정한다. 샘플링 cycle 을높일수록 ADC 측정된전압값이높아진다면소스의출력임디던스가높아서설정한샘플링 cycle 시간동안 capacitor 를완전충전하지못했다는것을의미한다. 즉, 샘플링 cycle 을높일수록평균낸안정된값을받는다는값을의미하지않으므로 capacitor 를완전충전할수이상의최대한낮은샘플링 cycle 로설정해도충분하다. 1.6 Trigger source and edge ADC 샘플링시작트리거소스는크게 3 가지로구분할수있다. Software : HAL API 에있는 ADC_Start 함수을호출해서시작. 6 / 12 Doc ID Rev 1.0
Figure 10. Software trigger External Trigger (EXTI) : 외부입력핀의 edge 변화로시작. Figure 11. EXTI trigger External Trigger ( 내부타이머 ) : 내부타이머이벤트 (Update, Capture compare, TRGO 등 ) 로시작. Figure 12. Timer trigger 1.7 Sequencer Regular conversion mode 그룹은최대 16 개, Injected conversion mode 그룹은최대 4 개의샘플링채널순서와채널번호, 샘플링 time 을설정해서하드웨어적으로자동으로순차적으로이루어질수있도록설정할수있다. Doc ID Rev 1.0 7 / 12 www.st.com
Figure 13. Sequencer 1.8 Oversampling STM32L4, H7 과같은최근 MCU 에포함되어있는기능으로 ADC 내부의 20 bit accumulater 와 0-8 bit shifter/truncater 을이용하여사용자가설정한 oversampling ratio 만큼 ADC 값을누적후평균값을알수있다 Figure 14. Oversampling 8 / 12 Doc ID Rev 1.0
2 STM32 ADC 모드 모든 STM32 MCU 라인업에공통되는 ADC 모드를설명한다. 2.1 Regular conversion mode / Injected conversion mode Regular 와 Injected 모드의차이점은 Injected 모드로설정한채널 ( 그룹 ) 에서 ADC 시작트리거가발생하면현재진행중이었던 ADC 샘플링을중단시키고강제로 Injected 모드의채널 ( 그룹 ) 의 ADC 샘플링을시작한다. 2.2 Scan conversion mode 하나의채널만 ADC 샘플링하지않고, 다음번트리거가오면 sequencer 에서설정한채널순서대로다음채널순서의 ADC 샘플링을진행하게한다. 2.3 Continous conversion mode 한번의트리거신호로하나의채널또는 sequencer 에서설정한마지막순서채널까지 ADC 샘플링을완료하고다시처음채널순서로돌아가서 ADC 샘플링을시작한다. 2.4 Discontinous conversion mode Sequencer 에서예를들어 16 개의채널을 regular 그룹으로설정했을때 discontinous conversion number 를가령 2 로설정하면총 8 번의 ADC 시작 trigger 를받아야 16 개 채널의샘플링을완료할수있는모드를말한다 Figure 15. Discontinuous conversion mode 2.5 Interleaved mode 하나의물리적인 ADC 입력채널 ( 핀 ) 을다수의 ADC block 이교대로샘플링하는방식을의미한다. 하나의 ADC block 이샘플링이후컨버전을하는딜레이동안에다른 ADC block 에서샘플링을하는방식으로 SPS (sampling per second) 를최대로올려야할때사용한다 Doc ID Rev 1.0 9 / 12 www.st.com
Figure 16. Interleave mode 2.6 Alternate trigger mode Injected 그룹에만해당되는내용으로 master ADC block 에서받은 ADC 시작트리거하나를다수의 master/slave ADC block 이교대로사용하는방법이다 Discontinous 모드를사용했을때 Figure 17. Alternate trigger mode (Discontinuous 모드 enable) Discontinous 모드를사용하지않을때 Figure 18. Alternate trigger mode (Discontinuous 모드 disable) 10 / 12 Doc ID Rev 1.0
참고자료 AN3116 : STM32 ADC modes and their applications www.st.com/resource/en/application_note/cd00258017.pdf AN2834 : How to get the best ADC accuracy in STM32 microcontrollers www.st.com/resource/en/application_note/cd00211314.pdf Doc ID Rev 1.0 11 / 12 www.st.com
IMPORTANT NOTICE Please Read Carefully STMicroelectronics NV and its subsidiaries ( ST ) reserve the right to make changes, corrections, enhancements, modifications, and improvements to ST products and/or to this document at any time without notice. Purchasers should obtain the latest relevant information on ST products before placing orders. ST products are sold pursuant to ST s terms and conditions of sale in place at the time of order acknowledgement. Purchasers are solely responsible for the choice, selection and use of ST products and ST assumes no liability for application assistance or the design of Purchasers products. No license, express or implied, to any intellectual property right is granted by ST herein. Resale of ST products with provisions different from the information set forth herein shall void any warranty granted by ST for such product. ST and the ST logo are trademarks of ST. All other products or service names are the property of their respective owners. Information in this document supersedes and replaces information previously supplied in any prior versions of this document. 2017 STMicroelectronics All rights reserved 12 / 12 Doc ID Rev 1.0