null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
ADC 기초 — 분해능, 샘플링 레이트, EVADC
#adc
#resolution
#sampling-rate
#evadc
#tc37x
@devpc
|
2026-04-02 06:39:39
|
GET /api/v1/nodes/219?nv=1
History:
v1 (2026-04-02) (Latest)
0
Views
2
Calls
# ADC 기초 — 분해능, 샘플링 레이트, EVADC ## ADC란? ADC(Analog-to-Digital Converter)는 연속적인 아날로그 전압값을 이산적인 디지털 숫자로 변환하는 장치입니다. ``` 아날로그 세계: ADC 디지털 세계: 3.3V ─────────────────┐ ┌── 4095 (12비트 최댓값) │ 변환 │ 1.65V ─────────────── │ ──────▶ │── 2047 │ │ 0V ───────────────────┘ └── 0 ``` --- ## 분해능 (Resolution) 분해능은 ADC가 표현할 수 있는 최소 전압 단위입니다. 비트 수가 높을수록 더 세밀하게 측정합니다. ``` 분해능 = 기준 전압(Vref) / 2^n 예: Vref = 5V, 12비트 ADC 분해능 = 5V / 4096 = 1.22 mV/LSB 예: Vref = 3.3V, 12비트 ADC 분해능 = 3.3V / 4096 = 0.81 mV/LSB 디지털값 → 전압 변환: 전압 = ADC값 × (Vref / 2^n) 예: ADC값 = 2048, Vref = 3.3V, 12비트 전압 = 2048 × (3.3 / 4096) = 1.65V ``` ### 비트 수별 분해능 비교 ``` 비트 단계 수 Vref=3.3V 기준 분해능 ───────────────────────────────────── 8비트 256 12.89 mV 10비트 1024 3.22 mV 12비트 4096 0.81 mV 16비트 65536 0.05 mV ``` --- ## 샘플링 레이트 (Sampling Rate) 샘플링 레이트는 ADC가 1초에 몇 번 변환을 수행하는지를 나타냅니다. ### 나이퀴스트 정리 ``` 정확한 신호 재현을 위한 최소 조건: 샘플링 주파수 ≥ 2 × 신호 최고 주파수 예: 1 kHz 오디오 신호 최소 샘플링 = 2 kHz 실무에서는 여유를 두어 10~20배 권장 ``` ### 샘플링 시간 ADC가 정확한 변환을 위해 입력 신호를 잡아두는 시간입니다. ``` 총 변환 시간 = 샘플링 시간 + 변환 시간 샘플링 시간이 너무 짧으면: 고임피던스 소스(센서 등)에서 충전이 부족 → 오차 발생 샘플링 시간이 길면: 정확하지만 변환 속도 저하 ``` --- ## 기준 전압 (Vref) ADC의 측정 범위 상한값입니다. 입력 전압은 반드시 0V ~ Vref 범위 안에 있어야 합니다. ``` 올바른 입력: 0V ─────────── Vref ↑ ↑ ADC값 = 0 ADC값 = 최대 Vref 초과 입력: 포화(saturation) → ADC값 = 최대 (정확하지 않음) 음수 입력: 클램프 → ADC값 = 0 (정확하지 않음) ``` --- ## TC37x — EVADC 모듈 TC37x의 ADC는 **EVADC(Enhanced Versatile ADC)** 입니다. ### EVADC 구조 ``` +──────────────────────────────────────────────+ │ EVADC │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Group 0 │ │ Group 1 │ │ Group N │ │ │ │ │ │ │ │ ... │ │ │ │ CH0~CH7 │ │ CH0~CH7 │ │ │ │ │ │ │ │ │ │ │ │ │ │ [ADC 코어]│ │ [ADC 코어]│ │ [ADC 코어]│ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ 각 그룹이 독립적으로 변환 가능 │ │ 그룹 간 동기화(Sync) 기능 │ +──────────────────────────────────────────────+ ``` ### 그룹과 채널 개념 - **그룹(Group)**: 독립적인 ADC 코어 + 채널 집합 - **채널(Channel)**: 실제 아날로그 입력 핀에 대응 - 여러 그룹이 **동시에** 변환 가능 (병렬 ADC) - 같은 그룹 내 채널은 시퀀셜(순차) 변환 --- ## EVADC 기본 초기화 예 (iLLD) ```c #include "IfxEvadc_Adc.h" IfxEvadc_Adc g_evadc; IfxEvadc_Adc_Group g_evadcGroup; IfxEvadc_Adc_Channel g_evadcCh[4]; void initAdc(void) { // EVADC 모듈 초기화 IfxEvadc_Adc_Config evadcConfig; IfxEvadc_Adc_initModuleConfig(&evadcConfig, &MODULE_EVADC); IfxEvadc_Adc_initModule(&g_evadc, &evadcConfig); // 그룹 초기화 (Group 0) IfxEvadc_Adc_GroupConfig groupConfig; IfxEvadc_Adc_initGroupConfig(&groupConfig, &g_evadc); groupConfig.groupId = IfxEvadc_GroupId_0; groupConfig.arbiter.requestSlotQueue0Enabled = TRUE; IfxEvadc_Adc_initGroup(&g_evadcGroup, &groupConfig); // 채널 초기화 IfxEvadc_Adc_ChannelConfig chConfig; for (int i = 0; i < 4; i++) { IfxEvadc_Adc_initChannelConfig(&chConfig, &g_evadcGroup); chConfig.channelId = (IfxEvadc_ChannelId)i; chConfig.resultRegister = (IfxEvadc_ChannelResult)i; IfxEvadc_Adc_initChannel(&g_evadcCh[i], &chConfig); } } // ADC값 읽기 uint16 readAdc(uint8 channelIdx) { Ifx_EVADC_G_RES result; do { result = IfxEvadc_Adc_getResult(&g_evadcCh[channelIdx]); } while (!result.B.VF); // 유효값 플래그 확인 return result.B.RESULT; } ``` --- ## 다른 MCU와의 비교 STM32의 ADC는 단일 ADC 코어(또는 듀얼)에 여러 채널을 멀티플렉싱합니다. TC37x의 EVADC는 여러 그룹이 **각각 독립적인 ADC 코어**를 가져 여러 채널을 동시에 병렬 변환할 수 있습니다. 차량 제어처럼 다수의 센서를 빠르게 동시 측정해야 하는 환경에 유리합니다. --- ## 정리 | 항목 | 설명 | |------|------| | 분해능 | 비트 수로 결정, 높을수록 정밀 | | 샘플링 레이트 | 1초당 변환 횟수 | | 나이퀴스트 | 샘플링 ≥ 신호 주파수 × 2 | | Vref | ADC 측정 최대 전압 | | EVADC | TC37x ADC 모듈, 그룹 기반 구조 | | 그룹/채널 | 독립적인 ADC 코어 / 실제 입력 핀 |
// COMMENTS
Newest First
ON THIS PAGE