[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에 하나씩)
댓글 없음:
댓글 쓰기