ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

STM32F4定时器PWM驱动海康工业相机外触发精准拍照方案

STM32F4定时器PWM驱动海康工业相机外触发精准拍照方案 做机器视觉的项目迟早会碰上一件事产线节拍定了拍照时机分毫不差但相机就是跟不上。要么用软触发延迟忽高忽低要么用外部传感器硬触发结果信号毛刺多相机误触发得让人抓狂。我最近在做的一套基于STM32F4驱动海康工业相机的项目正好把这个问题彻底解决了用定时器输出PWM信号做海康工业相机的外触发源实现精准触发拍照。整套方案从硬件接线到固件代码再到相机端参数配置全部跑通代码也贴出来了做视觉检测、AOI、飞拍项目的朋友可以直接参考。这篇内容适合三类人看一是刚入门工业相机开发还在用软触发、发现节拍老是对不齐的二是已经在用外触发但被未收到触发信号这类问题折磨过想搞明白底层原因的三是纯粹想在STM32上把定时器PWM玩明白顺便了解怎么和外部设备联动的。不管你是用F407还是F429原理都一样代码可以直接套。1. 为什么非要用PWM做触发相机自己连拍不行吗很多人第一次接触工业相机都会有这个疑问相机不是有内触发模式吗自己内部产生节拍不断出图不就完了为什么还要外部给个PWM信号去触发它这个问题的答案得从实际产线场景说起。1.1 软触发的痛延迟不可控相机工作在软触发模式时触发脉冲由主机通过USB3.0或GigE接口发送给相机。问题是这条指令要经过操作系统协议栈、USB控制器调度、相机固件解析每一环节的延迟都是不确定的。我实测过同一台海康工业相机软触发到图像真正曝光的延迟抖动在Windows下能到3-8毫秒。别小看这几毫秒如果产线运行速度是1米/秒8毫秒的抖动就意味着目标物体在物理空间上偏移了8毫米。视觉检测的定位精度要求可能在0.1毫米左右这个抖动直接把检测结果干废了。而在硬触发模式下触发信号直接作用于相机的传感器控制逻辑从上升到开始曝光的延迟是固定的通常只有几十微秒。这就从机制上解决了拍照时机飘忽不定的问题。1.2 PWM触发和单脉冲触发的区别那问题又来了我用一个外部光电传感器目标一到就产生一个单脉冲给相机不也能实现硬触发吗何必用STM32输出PWM信号分两种情况看。第一种情况确实只需要单次触发比如静态摆拍、来料检测光电开关发一个脉冲就够了。这种场景确实不用PWM用一个转速传感器、光电开关配上整形电路直接接相机就行。第二种情况就是我这套方案真正对口的周期性连续触发。比如转盘上六个工位轮流过检测工位或者产线上物品以固定节距流过相机视野这种时候需要相机以固定的频率连续触发拍照。PWM信号本质上就是一个特定频率的方波每个上升沿就是一个触发脉冲频率决定拍照节奏占空比决定触发脉冲的宽度。用STM32F4的定时器产生PWM精度的价值体现得很充分定时器时钟源84MHz分频后计数时间基准误差远小于微秒级而且完全不受主程序跑飞、中断优先级之类的影响。另外PWM的频率是可以随时动态修改的意味着产线调速时相机的触发频率也能跟着变不需要改硬件。1.3 一种看似可行但别踩的方案纯软件延时翻转GPIO有的同学觉得不就用IO口模拟PWM吗主循环里delay一下翻转一下电平不就完了。这条路千万别走。STM32F4的HAL_Delay基于SysTick本身就有1ms的量化误差再加上循环里其他代码的干扰输出的方波周期抖动会非常难看。关键问题在于相机硬触发要求的是信号沿的精确稳定周期抖动大了曝光时刻也会跟着抖等于又把软触发的毛病捡回来了。所以PWM必须由定时器硬件产生一经启动就不需要CPU干预输出稳定得让人放心。这是我反复强调的第一原则。2. 硬件接线与电平匹配最容易被忽略的3个细节软件写得再好硬件接不对一切都白搭。海康工业相机未收到触发信号这个问题我排查下来有一大半案例都是硬件层面的接线和电平问题。2.1 相机端的触发输入接口海康工业相机的外触发输入一般在机身侧面的航空插头上。以常见的MV-CE系列为例12Pin接口里Line0和Line1都可以作为触发输入另外还有光耦隔离输入和差分输入两种形式。光耦隔离输入的优点是抗干扰能力强相机端和外部设备电气隔离。但缺点是光耦有导通延迟而且需要足够的驱动电流才能让LED点亮。差分输入则适合远距离传输抗共模干扰更强。实际接的时候线缆定义必须对照具体型号的说明书不要凭印象乱接尤其注意正负极。我项目里用的是Line0 光耦隔离输入。2.2 STM32F4的3.3V电平不是所有相机都认这是最隐蔽的一个坑。STM32F4的GPIO输出高电平是3.3V但不少海康工业相机的光耦输入回路要求的触发电压是5V到24V3.3V根本点不亮光耦内部的LED。很多人在电脑上配置好相机参数信心满满地把STM32和相机一连却发现相机纹丝不动查了半天最后才发现是电平不够。解决方式有三种按推荐顺序排列加一个光耦隔离模块用STM32的3.3V驱动光耦输入端光耦输出端接外部5V或12V电源和相机的触发输入。这是最稳的方案同时实现了电气隔离。用一个简单的三极管或MOS管做电平转换把3.3V信号抬到5V或者12V。成本低但不隔离工业现场有干扰风险。先确认你的相机型号是否支持3.3V触发。部分新款海康相机对触发电压的适应范围更宽3.3V也能触发但我不建议依赖这个。2.3 接线长度和噪声防护触发信号线如果走线超过30厘米就必须考虑干扰问题。工业现场电柜里的变频器、伺服驱动器都是强干扰源。我的做法是触发信号线用双绞屏蔽线屏蔽层单端接地和动力线分开走线槽信号电压尽量选12V而不是5V提高信噪比。还有一个细节海康相机的触发输入通常有去抖电路参数在相机软件里可调。这个参数设大了会过滤掉窄脉冲但也可能把真实触发过滤掉。设小了抗干扰能力下降。具体的设置思路我在第五节排查篇里再展开。3. STM32F4定时器PWM配置时基计算与关键代码硬件方案定了接下来就是固件实现。我用的是STM32F407VET6Timer3的Channel1输出PWM引脚是PA6。主频168MHzAPB1定时器时钟84MHz。3.1 时基参数的计算逻辑不是随便填两个值PWM的输出频率由三个参数决定定时器时钟频率、预分频器PSC、自动重载值ARR。公式是PWM频率 定时器时钟频率 / ((PSC 1) * (ARR 1))。这里有个容易搞混的点STM32F4的APB1总线时钟是42MHz但定时器时钟会自动翻倍到84MHz。这是因为APB1预分频系数不为1时定时器时钟是APB1的两倍。我见过有人在CubeMX里看到42MHz就直接用结果实际输出的PWM频率比预期低一半排查半天。我的设计目标是产生一个100Hz、占空比50%的触发信号。计算过程如下先选PSC 83这样计数频率 84MHz / (83 1) 1MHz即每1微秒计数器加1。这个计数频率比较方便换算。再算ARRARR 1 1MHz / 100Hz 10000所以ARR 9999。占空比50%比较值CCR ARR * 50% 5000。也就是说计数器从0数到9999总耗时10ms对应的就是100Hz。当计数器小于5000时PA6输出高电平大于5000时输出低电平。这样用一个硬件的PDM一个周期就完整实现了。3.2 HAL库代码初始化与启动CubeMX里的配置我简单梳理一下省的大家重复踩坑TIM3时钟源选择内部时钟。Channel1设置为PWM Generation CH1。参数区填入上面的PSC83, ARR9999, Pulse5000极性选High。生成的初始化代码是这段void MX_TIM3_Init(void) { TIM_MasterConfigTypeDef sMasterConfig {0}; TIM_OC_InitTypeDef sConfigOC {0}; htim3.Instance TIM3; htim3.Init.Prescaler 83; htim3.Init.CounterMode TIM_COUNTERMODE_UP; htim3.Init.Period 9999; htim3.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_PWM_Init(htim3) ! HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode TIM_MASTERSLAVEMODE_DISABLE; HAL_TIM_MasterConfig_Step(htim3, sMasterConfig); sConfigOC.OCMode TIM_OCMODE_PWM1; sConfigOC.Pulse 5000; sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(htim3, sConfigOC, TIM_CHANNEL_1) ! HAL_OK) { Error_Handler(); } HAL_TIM_MspPostInit(htim3); }启动PWM输出就一行HAL_TIM_PWM_Start(htim3, TIM_CHANNEL_1);在main函数里外设初始化完成后调用MX_TIM3_Init()然后再启动PWMPA6上就会持续输出100Hz的方波。这里有一个我踩过的坑提醒一下HAL_TIM_MspPostInit是CubeMX生成的函数专门负责PWM输出引脚的GPIO和复用配置。如果手动写初始化容易忘了把PA6配置为AF2复用功能导致引脚一直是普通GPIO模式怎么都不出波形。检查的时候先看这个函数有没有被正确调用。3.3 动态修改频率和占空比的实现产线不是永远匀速跑节拍变化时触发频率就得跟着变。修改PWM频率有两种方式。第一种修改ARR。因为周期 ARR影响周期PWM频率自然跟着变。但要注意如果新的ARR值比当前计数器值还小定时器计数就会出现异常下一周期才生效。所以我一般设置AutoReloadPreload ENABLE让ARR的影子寄存器在更新事件时才生效。第二种修改PSC。改PSC也能改频率但PSC的更新同样有影子寄存器机制而且计数频率一变PWM的边沿会立即改变动态响应更突兀。我推荐优先改ARR。实际项目中我写了一个可复用的设置函数void SetTriggerFreq(uint32_t freq_hz, uint8_t duty_percent) { uint32_t arr; uint32_t ccr; if (freq_hz 0 || freq_hz 5000) { return; } // 保持计数频率1MHz确保微秒级分辨率 arr (1000000U / freq_hz) - 1U; // ARR超过16位上限按F4定时器16位处理超出则不执行修改 if (arr 0xFFFFU) { return; } if (duty_percent 100) { duty_percent 50; } ccr (uint32_t)((uint64_t)arr * duty_percent / 100U); __HAL_TIM_SET_AUTORELOAD(htim3, arr); __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_1, ccr); }调用时比如要改成500Hz、占空比10%SetTriggerFreq(500, 10);占空比的控制也很讲究。触发信号的占空比决定了高电平脉宽占空比太小意味着脉宽太窄可能达不到相机最小触发脉宽要求占空比太大会导致周期内大部分时间都是高电平如果相机在某些配置下是电平触发而不是沿触发就麻烦了。对于100Hz的周期来说10%的占空比对应1ms脉宽完全足够。3.4 用占空比限制脉宽避免触发丢失这里补充一个相机触发脉宽的细节。海康工业相机的硬触发信号通常要求高电平宽度不小于一定值具体看型号手册。有的要求5微秒以上有的要求更宽。如果你看到触发信号过窄相机未响应的日志多半就是PWM占空比设得太低导致高电平脉宽不足。一个保险的配置是保持脉宽在100微秒到1毫秒之间。如果触发频率是1kHz占空比就至少10%如果频率降到50Hz同样1000微秒脉宽占空比只有5%。这个地方需要养成一个习惯调占空比时算一下脉宽别只盯着百分比看。4. 海康相机端配置MVS客户端参数与SDK调用STM32这边把PWM信号发出来了相机那头还得配置成正确的工作模式否则信号来了它也当作没看见。海康相机的配置有两种途径MVS客户端手动配置或者SDK代码运行时配置。4.1 MVS客户端里需要设置的几个关键参数打开海康MVS客户端连接相机后在相机属性树里依次配置下面几项TriggerMode从Off改为On。这个选项一旦更改为On相机的内触发频率设置就失效了一切听外部信号的。TriggerSource设置为Line0对应你实际接入的IO口。TriggerActivation设置为Rising Edge即上升沿触发。如果你的STM32输出的PWM占空比特别大考虑用Falling Edge的意义不大上升沿是最标准和最常用的方式。LineDebouncerTimeAbs这是一个容易被忽略的参数单位是微秒。它的作用是滤除触发线上的毛刺干扰。但要注意如果这个值设置得比触发脉宽还大真实触发信号也会被过滤掉。一般我设在1到10微秒既滤掉高频毛刺又不影响正常触发。ExposureTimeAbs曝光时间要和触发频率匹配。触发频率100Hz时周期是10ms那么曝光时间就不能接近或超过10ms否则相机刚曝光完没来得及读出数据下一个触发就来了很容易造成丢帧。配置完别忘了用MVS的保存配置功能存入相机非易失区不然相机断电重启后又会回到旧参数。4.2 SDK方式配置触发适合批量部署如果有多台相机要配置或者设备需要现场自动初始化依赖MVS手动配置就是场灾难。正确的做法是用SDK在软件里设置。海康提供的SDK接口里设置枚举参数和浮点参数是分开的#include MvCameraControl.h void ConfigureCameraTrigger(MV_CC_DEVICE_INFO* deviceInfo) { void* handle NULL; int ret MV_CC_CreateHandle(handle, deviceInfo); if (ret ! MV_OK) return; ret MV_CC_OpenDevice(handle); if (ret ! MV_OK) return; // 触发模式设为On MV_CC_SetEnumValue(handle, TriggerMode, 1); // 触发源设为Line0 MV_CC_SetEnumValue(handle, TriggerSource, 0); // 上升沿触发 MV_CC_SetEnumValue(handle, TriggerActivation, 1); // 去抖时间 5us MV_CC_SetFloatValue(handle, LineDebouncerTimeAbs, 5.0f); // 曝光时间 2000us需要和触发频率配合 MV_CC_SetFloatValue(handle, ExposureTimeAbs, 2000.0f); // 开始取流 MV_CC_StartGrabbing(handle); }注意TriggerSource的值按相机类型不同会有差异Line0在大部分型号里对应0但有些型号可能枚举顺序不同。最好先读一下MV_CC_GetEnumValue确认实际值别写死。同样的道理TriggerActivation是1代表上升沿但具体也要看SDK头文件里的枚举定义。4.3 在抓图回调里判断触发状态SDK模式下判断触发是否生效有一个很直接的指标回调函数被调用的频率是否和PWM频率一致。海康SDK的抓图回调会随每一帧图像触发触发成功一帧就回调一次。void __stdcall FrameCallback(unsigned char* pData, MV_FRAME_OUT_INFOEx* pFrameInfo, void* pUser) { // 每来一帧说明一次触发成功 static uint32_t frameCount 0; frameCount; // frameCount的增长频率应该与PWM频率一致 }如果计数器增长频率明显小于PWM频率说明有触发丢帧如果完全不动说明触发链路还是有问题直接进入第五节排查。另外海康SDK还有一个触发相关的状态信息可以读取相机最终收到的有效触发次数这个值比应用层回调计数更真实因为它统计的是相机固件层面确认的触发。在MVS里查看方法是属性树中找Trigger Count之类的统计项在SDK里用MV_CC_GetIntValue读对应节点。5. 联合调试未收到触发信号的完整排查链路联合调试是这类项目最痛苦的阶段。未收到触发信号这个错误我在这个项目里遇到过不知道多少次。下面把完整的排查链路写出来按照这个顺序查能省下大量时间。5.1 第一步示波器确认STM32引脚确实有PWM输出很多人上来就把相机接上一查发现没触发然后怀疑相机坏了怀疑线坏了怀疑SDK设置不对绕了一大圈最后发现STM32根本没有输出。用示波器探头接PA6先看有没有方波再看频率和幅值。如果完全没有信号检查定时器初始化是否执行检查HAL_TIM_PWM_Start是否被调用检查GPIO复用配置。频率不对就检查PSC和ARR。这一步是源头源头不对后面全白搭。5.2 第二步检查信号沿是否健康和干扰是否严重示波器看波形重点关注两个点上升沿是否陡峭高电平是否干净无毛刺。PWM信号经过长线传输或者电平转换电路后上升沿可能变缓变成斜坡状。这时候要检查电平转换电路的驱动能力是不是不够或者线上电容太大。我遇到过用三极管电平转换基极电阻选太大导致输出波形上升沿拖了1微秒虽然勉强能触发但相位一致性受影响。如果是潮湿的工厂环境或者靠近动力线波形上可能会有毛刺这些毛刺如果幅值超过相机触发电平阈值就会造成误触发。相机端去抖参数能滤掉一部分但从源头解决更靠谱。5.3 第三步核对接线定义逐针量电压拿出相机规格书的IO接口定义图逐个检查针脚。Line0是正极还是负极公共端是接正还是接负这些错误在接线上很容易犯。有一个非常实用的检查方法先把STM32的PWM停掉用一根导线直接把触发输入的正极短接到电源正极模拟一个直流高电平。然后观察MVS里相机的触发输入状态是不是变成有效电平。如果是说明相机到尾端的链路是通的如果不变说明接线有问题或者电平等级不对。5.4 第四步看相机端触发计数区分信号没到和信号被忽略海康相机的属性树里有一个Trigger Count节点记录相机收到并确认的触发次数。这个节点是排查的核心。如果执行PWM后Trigger Count一直在增长但取流回调没有图像或者图像很少说明触发信号成功送达问题在取流或曝光逻辑。如果Trigger Count完全不动说明触发信号没有到达相机内部逻辑问题在信号链路或参数配置。如果Trigger Count增长频率是PWM频率的两倍或者乱跳说明可能是上升沿和下降沿都触发了检查极性设置或者信号线上有振铃。这个区分能帮你精准定位问题层级不用瞎猜。5.5 第五步检查曝光时间与触发频率的匹配触发链路完全正常但画面出现时有时无、卡顿严重的现象多半是曝光时间和触发频率匹配出了问题。举个例子触发频率是100Hz周期10ms曝光时间设成50ms。相机的实际动作是收到触发开始曝光50ms然后读出数据。第二个触发到来时第一个触发还在曝光中相机自然无法响应。这时候Trigger Count只会计入成功处开始曝光的触发多余的触发直接被丢弃。解决方式是确保曝光时间 图像读出时间 触发周期。读出时间取决于分辨率和帧率设置一般从相机说明书里的帧率表中可以查到。留出至少20%的余量。5.6 第六步不同型号相机的触发信号差异海康工业相机产品线很长不同系列的触发输入电气特性有差异。比如有的型号支持3.3V电平触发有的必须5V以上有的型号Line0是光耦隔离有的则是差分输入有的要求触发源内部上拉有的则要求外部上拉。我的建议是拿到一款新相机后第一步通读硬件手册的IO规格部分记录以下信息触发电平范围、最小脉宽、输入阻抗、是否需要上拉电阻。这些参数决定了你的电平转换电路怎么搭。顺便说一句网上很多海康相机未收到触发信号的帖子提问者连相机型号都没说底下回答只能猜测。排查问题前先把自己的信息整理清楚事半功倍。6. 完整代码组合一个可直接移植的工程骨架把STM32侧的代码和相机侧的代码整合到一起形成一个可以运行的工程骨架。这里给出的是核心逻辑实际工程里你需要按自己的需求填充业务代码。6.1 STM32侧完整代码// main.c 核心片段 #include tim.h #include gpio.h // 全局定时器句柄 TIM_HandleTypeDef htim3; int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM3_Init(); // 启动PWM输出PA6产生100Hz触发信号 HAL_TIM_PWM_Start(htim3, TIM_CHANNEL_1); while (1) { // 示例运行中动态修改触发频率 // 模拟产线速度变化前10秒100Hz后10秒200Hz HAL_Delay(10000); SetTriggerFreq(200, 5); HAL_Delay(10000); SetTriggerFreq(100, 10); } } void SetTriggerFreq(uint32_t freq_hz, uint8_t duty_percent) { uint32_t arr; uint32_t ccr; if (freq_hz 0 || freq_hz 5000) { return; } arr (1000000U / freq_hz) - 1U; if (arr 0xFFFFU) { return; } ccr (uint32_t)((uint64_t)arr * duty_percent / 100U); __HAL_TIM_SET_AUTORELOAD(htim3, arr); __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_1, ccr); }完整工程还需要时钟配置SystemClock_Config这部分用CubeMX生成即可。需要注意定时器初始化里提到的HAL_TIM_MspPostInit会顺带完成PA6的GPIO复用配置不要自己重复配置会冲突。6.2 相机侧SDK完整代码精简版#include MvCameraControl.h int main(void) { // 枚举设备取第一个工业相机 MV_CC_DEVICE_INFO_LIST deviceList; memset(deviceList, 0, sizeof(deviceList)); MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, deviceList); if (deviceList.nDeviceNum 0) { printf(No camera found!\n); return -1; } // 创建句柄并打开设备 void* handle NULL; int ret MV_CC_CreateHandle(handle, deviceList.pDeviceInfo[0]); if (ret ! MV_OK) return -1; ret MV_CC_OpenDevice(handle); if (ret ! MV_OK) return -1; // 配置外触发参数 MV_CC_SetEnumValue(handle, TriggerMode, 1); // 硬件触发 MV_CC_SetEnumValue(handle, TriggerSource, 0); // Line0 MV_CC_SetEnumValue(handle, TriggerActivation, 1); // 上升沿 MV_CC_SetFloatValue(handle, LineDebouncerTimeAbs, 5.0f); MV_CC_SetFloatValue(handle, ExposureTimeAbs, 2000.0f); // 开始取流回调中处理图像 MV_CC_RegisterImageCallBackEx(handle, FrameCallback, NULL); MV_CC_StartGrabbing(handle); // 主线程保持运行 while (1) { Sleep(1000); // 可以在这里通过自研协议读取触发计数用于监控 } MV_CC_StopGrabbing(handle); MV_CC_CloseDevice(handle); MV_CC_DestroyHandle(handle); return 0; }SDK回调里的图像处理逻辑比如做轮廓检测、条码识别根据自己的算法模块填进去就行。6.3 协同验证的实操细节STM32和相机程序都部署好以后怎么验证整套系统是精准的呢先做静态验证固定触发频率100Hz连续取500帧统计回调间隔。用QueryPerformanceCounter或者高精度时钟在回调里记录时间戳然后看相邻帧时间差的均值和方差。时间差稳定在10ms附近方差在几十微秒量级说明触发链路精准可靠。再做动态验证把触发频率从100Hz平滑上升到300Hz观察图像是否有丢帧。重点注意曝光时间是否跟随调整如果曝光时间固定在2000us而触发周期已经缩短到3333us前面算过还有余量问题不大但如果触发周期短于曝光加读出时间丢帧就会立刻出现。6.4 这套方案的扩展方向PWM触发方案跑通之后可以很方便地扩展出很多变体。第一把PWM频率和编码器关联。传送带上装一个旋转编码器编码器脉冲经过STM32的定时器输入捕获模式计算出当前线速度然后换算成对应的PWM触发频率实时输出给相机。这样速度和触发频率自动同步适用于速度变化频繁的产线。这个方向就是热搜词里提到的stm32f4定时器输入捕获的应用场景。第二把触发相位可配置化。同一条产线上有多台相机分别检测不同位置的特征需要它们在不同相位触发。用STM32的多个定时器或者一个定时器的多个比较通道可以实现多路触发信号且相位可精确控制。第三做故障自诊断。STM32实时监控PWM输出状态同时通过串口或以太网和上位机通信。如果相机触发计数和PWM输出数差异超过阈值立刻报警。这相当于给视觉系统加了一个健康监测层。说到最后这套方案的调试过程中我最深的体会是工业相机触发的稳定性不是某一个环节的功劳STM32侧要保证信号的精准和稳定相机侧要正确配置触发模式和相关时间参数中间链路要确保电平匹配和抗干扰。任何一环掉链子最终的图像就会出卖你。如果你也正在被未收到触发信号折磨建议从示波器看波形开始按上面的排查链路一步不跳地走一遍大概率能找到问题所在。我做这套系统的第一版产线实测时就是在排查链路的第五步发现曝光时间设得和触发周期一样长白白浪费了三天调试时间。省下来的时间多验证几次动态调速下的稳定性比什么都值。
返回列表