資源描述:
《用PWM 細分步進電機,包含原理和程序.pdf》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、用PWM細分步進電機,包含原理和程序農(nóng)民講習所這是俺一個關于打印機項目中步進馬達中的內(nèi)容,使用的原理為電流矢量圖(a),為減少矢量表的誤差,改進為(g).(誤差大的時候,Ia和Ib的絕對值變大,角度不變,即比例不變)磁場合成決定步進馬達當前的位置。我們常用的是圖(b),用電壓驅(qū)動時和線圈個數(shù)有關系,直接驅(qū)動它們,合成的最小角度都是固定的。細分最常見的是電流細分,電流引起的磁場的合成就決定馬達的角度。所以我們一般用電流合成圖來代替磁場合成圖。用電流合成電路復雜一點(用MCU+DA+L298實現(xiàn)也不難)。這里俺用PWM方式,用控制電壓的方式代替電流。原因:在電壓穩(wěn)定后,線圈的電流
2、和電壓成正比。穩(wěn)定是PWM細分的要點,也決定馬達速度不能太高。在細分的情況下,電機分兩相和四相是沒意義的??梢园阉南嚯姍C當兩相使用。下面是俺的程序,使用MEGA16,因為有PWM。//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//2相步進馬達驅(qū)動//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#defineStep_OutMode()DDRB
3、=BIT(6)
4、BIT(7)#defineStep_InMode()D
5、DRB&=~(BIT(6)
6、BIT(7))#defineStep_ReadIO()(PORTB&(~(BIT(6)
7、BIT(7))))#defineStep_WriteIO(x)PORTB=xstructMotor2P_Table{//細分表結構unsignedcharmQuadrant;//象限0-3unsignedcharmX_Pwm;//x輸出的PWMunsignedcharmY_Pwm;//y輸出的PWM};structMotor2P{unsignedcharmTableId;//細分表IDunsignedcharmTask;//馬達驅(qū)動的任務轉移號unsignedc
8、harmSaveTimer;//馬達驅(qū)動節(jié)電模式使用的計數(shù)器unsignedcharmReg;//馬達驅(qū)動使用的寄存器unsignedcharmTimer;//對2MS的計數(shù)器,時間擴展unsignedintmSteps;//馬達要走的步數(shù)unsignedcharmDirect;//馬達走動方向unsignedcharmStepRunTimer;//步進時輸出有效的時間寄存器unsignedcharmStepIdleTimer;//步進時輸出節(jié)電的時間寄存器unsignedcharmStepCount;//細分表走動步長。1-2-4-8-16};//-------------
9、-----------------------------------------------#ifdefdMotor2P_Main#defineMotor2P_Head#else#defineMotor2P_Headextern#endifMotor2P_HeadstructMotor2PsMotor2P;//定義變量Motor2P_HeadvoidMotor_Steps(unsignedcharfDirect,unsignedintmSteps);//馬達走動.fDirect=1,0->3,順時針.步數(shù).要先檢查Motor_State()==1才調(diào)用Motor2P_Hea
10、dvoidMotor_Init(void);//馬達構造函數(shù)Motor2P_HeadvoidMotor_Destory(void);//馬達析構函數(shù)//返回馬達狀態(tài)。>0:空閑#defineMotor_State()(sMotor2P.mSteps==0)//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//2相步進馬達驅(qū)動//采用PWM細分。//原理:正弦波矢量擴展到正方形矢量//細分數(shù)為2的整數(shù)//節(jié)電時電流為平常的N/8。//+++++++++++++++++++++++++++++++++
11、++++++++++++++++++++++++++++++#include#include#include#include"Const.h"#include"System.h"#definedMotor2P_Main#include"Motor2P.h"http://主程序中定義,直接定義變量#definedStepRunTime1//N*2ms,輸出有效的時間#definedStepIdleTime1//輸出節(jié)電的時間.1->無.改變速度在此改變。#