ARTICLE DETAIL

资讯详情

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

自制天文场旋校正器:从开环到编码器闭环的精度升级实践

自制天文场旋校正器:从开环到编码器闭环的精度升级实践 1. 为什么Part 2要从“转得起来”升级到“转得准”Field Derotator这种东西做天文摄影Astrophotography玩到一定程度一定会碰见。尤其是用经纬仪、叉臂式支架或者赤道仪极轴没精对就急着开拍的时候你会发现在屏幕上星点明明是圆的拍出来的长曝光照片里边缘星点却全部变成了短弧线。这就是场旋field rotation在捣鬼。Part 1里我做了一个最简原型一块Arduino、一个步进电机、一个塑料外壳加上开环控制勉强能让相机转起来。但说句实话那个东西只证明了方向可行离“能带到观测地稳定用一整晚”还有很长一段路。所以Part 2的目标非常明确把上一版的玩具级原型升级成一个真正能配合拍摄软件自动工作的Field Derotator。这篇文章会把我在第二版实装过程中的硬件选型、控制逻辑、方向判断、光学安装、调试步骤和踩坑记录全部摊开来讲。适合手里已经有一套深空设备、想在赤道仪或经纬仪上解决场旋问题的同好如果你还在观望阶段也会帮你搞清楚这个东西到底有没有必要自己造。1.1 Part 1只解决了“能不能转”先回顾一下第一版做了什么。那台原型机用的是42步进电机直驱驱动器用的是最便宜的A4988控制板是Arduino Uno没有任何编码器反馈也没有和拍摄软件通信。上电之后设定一个固定转速电机就带着相机开始慢慢旋转。从结构上说它确实是一个能转的Field Derotator但也仅此而已。开环控制的最大问题是“你永远不知道电机实际转到哪”。一旦负载稍微偏重、线缆被扯住、或者夜里降温导致机械间隙变大电机就可能丢步。丢一步相机角度就偏了几十分之一度短时间可能看不出问题但场旋讲究的就是长时间累积精度。另一个问题是固定转速根本不适合真实观测。目标在天空中的位置一直在变场旋速率也不是恒定的用一个固定速度去抵消一个持续变化的量前两分钟可能还好到第五分钟误差就已经大到肉眼可见。所以第一版做完之后我心里很清楚这玩意儿只能叫“验证了机械结构”距离实用还有一座山要翻。1.2 一道算术题转动误差如何毁掉一整晚为什么场旋值得专门做一个旋转器很多新手会想赤道仪不是会自动跟踪吗确实赤道仪跟踪的是恒星周日运动但场旋和跟踪是两码事。只要极轴没有精确对准或者用的是没有场旋修正的地平式支架视场就会绕光轴中心缓慢旋转。这个旋转不会因为你导星做得有多好而消失导星只是保证目标在视场里的位置不变场旋是让整个画面像转盘一样转。场旋的积累速度有多快直接算一下就有概念。在一次中纬度大约40°N的实测中我试过用一副600mm焦距、APS-C画幅的望远镜朝东偏南、高度角35°左右的位置拍摄。那台适马镜头加天文相机组合的像元比例大约是1.3角秒/像素理论上场旋速率大约有每小时七八度。什么概念换算过来就是每分钟0.13°也就是8角秒左右。单张曝光2分钟画面边缘的星点就会绕光轴中心画出大约16角秒的弧线放在高分辨率照片里就是10多个像素的拖尾。你要是把相机架在地平式支架上朝天顶附近拍场旋速率还会成倍增加几个像素的模糊在单张里未必引起注意但一旦参与后期叠加星点就会被拉成小短线整体画质直线下降。1.3 这一版的目标与验收标准第二版动手之前我给自己定了几个硬指标与其说这是项目目标不如说是验收标准。第一设备必须能实时获得当前机械角度也就是必须加编码器或者等效的位置反馈杜绝丢步盲区。第二必须能跟拍摄软件联动让NINA或者其他软件根据目标坐标自动算出当前需要的场旋角度并持续下发给旋转器。第三单次连续跟踪5分钟实际角度误差要控制在0.1°以内。最后整机要能在零下几度的户外连续工作至少4个小时不卡死、不过热。这几个指标看起来很基础但真正做下来才发现每一环都有坑。编码器选型、减速方案、回差补偿、方向约定、软件协议随便哪一个没处理好最后装到望远镜上都会出问题。接下来我把整个实现过程按模块拆开讲每一个决定背后都会解释为什么这么选。2. 硬件选型与机械细节精度不是从电机开始的很多人做DIY装备第一个想到的是买多大扭矩的电机但实际上对一个Field Derotator来说最关键的从来不是扭矩而是“能不能精确地停在想要的位置”。相机加抱箍重量再大也不过一两公斤用一个NEMA17小步进电机完全带得动。真正的难点在减速和位置反馈。2.1 电机与减速方案精确度优先不能只看扭矩我最终选择的是NEMA17步进电机步距角1.8°保持转矩0.4N·m。裸奔的步进电机直接驱动相机理论上每一步是1.8°通过驱动器的细分可以做到很高的分辨率但实际负载下纯靠电机自身的保持力去对抗线缆拉扯和机械阻力很难保证长期稳定。所以必须加减速机构。减速方案我对比了三种行星减速箱、皮带轮减速、直驱加外部力矩电机。方案优点缺点适合场景行星减速箱1:30体积小、减速比大、输出轴同心度高行星齿轮回差难以消除常在0.5°~1°之间对精度要求不高的便携设备皮带轮减速1:10~1:20皮带预紧后回差几乎为零、运转顺滑体积稍大需要预留张紧机构DIY首选精度可控直驱无刷力矩电机零回差、响应快、控制平滑成本高驱动电路复杂商品级旋转器方案我第一版用了行星减速箱结果实测发现回差远比我想象的严重。所谓回差就是电机换向的时候输出轴要空转一定角度才能重新带动负载。行星减速箱在轻负载下回差通常有0.3°到1°对于场旋修正这种要求亚角分精度的应用这是不可接受的。所以第二版我改成了1:10的同步带轮加预紧张紧轮。皮带传动在预紧之后换向间隙可以被压缩到非常小实测下来大概在0.02°以内完全够用。提示如果你的望远镜是卡塞格林式后载重量大也可以考虑用1:20的皮带轮。但不要盲目增大减速比因为输出轴的等效惯量和摩擦阻力也会被放大反而让伺服响应变慢。2.2 编码器让设备“知道自己转到哪里”闭环控制的核心是位置反馈。我用的是AS5600磁编码器12位分辨率理论上能分辨360°/40960.088°实际配合均值滤波能稳定在0.05°左右。这个精度和我的误差预算基本匹配。安装方式值得特别注意。AS5600是靠一块径向磁化的圆形小磁铁来感应的磁铁要粘在转轴末端芯片固定在轴承座外侧磁铁和芯片之间的距离控制在1mm以内。磁铁如果偏心读数就会在旋转到不同角度时出现非线性跳变芯片如果受到金属屏蔽干扰输出的I2C数据也会抖动。所以我在设计外壳时专门留了一个沉孔把磁铁嵌入转轴中心位置再用一个塑料压盖固定芯片位置保证两者同轴。编码器的作用不只是报位置。它还兼了限位和堵转检测当电机被外力阻止旋转、而编码器读数几乎不动时软件可以直接判定为堵转停止驱动并报警避免烧驱动板。2.3 主轴与轴承刚性是隐藏变量如果说编码器决定了“知道自己在哪”那么机械结构决定了“能不能稳定地待在那儿”。Field Derotator受力其实不大但它装在望远镜和相机之间望远镜转动或者线缆轻微拉扯都会在窄小的机械结构里产生微小位移。这些位移反映到焦平面上就是星点移动和场旋叠加在一起画面就更没法看了。所以在第二版里我把主轴换成了两根角接触球轴承背靠背安装加预紧垫片。背靠背安装的好处是能同时承受径向和轴向载荷而且轴向间隙可以压到几乎为零。外壳最初用3D打印做但后来发现PLA件在夜温下降后收缩明显轴承座会松动。最后我干脆找了本地CNC加工店用6061铝合金切了一套外壳。成本大概200多块钱换来的是整机刚性大幅提升。2.4 控制板与驱动器组合控制板我选了ESP32而不是继续用Arduino Uno。原因有三个ESP32自带Wi-Fi可以直接跑ASCOM Alpaca协议省一个USB转串口模块双核处理器算PID完全没压力IO口丰富编码器I2C和驱动器UART可以同时挂在同一个芯片上。驱动器用TMC2209配置成UART模式256细分。这个驱动器和老款A4988最大的区别是静音和顺滑低转速下几乎没有共振噪音。电流我设定在1.2A对NEMA17来说留了余量也不会过热。供电用的是一块12V/3A的DC-DC模块直接接到电源盒上全程没有额外散热问题。3. 控制逻辑与算法实现场旋不是匀速转圈硬件装好了最难的部分才开始。Field Derotator不是简单地让相机匀速旋转它需要根据望远镜指向和目标坐标实时计算“当前视场应该旋转多少角度”然后让设备快速、精确地转到那个角度。这个过程需要解决三个问题速度怎么算、方向怎么定、角度怎么控制。3.1 场旋速率从哪来ASCOM、坐标与机械角的换算先讲一个结论除非你的望远镜永远只拍同一个目标否则不要指望用一个固定速度去抵消场旋。目标在天空里的位置时刻在变地平式支架的场旋速率可能每分钟就变化百分之几度赤道仪极轴偏差造成的场旋虽然慢但方向也可能随着目标跨越子午线而反转。所以正确做法是让拍摄软件在整个曝光过程中不断计算目标的理论视场旋转角然后把目标角度发给旋转器。在NINA和ASCOM的生态里这个流程已经比较成熟。NINA会根据你的望远镜支架类型、地理坐标、目标天球坐标计算出当前需要的场旋角度。它会调用ASCOM Rotator驱动的MoveAbsolute方法传入一个0°到360°之间的目标角。我的设备通过一个自写的ASCOM Alpaca驱动把这个目标角通过局域网或串口转发给ESP32ESP32闭环保住这个角度。ASCOM Alpaca的实现细节不多说简单来说就是把设备变成一个HTTP服务NINA通过HTTP请求直接调用MoveAbsolute和MoveMechanical等方法省去了写传统COM驱动的麻烦。通信协议我自己定义成一行一个命令格式是“P 123.45\r\n”表示目标角123.45°ESP32每100ms解析一次收到就更新内部目标值并立即参与闭环。3.2 方向问题最容易翻车的隐藏坑方向是Field Derotator现场调试里最坑的一环没有之一。为什么因为不同坐标系下“正方向”的定义完全不同。ASCOM里定义的Rotator正方向是指从传感器后方也就是从望远镜物镜往相机方向看逆时针旋转但实际你站在设备旁边操作手动模式时眼睛看到的方向和这个定义往往是反的。很多成品设备说明书里也会说“如果转动方向相反请把驱动里的ReverseDirection设为True”说明这个问题连商品设备都无法避免。我的解决方法是先在软件里加一个方向开关然后现场实测。具体做法是装好相机后把望远镜对准一颗亮星手动让旋转器从0°转到2°拍一张2秒的短曝光。如果星点相对中心向外移动的方向和我预期的场旋方向一致说明方向正确如果朝反方向跑就在驱动配置里打开发方向反转开关再测一遍。这个方法虽然原始但比任何理论判断都可靠。3.3 位置闭环与速度前馈控制器内部我用了非常经典的位置环加速度前馈。为什么不用单纯的PID位置环因为NINA每一次调用MoveAbsolute的间隔可能达到几百毫秒如果只靠位置环去追设备会一直在追赶目标运动不连续画面也会出现轻微的“顿挫”。所以我在计算目标角的同时先估算出从上一次指令到这一次指令的目标速度单位就是度每秒作为前馈量直接加到电机转速里再拿当前编码器角度和目标角度的偏差乘以一个比例系数作为修正项。伪代码大概是这样的float targetAngle parseCommand(); // 本次目标角 float dt 0.1; // 100ms循环周期 float feedForward (targetAngle - lastTargetAngle) / dt; float err targetAngle - currentAngle; float speed feedForward KP * err; // 前馈 位置修正 driver.setSpeed(speed); lastTargetAngle targetAngle;KP我取的是2.0实测下来设备能在0.3秒内跟上目标的突然变化而且不会过冲。如果目标角变化很缓慢比如赤道仪极轴误差导致的慢速场旋速度前馈基本为零纯位置环也能控制在0.05°以内。3.4 软件协议与NINA对接为了让NINA能直接控制我用ASCOM Alpaca写了一个驱动暴露了以下几个关键方法MoveAbsolute(position)将旋转器移动到指定角度MoveMechanical(position)移动到机械位置用于调试ReadAll一次性返回当前位置、温度、状态由于ESP32本身只有Wi-Fi我把它设置为一个独立的AP模式热点或者连接到家里观测点的局域网。NINA运行在电脑上通过HTTP访问ESP32的IP地址。整个过程不需要USB线也不用担心笔记本串口驱动问题。有朋友问过能不能不用ASCOM直接在NINA里通过串口插件控制理论上可以但ASCOM是天文设备接入的标准以后换拍摄软件或者加导星设备都会方便很多。所以我建议DIY的话优先走Alpaca把协议规范化。4. 安装、调试与性能验证设备硬件固件都完成之后最后一步是在望远镜上实际安装和测试。这一阶段最容易出问题的是光学机械干涉和方向验证。下面按我的实际流程来写。4.1 光路安装后截距和机械干涉Field Derotator装在望远镜和相机之间相当于一个可旋转的延长筒。安装时首先要确认机械长度不会导致后截距超差。对使用减焦镜的系统后截距通常有严格公差比如很多减焦镜要求从镜头尾端到相机芯片的距离在55mm左右。如果旋转器本身长度有30mm那相机和OAG、滤镜轮之间的距离就要相应缩短否则四角会出现明显的像散和慧差。我这次用的是无反相机直接接在旋转器后面后截距问题还小。但如果你用减焦镜加滤镜轮加OAG请务必先把旋转器的机械长度量清楚再装。其次旋转器内侧必须做消光处理。3D打印件表面反光严重不处理的话在拍亮星时会出现光晕和鬼影。我用的是自粘植绒布贴在旋转筒内壁效果立竿见影。注意机械干涉不只是长度问题。旋转器转动时线缆会跟着扭。拍摄过程中相机电源线、USB线如果没有适当的限位转两圈就可能卡住机构甚至把接口拽坏。正确做法是在机壳上固定一个线缆旋转支架让线缆从旋转轴中心穿出或者留出足够长的自由余量并加一个线缆转向限制。4.2 上电初始化与零位校准设备上电后第一步是找零位。我在旋转器外壳上装了一个光电开关对应主轴上的遮光片。上电后电机会朝固定方向转动直到遮光片挡住光电开关软件记录当前编码器读数作为机械零位然后回退到一个90°的安全启动位置。这样每次通电坐标系都是确定的。零位校准还有一个机械层面的工作把编码器读到的0°和光学系统的某个固定参考对齐。我没有高精度光学对准设备所以方法很简单——把旋转器装到望远镜上手动转到机械零位然后打开取景器瞄准远处一个明显的地面目标拍一张照片再手动转180°拍另一张。比较两张照片里的目标位置如果旋转中心正好是画面中心说明零位基本对准了。4.3 现场实测把星点拖线“看”出来第一次实战测试我选了一个透明度不错的夜晚目标是一个位于东偏南方向的疏散星团。当时的支架是经纬仪模式场旋非常明显。安装好设备后我先按前面说的方向测试法确认了旋转方向然后在NINA里开启场旋控制连续拍摄5张120秒的亮场。结果第一张照片就暴露了问题星点依然有轻微拖线但不是全场一致的弧线而是中心星点还可以、角落星点呈放射状拉长。这说明旋转中心没对准也就是旋转器的主轴没有和光轴重合。原因来自我加工的外壳两端不同心导致旋转器转动时相机在画一个“小圆圈”而不仅仅是原地旋转。后来我在CNC外壳端面加了一个调心法兰这个问题才算解决。调完同心度之后5张120秒照片叠加出来的星点长宽比稳定在1.06到1.09之间肉眼几乎看不出拖尾。这时候我才确定这一版的Field Derotator真正能用了。4.4 一晚上的实战数据为了给出更实在的参考我把一次完整拍摄夜的数据记录摘一段放在这里。当时目标从东侧大约45°高度开始拍摄逐渐升高然后过中天最后在西侧30°高度收工总跨时约3小时。NINA记录的场旋角度累计变化约35°我的旋转器在3小时内实际移动角度也刚好是35°左右两者对得上。在整个过程中设备自身误差最大出现在一次快速从18°转到5°的换向动作里瞬时偏差到了0.12°但3秒内就收敛回0.05°以内。连续工作3个多小时壳体温度只有微温TMC2209的散热完全没压力。唯一让我有点慌的是中途有几分钟Wi-Fi信号弱Alpaca连接断了两次好在NINA有自动重连机制没有造成实际拍摄中断。5. 常见问题与排查技巧DIY设备最费时间的不是搭起来而是出问题之后怎么快速定位。这里把我在测试和使用中遇到的几类典型问题整理成一个速查表后面再去野外可以少走很多弯路。现象可能原因排查思路与解决星点依然拖线场旋方向反了先手动转2°拍一张确认方向再改驱动方向开关星点拖线只在后半段出现目标过中天场旋方向反转检查NINA是否开启了自动过中天反转或用导星软件确认设备卡死不动线缆缠绕卡住机构检查线缆走向增加限位驱动板电流过大导致电机堵转断电后手动回绕转起来有“咔咔”声皮带轮同步带松动或张紧轮没预紧重新张紧同步带检查皮带齿面磨损编码器读数跳变磁铁偏心、芯片漂移或受电磁干扰检查磁铁是否居中芯片和磁铁间隙是否稳定软件加均值滤波ASCOM连接不上防火墙拦截、IP地址变化固定ESP32的IP关闭Windows防火墙或添加白名单MoveAbsolute指令执行慢实时性不足把串口命令解析放到子线程避免主循环阻塞5.1 为什么星点还是拉线这是最常被问到的问题但绝大部分情况不是设备坏了而是“方向搞反了”或“场旋速率变化太快”。前者只要手动测试一次就能发现后者多发生在目标接近天顶附近此时场旋速度方向会剧烈变化就算旋转器及时响应也可能因为计算延迟产生短时间偏差。我的建议是天顶附近尽量避免长时间曝光或者改用赤道仪。5.2 转着转着突然卡住如果排除线缆缠绕最可能是步进电机堵转。TMC2209的电流如果设得太大电机在堵转时会持续发热驱动器过热保护会强制停止。我曾经在一次测试里电流调到1.5A结果夜里降温导致机械间隙变小阻力变大电机转到某个角度就卡住驱动器直接罢工。后来把电流降回1.2A同时开启驱动器的StallGuard功能堵转时可以自动识别并停止就再没出过这种问题。5.3 编码器读数跳变AS5600有一个特点它对安装偏心的容忍度比较低。如果磁铁没有完全居中旋转到某些角度时读数会突然跳变几度闭环控制会立刻误判并发出一个错误的位置修正表现在画面上就是星点突然“跳”了一下。出现这个问题先检查磁铁有没有粘正再看芯片和磁铁之间的距离是不是在1mm以内。软件方面可以对连续两次编码器读数做差值判断差值超过1.5°就视为异常丢掉该帧数据而不是去执行修正。5.4 与NINA/ASCOM通信异常Alpaca通信大多数问题都出在网络上。ESP32连到家里路由器后IP地址可能会变NINA里保存的还是旧地址自然连不上。解决办法是把ESP32的MAC地址绑定成固定IP或者让ESP32自己开一个AP热点直接把电脑连接到这个热点上。另外注意Windows防火墙默认会拦截来自网络的HTTP请求需要把NINA允许访问私网。如果你想在观测现场快速判断通信是否正常可以直接在浏览器输入ESP32的IP地址加端口看能不能返回JSON状态。我这套设备在调试时用这个方式验证比在NINA里反复点连接要高效得多。最后再分享一个在实际使用里发现的小技巧我在旋转器外壳上贴了一圈刻度盘从0°到360°每5°一条线。听起来像原始人的做法但当你现场发现ASCOM通信断掉、设备停在某个角度时这个指针可以帮你快速判断当前机械位置不至于两眼一抹黑。在这个项目里任何一个看起来“土”的小细节在深夜零下的观测场上都可能救你一命。
返回列表