|
農民講習所
這是俺一個關于打印機項目中步進馬達中的內容,使用的原理為電流矢量圖(a),為減少矢量表的誤差,改進為(g).(誤
差大的時候,Ia和 Ib 的絕對值變大,角度不變,即比例不變)
磁場合成決定步進馬達當前的位置。
我們常用的是圖(b),用電壓驅動時和線圈個數有關系,直接驅動它們,合成的最小角度都是固定的。
細分最常見的是電流細分,電流引起的磁場的合成就決定馬達的角度。所以我們一般用電流合成圖來代替磁場合成圖。
用電流合成電路復雜一點(用 MCU+DA+L298實現也不難)。
這里俺用 PWM方式,用控制電壓的方式代替電流。原因:在電壓穩定后,線圈的電流和電壓成正比。穩定是 PWM細分的
要點,也決定馬達速度不能太高。
在細分的情況下,電機分兩相和四相是沒意義的。可以把四相電機當兩相使用。
下面是俺的程序,使用 MEGA16,因為有PWM。
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- //2 相步進馬達驅動
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- #define Step_OutMode() DDRB|=BIT(6)|BIT(7)
- #define Step_InMode() DDRB&=~(BIT(6)|BIT(7))
- #define Step_ReadIO() (PORTB&( ~(BIT(6)|BIT(7)) ))
- #define Step_WriteIO(x) PORTB=x
-
- struct Motor2P_Table{ //細分表結構
- unsigned char mQuadrant; //象限 0-3
- unsigned char mX_Pwm; //x輸出的PWM
- unsigned char mY_Pwm; //y輸出的PWM
- };
-
- struct Motor2P{
- unsigned char mTableId; //細分表 ID
- unsigned char mTask; //馬達驅動的任務轉移號
-
- unsigned char mSaveTimer; //馬達驅動節電模式使用的計數器
-
- unsigned char mReg; //馬達驅動使用的寄存器
- unsigned char mTimer; //對 2MS 的計數器,時間擴展
-
- unsigned int mSteps; //馬達要走的步數
- unsigned char mDirect; //馬達走動方向
-
- unsigned char mStepRunTimer; //步進時輸出有效的時間寄存器
- unsigned char mStepIdleTimer; //步進時輸出節電的時間寄存器
- unsigned char mStepCount; //細分表走動步長。1-2-4-8-16
- };
-
- //------------------------------------------------------------
- #ifdef dMotor2P_Main
- #define Motor2P_Head
- #else
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整代碼和教程下載:
用PWM-細分步進電機-包含原理和程序.pdf
(157.01 KB, 下載次數: 357)
2017-4-29 12:30 上傳
點擊文件名下載附件
|
|