步進電機
步進電機是將電脈沖信號轉變為角位移或線位移的開環控制電機,是現代數字程序控制系統中的主要執行元件,應用極為廣泛。在非超載的情況下,電機的轉速、停止的位置只取決於脈沖信號的頻率和脈沖數,而不受負載變化的影響,當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度,稱為“步距角”,它的旋轉是以固定的角度一步一步運行的。可以通過控制脈沖個數來控制角位移量,從而達到准確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
五線四相步進電
機是從兩個線圈中間引出兩根線,作為公共端,因此有5根線。
五線四相步進電機一般采用8拍進行驅動。
verilog代碼實現
//-------------------------------------------------------------- //功能:這是五線四相電機驅動模塊,輸入PWM.DIR,EN就可以控制電機的轉動 //PWM:脈沖數越多電機轉的角度或者圈數越多,PWM的頻率越高,電機轉速越快 //RST_n:低電平下降沿復位 //EN:使能信號 //M_OUT:電機控制時序輸出引腳 //--------------------------------------------------------------- module motor_sig( PWM, //驅動脈沖輸入,脈沖數決定轉的圈數,脈沖頻率決定轉速 RST_n,//低復位 DIR,//方向 EN,//使能信號,1:有效 0:關閉 //五線四相電機的輸出引腳 M_OUT ); input PWM,RST_n,DIR,EN; output [3:0]M_OUT;//【a,b,c,d】 reg [3:0]motor_ctl; always@(negedge RST_n or posedge PWM) begin if(!RST_n)begin motor_ctl <= 4'b0000; end else begin if(EN)begin//使能信號有效 if(DIR)begin//CCW case(motor_ctl) 4'b0000: motor_ctl <= 4'b1000; 4'b1000: motor_ctl <= 4'b1100; 4'b1100: motor_ctl <= 4'b0100; 4'b0100: motor_ctl <= 4'b0110; 4'b0110: motor_ctl <= 4'b0010; 4'b0010: motor_ctl <= 4'b0011; 4'b0011: motor_ctl <= 4'b0001; 4'b0001: motor_ctl <= 4'b1001; 4'b1001: motor_ctl <= 4'b1000; default:motor_ctl <= 4'b1000; endcase end else begin //CW case(motor_ctl) 4'b0000: motor_ctl <= 4'b1001; 4'b1001: motor_ctl <= 4'b0001; 4'b0001: motor_ctl <= 4'b0011; 4'b0011: motor_ctl <= 4'b0010; 4'b0010: motor_ctl <= 4'b0110; 4'b0110: motor_ctl <= 4'b0100; 4'b0100: motor_ctl <= 4'b1100; 4'b1100: motor_ctl <= 4'b1000; 4'b1000: motor_ctl <= 4'b1001; default:motor_ctl <= 4'b1000; endcase end end end end assign M_OUT[3:0] = motor_ctl[3:0]; endmodule
仿真結果
四線二相步進電機
這種步進電機相當於五線四相步進電機沒有引出抽頭。如果將五線四相步進電機引出的抽頭不使用。且兩個抽頭沒有連接在一起,可以將其作為二相電機使用。
四線二相步進電機的驅動有八拍和四拍的。
八拍驅動時序:
八個狀態:1、在 A 與 A-正電壓,B 與 B-不給電懸空;2、在 A 與 A-正電壓,B與 B-也給正電壓;3、A 與 A-不給電壓懸空,B 與 B-正電壓;4、A 與 A-給負電壓,B與B-給正電壓;5、A與A-給負電壓,B 與B-不給懸空;6、A與A-給負電壓,B與B-給負電壓;7、A 與A-不給電懸空,B 與 B-給負電壓;8、A 與給正電壓,B 與 B-給負電壓;按以上八個狀態輪流供電,控制一下脈寬就可以了。
實現
//-------------------------------------------------------------- //功能:這是四線二相電機驅動模塊,輸入PWM.DIR,EN就可以控制電機的轉動 //PWM:脈沖數越多電機轉的角度或者圈數越多,PWM的頻率越高,電機轉速越快 //RST_n:低電平下降沿復位 //EN:使能信號 //M_OUT:電機控制時序輸出引腳 //--------------------------------------------------------------- module motor_sig_42( PWM, //驅動脈沖輸入,脈沖數決定轉的圈數,脈沖頻率決定轉速 RST_n,//低復位 DIR,//方向 EN,//使能信號,1:有效 0:關閉 //四線二相電機的輸出引腳 M_OUT ); input PWM,RST_n,DIR,EN; output [3:0]M_OUT;//【A+,A-,B+,B-】 reg [3:0]motor_ctl; always@(negedge RST_n or posedge PWM) begin if(!RST_n)begin motor_ctl <= 4'b0000; end else begin if(EN)begin//使能信號有效 if(DIR)begin//CCW case(motor_ctl) 4'b0000: motor_ctl <= 4'b1000; 4'b1000: motor_ctl <= 4'b1010; 4'b1010: motor_ctl <= 4'b0010; 4'b0010: motor_ctl <= 4'b0110; 4'b0110: motor_ctl <= 4'b0100; 4'b0100: motor_ctl <= 4'b0101; 4'b0101: motor_ctl <= 4'b0001; 4'b0001: motor_ctl <= 4'b1001; 4'b1001: motor_ctl <= 4'b1000; default:motor_ctl <= 4'b1000; endcase end else begin //CW case(motor_ctl) 4'b0000: motor_ctl <= 4'b1001; 4'b1001: motor_ctl <= 4'b0001; 4'b0001: motor_ctl <= 4'b0101; 4'b0101: motor_ctl <= 4'b0100; 4'b0100: motor_ctl <= 4'b0110; 4'b0110: motor_ctl <= 4'b0010; 4'b0010: motor_ctl <= 4'b1010; 4'b1010: motor_ctl <= 4'b1000; 4'b1000: motor_ctl <= 4'b1001; default:motor_ctl <= 4'b1000; endcase end end end end assign M_OUT[3:0] = motor_ctl[3:0]; endmodule
四拍驅動時序
總結
該模塊可通過控制PWM信號實現電機旋轉角度和旋轉速度的控制,方便使用,移植方便。