Louie NRT Story

[강의] STM32F4 - ADC with DMA 본문

전기차충전기

[강의] STM32F4 - ADC with DMA

hyeok0724.kim@gmail.com 2020. 12. 11. 00:27
반응형

Index

1. ADC와 DMA 설명

2. ADC, DMA 설정

3. 프로그래밍

 

1. ADC와 DMA 설명

1) ADC(Analog to Digital Converter) 계산방법

- STM32는 Reference 전압이 3.3v 임

- ADC 1당 전압[V[ = VREF(Voltage Reference) / Bit Resolution = 3.3v / 2^12

  = 3.3v / 4096 = 0.806mV

  ex) ADC 값이 1500 이라면 0.000806 x 1500 = 1.209v 가 측정된 전압임

 

2) DMA(Direct Memory Access) 설명

- 측정된 값이 자동으로 특정 메모리에 복사되는 것

- 약간 설정으로 자동 복사되어 코딩할 필요가 없음

 

3) 프로그래밍 하고 하는 방식

- 기존에는 AD 변환이 완료되면 Value[0] ~ Value[3] 까지 하나씩 저장해달라고 CPU 클럭이 소모됨

- 위와 다르게 DMA 방식으로 AD변환이 완료되면 ADC결과를 DMA 컨트롤러가 자동으로 원하는 변수에 저장

 

4) 정리

- 특정메모리의 값을 가져올 때 사용

- 몇개데이터를 가져와서 복사할떄는 효과가 거의 없지만 1kbyte 크기일때는 for문 돌려서 복사하느라 CPU가

   다른일을 하지 못하지만 DMA 이용하면 바로 복사함. CPU의 클럭 소요 없이 DMA가 복사하기 때문에 좋음.

- Uart로 데이터가 100byte씩 들어올때 보통 1byte씩 인터럽트 걸어서 배열에 차곡차곡 쌓아놓는데 

  그러면 100번의 인터럽트가 걸린다. 하지만 DMA를 이용하면 100byte를 DMA가 알아서 저장하고 다

  받아지면 인터럽트 한번 걸어서 수행함

 

2. ADC, DMA 설정

- 4개의 ADC를 설정함

- ADC의 계산 방법 등을 설정함

- 순차적으로 ADC의 값을 배열에 하나씩 저장 할 것이기 때문에 Circular 모드로 설정

- 저장할 Memory는 순차적으로 증가하도록 설정

 

3. 프로그래밍

- ADC의 DMA를 사용할 수 있도록 선언할 Start 함수

- 계산된 4개의 ADC 값을 순차적으로 배열에 저장 하도록 함

- 그렇게 저장된 배열의 데이터를 출력

 

Reference:

https://youtu.be/o6hZEyv6s88

 

반응형
Comments