以上章節將圖5.2中每個功能方塊圖之數位實現一一介紹,並針對期望解析度和容 忍誤差範圍做一分析和設計,接著要將整體系統在DSP中實現流程和程式架構做一完 整說明。DSP程式中的工作主要是在各個中斷服務常式中執行,中斷的配置如圖5.14,
共有三個以計時器觸發的定時中斷c_int1()、c_int2()和c_int8(),以及一個外部觸發的不 定時中斷c_int5()。透過RS-232與電腦之間的資料傳遞是在背景程式下進行,當DSP接 受資料時會不定時的觸發中斷,而將資料傳送至電腦。
兩個頻率為20kHz的定時中斷的其中之ㄧ為c_int1(),負責讀取類比數位訊號的轉 換結果,其是以同步取樣(synchronous sampling)方式讀取相電流回授訊號,同步取樣可 以取得電流平均值且可以避免開關切換之雜訊;而另一個20kHz的定時中斷服務常式為 c_int2(),負責無感測V/f驅動、高效率控制和輸出產生PWM開關控制訊號等主要程式部 分;第三個為2000 Hz的定時中斷則執行速度估測及轉子鎖死保護機制。
中斷副程式中的流程圖如圖5.15,一開始的Timer-ISR先將系統重致,清除中斷其 標接著啟動計時器,利用計時器啟動三個周期中斷c_int1()、c_int2()和c_int8(),c_int1() 的ADC中斷回授電流,並將此電流訊號分別送至c_int2()內計算功率因數角度和c_int8()
內計算馬達轉速。主要程式均安置在c_int2()內,一開始利用定位方式將馬達固定於某 個已知位置區間,接著使用開迴路V/f控制將馬達啟動,藉由斜坡轉速命令分別產生最 佳電壓命令和最佳相角差命令,電壓命令也與回授之電流計算產生實際相角差,並與 相角命令完成高效率控制器,其中高效率控制器會根據不同轉速命令自動修正高效率 控制器之增益以避免第四章提過的電流變形問題產生,而根據估測之轉速會決定進入 閉迴路控制之時機,在尚未進入閉迴路控制前均使用開迴路V/f啟動控制。結合開迴路 V/f命令與閉迴路修正電壓命令輸出電壓命令,若是系統準備完畢則將電壓輸出命令限 制在範圍內並輸出PWM訊號,若尚未準備完畢則不輸出PWM訊號。
圖5.16則是對於圖5.15中紅色虛線內方塊,也就是本文實現重點較詳細之流程圖,
可以看到流程圖最開始偵測電壓電流值,並產生圖5.8之Sv、Si訊號以及相對應之上數 器,利用Sv、Si訊號產生改變時記錄上數器之值並可計算出相角差,接著相角差誤差 送入高效率控制器,代控制器補償完畢則回到偵測電壓電流。
Background Process Communication Function
ISR c_int8() Rotor Speed Estimation
Locked Protection
ISR c_int5() Receive RS232 Package
Periodic Interrupt
(2 kHz) Aperiodic Interrupt
ISR c_int1() A/D Converter External Signal Sampling
Periodic Interrupt (20 kHz)
ISR c_int2()
Ramping speed command Optimum V and phi look-up table
Power Factor Control PWM Synchronization
Periodic Interrupt (20 kHz)
Align
Phase dif f erence detecting
圖5.14 DSP程式的中斷配置
c_int1
Current signal feedback c_int2
Align
Ramping speed command
Timer-ISR
Clear interrupt Flags
Reset watchdog timer
Optimum voltage
command Phi detecting
c_int8
High efficiency controller Optimum
phi command
Speed estimation
Speed>150RPM?
yes
Voltage command output
Servo ready?
yes
no
PWM limitation
PWM output
RET
Disable PWM output
*CMPR1=0
*CMPR2=0
*CMPR3=0
圖5.15 系統整體架構程式流程圖
Sampling i(k) Sampling v(k)
v(k)>5? i(k)>5?
yes no
v(k)<-5?
yes no
Sv(k)=1 Sv(k)=0
v(k-1)=v(k)? yes
cnt(k)++
no cnt_max(k)=cnt(k)
i(k)<-5?
no no
yes yes
Iv(k)=0 Iv(k)=1
v(k-1)=v(k)?
no cnt_phi(k)=cnt(k)
phi(n)=cnt_phi(k)
‧180/cnt_max(k)
phi_err(n)=phi*(n)-phi(n)
Kao(n)=a0‧phi_err(n) Ka1(n)=a1‧phi_err(n-1) Kb1(n)=(-b1)‧Klead(n-1)
Kx(n)=Ka1(n)+ Kao(n) Klead(n) = Kx(n)+Kb1(n)
KI(n)=KI_dig‧Klead(n) Kp(n) = Kp_dig‧Klead(n)
KI_out(n)= KI(n)+ KI(n-1) KpI(n) = Kp(n) +KI(n)
圖5.16 相角偵測與高效率無感測V/f控制程式流程圖