190 likes | 645 Views
步進馬達控制實驗. 實驗目的. 瞭解步進 馬達 的原理以及控制方法; 掌握對步進馬達的編程。 實驗內容 編寫程式實現步進馬達的正反轉; 編寫程式實現對步進馬達的單步運行。 實驗設備 FS2410XP 教學實驗平臺; ADS 1.2 評估版集成開發環境和調試代理軟體; 網路線 , 串列連接線 , 電源;. 步進馬達 原理. 是將脈衝信號轉變為角位移或線位移的開環控制組件。 在非超載的情況下,馬達的轉速、停止的位置 只取決於脈衝信號的頻率和脈衝數,而不受負載變化的影響 即給馬達加一個脈衝信號,馬達則轉過一個步距角 這一線性關係的存在 步進馬達只有週期性的誤差
E N D
實驗目的 瞭解步進馬達的原理以及控制方法; 掌握對步進馬達的編程。 • 實驗內容 • 編寫程式實現步進馬達的正反轉; • 編寫程式實現對步進馬達的單步運行。 • 實驗設備 • FS2410XP教學實驗平臺; • ADS 1.2 評估版集成開發環境和調試代理軟體; • 網路線,串列連接線,電源;
步進馬達原理 • 是將脈衝信號轉變為角位移或線位移的開環控制組件。 • 在非超載的情況下,馬達的轉速、停止的位置 • 只取決於脈衝信號的頻率和脈衝數,而不受負載變化的影響 • 即給馬達加一個脈衝信號,馬達則轉過一個步距角 • 這一線性關係的存在 • 步進馬達只有週期性的誤差 • 而無累積誤差等特點。使得在速度、位置等控制領域用步進馬達來控制變的非常的簡單。
單相 vs.多相 • 單相步進馬達 • 有單一脈衝驅動,輸出功率一般很小 • 用途為微小功率驅動 • 多相步進馬達 • 有多相方波脈衝驅動,用途很廣 • 使用多相步進馬達時,單一脈衝信號可先通過脈衝分配器轉換為多相脈衝信號,在經功率放大後分別送入步進馬達各項繞組
步進馬達種類 • 可變磁阻式步進馬達(VR) • 結構簡單,生產成本低,步距角可以做的相當小,但動態性能相對較差。 • 永久磁鐵式步進馬達(PM) • 出力大,動態性能好;但步距角一般比較大。 • 混合步進馬達(HB) • 綜合了反映式和永磁式兩者的優點,步距角小,出力大,動態性能好,是性能較好的一類步進馬達。
步進馬達的靜態指標術語 • 相數 • 產生不同對極N、S磁場的激磁線圈對數。常用m表示。 • 拍數 • 完成一個磁場週期性變化所需脈衝數或導電狀態用n表示,或指馬達轉過一個齒距角所需脈衝數 • 以四相馬達為例,有四相四拍運行方式即AB-BC-CD-DA-AB • 四相八拍運行方式即 A-AB-B-BC-C-CD-D-DA-A. • 步距角 • 對應一個脈衝信號,馬達轉子轉過的角位移用θ表示。θ=360度(轉子齒數J*運行拍數),以常規二、四相,轉子齒為50齒馬達為例 • 四拍運行時步距角為θ=360度/(50*4)=1.8度(俗稱整步) • 八拍運行時步距角為θ=360度/(50*8)=0.9度(俗稱半步)。
步進馬達的靜態指標術語 • 定位轉矩 • 馬達在不通電狀態下,馬達轉子自身的鎖定力矩(由磁場齒形的諧波以及機械誤差造成的) • 靜轉矩 • 馬達在額定靜態電作用下,馬達不作旋轉運動時,馬達轉軸的鎖定力矩。此力矩是衡量馬達體積(幾何尺寸)的標準,與驅動電壓及驅動電源等無關。 • 雖然靜轉矩與電磁激磁安匝數成正比,與定齒轉子間的氣隙有關,但過分採用減小氣隙,增加激磁安匝來提高靜力矩是不可取的,這樣會造成馬達的發熱及機械噪音。
步進馬達控制系統 • 脈衝信號的產生 • 脈衝信號一般由CPU或單片機,這裏是有S3C2410的,一般脈衝信號的占空比為0.3-0.4左右,馬達轉速越高,占空比則越大。 • 信號分配 • 以四相步進馬達為例,四相馬達工作方式有二種 • 四相四拍為AB-BC-CD-DA; • 四相八拍為AB-B-BC-C-CD-D-AB。 • 功率放大 • 功率放大是步進馬達驅動系統最為重要的部分。步進馬達在一定轉速下的轉矩取決於它的動態平均電流而非靜態電流(而樣本上的電流均為靜態電流)。平均電流越大馬達力矩越大,要達到平均電流大這就需要驅動系統儘量克服馬達的反電勢。因而不同的場合採取不同的驅動方式,到目前為止,驅動方式一般有以下幾種:恒壓、恒壓串電阻、高低壓驅動、恒流、細分數等。
實驗系統中對步進馬達的控制 • FS2410P採用的是四相步進馬達,工作模式是四相四拍,系統採用四路I/O進行脈衝分配,這四路I/O口由CPLD擴展的,通過功率放大後,進入步進馬達的各相繞組。 • 在四相四拍的工作模式下,脈衝分配信號如下表,表格中的A,B,C,D為步進馬達的四相。 • 表一 四相四拍的脈衝分配信號
電路圖-介面原理圖 控制步進馬達的I/O口位址為: #define StepMotor_Address *(volatile U16 *) (0x38001000) //nGCS7
實驗步驟 • (1) 新建一個工程名為StepMotor,並新建原始檔案、輸入代碼,設置好工程編譯生成目標代碼; • (2) 硬體連接:用串口線將PC機的COM1與實驗箱的UART1連起來,再用交叉網線將PC機的網口與實驗箱的網口連起來,最後插上12V電源; • (3) 下載、調試並運行; • (4) 結合實驗內容和原理,觀察實驗現象,實驗結果應該是步進馬達轉動,同時按“+/-”鍵可以控制步進馬達的轉角; • (5) 完成實驗練習題。
步進馬達應用程式 • 步進馬達地址 • #define StepMotor_Address *(volatile U16 *) (0x38001000) //nGCS7 • 步進馬達正反轉函數 void Step_Motor ( U16 delay , U8 m) • 參數說明:delay :各相通電輪流的時間,改變它的值可以改變馬達的頻率,也就是速度。 • m :確定是正轉還是反轉 • m>0 :正轉 m<=0 :反轉 • 功能說明:主要用來實現步進馬達的正轉和反轉 • 主要代碼如下: • /******************************************************************** • Function name: Setep_Motor • Parameter : delay:延遲參數 m:正轉還是反轉 • Description : 步進馬達控制函數 • Return : void • Argument : void • Autor & date: • *********************************************************************/
void Step_Motor (U16 delay, U8 m) { if (m > 0) { StepMotor_Address = 0x01; //StepMotor output Motor_Delay( delay ); //延時 StepMotor_Address = 0x02; //StepMotor output Motor_Delay( delay ); //延時 StepMotor_Address = 0x04; //StepMotor output Motor_Delay( delay ); //延時 StepMotor_Address = 0x08; //StepMotor output Motor_Delay( delay ); //延時 } else { StepMotor_Address = 0x08; //StepMotor output Motor_Delay( delay ); //延時 StepMotor_Address = 0x04; //StepMotor output Motor_Delay( delay ); //延時 StepMotor_Address = 0x02; //StepMotor output Motor_Delay( delay ); //延時 StepMotor_Address = 0x01; //StepMotor output Motor_Delay( delay ); //延時 } }
步進馬達測試程式void Test_StepMotor(void) • 功能說明:控制步進馬達的正反轉,單步功能 • 主要代碼如下: /******************************************************************** Function name: Setep_Motor Parameter : delay:延遲參數 m:正轉還是反轉 Description : 步進馬達控制函數 Return : void Argument : void Autor & date: *********************************************************************/ void Test_StepMotor (void) { U16 m; U8 p; U16 MOTOR_DELAY_TIME = 100; printf (“S3C2410 Step Motor TEST, press ESC key to exit! \n”); printf (“Press '+' or '-' to increase or decrease the speed,’t’ to reverse\n”);
while ((m=getkey ())! =ESC_KEY) { if (m! = 0) { if (m ==‘t’) { p =! p; printf (“Turn on is reverse! \n”); } else { if (m == '+’) MOTOR_DELAY_TIME+=5; if (m == '-’) MOTOR_DELAY_TIME-=5; if ( MOTOR_DELAY_TIME<50 ) MOTOR_DELAY_TIME = 50 ; if( MOTOR_DELAY_TIME>1000 ) MOTOR_DELAY_TIME = 1000 ; printf( "DelayTime = %d\n", MOTOR_DELAY_TIME ) ; } } Step_Motor( MOTOR_DELAY_TIME, p ) ; } StepMotor_Address = 0x00 ; //StepMotor output }
主函數Main • 主要代碼如下: /********************************************************************** Function name: Main Parameter : void Description : 初始化系統,串口,並調用步進馬達實驗函數 Return : void Argument : Autor & date : ***********************************************************************/ void Main(void) { BoardInitStart(); //系統初始化,MMU初始化 SystemClockInit(); //系統時鐘初始化 MemCfgInit(); //設置NAND FLASH的配置寄存器 PortInit(); //S3C2410的GPIO初始化 SerialSwitch(0); //選擇串口0 SerialChgBaud(115200); //串列傳輸速率115200 while( 1 ) { printf("FS2410P Motor Test,please Enter 'ESC' to exit\n"); Test_StepMotor(); //調用步進馬達實驗函數 } }