2017년 8월 22일 화요일

[5] 렌즈 드라이버 회로 제어 소프트웨어

[5] 렌즈 드라이버 회로 제어 소프트웨어
(5.1) MCP4912 칩 제어 방법
16bit - SPI 두 주기로 칩 제어
https://lh5.googleusercontent.com/iz66ZqD9NqTgDS4NzSkn9F_8Ql5eCISVo0cAZz-q5fo3lV_5jFvoDDLQTczkZsT1upqYbJEn8sGUg2FGc1eRjGy404D1NC5qIqRFl2ZN2RkT9EW3qkv_pcVRAAdsWASwG1NEuGbO

https://lh5.googleusercontent.com/URmStY7OGdwMRmxJ_0RAFdVWZHIHN7EBOE9Ywn3NGYJLZ9FnKKFF9n7sMKuWGUgmnN0AoRImYpsqf7yCK2WNJg3UVtDzJSCypEHvYx4vM2_u53oEYPQmq1G3LtpMVIbODlZ_ERRU
https://lh4.googleusercontent.com/G_EtB_hAdtRCzCO3hvK0IrUJHUdTiQe3icAD0E1A02lr-zzlWILDQNYbZbNMZzbx367vazijyE1AKrPz1Aa0dnIvGWK6wtok7D42M39MYGp-OzoRu2p1NNaOvDFGDvMDWX_nbEEr

코드 참고
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);
}

Screenshot from 2016-11-11 23:36:10.pnghttps://lh5.googleusercontent.com/ZFQM6DoCHaKBaRfT56v-nxNDI2zlTuYQwQ5EKVUcDIPTJdKfGyhGHNUsmU26Oms-49mDmpPjAouMc2cmc-f0twzli3WtHyplbDBWnNylXcdXxJZ23YQEkk-XLuMBc7AjPwn2-6n4https://lh4.googleusercontent.com/gAyQdTEm_Ws8UZmFvicvkU4E-xMfoqvvMckWSM1Ww5xHoJQHvcvcWoO2BTs-x2MineLGSmHGIgvV3eA38SFtDecsOTYh3bOeER8dd_q40MbyDTCcGbn1fUfL1DCnAxoOJ61-T5Bb
(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);
}

https://lh6.googleusercontent.com/TCwClsRudV32qwIjFkytdWf2LXf081733ypp6JTfr1R2ljLlHSNJy9QKkCONRmpk_8dsv-1ABojSZiMMDK5asLLckP-r_uPuYpaMl0XzV656iqqUZNNcGTQzkxHg25gfFQ3yEkC4   https://lh6.googleusercontent.com/yuqnOXZO-z2S_KgWZ2FNTjAUh3l4_YnMhJZX8LV_8Uhtjie7NqynAToe8aiVuagxtYLS9935fxrYg-SkiP1Gpg3icmjeHl8gdBuahq4mcyKhShMExz1PL4AnGR8IlZq7GpxeNDbv
1) 왼쪽 회로는 전압 선택 회로 – MCP4912
1. DAC에 DIGITAL = 1023을 인가
2. DAC의 출력 3.3V
3. 렌즈 코일에 흐르는 전류 2A

2) CL과 OL의 전류 공급 회로(CL과 OL에 하나씩)

댓글 없음:

댓글 쓰기

clear images were obtained