SPI & ADC & DAC

유명현·2021년 7월 3일
0

안녕하세요?

오늘은 SPI & ADC & DAC를 다뤄보도록 하겠습니다.

< SPI 개념 >

SPI(Serial Perpheral Interface)는 시리얼 통신 방식 중 한가지로 4개의 선을 사용하는 특징을 가지고 있습니다.

SPI통신은 SS핀으로 마스터가 슬레이브 장치를 선택하며, 클럭에 맞춰 데이터 송/수신을 합니다.

< SPI Transfer Format >

위 그림을 보게 되면 각 레지스터에 비트에 따라 데이터 보내는 시점이 달라지는것을 볼 수 있습니다.

CHOL bit를 통하여 CLK의 극성을 선택할 수 있습니다.

CPHA의 경우 데이터를 보내는 시점을 선택할 수 있으며, CHOL bit에 따라 달라지게 됩니다.

CPHA =0, CPOL =0 일 경우 CLK의 Risging edge일때 데이터 전송

CPHA =0, CPOL =1 일 경우 CLK의 Falling edge일때 데이터 전송

CPHA =1, CPOL =0 일 경우 CLK의 Falling edge일때 데이터 전송

CPHA =1, CPOL =1 일 경우 CLK의 Risging edge일때 데이터 전송

위의 4경우로 나뉘어 지게 됩니다.

또한 DORD의 bit의 상태에 따라 들어오는 데이터 순서에 따라 MSB, LSB를 선택할 수 있습니다.

< ADC & DAC의 개념 >

ADC(Analog to Digital Conversion)은 입력된 아날로그 신호를 디지털 신호로 변경해주는 것을 뜻합니다.

ADC과정은 크게 Sampling, Quantization, Coding으로 나누어 집니다.

DAC는 ADC의 반대 개념으로 입력된 디지털 신호를 아날로그로 변경해줍니다.

여기서 가장 중요한 점은 분해능입니다.

STM경우 보통 ADC와 DAC의 분해능을 12bit로 지원하기 때문에 들어오는 신호를 0 ~ 4095로 ADC와 DAC로 변환이 가능합니다.

< SPI통신을 위한 STM32CubeMX 설정 >

< ADC_DMA를 위한 STM32CubeMX 설정 >

< DAC를 위한 STM32CubeMX 설정 >

프로그램은 UART통신을 통하여 Putty와 데이터를 주고 받고 받은 데이터를 통하여 ADC, DAC, SPI 통신을 제어합니다.

ADC는 조도센서를 통해 값을 받아오면 DAC출력을 통해 LED를 제어합니다.

SPI 통신 기능이 On상태에서 UART로 들어온 데이터는 SPI통하여 led를 입력받으면 6초 동안 led를 토글시킵니다.

  • UART와 TIM6 STM32CubeMX설정은 Basic Timer, UART Interruput 방식을 참고해주세요)

< UART를 통한 ADC,DAC,SPI 제어 Coding >

< Main Coding >

< 타이머 콜백함수 Coding >

< UART를 통한 ADC, DAC를 제어 >

Putty프로그램을 이용하여 UART로 adc_start, dac_start를 입력하여 adc,dac기능을 on해줍니다.

그 다움 조도 센서에 빛을 가하면 ADC값이 커져 LED가 on이 되는것을 볼 수 있습니다.

< SPI를 통한 LED 제어 >

Putty프로그램을 이용하여 UART로 spi_start를 입력하여 spi기능을 on해줍니다.

spi기능이 on상태에서 led를 입력하여 uart로 전송된 데이터가 spi1을 통하여 spi2로 Loop back으로 받습니다.

spi2 수신된 데이터가 led이면, 타이머를 이용하여 6초 동안 LED를 토글 시킵니다.

읽어주셔서 감사합니다.

profile
기억보다 기록을

0개의 댓글