小润龙 发表于 2017-5-17 17:50 据我现在了解的是控制我的86电机是不需要控制ABCD线圈的吧,只需要两路,一路脉冲,一路方向,这个程序好像不是吧 |
/************************************************************************************* * 标题: 步进电机试验一(双极性步进电机) * * 通过本例程了解步进马达使用及驱动程序编写 *; 单相四拍通电驱动时序: *; 正转: A/ B A B/ * 反转: B/ A B A/ * * UDN2916电流控制真值表: * I0 I1 输出电流 * L L 最大 * H L 最大*2/3 * L H 最大*1/3 * H H 0 * **************************************************************************************/ #include "reg52.h" #define speed 2 //Motor sbit PH1 = P1^0; //定义管脚 sbit PH2 = P1^1; sbit I01 = P1^2; sbit I11 = P1^3; sbit I02 = P1^4; sbit I12 = P1^5; void delay(int time); /*************************************** 函数功能:产生单相四拍脉冲控制步进机 **************************************/ void Go() { //A PH1 = 0; //PH1为0 则A线圈为反向电流 I01 = 0; I11 = 0; //以最大电流输出 PH2 = 0; //PH2为0 则B线圈为反向电流 I02 = 1; I12 = 1; //输出0 delay(speed); //0 PH1 = 0; //PH1为0 则A线圈为反向电流 I01 = 1; //输出0 I11 = 1; PH2 = 1; //PH2为1 则B线圈为正电流 I02 = 0; //以最大电流输出 I12 = 0; delay(speed); //B PH1 = 1; //PH1为1 则A线圈为正向电流 I01 = 0; //以最大电流输出 I11 = 0; PH2 = 1; //PH2为1 则B线圈为正向电流 I02 = 1; //输出0 I12 = 1; //// delay(speed); //0 PH1 = 1; //PH1为1 则A线圈为正向电流 I01 = 1; I11 = 1; PH2 = 0; //PH2为0 则B线圈为反向电流 I02 = 0; I12 = 0; delay(speed); } /*******************延时函数****************************/ void delay(int time) { int i,j; for(j=0; j <= time; j++) for(i =0 ; i <= 120; i++); } void main() { while(1) { Go(); //步进电机运行 } } |