Tech Note STM32 ADC 펌웨어가이드 ( 타이머로 ADC 주파수설정 ) Introduction STM32 ADC 는다양하고복잡한기능을제공하기때문에사용자요구에맞는최선의방법을선택하기위해서는 ADC 의모드와특성에대한이해를필요로한다. 또한하드웨어트리거와 DMA 를함께운용하면소프트웨어로처리할때생기는복잡함과타이밍문제를간단하게해결할수있다. ADC 의특징을다음순서로설명한다. TNK0023 STM32 ADC 펌웨어가이드 ( 모드와특성 ) STM32 ADC 펌웨어가이드 ( 타이머로 ADC 주파수설정 ) Doc ID Rev 1.0 1 / 11
Contents 1 STM32 ADC 샘플링주파수... 3 1.1 타이머선택... 3 1.2 타이머 TRGO 선택... 4 1.3 타이머 Update Event 주기설정... 5 2 STM32 ADC 설정... 7 2.1 Scan conversion mode... 7 2.2 Continous conversion mode... 7 2.3 Discontinous conversion mode... 7 2.4 DMA continous requests... 7 2.5 DMA request settings : Circular or Normal... 7 2.6 Sampling time 과 conversion time... 7 2.7 External trigger conversion source and edge... 7 3 STM32 ADC 코드예시... 9 List of tables No table of figures entries found. List of figures Figure 1. Timer6 기능과 TRGO... 3 Figure 2. Timer1 기능과 TRGO (TRGO2)... 4 Figure 3. Timer6 TRGO Update Event... 4 Figure 4. Timer6 clock 도메인... 5 Figure 5. APB1 timer clock... 5 Figure 6. Timer6 세팅... 6 Figure 7. Timer 내부 clock 과 event... 6 Figure 8. ADC Setting... 8 Figure 9. ADC Trigger Setting... 8 Figure 10. ADC DMA Setting... 8 2 / 11 Doc ID Rev 1.0
1 STM32 ADC 샘플링주파수 만약어플리케이션레벨에서특정 ADC 샘플링주파수설정이필요한경우, 앞장에서설명한바와같이 APBx (PCLKx) clock 주파수를 ADC 내부의 prescaler 로나눈 ADC peripheral 주파수를가지고 ADC 채널에서설정한 sampling time 과 conversion time 으로다시거꾸로계산해서원하는 ADC 샘플링주파수를맞추기는힘들다. 이런경우, 타이머를원하는 ADC 샘플링주파수로설정하고 ADC 채널의 sampling time 과 conversion time 은해당타이머샘플링주파수보다빠르게 ( 일찍끝나게 ) 설정하면쉽게해결할수있다. 1.1 타이머선택 앞장에서설명했듯이 ADC 의하드웨어 external trigger conversion source 로타이머의 capture compare event 또는 trigger out event (TRGO) 를선택할수있다. STM32 의 basic 타이머 ( 예, 타이머 6, 타이머 7 등 ) 는 PWM, input capture, output compare 등의기능이없는단순한타이머로 TRGO 소스선택도단순하나, general purpose 또는 advance control 타이머 ( 예, 타이머 1 등 ) 의경우는기능도많고 TRGO 소스선택도여러가지로할수있다. 타이머에따라카운터크기를 16bit 또는 32bit 로다르게지원하므로이점도염두해두고단순한타이머인타이머 6 을선택한다 Figure 1. Timer6 기능과 TRGO Doc ID Rev 1.0 3 / 11
Figure 2. Timer1 기능과 TRGO (TRGO2) 1.2 타이머 TRGO 선택 예를들어 ADC 샘플링주파수를 1MHz 로해야되는경우, 타이머의 update event 를 1MHz 주기로발생하도록설정하고 TRGO 출력소스를 update event 로설정하는방법이가장간단하다. 타이머의 update event 인터럽트핸들러에서소프트웨어로 ADC 를 1 샘플씩시작하는방법은잦은인터럽트호출로인해비효율적이며타이밍문제도발생할수있으므로하드웨어 TRGO 방식을사용해야한다. 만약하나의타이머를 ADC 시작 trigger 외에다른용도로도같이사용할수밖에없다면 update event 는원하는샘플링주파수의정수배로느리게하고출력이없는 output compare 또는 PWM 모드를 1MHz 를만들어서 TRGO 로사용하는방법도고려할수있다. Figure 3. Timer6 TRGO Update Event 4 / 11 Doc ID Rev 1.0
1.3 타이머 Update Event 주기설정 타이머 6 을 1MHz 로만들기위해서타이머 6 이 APBx (APB1, APB2, ABP3) 의어느도메인타이머인지를데이터쉬트를통해서확인한다. 현재사용자가설정한 APBx timer clock 속도 (CK_PSC) 를확인하고타이머내부의 prescaler 을거쳐서분주된 clock (CK_CNT) 의주기를계산한다. 타이머카운터는 CK_CNT clock 에맞춰 1 씩맞춰증가 (up mode 의경우 ) 하다가사용자가설정한 Counter Period (AutoReload Register) 와동일해지면다음 clock 에타이머카운터는 0 으로 roll-over 되면서 update event 가발생한다. 아래의예는 TIM6 이 108MHz (CK_PSC) 로설정되어있고 prescaler 를거치면서 108MHz/(53+1) = 2MHz (CK_CNT) 로설정되고 Counter Period 가 1 로설정되었기때문에타이머카운터는 0 과 1 을반복하는나누기 2 배로느려진효과가되어서 1MHz 의 update event 신호를발생하게된다. Figure 4. Timer6 clock 도메인 Figure 5. APB1 timer clock Doc ID Rev 1.0 5 / 11
Figure 6. Timer6 세팅 Figure 7. Timer 내부 clock 과 event 6 / 11 Doc ID Rev 1.0
2 STM32 ADC 설정 앞에서타이머 6 이 TRGO 출력을 1 MHz 마다보내도록설정을하였으므로 ADC 는해당 TRGO 의 rising edge 마다 ADC 1 샘플링을시작하도록설정해야한다. ADC 1 샘플링 (Sampling time 과 conversion time) 은다음 TRGO 신호가오기전에끝내야하는점에유의한다 2.1 Scan conversion mode 여러채널을샘플링하는경우 scan 모드를 enable 하고한개채널만샘플링하는경우 disable 한다 2.2 Continous conversion mode 타이머의 TRGO 신호를받을때만샘플링시작을할예정이므로반드시 disable 한다 2.3 Discontinous conversion mode 타이머의 TRGO 신호를받을때만 1 샘플링씩할예정이므로 disable 한다 2.4 DMA continous requests DMA 를같이사용하는경우 enable 한다 2.5 DMA request settings : Circular or Normal DMA 를같이사용하는경우 circular 를선택하면 main 함수 while 루프진입전에 1 회 HAL_ADC_Start_DMA 호출후추가로 HAL_ADC_Start_DMA 을호출해줄필요가없이 DMA 가알아서다시사용자버퍼의 0 번째인덱스로돌아가서업데이트를하나 normal 을선택하면 HAL_ADC_ConvCpltCallback 을받고나서다시유저코드에서 HAL_ADC_Start_DMA 호출이필요하다 2.6 Sampling time 과 conversion time 타이머 6 의샘플링주기가 1 MHz, 즉 1us 이기때문에 sampling time 과 conversion time 을합한시간이 1us 이내에끝나도록설정해야한다. Sampling time 을 3 cycle, conversion time 을 12 bit resolution 으로하면 15 cycle 이며앞장에서예를든 ADC peripheral clock 주파수인 27MHz ( 약 37.037ns) 를곱하면약 555.555ns 가되므로 1us 이내에끝낼수있게된다. 2.7 External trigger conversion source and edge 앞에서설정한타이머 6 의 TRGO 를트리거소스로선택하고 rising edge 를선택해 준다 Doc ID Rev 1.0 7 / 11
Figure 8. ADC Setting Figure 9. ADC Trigger Setting Figure 10. ADC DMA Setting 8 / 11 Doc ID Rev 1.0
3 STM32 ADC 코드예시 /* USER CODE BEGIN PV */ #define NO_SAMPLE 1000 uint16_t adc_buff[no_sample]; uint16_t user_buff[no_sample]; /* USER CODE END PV */ /* USER CODE BEGIN 0 */ void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc) { memcpy(&user_buff[0], & adc_buff[0], NO_SAMPLE/2); } void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { memcpy(&user_buff[no_sample/2], & adc_buff[no_sample/2], NO_SAMPLE/2); } /* USER CODE END 0 */ int main(void) { HAL_Init(); SystemClock_Config(); } MX_GPIO_Init(); MX_DMA_Init(); MX_ADC1_Init(); MX_TIM6_Init(); /* USER CODE BEGIN 2 */ HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buff, NO_SAMPLE); HAL_TIM_Base_Start(&htim6); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ Doc ID Rev 1.0 9 / 11
참고자료 AN3116 : STM32 ADC modes and their applications /resource/en/application_note/cd00258017.pdf AN2834 : How to get the best ADC accuracy in STM32 microcontrollers /resource/en/application_note/cd00211314.pdf 10 / 11 Doc ID Rev 1.0
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 Doc ID Rev 1.0 11 / 11