라즈베리파이의 GPIO는 아두이노와는 다르게 디지털 입력만 가능하도록 되어있다. 라즈베리파이는 ADC(Analog Digital Converter)가 내장되어있지 않다. 그래서 별도의 ADC를 사용해서 ADC 기능을 추가해야 한다. 여기서는 MCP3208 AD 컨버터를 SPI 인터페이스를 이용해서 사용하는 방법을 설명한다. (아날로그 출력 값은 8채널 12bit 아날로그 디지털 컨버터인MCP3208을 이용하여 디지털 값으로 변환하여 출력한다.)

Untitled

SPI 통신을 하기위해서 4개의 핀이 필요함.

1.CE(ChipEnable) - 칩을 선택하는 핀으로 SPI 디바이스 당 하나의 핀이 연결

2.SCLK(SPI CLK) - 클록 핀으로 여기서 나오는 클록 신호에 맞춰 데이터를 주고받음

3.MOSI(Master Output Slave Input) - 라즈베리파이에서 디바이스로 나가는 데이터 핀

4.MISO(Master Input Slave Output) - 디바이스로부터 라즈베리파이로 들어오는 데이터 핀

F09EA35E-85F4-406B-BA2B-F68625BA29F4.jpeg

SPI 버스 핀 살펴보기

GPIO 7,8 - CE - CS/SHDN

GPIO 11 - SCLK - CLK

GPIO 9 - MISO - Dout

GPIO 10 - MOSI - Din

GND - AGND,DGND

3.3V - VDD,VREF

MCP3208 디바이스의 내부 블록도

20220212_143401.jpg

채널 사용 여부는 CS/SHDN 신호가 [Control Logic]을 통해 [Input Channel Mux]로 전달됨

CH0~7의 입력 값은 센서의 전압 값이 됨

CH0~7에 연결된 센서는 [Input Channel Mux]를 거쳐 [Sample And Hold]모듈에서 전압 값이 채취됨

전압 값은 [Comparator]에서 VREF 값과 비교되어 [12-Bit SAR] 레지스터에 저장됨

(ex | VREF 값이 3.3V, 전압 값이 1V라면 1241(=1/3.3*4096) 값이 [12-Bit SAR] 레지스터에 저장됨)