From f392a5109f78bedfd4db60e824172f76ad669f9a Mon Sep 17 00:00:00 2001 From: michelebergo Date: Mon, 14 Sep 2026 21:46:12 +0200 Subject: [PATCH] Add OAPA polar alignment driver (MBAstro) --- public/images/manufacturers/mbastro.webp | Bin 0 -> 2914 bytes .../docs/auxiliaries/mbastro/oapa/oapa.md | 94 ++++++++++++++++++ .../docs/auxiliaries/mbastro/oapa/oapa.webp | Bin 0 -> 4426 bytes .../docs/auxiliaries/mbastro/oapa/oapa.yaml | 14 +++ 4 files changed, 108 insertions(+) create mode 100644 public/images/manufacturers/mbastro.webp create mode 100644 src/content/docs/auxiliaries/mbastro/oapa/oapa.md create mode 100644 src/content/docs/auxiliaries/mbastro/oapa/oapa.webp create mode 100644 src/content/docs/auxiliaries/mbastro/oapa/oapa.yaml diff --git a/public/images/manufacturers/mbastro.webp b/public/images/manufacturers/mbastro.webp new file mode 100644 index 0000000000000000000000000000000000000000..a4bde8bd00a7721b0c20caee92dc18f0120241a9 GIT binary patch literal 2914 zcmV-o3!U^*Nk&Fm3jhFDMM6+kP&gn?3jhGnO#qz%Dl7pk0X{Jpi$o$Jp%E!e&>#Z@ zw6}1&sEwO9uup(*;8+JACV_UZjzWO+73c&1|Ck5x53;`C9$-IFzd$|W|FD0V>j3`& z=(+xL*aOf5%WL%$;Pd>qn;xs5h`+9WE_d_&1Mz#Ulf=Hm=nMQ$=Ehx7yH1MHXV1Ng74{BFE|%C3(f`2&W`Bb`8Ev+ z9Hyw%x!q2TA+0^+K?bL8x}6@u8POupsfKG3x71iluj|-$MR62p3*h+3%^K3iT5@dA zsHMNA8L!y~lF+G!YxY6pv?^hm{g8Pr3YccUWFAXGqd)-u|KXK@003gORSCXj*)6P5 zrP_s8I|yU9w!3mo>ALE;fjC+v7Hic@>8ko0hyK!_-Y1900XEEbW_(CCDDgkq9etW1 zAO5n=uO_dr$*4~(WxFed68*);^fN3z)Bp2>u;#zVeN^|Z0iOS)IS2on;xcEfmQPR!o5N}RIC_uoI?#M``@TDIGiCWv=6#@nJLIcB3OoF= z2V`H@R^EyPV{45E@w)y$@}Q8u&rz*;L+6PAhDws_M`YjcJEgwQ$FH8N{=byyP@UCp z<3PD8O$Ic=+)tw?>4bD5T*hTw+}Z8^W}FvPRDK7YCmy}$Wk+l}0rBw1$)vn(myA+| z*OrXIZ0$WJNRjb#Sl+PP)NB>2d`Y<9l{tm*3}NWMws}(}7e8w49Acub3ntZdK@h@_ zxCWb`Ieoc#$tsJJ$?Qo#&d|aKBX8#HJ;#nv+5e|xLgD!TpdFS`Dq=_)>|^Bq294%2 z!Zd*i&cg<}&30hSGQbUjW~_nQyrcjBr5#=RPKWPBAgAm!%q(Bv?Dv!9Fx0^#@}+cS zSQ)20*hCGnrP^ZZo7fO6qS$O=r1ESH_cGra(Yt!J?%pS=4($E32O3v-&szwhE^}D({?{M&QyrFM#O6ym9aKr) zL1FV^iZ#T6{*W>M@`MX|S7RYf8jVVDYE8TH<_VX>qkZ7y(m&vIm>_@s{IyZSP2*gy zLH+77idxGEaM_wT(ZT1cg6BSI>Cb7476}&bpu3|RE=Xv?=o0xR<7yj2hRW-#88<2% zqiN{3T2Nlo1GfAF1N-D~Pf-%tw=MSkPJb=r_NJcDmirw)B~IsEpEziFDGZO%X_*Pz zKO3Bf`Z?LzQN))pB)Nelq;#$@!C06DUR?~0zN^pxKB{CD4uW}pp(wuV2Vu@KtA19U z+`>QmXhUeyGG6RrxRf%=002O2KC@pMjAQ7t715xQdCb8mkxoxs5FHP{=v74(Fm}SJ zV?d$naW@VgxmL(=qk3OiZil=(F-^c(vs`gw7^n9?@QPKNCs|YBNol_4+CL`5d~Chk zE)n5G%9Ex=4m3NL-5EA1^6&85cytUpJzGPy>l@esFHAb1g{Cn~NyRL|Kb|No+I4cB zNzkrLn->yHsc9dmnzQ%;KbtmC9*U4h?dd_7_-vn}RI3sAC4b~Te~h+l9r>o*ajatD zpAc-6*Rj`R6$nzBg;3R4l=GB6djlClL#*&Rsu&Td)}K3)_mzABjaXpIg9-~AdD80)p(d~he z;T)xQu{bq;v;NE4y}4lazOdjWakap)lHm<~U?2WQM?k%@E6)|vKhzRC*QcH7za04p zA;+>-hB-X?rhQDoRoVRK!vnvGym#cF9js=8-M^e8VKkZ+WG1@Lt<5VBxBWqJ7#?jTrN{rmBJ z-rTj+y;h&8aHaPZwGeLFI?^B=2EjH`v{lJXCdmc*pSfjp5m!#RiqSTUclM7zr^g#| z3lYh)OTo~d*dES-D7KmhGjy#ryiS^W15#^Yyz;K*s-ns&p|%|HCQ@gh-SpD!HaZNA zHSRvIx8L}XK1xj2bBdDkJq8iMEy@LZpGw`o9ji7GA#Be zcEGMtC2~(&5RtB2UsXf5Yq-0-lG8(0IpL2XCI2x zIe7k6$7SeUlx&autvtRa7-CqqbkQ6w0M=P-GF^0Jc3emkWk2f^zQ(JCnZ zj5x2+l=@%9YkttDZvv%qJbr|=OsOfk2A|8e>E0BNX2IP<61PM)FWVh#lnrTxQNJ}m zy(EHfcD2r&AhUeapl`!B$da}~6a0PQ3_YM7f*en?$Uiwb=()QQFd^d8DX4no^qnT* zLsfa9K_(F9Ib77G$cmHk0}hk>_h1d_urWOxa<3hY5H8~%c0xz=rUdFN6SnnjY6dU= zQS?at9C4`D0 zUABT5JF1=C@D}50%KA(l=x#gT>($n0_luSUO?a@QW4RNQbY)c&?-TMAHrl-q M=OE9D000000JGD@{Qv*} literal 0 HcmV?d00001 diff --git a/src/content/docs/auxiliaries/mbastro/oapa/oapa.md b/src/content/docs/auxiliaries/mbastro/oapa/oapa.md new file mode 100644 index 0000000..c5f42e3 --- /dev/null +++ b/src/content/docs/auxiliaries/mbastro/oapa/oapa.md @@ -0,0 +1,94 @@ +--- +title: OAPA +categories: ["auxiliaries"] +description: INDI driver for OAPA, the open-source motorised polar alignment platform, with automatic correction in Ekos. +thumbnail: ./oapa.webp +--- + +OAPA (Open Automatic Polar Alignment) is an open-source motorised polar alignment platform. Two stepper motors turn the azimuth and altitude adjusters of an equatorial mount, so the polar alignment can be corrected without touching the knobs. The reference controller is an ESP32 board (FYSETC E4 with two TMC2209 drivers) running the open OAPA firmware. Any controller that speaks the same serial protocol works with this driver. + +The driver implements the INDI **PAC (Polar Alignment Correction)** interface, so the Ekos Polar Alignment Assistant can measure the error and move the platform until the error is below the threshold you choose. + +## Features + +- Relative corrections in degrees on azimuth and altitude; both axes move in one command when they share the same speed +- Automatic correction loop in Ekos (KStars 3.8.2 or newer) +- A move is reported complete only when the platform is idle at the commanded target +- Abort (firmware 1.2.1 or newer) +- Speed per axis (50 to 3000 motor steps/s) +- Motor run and hold current per axis, sent on every connection because the controller forgets them at power-off +- Direction reverse per axis +- Platform position readout in degrees +- Safety: moves are refused until the platform is calibrated; a move that stalls, times out or stops short of its target is stopped and reported as an error + +## Requirements + +- INDI 2.2.0 or newer +- OAPA firmware **1.2.1 or newer** (1.2.2 recommended). Older firmware connects, but speed and Abort are ignored and the driver logs a warning. +- For automatic correction: KStars 3.8.2 or newer. The feature is marked preliminary in KStars. + +## Installation + +The driver is part of INDI core and needs no extra dependencies. Connect the controller by USB; it appears as `/dev/ttyUSB0` or `/dev/ttyACM0`. + +To run it on its own: + +```shell +indiserver -v indi_oapa +``` + +## Configuration + +1. In the Ekos profile editor, select **OAPA** under Auxiliary. +2. In the INDI Control Panel, choose the port on the **Connection** tab and click **Connect**. The board resets when the port opens; the driver waits for it. +3. Set **Calibration** (steps per arcminute) for both axes. Until you do, every correction is refused. See [Calibration](#calibration) below. +4. Check the directions once, as described in [Direction check](#direction-check). + +| Property | Meaning | +|----------|---------| +| Manual Adjustment | Relative move in **degrees**, range ±10. AZ positive = East, ALT positive = North. Example: `0.5` | +| Abort Motion | Stop both axes | +| Position | Platform position in degrees since power-on | +| Speed | Motor speed per axis in steps/s (default 1000) | +| Run Current (Motor tab) | Motor run current per axis in mA (default 600) | +| Hold Current (Motor tab) | Hold current per axis, in % of run current (default 25) | +| Azimuth / Altitude Reverse | Invert an axis if it moves the wrong way | +| Calibration | Motor steps per arcminute of correction, per axis | +| Firmware | Firmware version reported by the controller | + +> [!NOTE] +> Manual Adjustment is in degrees, not steps. A value such as `1000` is out of range and is rejected. + +## Calibration + +Steps per arcminute depend on your mechanics. Typical values range from about 15 to about 1000. To measure one axis: + +1. Run the Ekos Polar Alignment Assistant and note the error on that axis. +2. With a rough calibration value set, enter a known move in **Manual Adjustment**, for example `0.1` degrees. +3. Refresh the solution and note how much the error actually changed. +4. New value = old value × requested change ÷ measured change. + +## Direction check + +Before the first automatic run, enter `0.1` in the azimuth element of **Manual Adjustment** and confirm that the polar axis moves East. Then enter `0.1` in the altitude element and confirm that it moves North. If an axis goes the other way, enable the reverse switch for that axis. + +## Automatic correction in Ekos + +1. Open the **Align** module and start the **Polar Alignment Assistant**. +2. Enable automatic PAC correction. +3. Lower the success threshold. The default of 30 arcminutes stops the loop while the error is still large; a few arcminutes is a sensible target. +4. Start the procedure. Ekos measures the error, commands the correction, waits for this driver to report completion, and measures again until the error is below the threshold. + +The Ekos loop was tested with a real OAPA board against the INDI Telescope and CCD simulators. Ekos commanded two corrections and reported success. + +## Troubleshooting + +**Every correction is refused.** The calibration is still 0. Set steps per arcminute for both axes. + +**The platform moves the wrong way.** Enable the reverse switch for that axis and repeat the direction check. + +**A move ends with an error.** The platform stopped short of the target, stopped moving for 3 seconds, or took longer than expected. Check the mechanics for binding and the motor current, then try again. + +**Speed or Abort have no effect.** The firmware is older than 1.2.1. Update the controller firmware. + +**Seeing the serial traffic.** Enable debug logging for the driver. Every command (`CMD`) and reply (`RES`) on the serial line is logged. diff --git a/src/content/docs/auxiliaries/mbastro/oapa/oapa.webp b/src/content/docs/auxiliaries/mbastro/oapa/oapa.webp new file mode 100644 index 0000000000000000000000000000000000000000..a60acab03400779b911e65c7499c156b606e69bd GIT binary patch literal 4426 zcmV-Q5w-48Nk&FO5dZ*JMM6+kP&gnq5dZ)%VE~;0Dl7pk0X{JnibNtIArV-N_#guW zw6}1%r%)0=R~zH+D*D~&o$oB;{xkpYACo-`e#idiX(9Y~?>F9muYTeFSo5Rur%;c? ze~15b{+;_r`I*VFp!tIO@ARMbU*NxLf5?2qd{6hE$)9%rzV!h8KL0`aqs<9GPvgJT zztw+j{m}nM@;Cn<`VU6mNdLzF8}JwWxB7?r|G96SZ)Lx@KFi;;V}Wd3ClqL|41^1W zg4noDDA8OQ2p0(jv2dJGqPQ{+zFf1Jnc2@v(jcSSxg4-%=8G;htnJQ8H2m;zWFBDq z8~hSCI5t6oF? z^K*^^F;oa2iFDmn(d8K;a1XR(l}Xg(vTn|U*R1;9Xr6rCt5dJc8N(d|~^>uC4hF^R3-QyQ-T?Qo|j%Lm{?4SK8JxIw1Sd( zFw2WU-+`H9kDl}&M&n>=diZWN#Aec9E)dQ|=Eec}{lDn{xNH>gPidt%c65!?7^0^0 zZ2#|6Oh^laYVPQ4LNQ*!aQK2GTNDJ6F4mE-qxArI-p#4E|Ft!5`kT(OQm0rz=0AY} z+%6onUy*~fu@He}d@KA!7w!_SC0kV+-;pveH~kG&T0^?HjBrshUs}>re{Vd;E+~qc zHNgm`qE469S(+s4;uT(|v`{RFrrcjq&GjaF&Yu3z>0pH^Pv%$wXq?5s*c5C_Qg~2A(#ouqM1Z zmP>4uck9PKYi>W#elhq4?T|8#pd@TxXxRJjxnvT8K{_T+;SA8cDFAfOEpbVVX-}lI z!we#Km?>LvH!)=zD}x~eME8qH)M%~@gbRd%*tkw8FaZAl)`S26000004gXeQpMja0 zYVAXe&8cUzVhu6y&f0TXGXgt8qa^q$Ut1~dPoU5rO5MP<83tO$DWh^8_Zps8P!>pB zIRF2ET3QF_zJX!L3b_G#~wqS5(!X75)e-bXpB%d z4=r`<$3~>^XaZ{t?$mO|hDCrL_x;4wNQBGCRAm{ARf8LAqZjI?k-F%Z1NeZ^m`V*! z{(dT~x1!NutPFcLi^kE^SH0VvHDh0G(V`tnAzuJAbglkFfQ9iDEs_$lu5`X4etV!> zuGo5xI{n0NhJ}};Ge$ZFxybBZjbR@w^9j z4JWnJxYfXS(EdVMUBQU`r^F#UNYz_N^8~0}thU|(ubycv-#eiAVj?whL5Qc}3XLj|w(;3j!h`hDFUx0sD`C(TUU2)&h;zQ}G* zjw60jGCGeV@;a$ea~a}Vc02TQrAhVQ;b_W>fZuFz%UbZk-)HY?(^xkl-vcI(Cb}w< zS5cMI9bJ30`*A)+{yksc=mp{Ll9zVa z!-^sV(M+K3&kiEwXOd;H%8!tNP3{o8of5%oL$#m7zoV@lhR3zKt$L@JrLW*_PT`+7>fRXX1$nT7bB|2E)rq~``SUm)&hCSHw0;wRrKytNj zi}h*a71W4Oum2*JW)2G_A493Ll4_Gw5I(R>fvnv0^tPMeDep^!26uAj$Pv8}q=;ZU zv)y|fr`L_2P)VXDgu@ZS!w>F}6{W2pOMp_A6ihh%eaE}P<6zkR%DV}&^PnZ5dwPaT_k`#a_~1m89uXA&j9#nx-H~jU(_{9=#PZfY z;{`=wkI5p9lJ1*zU_aA%?@5S_ctw+@TV>ej-b`MNZQZQK^4Tr7Cp2z zUuy+Yg6O$+`jG1%-RqMId7T!xQPiEWZX<3mmz{c|w~JE)QUp&6j}rVX6|j1hC@YSk zKau3+dBn%HIUu!b7%0NrCI^0aK#pv)`*0BG7N1{HmMesKj}URamJJVI8$sP@WxBbU zO_lWi@@g9V5-(R~$|+?c)Py;CnKS#l=O|$9B^j0UG!nERIDS~ zgNbniXk|^i@mdFS2TLR=s7jgpq!tZo0+$i(Aon0r?K6Z&aSQz*Gs_s?ial7zrT}YA zbBBGBQ|nFn1V)#KW_qam7)3oKsCki_A6=~mOa1k;6!zAJ`%y2TfMthv2Uxtosx}^$ zOT(^vrSaR^==+IDnv7lcX8{91z$F!-vZ0Zc6b(Mq*Joo!mCD$#Xf8Wkq{9h*{LO=y z3krvoeo`#SUfZiN4y|gokqoCgth|!aFfDz3otq z*;=t0NrqUVJMIok-CiFmTZC`_MB01LPwLkB^5qNs3zH?o1|Hw?p#!oUT2bsu)LD(X zcccOT#;xH*Gav+S43^X+CIWpT8*v&VssBa2=&*VndU?H*C;I<#_PFlcPfvFM-{fiJ zxQ4G*C2#JXb;f1yPEnS0y#Jo%nc_HqhoM$`Y+Yd)EHJ^u_D|A4i z6;C!~^M@NEQR>#Ve{g2Db(3x5-)-}i6PNWc!-UlP1V~+ph?Y_0uA}*;kq_gRkg0Oo zd|;+0SmaBS9pXl^w14C|?LO+Pi$MrK7P)c7Ex=-;^l3EXYMD^8mqEQ2c6|6RHB8Sb zuB5`o>55g7d}OgQ{K}ieT<#Hb&@7^k7Lg=_0{nhE`5`(dA9&a1kz_Z1)t&OLw3D>k z#fLgK!ty(YTL3{pgBmMCr@Q*+g^y||?d)uMQfy;X-J9m+PL4xv zonDx_D%WMEjxk8qLioeF@Aq`yN_<7aW{MSMM_fBAn>>B-e`^_k$DXnCDHQB5`hTKl zYrf|nPfhnL8_08&Cd#EpBgu{mPA1oZf~9ye4A7k5?qg+?xiv7X*b1z>)T_?I?u}ZP zYHGW&P>`;jU2p1eRB4invl}XXa~oq*u|ef&H?p~%C?HoVzCMsC+kK2b*rBIV19s;` zv3gd_?zF1iy<+*AtQ>34|C;1);Cd6y!)~GI4WJ|Qh25>wX6)RGF3sno5LT#h%VGw< z3?7A63vW1erasdaJ-zp?Tfd*rr>eYj># zxOlf~iB42Md}}Jw4M}I~^0J>>gTqo8I&vwQb8{C;&4hc-oNzQ4D7XI-)qt5dfhu4O zawTAwN~j{nvD6G69~#b+}As3y)?9 zLn^iUs9pO$PlHHGn+B6&%rs0k0iN^|TD8pHvR+PYa;_v*6i(Jx16VN<{=~3ZquxKI zv%8}387UJ10bEO9Kmwqg)WO8bA}0iBpdC@ z?+Vr8*5P|Ci#;`X>M^Adn9u90DvTpT1eE^t`JtQh(%dIVR`R#Z7Kl9(3rhyx#$hVn zfx7+zt{N}UqepWkSFv{cn4_TM%K(g^I~lk6x@CUzn#X(w%AJart#Rx>8h?jO;9!AO zpasaxGmts!tsv~mWc9iO1NIa=F6HvP#SnCIV*`38R%(V^#L#*W6`;FlbuOjx?CwRk zdl$A&84d(m{7QR2w6A_Z3YWrUX;5dL?UDujCN(TR$I?Q7Uz z+e#Ki#}!Vb`qo^5CxJ*?-8PwCm=rS3j)+n=wl1;krQ9l+ z4R!{sr`ou{-Oo~#FH;E)LygSoL>VGl`!hV8d6AL1%7tBANuf8r4c%Sm;m@FFWLXF6 z7|WF@`2kn4+;VKT`s6}*GhO5DNS@zM3CETqFxdNj>4cs4S{@UnmOzye@u*S(G6Jt2 zTqSM(WN+so!2g=dB`hZ&1ymo5cI9d;=y$xn-~k@ETUX#)Y>D7qwoE#AxoB>{88w0a zKc~3EqZU~Vy9E|*Xo$a%Eb^2r&|)1*y%)B9!e+Ri;8k9c|7^}obcqKV4?^{Rv92G* z(SRP>qYcP)21R?Fv{QU40NQYIP{Sq|Ah=YUZy_$Lx3_K5~}7! z^R9WoJ^SQZc3G&~-yn}xVaIx?pn?)113QD&Mvb+BhvT;4IQdW*|JOd<=L1xO{(r-9 z|1~|zP_ouZPpkqEzHiDp)VXBWkve*o9{HraOz*ydbq4Vr$sh2)50M;NGzzR{Z%za)_;e*hx|w6>!re3|Hz^Uly>DcKk1D{pZJlKxU>sPoxU1-G~nY z*fed%BkullFhN2dNK(UG2iR3G2g`vt$uHC3=5tM%y&)gE3fdNePO&!|5`pDI;0nk( z^M7v<7HfbFZv+7P$I9+I@V?qHF*-=h($NgGE`X0hyI4ODa{Efe$|)j@{#L~7G;DYFh`GR!nA>IGN={L>s-r zX@0NXs_;yKk81=upXp9g@MO9#tXzhg$&H9sI(!y;Aq37 z1SMX2t|I;UiNw~t1_yyyTKBOoZE4%Tlwg9%UHwyxI6OG2`?&G