2017-01-04 23 views
0

내 Flir Lepton 카메라를 보드에 연결 했으므로 ThermalView 프로그램 덕분에 이미지 연속 스트림을 얻으려고합니다 (소스 코드는 https://github.com/groupgets/LeptonModule/tree/master/software/ThermalView입니다).) 나는 컴파일 내 칠판에 다음 코드를 다운로드 :Lepton FLIR Camera에서 연속 스트림을 얻는 방법 Nucleo-f401re

int main(void) 
{ 

    //HAL_Init(); 

    /* Configure the system clock */ 
    SystemClock_Config(); 

    /* Initialize all configured peripherals */ 
    MX_GPIO_Init(); 
    MX_DMA_Init(); 
    MX_I2C1_Init(); 
    MX_SPI1_Init(); 
    MX_USART1_UART_Init(); 
    MX_USART2_UART_Init(); 
    SystemClock_Config(); 

    leptonEnd(); 
    // LEPTON VDD OFF 
    HAL_Delay(1000); 
    // LEPTON VDD ON 
    HAL_Delay(185); 

    LeptonConfigure_I2C(); 

    while(1) 
    { 
    LeptonReadFrame(); 
    frameToPc(); 
    } 
} 

// Output image buffer to USART2 
void frameToPc() 
{ 
    static uint8_t frameSkipper = 0; 

    uint8_t timeStamp = (HAL_GetTick() - last_frame_millis); // calculate time passed since last been here 

    last_frame_millis = HAL_GetTick(); 



    if(frameSkipper==4) 
    { 
    //PSEDO// 
    //IMGtoRGB(); 

    //////// 
    uint8_t thermalView_header[] = {0xDE,0xAD,0xBE,0xEF}; // 4-byte header for ThermalView application 
    HAL_Delay(1000); 
    HAL_UART_Transmit_DMA(&huart2, &thermalView_header[0], 4); // print header 

    while(huart2.gState != HAL_UART_STATE_READY); // wait for transmission to complete 

    HAL_UART_Transmit_DMA(&huart2, &IMG[0], LEPTON_IMG_SIZE_BYTES); 

    frameSkipper = 0; 
    } 

    frameSkipper++; 
}uint8_t LeptonReadFrame() 
{ 
    uint8_t i, frame_number, frame_complete=0; 
    uint16_t bad_frame_counter=0; 

    while(!frame_complete) 
    { 
    leptonBegin(); 

    HAL_SPI_Receive(&hspi1, &FramePacket[0], LEPTON_PACKET_LENGTH, 1000); // READ LINE  

    leptonEnd(); 

    //HAL_UART_Transmit(&huart2, &FramePacket[0], LEPTON_PACKET_LENGTH, 1000); // PRINT LINE 

    if((FramePacket[0] & 0x0f) != 0x0f) // not discard frame 
    { 
     frame_number = FramePacket[1]; 

     if(frame_number < 60) // valid frame 
     { 
     bad_frame_counter = 0; 

     for(i= 0; i<LEPTON_PACKET_CONTENT_LENGTH; i++) 
     { 
      IMG[frame_number*LEPTON_PACKET_CONTENT_LENGTH+i] = FramePacket[i+4]; // copy line into IMG buffer, ignoring ID and CRC 
     } 
     } 
     else 
     { 
     bad_frame_counter++; 
     } 

     if(frame_number == 59) 
     { 
      frame_complete = 1; 
     } 

     if(bad_frame_counter>1000) // 800 lines = 5 bad frames = resync needed 
     { 
      bad_frame_counter = 0; 
      HAL_Delay(185); // CS is already disabled so the delay is enougth 
     } 
    } 
    } 
    return 1; 
} 

내가 성공적으로 스트림을 받고 있어요,하지만 난 각 프레임 사이에 1 초 지연을두고, 두 프레임 사이의 프레임을 건너 뛸 수 있어야 나는 컴퓨터에 보내고있다. 프레임 속도를 높이지 못하는 코드에서 잘못된 점에주의를 기울이면 알려주십시오.

+1

그래서 if (frameSkipper == 4) {...를 추가했다고 가정합니다. frameSkipper = 0; }'지연 코드? 왜 각 프레임 사이에 1 초의 지연을 넣어야합니까? 네가하지 않으면 어떻게 될까? – yano

+0

다시 귀하의 질문은 무엇입니까? –

+0

그렇지 않으면 ThermalView 프로그램이 패킷을 예상대로 가져 오지 않고 프레임 읽기에 성공하지 못합니다. Magaret, 프레임 속도를 계산하고 싶습니다. –

답변

1

Lepton 2 또는 Lepton 3을 사용하고 있습니까? Lepton 3은 "Frames"뿐만 아니라 4 "Segment"의 획득을 필요로합니다. 또한 Lepton Modules에 의해 2 개의 빈 화면이 출력됩니다. 이 문서에서 더 상세 :

http://www.flir.com/uploadedFiles/OEM/Products/LWIR-Cameras/Lepton/Lepton-vs-Lepton-3-App-Note.pdf

은 렙톤 2X 계열 (80x60) 해상도와 렙톤 3 (는 160x120)의 해상도를 비교. Lepton과 Lepton 3 VoSPI 인터페이스 간의 가장 중요한 네 가지 차이점은 다음과 같습니다. 1) Lepton에서 개별 패킷에서 비디오 프레임을 재구성하려면 호스트가 각 패킷 헤더에서 패킷 번호를 디코딩해야합니다. Lepton 3에서 호스트는 패킷 번호와 세그먼트 번호를 모두 디코딩해야합니다. 2) 프레임 당 총 비트 수는 Lepton 3의 경우 Lepton보다 4 배 더 큽니다. 결과적으로 최소 SPI 클럭 속도는 4 배 빨라진다. 두 모듈의 최대 SPI 클럭 속도는 20MHz입니다. 3) Lepton과 Lepton 3 모두 GPIO3에서 동기 펄스를 출력하는 옵션을 제공합니다. 펄스의 주파수는 Lepton 3보다 Lepton 3에서 4 배 높습니다. Lepton 3의 경우, 동기 펄스는 다음 사용 가능한 세그먼트가 사용 가능한시기를 나타내지 만 Lepton의 경우 사용 가능한 다음 프레임이 언제 사용 가능한지를 나타냅니다. 4) Lepton에서 원격 측정이 활성화되면 3 개의 추가 비디오 라인 (프레임 당 총 63 개의 패킷)이 생성됩니다. Lepton 3에서 원격 측정 기능이 활성화되면 총 2 개의 추가 비디오 라인에 대해 세그먼트 당 1 개의 추가 패킷이 생성됩니다.

내가 stm32f746g-discovery 보드에서 lepton 3을 작동 시키려고 시도하고 있습니다.