This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DLPLCR4500EVM: Projection flickers

Part Number: DLPLCR4500EVM
Other Parts Discussed in Thread: DLP4500

I have been using DLP4500 for a while for 3D scanning. I can visibly notice flickering in the projection which was not the case earlier. This obviously is not optimal for 3D scanning. This occurs in both pattern sequence more as wells in video mode(for images from flash and external source- HDMI). Video of the same has been attached. Please help me with this.

  • Hello Madhusudhan,

    Welcome to the DLP forums and sorry to hear you've been having problems.

    Has your setup been changed from previous? If so what has been changed?

    Please note that there is a minimum exposure time needed for different bit depths which may cause inaccurate results if they are not met. Please refer to Table 4-1 in the user's guide
    Also please check this thread which may address a similar issue and how the triggering method can have an effect. 

    Hope this helps.

    Best,

    Sepeedah

  • Hello Sepeedah,

    In Pattern sequence mode: The settings haven't been changed. Exposure time is 200 m secs.

    In Video mode: I have streamed a video through HDMI and observed the same with the camera. I could see that the video was blinking. 

    Would you recommend that I try out with any other settings. Camera captures at 20 fps.

  • Madhusudhan,

    Can you please provide more information on your application and set up? It's unclear to me the system was working before without the flickering and now there is flickering present in the system.

    Thanks,

    Sepeedah

  • Hello,

    I'm Sorry if I was not sufficiently clear.

    I use the DLP in a 3D Scanning application.  Gray coded and Sinusoidal patterns are projected on the component using the DLP. I use internal trigger to start the projection and camera acquisition is sync'ed using the output trigger of the DLP.

    Projector settings:

    Trigger time: 155000 micro seconds

    Frame period: 150000 micro seconds

    DLP Projection and camera acquisition worked fine with these settings for a long time. The scanner(mounted on an Industrial Robot) was displayed at an exhibition, it was moved around a lot but with sufficient care. After the exhibition, I stopped using the 3D Scanner for a while and I switched on recently. It was then observed that something was wrong in the projection of the sinusoidal fringes and like I said the projector was also flickering. In the attached images, you can clearly observe the distinct change in the sinusoidal pattern projected when compared to earlier.

  • Hi Madhusudhan,

    From what you've described, nothing has changed in the software or the configuration of the pattern sequence for projection. Is that correct?

    The video you took seems to be very periodic, so it doesn't seem like it's a hardware issue, it looks like more of a software issue. You're sure that you're using the same software to control the Lightcrafter? No changes to the code have been made?

    Can you give us some more details on how you are projecting patterns? What is your pattern sequence?

    -Paul
  • Hi Paul,

    There are two issues here, let me address them separately.

    Issue 1: Video uploaded shows projection of default TI image that resides at flash index 0 in video mode. Video is captured at 20 fps. Since this is video mode, I assume that there is no question of  exposure period and trigger time(correct me if I'm wrong). Camera captures independently, i.e. there is no synchronisation involved. Flickering is apparent in camera view than through naked eye. We have tried with different cameras just to double check. Attached image shows the video mode setting.

    Issue 2: In the subsequent posts I have posted the image when a sinusoidal fringe pattern(8 bit) appears jagged while the ones captured earlier appear smooth. This is clear appears to the naked eye as well. I use the LCR API to project the fringe patterns. The function used for sending pattern is as below. This happens when I use the LCR GUI for sending patterns to the DLP. To me, this is a bigger problem. 

    bool dlpSend::addAndSendPattern(int framePeriod, int triggerTime)
    {
    projStatus = QString("Start DLP Send");
    unsigned int status;
    int tempStatus;
    unsigned char splashLut[64];
    bool repeat;
    int count = 1;
    // framePeriod=400000, triggerTime=700000
    this->framePeriod = framePeriod;
    this->triggerTime = triggerTime;
    repeat = 0;
    int numPatterns = 41;
    int ind;

    //write the sequence of pattern projection into the splash array.
    for (ind = 0; ind<14; ind++)
    {
    splashLut[ind] = ind;
    //qDebug() << ind << endl;
    //printf("\n count:%d",count);
    if (ind % 3 == 0)
    {
    count++;
    }
    }
    //splashLut[ind] = 0;
    if (USB_Open()<0)
    {
    projStatus = QString("Unable to connect to the DLP LCr");
    return false;
    }
    else
    {
    int repeatLUT;
    status = LCR_PatternDisplay(0);
    LCR_ClearPatLut();
    LCR_SetMode(true);
    int bount = 0;
    count = 0;
    int aount = 0;
    bool bufswap = true;

    //Add patterns to LUT, 0 for internal trigger and 1 for external.

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);

    LCR_AddToPatLut(0, 0, 8, 7, false, true, true, false);
    LCR_AddToPatLut(0, 1, 8, 7, false, true, false, false);
    //LCR_AddToPatLut(0, 2, 8, 7, false, true, false, false);


    LCR_SetPatternDisplayMode(false); //True-Pattern from RGB link, False-Pattern will be displayed from Splash
    LCR_SetPatternConfig(41, false, 41, 14);
    LCR_SetExposure_FramePeriod(framePeriod, triggerTime);
    LCR_SetPatternTriggerMode(true);
    if (LCR_SendPatLut() < 0)
    {
    tempStatus = USB_Close();
    projStatus = QString("Error Sending Pattern LUT");
    return false;
    }
    if (LCR_SendSplashLut(&splashLut[0], 14) < 0)
    {
    tempStatus = USB_Close();
    projStatus = QString("Error Sending Image LUT");
    return false;
    }
    Sleep(3000);
    if (LCR_ValidatePatLutData(&status) < 0)
    {
    tempStatus = USB_Close();
    projStatus = QString("Error validating LUT data");
    qDebug() <<"Exposure period"<< ((status & BIT0) == BIT0);
    qDebug() <<"Pattern number OOR"<< ((status & BIT1) == BIT1);
    qDebug() <<"Cont trigger overlaps black" <<((status & BIT2) == BIT2);
    qDebug() <<"Black vector missing"<< ((status & BIT3) == BIT3);
    qDebug() <<"Period exposure diff <230"<< ((status & BIT4) == BIT4);
    return false;
    }
    Sleep(1000);
    if (LCR_PatternDisplay(2) < 0) //Start pattern display
    {
    tempStatus = USB_Close();
    projStatus = QString("Error starting pattern display");
    return false;
    }
    tempStatus = USB_Close();
    projStatus = QString("Success");
    return true;
    }
    }

  • On your first issue, because the device is in video mode, you're seeing the effects of various video processing algorithms on that splash image as it is being projected. For structured light, I wouldn't use straight video mode as you show in your screenshot.

    Regarding the second issue, I'm not sure how to assist you with debugging the issue because it is unclear to me what would have changed. If the same the code you attached was able to generate the first image and the second image then it seems unlikely it would be the code you wrote. Any chance the image you're projecting changed? Have you tried reloading the firmware just in case something got corrupted?

    -Paul