百度知道 - 信息提示

日期:2025-01-12 06:03:48 人气:1

百度知道 - 信息提示

    A+
热门评论

求;用51单片机编写最简单的程序,C语言,使步进电机转动,间歇式转动,快慢交替转动

编一个简单的吧,控制两相电机。#include#define uchar unsigned charuchar step[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};void delay(uchar sd){uchar i,j;for(i=0;i<sd;i++)for(j=0;j<120jj++);}main(){uchar i,j;while(1) { for(j=0;j<10;j++) for(i=0;i<8;i++) { P0=step[i]; delay(3); } for(j=0;j<10;j++) for(i=0;i<8;i++) { P0=step[i]; delay(6); } }}求;用51单片机编写最简单的程序,C语言,使步进电机转动,间歇式转动,快慢交替转动

阅读全文

求一个用c51单片机控制57步进电机的程序,希望能够左右旋转。谢谢!!

/************************************************************************************* * 标题: 步进电机试验一(双极性步进电机) * * * *; 单相四拍通电驱动时序: * *; 正转: 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; sbit key = P2^0;//接按钮 正转 sbit key2 = P2^1;//接按钮 停止 sbit key3 = P2^2;//接按钮 反转 void delay(int time); /*************************************** 函数功能:产生单相四拍脉冲控制步进机 **************************************/ void delay10ms(int time) { int i,j; for(j=0; j <= time; j++) for(i =0 ; i <= 1800; i++); } void Go(int try) { int j; for(j=0; j <=try; j++) { //A反,b0 PH1 = 0; //PH1为0 则A线圈为反向电流 I01 = 0; I11 = 0; //以最大电流输出 PH2 = 0; //PH2为0 则B线圈为反向电流 I02 = 1; I12 = 1; //输出0 delay(2); //0 a0,bz PH1 = 0; //PH1为0 则A线圈为反向电流 I01 = 1; //输出0 I11 = 1; PH2 = 1; //PH2为1 则B线圈为正电流 I02 = 0; //以最大电流输出 I12 = 0; delay(speed); //B az,b0 PH1 = 1; //PH1为1 则A线圈为正向电流 I01 = 0; //以最大电流输出 I11 = 0; PH2 = 1; //PH2为1 则B线圈为正向电流 I02 = 1; //输出0 I12 = 1; //// delay(speed); //0 a0,bf PH1 = 1; //PH1为1 则A线圈为正向电流 I01 = 1; //输出0 I11 = 1; PH2 = 0; //PH2为0 则B线圈为反向电流 I02 = 0; I12 = 0; delay(2); } } void back(int try) { int j; for(j=0; j <=try; j++) { //b PH2 = 0; //b 反 I02 = 0; I12 = 0; //以最大电流输出 PH1 = 0; //a反 I01 = 1; I11 = 1; //输出0 delay(2); //0 PH2 = 0; //b I02 = 1; //输出0 I12 = 1; PH1 = 1; //a I01 = 0; //以最大电流输出 I11 = 0; delay(speed); //a PH1 = 1; //PH1为1 则A线圈为正向电流 I01 = 1; //以最大电流输出 I11 = 1; PH2 = 1; //PH2为1 则B线圈为正向电流 I02 = 0; //输出0 I12 = 0; //// delay(speed); //0 PH1 = 0; //PH1为1 则A线圈为正向电流 I01 = 1; //以最大电流输出 I11 = 1; PH2 = 1; //PH2为0 则B线圈为反向电流 I02 = 0; I12 = 0; delay(2); } } /*******************延时函数****************************/ void delay(int time) { int i,j; for(j=0; j <= time; j++) for(i =0 ; i <= 2000; i++); } void main() { int star,star2; while(1) { if(key==0) { delay10ms(2) ; if(key==0) { star=1; } } ////////////////// if(key3==0) { delay10ms(2) ; if(key3==0) { star2=1; } } //////////////////// if(key2==0) { // delay10ms(1) ; if(key2==0) { star=0; star2=0; } } while(star==1&&key2==1) { Go(1); //步进电机运行 star=0; } while(star2==1&&key2==1) { back(1); //步进电机运行 //star2=0; } } }

阅读全文