步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)換為角位移或直線運(yùn)動(dòng)的執(zhí)行設(shè)備。在非超載的情況下,電機(jī)轉(zhuǎn)速和停止位置只取決于脈沖信號(hào)的頻率和脈沖數(shù),而不受負(fù)載變化的影響,因此步進(jìn)電機(jī)廣泛應(yīng)用于精密控制場(chǎng)合[1]。
在基于圖像處理評(píng)價(jià)函數(shù)的調(diào)焦系統(tǒng)中,常用的調(diào)焦策略包括斐波那契搜索法和爬山搜索法,其中又以爬山搜索法應(yīng)用最為廣泛[2]。根據(jù)爬山搜索的原理,在開始搜索時(shí),先復(fù)位調(diào)焦鏡頭到起始搜索位置,在搜索焦點(diǎn)的過程中,要防止由于圖像噪聲等干擾造成程序判斷錯(cuò)誤,導(dǎo)致調(diào)焦鏡頭越出調(diào)焦范圍邊界。
為了適應(yīng)這種控制需求,對(duì)通用步進(jìn)電機(jī)控制器進(jìn)行了改進(jìn),使其在具有自動(dòng)和手動(dòng)控制功能的同時(shí),引入限位信號(hào)反饋控制。電機(jī)控制器使用硬件描述語言(HDL)編寫,而限位信號(hào)則由位置感應(yīng)電路中的光電開關(guān)器件自動(dòng)反饋。
1 步進(jìn)電機(jī)驅(qū)動(dòng)原理
步進(jìn)電機(jī)與直流電機(jī)的驅(qū)動(dòng)方式不同,它需要邏輯控制器與功率驅(qū)動(dòng)電路配合使用。具有位置感應(yīng)電路的步進(jìn)電機(jī)驅(qū)動(dòng)原理圖如圖1所示。
電機(jī)控制器接受指令單元的控制指令,同時(shí)檢測(cè)位置感應(yīng)電路反饋的限位信號(hào),然后向功率驅(qū)動(dòng)單元傳遞驅(qū)動(dòng)邏輯,功率驅(qū)動(dòng)單元轉(zhuǎn)換這些驅(qū)動(dòng)邏輯,并輸出功率脈沖驅(qū)動(dòng)步進(jìn)電機(jī)運(yùn)行。
2 步進(jìn)電機(jī)控制器
通用步進(jìn)電機(jī)控制器主要用于輸出驅(qū)動(dòng)邏輯信號(hào),控制步進(jìn)電機(jī)的運(yùn)行方向、速度、步數(shù)和停止。本文的步進(jìn)電機(jī)控制器要求具有手動(dòng)和自動(dòng)控制功能,同時(shí)加入復(fù)位和限位處理模塊,控制目標(biāo)為一種二相四線制步進(jìn)電機(jī)。加入限位信號(hào)(LIMIT)控制功能的控制器頂層信號(hào)如圖2所示。
圖2中DATA為電機(jī)自動(dòng)運(yùn)行的步數(shù),HOLD控制電機(jī)停止,MANUAL為手動(dòng)觸發(fā)信號(hào),DIRECTION用于控制運(yùn)行方向,RESET_TRI為爬山搜索復(fù)位信號(hào),四路OUT信號(hào)為步進(jìn)電機(jī)的輸出邏輯,用于四線制步進(jìn)電機(jī)的驅(qū)動(dòng)控制。通過控制輸出邏輯的頻率DRI_CLK可以控制步進(jìn)電機(jī)運(yùn)行速度,而輸出邏輯的轉(zhuǎn)換方向則控制了步進(jìn)電機(jī)的運(yùn)行方向[3]。
2.1 模塊實(shí)現(xiàn)
步進(jìn)電機(jī)在具有一定轉(zhuǎn)換方向的驅(qū)動(dòng)脈沖下運(yùn)行,據(jù)此將電機(jī)控制器劃分為方向控制和邏輯輸出兩個(gè)部分。限位信號(hào)用于復(fù)位和限定運(yùn)行方向,因此在方向控制部分同時(shí)處理限位;在邏輯輸出部分,按照控制需求再次劃分為復(fù)位、自動(dòng)和手動(dòng)三個(gè)邏輯處理模塊,在邏輯輸出的實(shí)現(xiàn)方式上,復(fù)位、自動(dòng)和手動(dòng)通過一定的優(yōu)先級(jí)邏輯,通過發(fā)送電機(jī)占用請(qǐng)求復(fù)用邏輯輸出模塊。圖3為控制器模塊劃分示意圖。
(1)爬山復(fù)位
爬山復(fù)位模塊用于復(fù)位調(diào)焦鏡頭到爬山搜索的起始位置。電機(jī)控制器在捕獲到指令單元的復(fù)位信號(hào)后,按預(yù)定的運(yùn)行方向產(chǎn)生驅(qū)動(dòng)邏輯,直至控制器收到限位信號(hào)LIMIT的有效反饋后停止。復(fù)位過程中,自動(dòng)和手動(dòng)請(qǐng)求無效。
(2)自動(dòng)控制
步進(jìn)電機(jī)控制器的步數(shù)數(shù)據(jù)接收端DATA在接收到指令單元傳入的運(yùn)行步數(shù)后,首先檢查當(dāng)前是否有其他電機(jī)占用請(qǐng)求,如果電機(jī)空閑,就按照同時(shí)傳入的方向信號(hào)輸出指定步數(shù)的驅(qū)動(dòng)邏輯;否則忽略本次自動(dòng)控制請(qǐng)求。
(3)手動(dòng)微調(diào)
手動(dòng)微調(diào)在控制器中作為一種輔助控制手段,允許人工微調(diào)調(diào)焦鏡頭的位置。每啟動(dòng)一次手動(dòng)微調(diào),電機(jī)就按照設(shè)定的運(yùn)行方向,運(yùn)行一段固定的微調(diào)距離。控制器在捕獲到手動(dòng)輸入信號(hào)后,同時(shí)讀取手動(dòng)運(yùn)行方向DIRECTION的設(shè)置值,如果當(dāng)前電機(jī)空閑,則按照手動(dòng)輸入的方向信號(hào)輸出固定步數(shù)的驅(qū)動(dòng)邏輯;否則手動(dòng)請(qǐng)求無效。
(4)方向和限位處理
當(dāng)控制器運(yùn)行在手動(dòng)微調(diào)或自動(dòng)控制時(shí),需要防止調(diào)焦鏡頭越出邊界。方向模塊在收到有效的限位信號(hào)LIMIT后,對(duì)正在輸出的方向信號(hào)取反,控制步進(jìn)電機(jī)反方向運(yùn)行,實(shí)現(xiàn)限位要求。當(dāng)控制器沒有收到限位信號(hào)反饋時(shí),則讀取DIRECTION端口的方向,傳遞給邏輯輸出模塊,用于控制驅(qū)動(dòng)邏輯的轉(zhuǎn)換方向。
(5)邏輯輸出
邏輯輸出模塊內(nèi)置邏輯發(fā)生器,邏輯發(fā)生器按照電機(jī)請(qǐng)求和方向信號(hào)輸出驅(qū)動(dòng)邏輯。方向信號(hào)用于控制驅(qū)動(dòng)邏輯的轉(zhuǎn)換方向;自動(dòng)和手動(dòng)模塊的核心是計(jì)數(shù)器,電機(jī)請(qǐng)求信號(hào)是步數(shù)計(jì)數(shù)器的輸出,因此電機(jī)請(qǐng)求信號(hào)的有效時(shí)間表示允許邏輯發(fā)生器運(yùn)行的時(shí)鐘周期數(shù)。
2.2 邏輯發(fā)生器
邏輯發(fā)生器的輸出邏輯與步進(jìn)電機(jī)的驅(qū)動(dòng)方式密切相關(guān)。本文控制目標(biāo)的驅(qū)動(dòng)方式為二相雙四拍式。標(biāo)記步進(jìn)電機(jī)的兩相繞組為:A(+)、B(-)、C(+)、D(-),AB為一相,CD為另一相,則二相雙四拍的驅(qū)動(dòng)方式為AC-AD-BD-BC[4]。二相雙四拍的驅(qū)動(dòng)方式是指電機(jī)輸入線的通電方式,也即功率驅(qū)動(dòng)單元的輸出通電脈沖,而邏輯發(fā)生器的輸出還要考慮功率驅(qū)動(dòng)單元的轉(zhuǎn)換方式。
功率驅(qū)動(dòng)單元可以使用MOS管等分立元件或?qū)S眉呻娐穼?shí)現(xiàn)[5]。為了減少電路規(guī)模,采用專用驅(qū)動(dòng)芯片BA6845FS完成功率轉(zhuǎn)換。該芯片具有四路電平轉(zhuǎn)換,支持二相雙四拍驅(qū)動(dòng)方式;輸出飽和電壓低、內(nèi)置節(jié)電和過熱保護(hù)電路,可以降低電路功耗,同時(shí)提高電路可靠性。其真值表如表1所示[6]。從表1中可以看出,當(dāng)控制器沒有接到電機(jī)運(yùn)行指令時(shí),可以設(shè)置邏輯發(fā)生器的輸出B/D為0,使步進(jìn)電機(jī)的繞組處于開路狀態(tài),防止電機(jī)發(fā)熱。
根據(jù)表1的功率轉(zhuǎn)換方式,可以得到邏輯發(fā)生器的輸出邏輯與二相雙四拍繞組通電方式的對(duì)應(yīng)轉(zhuǎn)換關(guān)系,如表2所示。表2中1代表高電平,磁極繞組通電;0代表低電平,磁極繞組不通電。
表2中,繞組任意一次通電方式間的變化(1-2、2-3、3-4、4-1),步進(jìn)電機(jī)都會(huì)轉(zhuǎn)動(dòng)一個(gè)步距角,即移動(dòng)一步,所以可以通過控制驅(qū)動(dòng)邏輯轉(zhuǎn)換的次數(shù)來控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的步數(shù)。邏輯發(fā)生器按照脈沖計(jì)數(shù)的順序,從1到4循環(huán)輸出驅(qū)動(dòng)邏輯時(shí),繞組按照二相雙四拍的方式通電,驅(qū)動(dòng)步進(jìn)電機(jī)正向轉(zhuǎn)動(dòng),反之實(shí)現(xiàn)反向轉(zhuǎn)動(dòng)。
按照表2中的邏輯輸出電平即可設(shè)計(jì)邏輯發(fā)生器。其VerilogHDL代碼如下:
always @(negedge clk or negedge reset)
begin
if(!reset) q = 4’b0000;#p#分頁標(biāo)題#e#
else if(!hold || !run_en) q = 4’b0000;
//輸出0可以使功率芯片輸出開路狀態(tài),
//防止電機(jī)發(fā)熱
else begin//電機(jī)請(qǐng)求有效
if(!direc_i)//反方向
case (q) //表2中的邏輯輸出
4'b0111 : q = 4'b1111;
4'b1111 : q = 4'b1101;
4'b1101 : q = 4'b0101;
4'b0101 : q = 4'b0111;
default : q = 4'b0101;
endcase
else if(direc_i)//正方向
case (q)
4'b0111 : q = 4'b0101;
4'b0101 : q = 4'b1101;
4'b1101 : q = 4'b1111;
4'b1111 : q = 4'b0111;
default : q = 4'b0101;
endcase
end
end
3 仿真與實(shí)驗(yàn)
為了驗(yàn)證所設(shè)計(jì)的步進(jìn)電機(jī)控制器是否能正常工作,使用EDA工具和Nios II嵌入式系統(tǒng)對(duì)控制器進(jìn)行功能仿真和實(shí)驗(yàn)驗(yàn)證。
3.1 功能仿真
使用測(cè)試臺(tái)(testbench)程序在Modelsim中對(duì)步進(jìn)電機(jī)控制器進(jìn)行功能仿真。仿真時(shí)鐘周期為100 ns,仿真結(jié)果如圖4所示。測(cè)試臺(tái)程序在預(yù)定的時(shí)間點(diǎn)自動(dòng)修改輸入端口寄存器的值,并監(jiān)視邏輯發(fā)生器的輸出。在評(píng)價(jià)功能仿真輸出結(jié)果時(shí),主要查看自動(dòng)、手動(dòng)和復(fù)位3個(gè)模塊的仿真輸出邏輯是否按測(cè)試臺(tái)程序要求轉(zhuǎn)換了預(yù)定的次數(shù),同時(shí)檢查限位和停止功能是否有效。
圖4中,測(cè)試臺(tái)首先設(shè)置爬山復(fù)位(reset_tri)為有效,邏輯發(fā)生器開始輸出驅(qū)動(dòng)邏輯,直到限位信號(hào)(limit)下降沿到來,A/B/C/D恢復(fù)為0;接著置手動(dòng)觸發(fā)信號(hào)(manual)有效,邏輯發(fā)生器在輸出手動(dòng)控制模塊預(yù)置的7次驅(qū)動(dòng)邏輯轉(zhuǎn)換后,A/B/C/D恢復(fù)為0;然后向自動(dòng)步數(shù)(data)寫入數(shù)據(jù)’00001001’,邏輯發(fā)生器輸出了9次邏輯轉(zhuǎn)換;在手動(dòng)和自動(dòng)控制過程中,測(cè)試臺(tái)在邏輯輸出過程中插入了有效的限位信號(hào)。由圖4可以看出,在1600 ns和3 μs 處,驅(qū)動(dòng)邏輯的轉(zhuǎn)換方向發(fā)生了變化;最后,向data寫入數(shù)據(jù)’00000100’,驅(qū)動(dòng)邏輯重新開始輸出,輸出過程中遇到停止信號(hào)(hold)有效,強(qiáng)制輸出A/B/C/D為0。仿真結(jié)果表明所設(shè)計(jì)的步進(jìn)電機(jī)控制器的功能正確。
3.2 實(shí)驗(yàn)驗(yàn)證
步進(jìn)電機(jī)控制器的實(shí)驗(yàn)驗(yàn)證電路如圖5所示。嵌入Nios II處理器的片上可編程系統(tǒng)(SoPC)在ALTERA DE2開發(fā)板的FPGA中建立,同時(shí)設(shè)計(jì)了位置感應(yīng)電路和功率驅(qū)動(dòng)電路,用來驗(yàn)證復(fù)位和限位功能以及驅(qū)動(dòng)步進(jìn)電機(jī)。
位置感應(yīng)電路如圖6所示。采用光電開關(guān)(optoiso)作為限位信號(hào)傳感器,當(dāng)調(diào)焦鏡頭在設(shè)定區(qū)域內(nèi)運(yùn)行時(shí),限位傳感器輸出高電平信號(hào),到達(dá)邊界時(shí)則輸出低電平信號(hào)。光電開關(guān)輸出的電平信號(hào)經(jīng)存儲(chǔ)后,輸出限位信號(hào)LIMIT。
步進(jìn)電機(jī)的功率驅(qū)動(dòng)電路如圖7所示,圖中A/B/C/D是步進(jìn)電機(jī)控制器輸出的邏輯電平信號(hào),經(jīng)存儲(chǔ)后送入BA6845FS進(jìn)行功率轉(zhuǎn)換,而功率芯片的輸出端口直接與二相四線制步進(jìn)電機(jī)的繞組控制線相連。
完成功率電路和位置反饋電路制作后,把它們連接在DE2開發(fā)板上。將步進(jìn)電機(jī)控制器與Avalon總線信號(hào)連接后添加到Nios II系統(tǒng)集成工具SoPC Builder中,然后添加其他Nios II系統(tǒng)模塊構(gòu)成一個(gè)SoPC并下載到FPGA。最后編寫面向Nios II處理器的步進(jìn)電機(jī)控制程序,其中手動(dòng)控制采用按鍵中斷方式。通過程序向步進(jìn)電機(jī)發(fā)送自動(dòng)和手動(dòng)以及復(fù)位控制命令,驗(yàn)證步進(jìn)電機(jī)的運(yùn)行狀況。實(shí)驗(yàn)結(jié)果表明,步進(jìn)電機(jī)可以響應(yīng)自動(dòng)控制和手動(dòng)微調(diào)請(qǐng)求,同時(shí)有效的限位信號(hào)可以復(fù)位調(diào)焦鏡頭到達(dá)爬山起始位置和限定鏡頭的移動(dòng)范圍。
參考文獻(xiàn)
[1] 郭麗霞.基于AMIS30522的步進(jìn)電機(jī)控制器設(shè)計(jì)及實(shí)現(xiàn)[J].自動(dòng)化與儀表,2009(8):14-17.
[2] 程永強(qiáng),黃英男,謝克明.一種攝像頭自動(dòng)聚焦方法及硬件實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2009,(1):28-31.
[3] 張文愛,李逢磊,程永強(qiáng).基于FPGA的步進(jìn)電機(jī)驅(qū)動(dòng)及自動(dòng)聚焦的實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2008(5):33.
[4] 王美川,王紫婷.基于FPGA控制的步進(jìn)電機(jī)驅(qū)動(dòng)設(shè)計(jì)[J]. 電子測(cè)量技術(shù),2008,31(6):184-187.
[5] 蔚永強(qiáng),張秦嶺,郭宏.一種低成本的新型步進(jìn)電機(jī)驅(qū)動(dòng)器的研制[J].微計(jì)算機(jī)信息,2007,23(10):95-97.
[6] Rohm CO.,LTD.Stepping motor driver BA6845FS[EB/OL].2005[2010-09-28].http://www.rohm.com.cn/.
轉(zhuǎn)載請(qǐng)注明出處。