2026年11月6日 星期五

A Stepper Motor Turntable over RS-232 on the ATS Console: Live Angle Dial and Angle Sweep Scripts | 用 ATS 操作台控制步進馬達轉台:UART 指定型號、即時角度錶盤與掃角腳本

量 UWB 的 AoA(到達角)要把待測物放在轉台上,一格一格轉角度量。我們手邊的轉台是步進馬達加一台 3 軸微步進馬達驅動控制器(開機訊息 CNC3D-3X),走 RS-232。以前都是開超級終端機手打 :U36000,這次把它接進 ATS 網頁操作台:選好型號就有指令集、工具列即時顯示角度,掃角度變成一個腳本按一下就跑完。

說明:本文截圖是在開發機上用模擬轉台拍的(回應格式照實機),數值只是示意;接線、速度和踩坑紀錄都是實機(筆電 COM27)測出來的。

控制器指令速查

RS-232 9600 8-N-1,指令以冒號開頭、數字直接接在後面、結尾送 CR。數字一律是「步」。

指令意思實機回應
:X36000X 軸轉到絕對座標 36000 步(不回)
:U-400X 軸相對轉 -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 的脈衝,控制器就進入異常。處理方法:

  1. 先送 b 緊急停止,然後關掉控制器電源重開,:RL 回到 L001111 才正常。
  2. 降速::SI500,2000,800(初速 1.25 度/秒、高速 5 度/秒),正反轉 90 度都正常,90 度約 18 秒。中速 :SI1000,3000,1000(90 度約 12.5 秒)也收進指令集,大角度還沒長時間驗證。
  3. 所有會轉動的腳本開頭都先送 :SM63(極限保護開著)和 :SI500,2000,800,不依賴控制器開機時的預設速度。

另外提醒:插拔 RS-232 的 9 pin 接頭前先關控制器電源;如果是 12 軸版控制器,把指令開頭的冒號換成 @0~@3 選控制器,讀位置/是否在動分別用 a/c/d/e 和 r/s/t/u。

沒有留言:

張貼留言