ADC란?(Analog to Digital Converter)
MCU 내에서 처리되는 모든 데이터와 연산 등은 모두 디지털 신호(0, 1)로써 처리된다.
MCU가 아날로그 신호가 처리해야 한다면, 결국 0과1로 구성된 디지털 신호로 바뀌어 처리해야 한다.
이러한 일련의 변환 과정들을 ADC라 부른다.
통신 파트에서는 ADC를 PCM(Pulse Code Modulation)라 부른다. ADC와 PCM이 같은 내용이라 생각해도 무방하다
ADC 변환 과정
1. 샘플링(SAMPLING) : 아날로그 신호를 일정한 x축 간격(일반적으로 일정한 시간축)으로 신호를 분할
초(second)당 몇 번 sampling을 하는지를 SPS(sample per second)라고 하며, ADC의 가장 중요한 스펙 중 하나인 sampling rate의 단위이다.
만약 어떤 ADC의 sampling rate가 200 KSPS이라면 1초당 200*1000번을 sampling하여 1초당 200,000개의 데이터로 분할 가능
2. 양자화(Quantization) : 아날로그 신호를 일정한 y축에서( 일반적으로 일정한 시간축 ) 신호를 분할
분할하여 표현할 수 있는 값의 단위가 8-bit(0~255)면 256개로, 10-bit(0~1023)면 1024개로 더 정밀하게 표현된다.
이러한 단위를 resolution(해상도, 분해능)이라고 부른다.
만약 입력되는 아날로그 신호의 voltage level이 0~3V라면 8-bit의 경우 3/256=11.718mV 간격으로 표시할 수 있으며, 10-bit의 경우 3/1024=2.929mV 간격으로 표시할 수 있다.
즉 ADC를 쓸 때 (M)SPS와 resolution을 잘 확인하여 원하는 ADC를 선택해야 한다. SPS가 높으면 시간 축에서 정밀하게, resolution이 높으면 전압 축에서 정밀하게 신호를 추출할 수 있다.
3. 부호화(encoding)
부호화란 표본화와 양자화가 상호적으로 이뤄진 후에 얻어진 데이터를 가지고 각각 2진수로 대응하여 디지털 신호
아날로그 신호를 처리하는 해상도(resolution)가 4-Bit라면 각각의 경우에 부여할 수 있는 코드는 0000, 0001, 0010, 0011 … 1011, 1100, 1101, 1110, 1111인 16개의 코드를 부여할 수 있다.
멀티 채널 ADC : STM32 ARM core chip은
각 ADC 컨트롤러에 속한 여러 채널들을 통해 한 개 이상의 ADC 작업을 진행 가능
ADC는 폴링 , DMA, 인터럽트 방식을 선택하여 사용 할수 있다.
폴링 방식은 HAL_Delay()를 사용해 샘플링 주기를 조절 가능 - > 복잡하고 비효율 적
인터럽트 방식은 샘플링 주기 조절이 어렵고, 너무 빈번하게 인터럽트 발생
따라서 , Timer 인터럽트를 이용하여 일정 주기마다 ADC처리 또는 DMA 방식으로 ADC 처리를 주로 실무적으로 사용한다.
'Stm32 > 개인 학습' 카테고리의 다른 글
HAL 라이브러리 SPI 함수 정리 (0) | 2024.07.07 |
---|---|
HAL 라이브러리 I2C 함수 정리 (0) | 2024.07.07 |
Timer[3] - PWM (0) | 2024.06.19 |
Timer[2] - 타이머 인터럽트 (0) | 2024.06.13 |
Interrupt(EXTI) (0) | 2024.06.08 |