簡體   English   中英

使用板 Nucleo-f401re 從 Lepton FLIR 相機獲取連續流

[英]Getting continuous stream from Lepton FLIR Camera with board Nucleo-f401re

我將 Flir Lepton 相機連接到我的電路板,並且我正在嘗試獲得連續的圖像流,這要歸功於程序 ThermalView(源代碼在這里: https : //github.com/groupgets/LeptonModule/tree/master/ software/ThermalView ) 我在我的板上編譯並下載了以下代碼:

    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 秒,並且必須在我發送到計算機的 2 幀之間跳過幀。 如果您注意到代碼中阻止提高幀速率的錯誤,請告訴我。

您使用的是 Lepton 2 還是 Lepton 3? Lepton 3 不僅需要獲取“幀”,還需要獲取 4 個“段”。Lepton 模塊還輸出 2 個空白屏幕。 本文檔中的更多詳細信息:

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

比較 Lepton 2X 系列 (80x60) 分辨率和 Lepton 3 (160x120) 分辨率。 Lepton 和 Lepton 3 VoSPI 接口之間的四個最重要的區別是:1) 在 Lepton 上,從單個數據包重建視頻幀需要主機從每個數據包頭解碼數據包編號。 在 Lepton 3 上,主機必須解碼數據包號和段號。 2) Lepton 3 的每幀總比特數是 Lepton 的 4 倍。 因此,最小 SPI 時鍾速率要快 4 倍。 兩個模塊的最大 SPI 時鍾速率均為 20 MHz。 3) Lepton 和 Lepton 3 都提供了在 GPIO3 上輸出同步脈沖的選項。 Lepton 3 上的脈沖頻率是 Lepton 上的 4 倍。 對於 Lepton 3,同步脈沖表示下一個可用段何時可用,而對於 Lepton,它表示下一個可用幀何時可用。 4) 在 Lepton 中啟用遙測時,會產生三個額外的視頻行(每幀 63 個數據包)。 在 Lepton 3 中啟用遙測時,每段會產生 1 個額外的數據包,總共有 2 個額外的視頻行。

我試圖讓 lepton 3 在我的 stm32f746g-discovery 板上工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM