TSL1401CL 라인스캔센서

PassionYim·2024년 3월 28일
0

자율주행 모형차

목록 보기
3/5

What is TSL1401?

: 1차원 직선의 밝은 정도를 인식하는 센서.

위의 그림과 같이 0~127 (2^7) 범위로 읽어서, 0~4095 (2^12)의 값으로 읽어드리는 센서.

ADC모듈을 사용하면 된다.

How to Use?

동작 파형

STEP1

  1. CLK신호와 SI신호가 처음에 둘다 LOW
  2. SI - HIGH, CLK - LOW
  3. SI - HIGH, CLK - HIGH
  4. SI - LOW, CLK - HIGH

(1~4)동작을 수행하면, Analog Output을 위한 세팅을 한다. 이때, 최소 동작시간을 350ns이상 보장해줘야한다. 나머지 사이의 시간은 50ns이상 보장해주면 된다.

STEP2

  1. SI - LOW, CLK - LOW
  2. SI - LOW, CLK - HIGH를 하게 되면, Pixel 한 개의 아날로그 값이 출력된다.
  3. Pixel[n] = ADC(&)
    (5~7)동작을 수행하면 Pixel 한 개의 값이 Analog Output된다. 이 과정을 128번 수행하면된다.

C Code

이 과정은 XMC4500, Dave 개발환경에서 이루어졌습니다.

void LineScanCamera_run(void){
	//STEP 1
	DIGITAL_IO_SetOutputHigh(&dhDIG_SI);
	DIGITAL_IO_SetOutputLow(&dhDIG_CLK);
	wait1us(1);
	DIGITAL_IO_SetOutputHigh(&dhDIG_SI);
	DIGITAL_IO_SetOutputHigh(&dhDIG_CLK);
	wait1us(1);
	DIGITAL_IO_SetOutputLow(&dhDIG_SI);
	DIGITAL_IO_SetOutputHigh(&dhDIG_CLK);
	wait1us(1);
	//STEP 2
	for (idx = 0; idx < 128; ++idx){
		DIGITAL_IO_SetOutputLow(&dhDIG_SI);
		DIGITAL_IO_SetOutputLow(&dhDIG_CLK);
		wait1us(3);
		DIGITAL_IO_SetOutputLow(&dhDIG_SI);
		DIGITAL_IO_SetOutputHigh(&dhDIG_CLK);
		wait1us(3);
		ADC_GetValue = ADC_MEASUREMENT_GetResult(&ADC_MEASUREMENT_ChLSC_handle);
		IR_LineScan.adcResult[idx] = ADC_GetValue;
	}
    #이후 SI, CLK 모두 Low
	DIGITAL_IO_SetOutputLow(&dhDIG_SI);
	DIGITAL_IO_SetOutputLow(&dhDIG_CLK);
	wait1us(100);
}

최소 동작시간은 50~350ns 이었지만, XMC4500은 최소 1us를 지원하기 때문에 3us정도 대기시간을 부여함. (이 대기시간이 인식정도의 차이를 발생할 수 있다.)

출력 파형

profile
열정이 전부였던 개발자

0개의 댓글

관련 채용 정보