本論文共分為五章,第一章旨在說明研究動機、目的,並且界定出研究的問題、研 究方法及步驟。第二章首先介紹弦波編碼器的基本解碼原理及輸出分析,再個別介紹粗 略解碼位置及精細解碼位置的各種解碼方法原理。第三章分別以數位信號處理器(DSP) 及現場可程式化閘陣列(FPGA)為基礎,實現第二章所介紹之解碼技巧,並且針對 ADC 取樣校準問題、弦波編碼器錯位問題提出適合的解決方法,最後分別以理論及實驗兩方 面比較不同解碼技巧之間的差異。第四章為串列式編碼器的低速應用,首先為低速回授 的估測法比較,試圖尋找最適合低速範圍的估測法,再比較不同控制器其低速控制之效 能差異,並將比較後所得最佳方案用於 CNC 機台上進行實際測試,比較傳統編碼器及 高解析度編碼器在控制效能差異,再以 19-bit 編碼器為基準比較兩者的控制效果。最後 第五章將對本文進行結論,並提出未來可供發展、應用及改善之方向。
第2章第二章 弦波編碼器解碼演算法
2.1 弦波編碼器
本節介紹弦波編碼器的基本背景、分析弦波編碼器的輸出,並且說明弦波編碼器的 解碼概要,解碼概念是將弦波編碼器的資訊分為兩個部份分別計算,最後再合成完整的 位置資訊。
2.1.1 弦波編碼器之介紹
近年來在伺服馬達控制系統中對於位置回授的解析度要求越來越高,有鑑於此,傳 統的編碼器(encoder)及解角器(resolver)逐漸被擁有更高解析度的弦波編碼器(sinusoidal encoder)所取代。弦波編碼器有別於傳統編碼器的工作原理,利用一對相差 90°、隨著轉 動角度而改變的正弦(sine)及餘弦(cosine)信號,可以提供更高解析度的位置資訊。
( )
( θ )
θ
×
=
×
=
P V
P V
c s
cos sin
(2.1)
P 是每 360°弦波編碼器所產生的弦波週期數。由於其特殊的輸出信號特性,需要不
同於以往的解讀方法,學者紛紛發展各式的解讀技巧,一般常見的有反正切函數運算 (direct arctangent computation) [1]、或是根據舊有的解角/數位轉換器(resolver-to-digital converter)所衍生出的追跡及濾波迴路(tracking and filtering loop) [1,2]、線性化技巧 (linearization) [3,4,5]或是內插法、查表法等等。在實現的方式上也可分為硬體實現及軟 體實現兩種方式,本章將分別介紹兩種適合不同實現方式的解碼技巧。2.1.2 弦波編碼器輸出分析
弦波編碼器的輸出如上所述是一對相差 90°的正弦/餘弦信號,將這兩信號分別置於
x 軸與 y 軸座標上,令 ( ) ( x
,y
=V c
,V s )
可以得到一圓,仔細分析圓形可以檢視弦波編碼器 經過 ADC 取樣之後信號是否受雜訊干擾。理論上應得到一圓心在原點的正圓形,如果 圓心不在原點上,表示輸入信號有 offset 的情形,如果不是正圓而是橢圓的話表示兩相 出入有 gain 值的差異。下圖 2-1 是弦波編碼器的實際輸出,使用的是 HPB 公司所生產 的 2048 PPR (period per revolution,即一圈為 2048 個週期)弦波編碼器,由圖得知弦波編 碼器經過取樣後的輸出圓心接近原點表示 offset 非常小,兩相 gain 值也是差距不大。-8000 -6000 -4000 -2000 0 2000 4000 6000 8000 -8000
-6000 -4000 -2000 0 2000 4000 6000 8000
圖 2-1 弦波編碼器實驗輸出分析圖
2.1.3 弦波編碼器解碼概要
弦波編碼器解碼結果可分成兩個部份,一為粗略解析度資訊(coarse resolution data),另一部分為精細解析度資訊(fine resolution data) [1]。粗糙解析度資訊類似原有光 學編碼器(optical encoder)的 QEP 信號,負責計算弦波經過的個數;精細解析度資訊則是 利用解角器特有的弦波輸出,在原本的信號中內插細分,使解析度提升,兩者相對關係 如下
0 1 2 3 4 5 6 0
0.5 1
Position(rad)
Coarse Position Output (A phase)
0 1 2 3 4 5 6
0 0.5 1
Position(rad)
Coarse Position Output (B phase)
0 1 2 3 4 5 6
0 0.5 1
Position(rad) Fine Position Output
圖 2-2 粗略位置與精細位置相對關係圖
如前一節所述,將輸出分別置於 x 座標及 y 座標得
( ) ( x , y = cos θ , sin θ )
,可做出一半 徑為 1 且圓心位於原點的圓,構想是以粗造解析度資訊計算所經過的象限數目,再加上 精細解析度資訊求出每個象限內的角度便可求出高解析度位置資訊。圖 2-3 弦波編碼器解碼資訊概念圖
上圖 2-3 是弦波編碼器的粗糙資訊與精細資訊組合圖,顯示在粗糙解析度與精細解
析度間有 2 位元重疊,重疊的原因是因為粗糙解析度計算的象限數目正巧與精細解析度 的前兩位元所表示的位置相同。弦波編碼器的解析度是由粗糙解析度加上精細解析度所 得,粗糙解析度限制主要是在於弦波編碼器硬體所限制,例如 2048 PPR 的弦波編碼器 就可提供
2048 × 4 = 8192
的粗糙解析度;精細解析度則是受到硬體 ADC 解析度及不同的 精細位置解碼技巧所共同決定,例如以 12 位元的 ADC 取樣最多可得 12 位元的解析度 再加上解碼技巧的不同有所減少。以一個 2048 PPR 的弦波編碼器搭配 12 位元的 ADC 最高可得2048×4×212
÷4=223
的解析度,其中除 4 就是扣除掉精細解析度與粗糙解析度 重疊的部份,但實際上受到硬體電路雜訊、ADC 取樣精確度及解碼技巧不同的影響,解析度可能低於理論值。
Sinusoidal Encoder
Preprocessing Circuit
Preprocessing Circuit
Coarse Posiiton
Fine Position
sin cos
圖 2-4 弦波編碼器解碼方塊圖
上圖 2-4 是弦波編碼器的解碼方塊圖,粗略解碼位置與精細解碼位置都會先經過一 些前處理電路,再進入解碼的步驟,而前處理電路的好壞會嚴重造成電路雜訊問題,直 接影響到弦波編碼器的解析度。
2.2 粗略位置解碼
粗略解碼位置的基本概念是用原本的 QEP 計數方法來計算目前位置,所以必須將 原本的弦波波形轉成數位方波,最簡單的方法是將原本的方波經過一個比較器之後轉換 成數位方波,如下圖 2-5 所示
0 2 4 6 8 10 12 -1
-0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Position(rad) Sinusoidal Encoder Output
0 2 4 6 8 10 12
0 0.5 1
Position(rad) Coarse Position Output (A phase)
0 2 4 6 8 10 12
0 0.5 1
Position(rad) Coarse Position Output (B phase)
圖 2-5 編碼器轉換成 QEP 信號圖
在比較器的兩端分別放入兩相弦波中的一個信號,另一端則是放零電位作為基準,
所以這個基準零電位非常重要,若是零電位漂移,會造成粗略解碼位置與精細解碼位置 的資料無法重疊,產生錯位的問題。以一個 2048 PPR 的弦波編碼器來可有
2
13
8192 4
2048× = = 的解析度,意即 13-bit 的解析度。
2.3 精細位置解碼
在這節裡介紹了兩種不同的精細位置解碼方法,一種是依傳統解角/數位轉換器所使 用的線性化解碼法,另一種則是利用座標旋轉計算反切函數的 CODRIC 演算法,並且提 出一個適用於弦波編碼器的 CORDIC 輸入向量對應方法,稱之為 QEP-CORDIC。
2.3.1 線性化法解碼 [3]
線性化解碼法的基本概念是把兩相的弦波經過適當的數學運算之後轉換成一個隨 著轉動角度而增加的電壓信號,並且透過特別的補償方法讓輸出更接近完美的線性波 形。這個方法的特點在於不需要額外的記憶體來建表查詢,但是計算比較複雜,且精確 度會隨著補償函數的不同而誤差也會不同。
首先定義一個類似線性化的三角波形
V o ( ) θ
,將兩相信號取絕對值後相減可以得到( ) θ = sin θ − cos θ
V o (2.2)
下圖是兩相輸出與類線性化輸出
V o ( ) θ
的相對關係圖0 1 2 3 4 5 6
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Position(rad)
Relationship Between V
oand Input Value
Vo sin cos
圖 2-6 兩相輸入及線性輸出關係圖
接下來我們定義完美三角波
PT ( ) θ
的方程式( ) θ
θ π
4sin sin 1+− 1
−
=
PT (2.3)
0 1 2 3 4 5 6 -0.05
-0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05
Residual Error Between V
oand Perfect Triangular Wave
Position(rad)
圖 2-7 類線性化輸出誤差圖
( ) θ V ( ) θ PT ( ) θ
E
=o
−(2.4)
上圖 2-7 是
V o ( ) θ
與完美三角波PT ( ) θ
的誤差圖E ( ) θ
,可以看出最大誤差約是±4.2%的弦波振幅,以 2048 PPR 的弦波編碼器換算,誤差約是在
(
×)
°±
=
±
× 0.042 1.8457 10
−3
4/ 2048 /
360 左右,換算精度約是 17-bit 左右,但這是在不考
慮 ADC 解析度及雜訊干擾下所做的理想推論值。
接下來我們補償類線性化與完美三角波之間的誤差,首先定義補償過後的類線性化 輸出電壓信號
V oL ( ) θ
,補償函數C ( ) θ
,可得下補償後的輸出式( ) θ V ( ) ( ) θ C θ PT ( ) θ
V oL
=o
+ ≈(2.5)
我們的目的在於找到ㄧ個適當的函式
C ( ) θ
使其盡可能的接近誤差E ( ) θ
,假設第一 種補償函數C 1 ( ) θ
為( ) θ sin θ cos θ ( sin θ cos θ )
1 = A × × × −
C (2.6)
則補償過後的線性化輸出誤差函數為
e ( ) θ
,可得( ) θ V ( ) θ PT ( ) θ V ( ) ( ) θ C θ PT ( ) θ
e
=oL
− =o
+ −(2.7)
將
V o ( ) θ
、PT ( ) θ
與C 1 ( ) θ
代入e ( ) θ
中可求出誤差與位置角度的關係,但首先必須先調整補償函數
C 1 ( ) θ
中的參數 A。下圖 2-8 是補償函數C 1 ( ) θ
在不同參數 A 的情況下與補 償誤差函數e ( ) θ
的最大誤差圖。在此我們是使補償誤差函數的最大誤差值最小化,而不 是使累積誤差最小化,此目的在於每個位置都可以達到最小的誤差平衡。圖中顯示在2233 .
= 0
A
的情況下可以使最大誤差最小化,此時的最大誤差值為±0.2714%,換算為 2048 PPR 的弦波編碼器誤差約是360/2048/4×±0.002714=±(
1.1927×10−4 )
°左右,換算精度約是 21-bit 左右,這一樣是不考慮到 ADC 解析度下所做的理想推論值。
0 0.5 1 1.5 2 2.5 3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
Maximum Error Between C1 and E
A
Er ro r
X: 0.2233 Y: 0.002714
圖 2-8 不同參數 A 下的補償函數最大誤差圖
0 1 2 3 4 5 6
0 0.5 1 1.5 2 2.5 3 0
0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45
Maximum Error Between C2 and E
B
Er ro r
X: 0.2798 Y: 0.0002414
圖 2-10 不同參數 B 下的補償函數最大誤差圖
0 1 2 3 4 5 6
-3 -2 -1 0 1 2
3 x 10
-4Residual Error Between C
2and E
Position(rad)
圖 2-11 在最佳參數 B=0.2798 下補償函數誤差圖
上圖顯示一樣在一圈中有 8 個位置會出現最大誤差,分別是在
m
π± 0 . 465 rad
與rad
m
0.465 21⎟ ±
⎠
⎜ ⎞
⎝⎛ +
π
的地方(m 為整數)。整合V o ( ) θ
、V oL ( ) θ
、C 2 ( ) θ
與參數 B 後得到第 二種補償後線性化輸出式( ) θ θ θ θ θ (
sinθ
cosθ )
Linearizae output Before Modify
Position(rad)
Linearizae output After Modify
Position(rad)
接下來討論另一種有別於前一節解碼技巧,CORDIC 全名為 coordinate rotation digital computer,中文稱為座標旋轉數位演算法,顧名思義這是一個特別適用於數位系 統上實現的座標旋轉演算法。Volder 在 1959 年提出 CORDIC 演算法的概念,雖然這個
想法不是個創舉,但是在計算一般除法、三角函數及指數函數上都有著相當大的好處,
當中的
∏ −
加入參數 m 後,其數學運算更可擴大分為圓周(circular)函數、線性(linear)函數與雙曲線 (hyperbolic)函數三種
i
除此之外,還可依向量旋轉的方式分為旋轉模式(rotation mode)及向量模式
(vectoring mode)兩種。旋轉模式是將初始向量旋轉一個我們所欲旋轉的角度
θ
後,去求 得新的向量位置;而向量模式則是將初始向量旋轉到 x 軸上,可以計算出初始向量與 x1
Original CORDIC Output
Position(rad)
Original CORDIC Output
Position(rad)
Original CORDIC Output
Position(rad)
Original CORDIC Output
Position(rad)
的影響將遞迴輸入多向右位移一位元,也就是說,當遞迴次數超過原始輸入的位元長度
Residual Error Compared with Recursive times
Recursive Times
Error
Maximum Error Compared with Recursive times
Recursive Times
Error
向量的位元長度限制,8 位元長度的輸入向量最多只能進行 8 次遞迴運算,而輸入向量 的位元長度則是受到 ADC 的解析度所決定,所以一個 8-bit 的 ADC 最多只能提供 8 位 元的輸入向量位元長度,最多就只能提供 CORDIC 做 8 次的遞迴運算,故可以增加的解 析度大約就是 8-bit,並且不可能超過 8-bit。
2.3.3 QEP-CORDIC 演算法
從圖 2-15 中得知原始 CORDIC 的輸出週期與線性化輸出一樣是
π
,而且範圍在~ 2 2
π
−
π
之間,不適合與粗略位置資訊做結合,因此在這提出一個專用於弦波編碼器解碼的修正法則。首先釐清目前的兩個問題及想要達到的目標,一是要把原本週期是
π
的 輸出轉為週期為2
π
輸出;二是把原本輸出的範圍由~ 2 2
π
−
π
轉為0 ~ 1
之間。就第一個問題而言,本文提出一個輸入信號象限對應轉換的方法,將所有的輸入信 號轉換到相對應的第一象限位置上,如此一來便可使輸出周期變為
2
π
,而輸出範圍則變為0~
π
2之間。
表 2-3 象限對應對照表
原初始位置 修正後初始位置 修正後起始軸 第一象限
( x 0
, y0 ) ( x 0
, y0 )
+x 第二象限( x 0
, y0 ) ( y 0
, x−0 )
+y原初始位置 修正後初始位置 修正後起始軸 第一象限