Here’s the weird part: in normal recording mode the cameras happily hit 100 FPS. But when I drive them with a TTL trigger I can’t get above ~45 fps, even though I need a solid 90 fps. My oscilloscope confirms the 90 Hz TTL is actually reaching the camera, so the signal is definitely there.
Am I even doing this right by just connecting the f and g pin to trigger frame captures? Any idea why the trigger rate caps out so low?
Hi, thanks for the detailed write-up. Before we go further, can you confirm which firmware is currently flashed on the cameras?
The behaviour you’re describing actually makes sense once you know that the sensor’s working mechanism is different between streaming mode and external trigger mode. In streaming mode the sensor free-runs, which is why you see high FPS like 100. In external trigger mode the sensor waits for your TTL edge before exposing, so the achievable trigger rate is tied to the exposure time.
I’ve sent you the firmware update tool plus a video guide through private message — the video_guide is inside the same file. Please check it and run through the update.
Thanks, I’ll grab that from my messages. While I’m here, a few other things I keep running into:
I followed the ‘modify Arducam UVC camera serial number’ procedure (Redirecting...) to change the device name, and now APCap won’t properly load the camera. I can occasionally start it, but I can no longer read out the FPS info at all.
I tried stepping the Arduino’s 5V down with a voltage divider, but it’s unreliable. The camera produces 3.3V on its own, and the moment it’s connected to ground it starts triggering a frame.
I don’t have an Arduino Due or an ESP8266, but I do have an unused RPi. What I’d like is to upload a script to the RPi that starts a 90 Hz 3.3V pulse after receiving a 5V pulse from the Arduino on one of its pins. Does something like that exist?
I can’t use the Pi system as-is because I’m unsure how to trigger the Pi acquisition using a signal from the desktop system.
Is there any indication in the linked doc of the program being used? I want to record videos with another system while physically providing 5V TTL to control the frame rate — I use Bonsai, which has a video writing function.
For recording while providing TTL: yes, the external trigger effectively overrides the frame rate regardless of the recording software. The sensor outputs a frame on each trigger edge, so the TTL pulse is what sets the FPS. It’s still a good idea to set the expected frame rate in your encoder/recording settings so you don’t drop frames or misalign timestamps.
Bonsai is a DirectShow-based pipeline, so in principle it can work with these cameras once the OS enumerates them. The APCap serial-number change looks like it may have broken enumeration for you though — let’s come back to that after the firmware update.
Ok, update: I flashed the firmware tool per the video guide. I can now trigger acquisition using the transistor, but I still can’t reach 90 Hz — best I get is 45 fps even though the scope still shows 90 Hz TTL reaching the camera. I also can’t reach 90 Hz in AMCAP. There’s clearly something else going on. Any thoughts?
That 45-46 fps ceiling with a 90 Hz trigger is the classic symptom of an exposure-time limit, not a trigger problem.
In external trigger mode the achievable frame rate is limited by the exposure time — the sensor can’t start the next frame until the current exposure period has finished. If the exposure is too long, you physically cannot hit 90 fps no matter how fast your trigger is.
Try shortening the exposure in the Arducam camera program (the GUI program works: Redirecting...). As a data point from our own testing:
exposure = -9 → FPS around 46
exposure = -12 → FPS up to 90
Also, to confirm your wiring: yes, connecting the f pin and g pin to trigger frame captures is correct (that matches the screenshot in the guide).
That did it! Dropped the exposure from -9 to -12 and I’m now getting up to 90 fps in external trigger mode. Huge thanks.
A few loose ends I still need to sort:
I need the tool to burn firmware on ALL the cameras to reassign every one of them — do you have something for that?
I’d really like DirectShow drivers so Bonsai can recognize the cameras. After installing the driver I keep hitting a ‘USB transfer timeout error’. What should I do? Is the camera demo the only way to record videos, or can the feed be recognized by the CPU directly?
The camera shield isn’t recognized by the computer when it’s plugged into a USB 3.0 hub — the only way to recognize it is plugging directly into the computer port, and my CPU is far from the setup.
Do these cameras need a Raspberry Pi, or can they be used directly on a Windows computer? Is there a guide for the camera and shield?
Great — the exposure change getting you to 90 fps confirms the root cause.
For the rest:
Firmware reassign tool: I’ll send it to you through private message so you can reburn all the cameras.
‘USB transfer timeout error’ is usually a bandwidth/enumeration issue when running multiple UVC streams. Try lowering resolution or using a compressed format (MJPG instead of uncompressed) per camera, and make sure each camera sits on a separate USB root hub/controller. That error is also consistent with a hub that doesn’t provide enough consistent bandwidth.
A shield that only enumerates when plugged directly into the machine (not through the USB 3.0 hub) is a common hub power/enumeration quirk — a powered hub or a different set of ports usually helps. If any of your USB solutions meet the specs at a better price, that’s worth weighing, but let’s first see if a proper powered hub resolves the enumeration issue.
The cameras are standard UVC and do not require a Raspberry Pi — they work directly on a Windows computer. The RPi scripts are only for generating the trigger pulse if you don’t want to use the Arduino.
Summary of where we’ve landed:
Connecting the f and g pins to trigger frame captures is correct.
The sensor behaves differently in streaming mode vs external trigger mode, which explains the FPS discrepancy.
The trigger rate is exposure-limited: shortening the exposure (e.g., -9 → -12) raises the achievable FPS to ~90 in external trigger mode.
If the USB timeout still blocks Bonsai, try one camera at a time on separate controllers and tell me the exact resolution/format you’re running.