一種直接採用計算機串行口控制步進電機的新方法

步進電機在數控機牀、醫療器械、儀器儀表等自動或半自動設備中獲得了普遍應用。用計算機控制步進電機的一般做法是採用步進控制卡,系統構成如圖1所示。其中Pulse、Dir分別爲控制電機的轉動步數和旋轉方向的信號;CWL(Clock Wise Limit)、CCWL(Counter Clock Wise Limit)分別爲電機順、逆時針旋轉的限位信號;ORG爲定位信號。編程

    這種方法不只成本較高,並且不便於操做。在計算機擴展槽上安裝控制卡,必需打開機箱才能操做,並且在小型平板電腦和嵌入式電腦中根本沒有安裝控制卡的空間和擴展槽。將計算機串行口二次開發,用於控制步進電機,代替控制卡的做用,具備成本低、操做簡單、兼容性好等優勢。異步


圖1 步進電機控制系統通常結構函數

    1、RS232串行口及編程性能

    計算機串行接口採用RS232標準:規定邏輯1的電平爲-3~-15V,邏輯0的電平爲+3~+15V,經常使用的信號有8個(接口爲DB9M插座時,引腳號如表1所示),其中RXD、TXD爲收、發數據,可與RS232串行口設備直接進行通信,RTS、DTR、CD、DSR、CTS、BELL爲控制與檢測MODEM的信號,在通信過程當中起聯絡與控制做用。數據格式有五、六、七、8位幾種,1位起始位(邏輯0),一、1.五、或2位中止位 (邏輯1),能夠選擇奇校驗、偶校驗和無校驗,經常使用波特率爲2400、4800、7200、9600bps等。串行口編程方法主要有三種:硬件編程法、文件操做法、串口控件法。ui

表1 RS232接口各引腳定義
 操作系統

    一、硬件編程法設計

    直接使用端口的輸入、輸出(I/O)函數對串行口的控制電路進行編程。適用於DOS及Windows平臺 (Windows Me之前的各版本),但在基於NT技術構建的操做系統(Windows NT、Windows 2000、Windows XP等)中因不容許用戶程序直接操做硬件而不適用。經常使用的端口輸入、輸出函數(指令)有:彙編語言的IN、OUT指令及軟中斷調用,C語言的inport()、outport()、inportb()、outportb(),C++的_inp()、_outp()等。計算機串行口採用Intel 8250異步串行通信組件構成,COM一、COM二、COM三、COM4的基地址分別爲16#3F8(16進制數3F8,表示法下同)、16#2F八、16#3E八、16#2E8,波特率因子 (DR)計算方法爲:DR=1.8432×1000000/16B,8250編程。接口

    二、文件操做法資源

    文件操做法是將串行口做爲系統的一個文件來處理,經過對這個文件的讀、寫操做引起串口對數據進行收、發動做。這種方法在DOS、Windows、Windows NT、Windows2000及Windows XP等平臺下都能正常工做。例如在BASIC語言中可用語句:OPEN "COM1,1200,n,8,1,rs,cs,ds,cd"AS #1將串行口COM1做爲文件#1進行讀寫操做。在VC++中,可用CreateFile()、BuildCommDCB()、Read()、Write()、EscapeCOMMFunction()等函數將串行口做爲文件進行操做。開發

    三、串口控件法

    用VB及VC++編程時,可用控件對串行口進行編程。這種方法通用性好,在Windows、Windows NT、Windows2000及Windows XP等平臺下都能正常工做。在VB中,使用MSCOMM控件;在VC++下使用Microsoft Communication Control這一ActiveX類控件。串口控件使用方法請參考MSDN。

    2、串行口步進電機控制器工做原理

    一、串行口發送數據過程研究

    在串行口發送數據的過程當中,串行口先發送起始位(邏輯0)進行同步,接着按規定的波特率(B)從低位到高位依次發送通信數據的各二進制位,最後發送中止位(邏輯1)。表示每一個二進制位的邏輯電平在TXD端的保持時間爲1/B秒。若是按8位數據位、1位中止位、無奇偶校驗方式發送數據,所發送數據的二進制位是0、1交替的。例如:數據取01010101(即16進制的16#55),其發送過程如圖2中5所示,每發送一個字節,在TXD端發出5個脈衝,週期T=2/B,即頻率f=B/2。改變發送數據的各二進制位,即可在TXD端獲得不一樣的波形。圖2示出欲產生1~5個脈衝時應發出的數據及對應的波形。


圖2 產生1~5個脈衝所發數據及對應波形

    二、串行口步進電機控制器工做原理

    經過分析串行口發送數據的過程可知,從TXD端所發出的脈衝徹底知足控制步進電機的須要:

    (1)改變發送的字節數及所發送的字節內容,可在TXD端產生任意數量的脈衝;

    (2)改變波特率可動態改變發送脈衝的頻率。

    因此,可用TXD做爲控制步進電機的脈衝信號(Pulse)。

    串行口的DTR、RTS、CTS、DSR、CD、RI雖然在串行通信接口中被定義爲不一樣功能的握手信號,但經過對8250的分析可知,它們都可做爲通常的I/O量使用,並且不論採用哪一種編程方法,都能很方便地對這些信號進行讀寫操做。若以DTR(或RTS)做爲方向控制信號 (Dir),同時分別以CD、DSR、CTS、RI做爲狀態檢測信號(CWL、CCWL、ORG等),則僅用一個串行口就已提供了步進電機控制器須要的全部信號。正是基於此原理,咱們開發了串行口步進電機控制器,併成功應用在板材多點成形設備的控制系統中。因爲串行口已直接提供了控制步進電機所需的全部信號,只需將各信號由RS232電平變成TTL電平便可。經常使用的電平轉換器件有DS148八、DS148九、MAX232等。用計算機串行口開發的步進電機控制器工做原理如圖3所示。


圖3 串行口步進電機控制器原理圖

 

3、軟件設計及計算

    爲避免電機失步和提升電機運行速度,將步進電機運行過程分爲三個階段:低速起動並加速、高速運行、減速並中止;相應地控制脈衝也分爲:升頻、高頻、降頻三段,如圖4所示。


圖4 步進電機運行速度曲線

    在用串行口發送數據產生控制脈衝時,雖然經過改變所發字節內容的辦法能產生1~5中間任意個數的脈衝,但若發送一個字節所產生的脈衝少於5個,後面接着發送數據產生的脈衝時,兩個字節銜接時所產生的脈衝頻率和佔空比均會產生波動。爲使電機運行的三個階段能平滑過渡,須要對每一個階段的脈衝數量進行調整,使I、II兩個階段的步數均爲5的整數倍 (分別爲n1×五、n2×5);將非5整數倍的步數安排在減速停車的III階段,發出脈衝數爲n3×5+Δp,其中Δp=(1~4)。這可經過改變III階段所發送的最後一個字節內容實現任意數量的脈衝輸出。產生1~4個脈衝應發送的數據分別爲16#FF、16#FB、16#F五、16#D5。

    由圖4所示的電機運行過程可知,在電機運行過程當中,控制脈衝的頻率f應隨時變化以知足電機低速起停及高速運行的須要。脈衝頻率由發送數據的波特率 (B)決定,每發出一個脈衝需用兩個二進制位1和0來構成其高、低電平,因此f=B/2,經過調整發送數據的波特率可改變所發出的控制脈衝的頻率。按常規波特率系列發送數據時所產生的控制脈衝頻率變化較大,不能知足電機正常起停及調速的要求,爲此計算機需按非標準的波特率發送數據以產生任意頻率的控制脈衝。通常在電機起動及中止階段(I、III)每發送一個字節調整一次波特率,以使電機起停得儘可能平滑。

    Ⅰ、Ⅲ階段頻率的調整量Δf1、Δf2分別爲:

    Δf1=(FH-FL)/n1     (1)

    Δf2=(FH-FL)/n3+1     (2)

    相應的波特率的調整量ΔB1、ΔB2分別爲:

    ΔB1=(BH-BL)/n1=(2FH-2FL)/n1     (3)

    ΔB2=(BH-BL)/(n3+1)=(2FH-2FL)/(n3+1)     (4)

    發送第i個字節的波特率Bi爲:

    

    用串行口直接控制步進電機的控制軟件流程圖如圖5所示。


圖5 步進電機控制軟件流程圖

   

4、高級控制功能

    對步進電機的高級控制,主要是指自動找零及多機聯動差補。

    找零功能是指控制步進電機驅動運動機構,完成定位的過程。在找零時,電機通常以低速運行,當測到ORG信號時電機中止。因爲運行速度低,爲簡化程序設計,每發送一個字節,在TXD端能夠只輸出一個脈衝,測到ORG信號則中止發送。爲保證輸出脈衝的佔空比爲50%,發送字節定爲16#F0。找零程序的設計可參照圖5進行。

    差補是指控制兩臺或兩臺以上電機按規定的速比運行,進而控制執行機構沿規定的軌跡運行。因爲通常計算機只有兩個串行口,這種方法只適用於二維差補控制。一般兩個串行口用相同的波特率進行發送,經過調整發送的字節數及發送每一個字節所產生的脈衝個數的不一樣來調整兩個電機的運行速度和位置。

    實際運行證實,用串行口設計的步進電機控制器具備使用方便、性能穩定、成本低、可移植性好、不需安裝硬件設備驅動程序等優勢。直接採用計算機串行口設計的步進電機控制控制器適用於對全數字式伺服電機進行控制。本文對計算機串行口、並行口等資源的二次開發應用起到了必定的借鑑做用。