求单片机控制步进电机的的c程序

要求8细分,电机实现正反转

几相的步进电机啊?用不用驱动芯片?用的话选什么型号的驱动芯片?你要说具体点啊!
先给你三相的,个不用驱动芯片的步进电机程序。(驱动电路自己做)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint time

void timer1(void) interrupt 1 using 1{ //定时器0中断,定时1ms//
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
time++;
}

void delay(uint n){ //一般延时
while(--n);
}

void delay(uint dtime){ //延时
TR0=1;
while(time<=dtime);
time=0;
TR0=0;
}

void moto(bit cf,uchar n,uint dtime){ //电机驱动子程序,
uchar idata zhpai[4]={0x78,0xb8,0xd8,0xe8};
uchar idata fpai[4]={0xe8,0xd8,0xb8,0x78};
uchar i,l=0;
if(cf==0) //正转,A-B-C-A
for(i=0;i<n;i++){
P1=zhpai[l];//P1.7~1.4为输出口,分别为A、B、C、D
l++;
delay(dtime);
if(l==4)l=0;
}
else{ //反转,C-B-A-C
for(i=0;i<n;i++){
P1=fpai[l];
l++;
delay(dtime);
if(l==4)l=0;
}
}
}

void main(){
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
while(1){
moto(0,4,70);//正转,转四相,每相间隔70ms
delay(10000);
moto(1,4,70);//反转,转四相,每相间隔70ms
delay(10000);
}
}

改为四相了,你看看吧。不懂再问吧。
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-04-22
几相的步进电机啊?用不用驱动芯片?用的话选什么型号的驱动芯片?你要说具体点啊!
先给你三相的,个不用驱动芯片的步进电机程序。(驱动电路自己做)
#include<reg51.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uint
time
void
timer1(void)
interrupt
1
using
1{
//定时器0中断,定时1ms//
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
time++;
}
void
delay(uint
n){
//一般延时
while(--n);
}
void
delay(uint
dtime){
//延时
TR0=1;
while(time<=dtime);
time=0;
TR0=0;
}
void
moto(bit
cf,uchar
n,uint
dtime){
//电机驱动子程序,
uchar
idata
zhpai[4]={0x78,0xb8,0xd8,0xe8};
uchar
idata
fpai[4]={0xe8,0xd8,0xb8,0x78};
uchar
i,l=0;
if(cf==0)
//正转,A-B-C-A
for(i=0;i<n;i++){
P1=zhpai[l];//P1.7~1.4为输出口,分别为A、B、C、D
l++;
delay(dtime);
if(l==4)l=0;
}
else{
//反转,C-B-A-C
for(i=0;i<n;i++){
P1=fpai[l];
l++;
delay(dtime);
if(l==4)l=0;
}
}
}
void
main(){
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
while(1){
moto(0,4,70);//正转,转四相,每相间隔70ms
delay(10000);
moto(1,4,70);//反转,转四相,每相间隔70ms
delay(10000);
}
}
改为四相了,你看看吧。不懂再问吧。
第2个回答  2008-07-20
强!

单片机控制步进电机要求:有加速、减速、停止、正转、反转按钮,电机是四...
我用的是控制一个步进电机的,这个是我以前写的,你的要求在下面的程序做修改就行了;程序如下:include <reg52.h> define uchar unsigned char define uint unsigned int \/\/uchar table[]={0x18,0x30,0x60,0x48,0x48,0x60,0x30,0x18}; \/\/二相励磁 uchar table[]={0x08,0x10,0x20,0x...

求单片机AT89C52控制步进电机的程序 谢谢! 要C语言的
P1=F_Rotation[i]; \/\/输出对应的相 可以自行换成反转表格 Delay(500); \/\/改变这个参数可以调整电机转速 } } } }

51单片机控制步进电机正反转、加减速
我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能加速了并且减几下就变得很慢了 (经测试上下限都是可以正常速度运转的) 求各位路过的大侠指点#include<reg51.h>sbit k1=P1^1; \/\/启动sbit k2=P1^0; \/\/正反转sbit k3=P1^2; \/\/加速sbit k4=P1^3; \/\/减速unsigned...

求51单片机控制步进电机,实现其间歇运动的程序,最好要有C语言的
include<reg52.h> \/\/#include"delay.h" \/\/在本文件中加入一个延时函数,或添加带有延时函数的.c文件 unsigned char code table1[]={0x00,0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};\/\/0x00表示停止转动 \/\/ \/\/bit flag;\/\/正反转标志 void delayus(unsigned int t) \/\/延时函数...

步进电机驱动程序C语言
步进电机控制程序(c语言+51单片机)include<reg51.h> define uint unsigned int define uchar unsigned char define ms *77 \/\/ f = 12 M define LEDLen 4 define Dj_star() {IE=0x81; pri_dj=0; } define Dj_stop() {IE=0x00; pri_dj=1; P1=0xff; shache="0"; delay(800ms);...

求用51型的单片机控制步进电机,要求步进电机转90度后停5秒,再转90度...
另一种是带脉冲分配的,单片机发过来一串方波脉冲,脉冲个数决定转动的步数,另外输出一个控制正转和反转的信号 这两种驱动器的单片机程序当然是不一样的 用C语言编程很简单:(第一种驱动器)for(i=0;i<4;i++){ for(j=0;j<3;j++)\/\/循环3次每次4步,12步是90度 { P0=1;delay_ms(2);...

单片机C语音控制步进电机正反转程序
以下是一个简单的程序代码示例,用于控制步进电机的正反转:首先,定义步进电机的四相绕组为A、B、C、D,通过脉冲控制其正反转。正转控制代码示例:c include define DELAY_1 0.001s void delay(int n){ int i;for (i = 0; i < n; i++);} void main(){ while (1){ \/\/ AB→BC→...

求用AT89S52单片机控制的 两相四线步进电机 的程序,要C语言的
unsigned char Steprun[8]={0x01,0x05,0x04,0x06,0x02,0x0a,0x08,0x09};\/\/控制方式 A AB B B\/A \/A \/A\/B \/B \/BA unsigned char num;void t0_isr() interrupt 1 { TH0=(65536-speed)\/256;TL0=(65536-speed)%256;StepMotor=Steprun[num];num++;num%=8;} void delay(unsigned...

求单片机C语言高手以下是计算步进电机速度的程序,帮忙详细的解释一下...
RunSpeed应该是延时时间,用来控制速度的,RunSpeed值越大,步进电机速度越低。SPEED[0]=(1000*6\/RunSpeed\/100)+48;SPEED[1]=1000*6\/RunSpeed%100\/10+48;SPEED[2]=1000*6\/RunSpeed%10+48;以上三个式子是求速度的百位,十位和个位,后面+48即加30H=48用来转换成ASCII码的。说的对,哥们就...

关于51单片机控制步进电机编程(c语言),求助
include <reg52.h> define uchar unsigned char define uint unsigned int uchar key_l,key,i;uchar code temp1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};uchar code temp2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};uchar code aa[16]=" :";uchar code smg[...

相似回答