[5] 렌즈 드라이버 회로 제어 소프트웨어
(5.1) MCP4912 칩 제어 방법
16bit - SPI 두 주기로 칩 제어
코드 참고
| 
void dacWrite(int data) 
{ 
 if(data < 0) 
data = 0; 
else if(data > 1023) 
 data = 1023; 
 unsigned char msg2 = (unsigned char) data << 2; 
 unsigned char msg1 = (unsigned char) (data >> 6); 
 msg1 = msg1 | 0x70; //0b01110000 
 digitalWrite(CS, LOW); 
 wiringPiSPIDataRW(SPI_CHANNEL, &msg1, 1); 
 wiringPiSPIDataRW(SPI_CHANNEL, &msg2, 1); 
 digitalWrite(CS, HIGH); 
 digitalWrite(LDAC, LOW); 
 digitalWrite(LDAC, HIGH); 
} | 
(5.2) 제어 코드
dac.cpp
| 
#include <stdio.h> 
#include <string.h> 
#include <errno.h> 
#include <wiringPi.h> 
#include <wiringPiSPI.h> 
#define SPI_CHANNEL 0 
#define SPI_SPEED 100000 
#define  CS 26 //12 
#define  LDAC 6 //25 
void dacWrite(int data); 
int i=0; 
int main(void){ 
 if(wiringPiSetup() == -1) 
 { 
           fprintf(stdout,"Unable to start wiringPi: %s\n", strerror(errno)); 
           return 1; 
       } 
      if(wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) 
      { 
          fprintf(stdout, "wiringPiSetup Failed: %s\n", strerror(errno)); 
         return 1; 
     } 
 pinMode(LDAC, OUTPUT); 
 pinMode(CS, OUTPUT); 
 while(1){ 
  if(i > 1023){ 
   i=0; 
  } 
       dacWrite(i); 
    i++; 
 } 
} 
void dacWrite(int data) 
{ 
 if(data < 0) 
  data = 0; 
 else if(data > 1023) 
  data = 1023; 
 unsigned char msg2 = (unsigned char) data << 2; 
 unsigned char msg1 = (unsigned char) (data >> 6); 
 msg1 = msg1 | 0x70; //0b01110000 
 digitalWrite(CS, LOW); 
 wiringPiSPIDataRW(SPI_CHANNEL, &msg1, 1); 
 wiringPiSPIDataRW(SPI_CHANNEL, &msg2, 1); 
 digitalWrite(CS, HIGH); 
 digitalWrite(LDAC, LOW); 
 digitalWrite(LDAC, HIGH); 
} | 
1) 왼쪽 회로는 전압 선택 회로 – MCP4912
1. DAC에 DIGITAL = 1023을 인가
2. DAC의 출력 3.3V
3. 렌즈 코일에 흐르는 전류 2A
2) CL과 OL의 전류 공급 회로(CL과 OL에 하나씩)
 
 
댓글 없음:
댓글 쓰기