TI论坛
直播中

张国厚

8年用户 1472经验值
私信 关注
[问答]

二次开发控制DLP4500投射图片并触发相机拍照,每次投射系列图,相机只被触发了一次,仅有一张图片,什么原因?


  • 大家好!我根据DLPC350的API函数在windows平台下进行二次开发,通过光机投射系列图,并触发相机进行同步拍照。但是出现了一个问题,每次投射系列图,相机只被触发了一次,仅仅捕捉到了投射的第一张图片,这是什么原因咧?我的代码如下。(我用DLP4500的控制软件却可以正常触发相机!)
    -----------------------------
    //初始化
        DLPC350_USB_Init();
        DLPC350_USB_Open();
        if (!DLPC350_USB_IsConnected()) {
            return -1;
        }

        //显示设置
        DLPC350_SetPowerMode(false);
        DLPC350_SetMode(true);
        DLPC350_PatternDisplay(0);
        DLPC350_SetPatternDisplayMode(false);

        //图片序列设置
        const int numberOfPatterns = 8;
        const int numberofImages = 6;
        unsigned char imageIndices[numberOfPatterns];
        int countr = 0;
        for (int j = 0; j < numberofImages; j++) {
            for (int i = 0; i < numberOfPatterns; i++) {
                imageIndices[countr] = j;
                if (i == -1) {
                    DLPC350_AddToPatLut(0, i, 1, 7, false, false, false, false);
                }
                else {
                    DLPC350_AddToPatLut(0, i, 1, 7, false, false, true, false);
                }
                countr++;
            }
        }
        DLPC350_SendImageLut(imageIndices, countr);
        DLPC350_SendPatLut();
        DLPC350_SetPatternConfig(numberOfPatterns*numberofImages, false, numberOfPatterns*numberofImages, numberOfPatterns*numberofImages);

        DLPC350_SetLongAxisImageFlip(false);
        DLPC350_SetShortAxisImageFlip(true);


        //曝光设置
        DLPC350_ClearPatLut();
        DLPC350_ClearExpLut();
        DLPC350_SetPatternTriggerMode(1);
        DLPC350_SetExposure_FramePeriod(80000, 90000);

        //设置触发输出延时
        DLPC350_SetTrigIn1Delay(1);
        DLPC350_SetTrigIn2Pol(false);//rising
        /*
        DLPC350_SetTrigOutConfig(unsigned int trigOutNum,bool invert,unsigned int rising,unsigned int falliing)
        trigOutNum:1=TRIG_OUT_1;2=TRIG_OUT_2
        invert:0=active high signal,1=active low signal
        rising:rising edge delay control.each bit adds 101.2ns 0xBB=0.00us
        falling:falling edge delay control.

        return >=0 = pass
        */
        DLPC350_SetTrigOutConfig(1, false, 187, 187);
        DLPC350_SetTrigOutConfig(2, false, 187, 187);

        DLPC350_SetRedLEDStrobeDelay(187, 187);
        DLPC350_SetGreenLEDStrobeDelay(187, 187);
        DLPC350_SetBlueLEDStrobeDelay(187, 187);

        DLPC350_SetLedEnables(true, false, false, false);
        DLPC350_SetLEDPWMInvert(false);
        DLPC350_SetLedCurrents(150, 135, 130);
        DLPC350_SetLedEnables(true, true, true, true);

        unsigned int status;
        DLPC350_ValidatePatLutData(&status);

        DLPC350_PatternDisplay(2);

        std::cout << "ok..." << std::endl;
        std::cin.get();
        DLPC350_PatternDisplay(0);
        std::this_thread::sleep_for(std::chrono::seconds(1));
        DLPC350_SetPowerMode(true);
    ------------------------------------------------
    请问是不是我代码哪里设置错误,或者哪里没有设置完全。。。恳求大神们能够解答,非常感谢!

回帖(1)

他在笑

2025-2-25 17:53:58
根据您的描述和代码,这个问题可能是由于相机触发信号没有正确地与DLP4500投射的系列图同步。以下是一些可能的原因和解决方案:

1. 相机触发信号的延迟或不同步:
   - 确保相机触发信号与DLP4500投射的系列图同步。您可以尝试调整相机触发信号的延迟,以便在投射每张图片时都能触发相机拍照。

2. 相机触发信号的频率或持续时间不足:
   - 检查相机触发信号的频率和持续时间是否足够。如果相机触发信号的频率或持续时间不足,可能会导致相机无法在投射每张图片时都被触发。您可以尝试增加相机触发信号的频率或持续时间。

3. DLP4500投射系列图的速度过快:
   - 如果DLP4500投射系列图的速度过快,相机可能无法在每张图片投射时都被触发。您可以尝试降低DLP4500投射系列图的速度,以便相机有足够的时间响应触发信号。

4. 相机或DLP4500的硬件问题:
   - 检查相机和DLP4500的硬件连接是否正常,以及是否有损坏。如果硬件存在问题,可能会导致相机无法在投射每张图片时都被触发。

5. 代码逻辑问题:
   - 检查您的代码逻辑是否正确。确保在投射每张图片时,相机触发信号都被正确地发送。您可以尝试添加调试信息,以便更好地了解代码的执行情况。

综上所述,您可以尝试调整相机触发信号的延迟、频率、持续时间,降低DLP4500投射系列图的速度,检查硬件连接和代码逻辑,以解决相机只被触发一次的问题。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分