步進電機是將電脈沖信號轉變為角位移或線位移的開環控制元步進電機件。在非超載的情況下,電機的轉速、停止的位置只取決于脈沖信號的頻率和脈沖數,而不受負載變化的影響,當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度,稱為“步距角”,它的旋轉是以固定的角度一步一步運行的。可以通過控制脈沖個數來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。 89C51的最小系統: 
因為步進電機的控制是通過脈沖信號來控制的,將電脈沖信號轉變為角位移或線位移的開環控制元件。所以怎樣產生這個脈沖信號和產生怎樣的信號是電機控制的關鍵。用單片機來產生這個脈沖信號,通過單片機的P1口輸出脈沖信號。 TB6600原理圖:

附錄:程序實例
*********************************************** * 測試說明 *1、MCU:STC89C52RC *2、測試頻率:12Mhz *2、編程語言:C51 *2、編譯環境:Keil C *2、功能:全速正轉、全速反轉、停止、調速運行 *************************************************************** <reg52.h> //TB6560輸入控制端定義 sbit CLK = P1^0; sbit ENA = P1^1; sbit DIR = P1^2; sbit CW = P3^0; //正轉運行按鍵 sbit STOP = P3^1; //停止運行按鍵 sbit CCW = P3^2; //反轉運行按鍵 sbit ADJ1 = P3^3; //調速運行按鍵 sbit ADJ2 = P3^4; //調速運行按鍵 bit Run_Status; //運行狀態位標志, //=0表示電機在停止狀態,可以按鍵正轉、反轉均可 //=1表示電機在運行狀態,不支持正反轉按鍵,只有先停止。防止強行換向 帶來的電流過大。 unsigned char Run_Dir; //電機運行方向 #define F_DIR 0 //正轉 #define B_DIR 1 //反轉 unsigned int CYCLE; //周期變量 /************************************************************** ********************************** ** 函數名稱: void Delay(unsigned int cnt) ** 功能描述: 簡單的延時函數 ** 輸 入: cnt:0-65535之間的任意整數 ** 輸 出: 無 *************************************************************** **********************************/ void Delay(unsigned int cnt) { while(--cnt); } /************************************************************** ********************************** ** 函數名稱: void main(void) ** 功能描述: 主函數 ** 輸 入: 無 ** 輸 出: 無 *************************************************************** **********************************/ void main(void) { Run_Status=0; //=0表示電機在停止狀態,可以按鍵正轉、反轉均可 CLK = 0; ENA = 0; while(1) { if(!STOP) //任何時候按停止鍵,電機停止運行 { Delay(1000); //延時去抖動 if(!STOP) { Run_Status=0; //電機正在停止的狀態標志 CLK = 0; ENA = 0; TR0=0; } } if(!CW&&!Run_Status) //按正轉鍵同時電機不是正在運行時,電機正轉運 行 { Delay(1000); //按下延時去抖動 if(!CW&&!Run_Status) { Run_Status=1; //電機正在運行的狀態標志 DIR = 0; //正轉 ENA = 1; CYCLE=2500; //脈沖頻率 定時器設置 10ms in 12M crystal 即100Hz TMOD |=0x01; TH0=(65536-CYCLE)/256; TL0=(65536-CYCLE)%256; IE= 0x82; //打開中斷 TR0=1; Run_Dir=F_DIR; //電機運行方向正轉 } } if(!CCW&&!Run_Status) //按反轉鍵同時電機不是正在運行時,電機反轉 運行 { Delay(1000); //延時去抖動 if(!CCW&&!Run_Status) { Run_Status=1; //電機正在運行的狀態標志 DIR = 1; //反轉 ENA = 1; CYCLE=2500; //脈沖頻率 定時器設置 10ms in 12M crystal 即100Hz TMOD |=0x01; TH0=(65536-CYCLE)/256; TL0=(65536-CYCLE)%256; IE= 0x82; //打開中斷 TR0=1; Run_Dir=B_DIR; //電機運行方向反轉 } } if(!ADJ1) { Delay(5000); //延時去抖動 if(!ADJ1) { if(CYCLE<20000) CYCLE+=2000; else CYCLE=1000; Run_Status=1; TR0=1; } } // if(!ADJ2) // { // Delay(5000); //延時去抖動 // if(!ADJ2) // { // if(CYCLE>2000) CYCLE-=2000; // Run_Status=1; // TR0=1; // } // } } } /************************************************************* ********************************** ** 函數名稱: Timer0_ISR ** 功能描述: 定時器0中斷處理函數 ** 輸 入: 無 ** 輸 出: 無 *************************************************************** **********************************/ void Timer0_ISR(void) interrupt 1 using 1 { TH0=(65536-CYCLE)/256; TL0=(65536-CYCLE)%256; CLK = ~CLK; }
有需要 LV8731 、 LV8728 、 LV8729 、 LV8727 、 LV8726 、STK682、 TB67S109 、TB6600 、TB6560 步進電機驅動器 芯片的 可以找我 、 技術 問題隨時可以交流 聯系電話:陳工 18010107259 15311412871 Q:2539844470
|