量 UWB 的 AoA(到達角)要把待測物放在轉台上,一格一格轉角度量。我們手邊的轉台是步進馬達加一台 3 軸微步進馬達驅動控制器(開機訊息 CNC3D-3X),走 RS-232。以前都是開超級終端機手打 :U36000,這次把它接進 ATS 網頁操作台:選好型號就有指令集、工具列即時顯示角度,掃角度變成一個腳本按一下就跑完。
說明:本文截圖是在開發機上用模擬轉台拍的(回應格式照實機),數值只是示意;接線、速度和踩坑紀錄都是實機(筆電 COM27)測出來的。
控制器指令速查
RS-232 9600 8-N-1,指令以冒號開頭、數字直接接在後面、結尾送 CR。數字一律是「步」。
| 指令 | 意思 | 實機回應 |
|---|---|---|
:X36000 | X 軸轉到絕對座標 36000 步 | (不回) |
:U-400 | X 軸相對轉 -400 步 | (不回) |
:RX/:RP | 讀 X/XYZ 座標 | X0/X0,Y0,Z0 |
:RL | 極限開關狀態(X+ X- Y+ Y- Z+ Z-) | L001111 |
:SX0 | 不轉,把目前座標設成 0 | (不回) |
:SI500,2000,800 | 速度:初速、高速(PPS)、加減速步數 | (不回) |
:SM63/:SM0 | 極限保護開/關 | (不回) |
r | 即時:是否在動(不用 Enter,轉動中也能問) | . 移動中、> 就緒、L 極限 |
a | 即時:讀 XYZ 座標 | X0,Y0,Z0 |
b | 緊急停止 |
換算:馬達 1600 步/圈(1/8 微步),轉台齒輪比 1:90,所以 400 步 = 1 度,90 度是 36000 步、一整圈 144000 步(實機送 :X400 刻度剛好走 1 度確認過)。
跟說明書不一樣的地方
- 不回顯:說明書畫面上的
:RXX0其實是終端機自己回顯加上回應;控制器只回X0,移動指令什麼都不回。 r只回一個字、沒有換行:程式如果等「一行」會永遠等不到,要直接讀一個字元。:RL前面多一個 L,而且沒接的 Y、Z 軸讀 1,所以正常是L001111。也因為這樣,停下來時r常回L而不是>,等它停要兩個都接受。- 旋轉台只有一個負向極限開關,移動台才有正負兩個。
UART 連線+手動指定型號
GPIB 儀器連上會自動問 *IDN? 辨識型號,但這台控制器不會回答。所以 ATS 這次加了「UART 手動指定型號」:連線後在工具列類型選單選「裝置:轉台 CNC3D-3X」,就會載入這台的指令集和腳本,送出列的行尾也自動切成 CR。選擇記在瀏覽器,下次連同一個 COM 埠會自動套用。
指令集照說明書整理成分類清單(移動、相對移動、讀取、停止、設定、手動模式),可以搜尋,點一下就填進輸入框。實機測出來的兩組速度也收進去了:
即時角度錶盤
指令集的 yaml 裡多了一段 position 設定:每 0.5 秒送一次即時指令 a,用正規表示式 X(-?\d+) 抓出步數,乘 0.0025 換成度數,畫在工具列的小錶盤上(轉動中變藍色)。這些查詢不會進收發紀錄,剛送過指令的 1 秒內也會先跳過,避免搶到別的指令的回應。
position: label: 轉台 query: a # 即時指令,轉動中也能讀 eol: none regex: 'X(-?\d+)' scale: 0.0025 # 1:90 → 400 步 = 1 度 unit: ° period: 0.5 wrap: 360
腳本:轉 90 度、掃 -90~+90 度
控制器的移動指令不回應,所以腳本要自己等它轉完。ATS 腳本的 @until 原本只能比對「等於」,這次加了正規表示式:
:SM63 # 極限保護開著 :SI500,2000,800 # 降速(原因見下面踩坑) :U36000 # 正轉 90 度 @until r ~ [L>] 60 # 每秒問 r,回 L 或 > 就往下,最多等 60 秒 :RX
轉動中控制器忙著發脈衝,偶爾來不及回 r,所以 @until 碰到沒回應不會中斷,而是繼續問到時限為止。
量 AoA 用的是「-90~+90 度每 15 度停 3 秒」:先轉到 -90 度(:X-36000),之後每次走 6000 步、停 3 秒,13 個點,最後回 0 度。開始前先把轉台對準正前方,跑一次「目前位置設成 0 度」(:SX0)。另外還有讀位置、反轉 90 度、回到 0 度、緊急停止等腳本,都可以在 ATS 裡直接改。
刻度校正
控制器的座標每次開機都歸零,跟轉台盤面上的刻度沒有關係。實機對照::X-400 時刻度約 276.6°、:X400 約 278.5°,步數變大刻度也變大,800 步剛好 2 度。所以錶盤做成可以點:點一下輸入「現在刻度的讀數」,之後就顯示刻度角度(0~360 度循環),旁邊小字保留控制器步數。控制器關電重開或用 :SX 改座標後要重新校正;輸入空白就取消。
實機踩坑:高速轉大角度會失步卡死
第一版腳本用控制器預設速度(高速 4000 PPS)直接 :X-36000 轉 -90 度,結果馬達發出「卡卡」聲、不轉,r 5 秒都沒回應,腳本逾時停下。之後不管送什麼都不動::RL 從 L001111 變成 L111111,關掉極限保護 :SM0 也沒用。
一開始以為是極限開關擋住,其實是失步:轉台負載加上 1:90 減速,馬達跟不上 4000 PPS 的脈衝,控制器就進入異常。處理方法:
- 先送
b緊急停止,然後關掉控制器電源重開,:RL回到L001111才正常。 - 降速:
:SI500,2000,800(初速 1.25 度/秒、高速 5 度/秒),正反轉 90 度都正常,90 度約 18 秒。中速:SI1000,3000,1000(90 度約 12.5 秒)也收進指令集,大角度還沒長時間驗證。 - 所有會轉動的腳本開頭都先送
:SM63(極限保護開著)和:SI500,2000,800,不依賴控制器開機時的預設速度。
另外提醒:插拔 RS-232 的 9 pin 接頭前先關控制器電源;如果是 12 軸版控制器,把指令開頭的冒號換成 @0~@3 選控制器,讀位置/是否在動分別用 a/c/d/e 和 r/s/t/u。





沒有留言:
張貼留言