|
農(nóng)民講習所
這是俺一個關(guān)于打印機項目中步進馬達中的內(nèi)容,使用的原理為電流矢量圖(a),為減少矢量表的誤差,改進為(g).(誤
差大的時候,Ia和 Ib 的絕對值變大,角度不變,即比例不變)
磁場合成決定步進馬達當前的位置。
我們常用的是圖(b),用電壓驅(qū)動時和線圈個數(shù)有關(guān)系,直接驅(qū)動它們,合成的最小角度都是固定的。
細分最常見的是電流細分,電流引起的磁場的合成就決定馬達的角度。所以我們一般用電流合成圖來代替磁場合成圖。
用電流合成電路復雜一點(用 MCU+DA+L298實現(xiàn)也不難)。
這里俺用 PWM方式,用控制電壓的方式代替電流。原因:在電壓穩(wěn)定后,線圈的電流和電壓成正比。穩(wěn)定是 PWM細分的
要點,也決定馬達速度不能太高。
在細分的情況下,電機分兩相和四相是沒意義的?梢园阉南嚯姍C當兩相使用。
下面是俺的程序,使用 MEGA16,因為有PWM。
0.png (230.12 KB, 下載次數(shù): 181)
下載附件
2017-4-29 18:13 上傳
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- //2 相步進馬達驅(qū)動
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- #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{ //細分表結(jié)構(gòu)
- 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; //馬達驅(qū)動的任務(wù)轉(zhuǎn)移號
-
- unsigned char mSaveTimer; //馬達驅(qū)動節(jié)電模式使用的計數(shù)器
-
- unsigned char mReg; //馬達驅(qū)動使用的寄存器
- unsigned char mTimer; //對 2MS 的計數(shù)器,時間擴展
-
- unsigned int mSteps; //馬達要走的步數(shù)
- unsigned char mDirect; //馬達走動方向
-
- unsigned char mStepRunTimer; //步進時輸出有效的時間寄存器
- unsigned char mStepIdleTimer; //步進時輸出節(jié)電的時間寄存器
- unsigned char mStepCount; //細分表走動步長。1-2-4-8-16
- };
-
- //------------------------------------------------------------
- #ifdef dMotor2P_Main
- #define Motor2P_Head
- #else
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整代碼和教程下載:
用PWM-細分步進電機-包含原理和程序.pdf
(157.01 KB, 下載次數(shù): 357)
2017-4-29 12:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|