디지털 숫자가 센서의 물리량이나 모터의 결과는 아니다
센서의 숫자512와 모터 명령0.25만으로 현재 전압/위치나 회전 속도를 알 수는 없다. ADC의 reference·보정/시각과 행동의 단위·driver/현재 상태가 필요하다. M04.02의 주기·처리·전송 구분을 아날로그 획득과 PWM에 확장한다.
이번에도 ATmega328P의 정해진 모드가 사례다. Microchip 7810D-AVR-01/15의 §23 ADC·§14 Timer0 Fast PWM을 확인한다. 아래 입력/사건/파형은 설명용 합성 자료이며 실제 측정/장비 로그가 아니다.
ADC의 기준 전압과 코드의 의미부터 고정한다
ADC(analog-to-digital converter)는 아날로그 입력을 디지털 코드로 나타낸다. 이 사례의10bit 코드는0~1023의1024단계다. reference는 변환 범위를 정하는 기준 전압이며, 이론적인 한 단계 Δ는 V_ref/1024다. 해상도10bit와 실제 측정 정확도10bit는 같은 주장이 아니다.
기준5V라면 Δ=5/1024=0.0048828125V=4.8828125mV다. 코드 k의 대표 환산을 V_est=k×V_ref/1024로 정하면 k512는2.5V다. 실제 reference가4.8V인 모형에서는 같은 코드의 대표값이2.4V다. reference를 잘못 기록한 환산 차이는0.1V다. 두 값 모두 양자화/보정 오차까지 없앤 정확한 입력 측정값이라는 뜻은 아니다.
이 대표 환산에서 코드1023도5V가 아니라 약4.9951V다. 최대 코드가 나왔다고 정상 최대 입력인지 포화/범위 문제인지 자동 판정하지 않는다. 실제 reference·입력 범위/전기 조건, offset/gain·비선형/잡음·보정과 센서 단위를 확인한다. 숫자 범위를 전압으로 바꾼 다음에도 그 전압이 온도/거리 같은 물리량으로 무엇을 뜻하는지 별도 계약이 필요하다.
같은 변환의 두 바이트와 최신 변환을 구분한다
이 장치의 오른쪽 정렬10bit 결과는 ADCL 다음 ADCH를 읽는 규약을 확인해야 한다. ADCL을 읽으면 ADCH를 읽을 때까지 결과 레지스터의 갱신이 막힌다. 다음은 그 규약을 보여 주는 합성 사건이다.
| 순서 | 사건 | 해석 |
|---|---|---|
| 1 | 결과511이0x01FF로공개됨 | 현재결과레지스터는511 |
| 2 | ADCL의0xFF를읽음 | 해당결과쌍의갱신잠금 |
| 3 | 새변환512완료 | 그사이레지스터에새결과가반영되지않을수있음 |
| 4 | ADCH의0x01을읽고잠금해제 | 모은쌍은여전히511 |
두 바이트가 같은 과거 결과를 나타내는 것과 가장 최신 변환을 나타내는 것은 다르다. 변환 완료 사건/인터럽트가 있었다는 이유만으로511에 새 결과512의 시각을 붙이지 않는다. 정렬/읽기 순서·갱신/누락 규칙과 어떤 변환의 결과인지 확인한다. volatile 하나로 해결되는 문제도 아니다. M04.01의 공유 자료/접근 규약과 연결한다.
ADC clock·변환 시간·샘플링 속도는 다른 숫자다
이 사례의 실제 clock16MHz를128로 나누면 ADC clock은125kHz다. 정상 단일 변환13 ADC clock의 내부 시간은13/125000=104µs, ADC를 켠 뒤 첫 변환25 clock은200µs다. 실제 reference/입력 안정화·trigger 위상/읽기·처리/통신은 추가로 확인한다. 이 숫자는 데이터시트의 특정 변환 단계 계산이며 측정 성능이 아니다.
이미 안정화된 정상 변환 네 개를 순차 수행하면 내부 변환 합계416µs다. 첫 변환부터 시작하는 네 개면200+3×104=512µs다. 채널 전환/아날로그 source의 settling과 스케줄/ISR·추가 지연은 이 합계 밖이다.1ms보다 작다고 전체 네 채널의 동시 측정이나1ms 내 호스트 전달을 보장하지 않는다.
각 채널의 획득 시각은 달라질 수 있고, 변환 완료·ISR 서비스·호스트 수신 시각도 획득 시각과 같지 않다. 원본 channel/변환 ID·clock/시각을 남긴다. ADC clock125kHz를 샘플링 속도125kHz로 그대로 보고하거나, 순차 결과 네 개의 시각을 하나로 덮지 않는다.
샘플링 이후에는 서로 다른 원신호가 같아질 수 있다
샘플링 속도 f_s는 관측을 취득하는 횟수/s이고 간격은1/f_s다. f_s=100Hz면10ms마다 취득한다. ADC의 내부 clock과 변환 가능 시간은 이 취득 주기를 설계하는 조건이며 같은 값이 아니다.
정확한 등간격 시각 t=n/100초에서 진폭1의 두 입력 x=cos(2π80t), y=cos(2π20t)를 읽는다고 하자. n은0부터 시작하는 정수다. 몇 개의 샘플은 다음과 같다.
| t(ms) | 80Hz 입력의 샘플 | 20Hz 입력의 샘플 |
|---|---|---|
| 0 | 1 | 1 |
| 10 | 0.3090 | 0.3090 |
| 20 | −0.8090 | −0.8090 |
| 30 | −0.8090 | −0.8090 |
| 40 | 0.3090 | 0.3090 |
80/100=1−20/100이므로 정수 n에서 두 cos의 샘플이 같다. 서로 다른 원신호가 같은 샘플열로 보이는 aliasing이다. 이 열만 받은 호스트의 필터/AI가 원래80Hz였음을 반드시 복원할 수는 없다. 높은 ADC bit수도 시간 정보의 이 문제를 없애지 않는다.
Analog Devices MT-002는 샘플링/alias와 전단 필터를 설명한다. 여기의 이상적인 baseband 모형은 입력 대역을 제한하고 f_s>2f_max로 두는 조건을 사용한다.80Hz 성분에100Hz는 부족하다. 실제로는 아날로그 anti-alias 필터의 통과/억제·전이 대역과 여유, 실제 취득 clock/jitter·누락을 함께 확인한다. ADC 뒤 소프트웨어에서 보기 좋은 곡선으로 보간한 결과를 새로운 원본 측정으로 세지 않는다.
PWM은 ON 시간 비율이며 느린 아날로그 출력과 같지 않다
PWM(pulse-width modulation)은 주기 T 중 ON인 시간 t_on의 비율 D=t_on/T를 바꾸는 방식이다. 주파수1/T와 duty D는 별개다. Timer0의 고정 TOP255 Fast PWM·분주64·실제clock16MHz라면 주파수는16000000/(64×256)=976.5625Hz, 주기는1.024ms다.
그림 M04.03-1. 본문의 이상 0/12 V 전력단에서 duty 25%를 그렸다. 점선 평균 3 V와 계속 3 V인 선로는 다르다. 모터 속도/토크가 최대의 25%라는 결론도 아니다. 직접 제작.
다음은 OCR 레지스터 덤프가 아닌 주어진 파형이다. ON256µs·OFF768µs이면 전체1024µs, duty는256/1024=0.25=25%다. 다른 PWM 모드/극성·TOP/분주에서는 주파수·레지스터와 duty의 대응이 다르다.0%/100% 끝값의 특수 동작도 해당 모드에서 확인해야 한다. 여기서는 OCR 값 역산/실제 설정을 실행하지 않는다.
이상적인 전력단이0V/12V만 스위칭하고 손실/전이 시간을 무시한다면 한 주기의 평균 전압은12×0.25=3V다. 선로가 계속3V인 것과는 다른 파형이다. 실제 driver의 전압 강하·순환/전류/부하, 모터의 역기전력·관성과 제어가 남아 있어 속도/토크가 최대의25%라고 단정할 수 없다.
driver 명령과 실제 모터 상태를 나눈다
MCU의 논리 PWM은 모터 전력을 직접 공급하는 출력으로 취급하지 않는다. 실제 전력 driver·정격/보호, 방향/enable·전류/상태와 제한·중단 계약이 필요하다. duty25%만으로 방향·안전한 구동이나 현재 회전이 결정되지 않는다. duty0도 즉시 물리 정지/전원 차단·브레이크가 확인됐다는 뜻은 아니다.
정책의 정규화된 출력0.25와 driver duty0.25가 같은 의미인지도 확인한다. 기존 5.5 정규화/통계처럼 행동 단위/범위·복원/제한을 분리한다. driver별 오류/타임아웃·현재 관측은 M04.06에서 계약으로 연결한다.
기존 4.4 센서 시간 정합에는 ADC 획득·완료/수신의 출처를 연결한다. 기본 학습 기록은 raw/reference·대표 환산과 불확실성, 취득/변환·alias 조건, 파형/이상 평균·실제 구동 미확인을 구분한다. 실제 센서/모터/장비를 실행한 성과로 보고하지 않는다.