标签:
步进电机是一种将电脉冲转化为相应的线位移和角位移的电磁机械装置。具有快速启动停止能力,在电机的负荷不超过他提供的转矩时,可以通过输入脉冲来控制他在一瞬间的停止和启动。步进电机的步距角和转速只和输入脉冲的频率有关。
通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。当定子的矢量磁场旋转一个角度。转子也随着该磁场转一个角度。每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC-CD-DA-AB),八拍(A-AB-B-BC-C-CD-D-DA-A)。
以下代码为8拍:
sbit P00 = P0^0; sbit P01 = P0^1; sbit P02 = P0^2; sbit P03 = P0^3; //---------------设置成推挽模式-------将引脚强制拉高----- void init_gpio(void) { P0M1 = P0M1 & 0X0; P0M2 = P0M2 | 0XFF; P0 = 0X0; } //-----------horizontal motor--------------------------- #define A P00 #define B P01 #define C P02 #define D P03 #define h_Coil_A {A = 1;B = 0;C = 0;D = 0;} #define h_Coil_AB {A = 1;B = 1;C = 0;D = 0;} #define h_Coil_B {A = 0;B = 1;C = 0;D = 0;} #define h_Coil_BC {A = 0;B = 1;C = 1;D = 0;} #define h_Coil_C {A = 0;B = 0;C = 1;D = 0;} #define h_Coil_CD {A = 0;B = 1;C = 1;D = 0;} #define h_Coil_D {A = 0;B = 0;C = 0;D = 1;} #define h_Coil_DA {A = 0;B = 0;C = 1;D = 1;} #define h_Coil_OFF {A = 0;B = 0;C = 0;D = 0;} void h_Right_Motor() { h_Coil_A delay_ms(speed); h_Coil_AB delay_ms(speed); h_Coil_B delay_ms(speed); h_Coil_BC delay_ms(speed); h_Coil_C delay_ms(speed); h_Coil_CD delay_ms(speed); h_Coil_D delay_ms(speed); h_Coil_DA delay_ms(speed); } void h_Left_Motor() { h_Coil_DA delay_ms(speed); h_Coil_D delay_ms(speed); h_Coil_CD delay_ms(speed); h_Coil_C delay_ms(speed); h_Coil_BC delay_ms(speed); h_Coil_B delay_ms(speed); h_Coil_AB delay_ms(speed); h_Coil_A delay_ms(speed); }
标签:
原文地址:http://www.cnblogs.com/youthshouting/p/4461118.html