求51单片机控制步进电机,实现其间歇运动的程序,最好要有C语言的

求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) //延时函数
{
while(--t);
}

void delayms(unsigned int t) //毫秒级延时
{
unsigned int i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--)
;
}

void qudong(unsigned char t,bit flag) // t范围0~4控制转速,flag表示正反转
{

unsigned char zz,i;

if(t) // 先判断t是否为0,如果是,就没必要进行下面的判断
{
if(flag) //flag=1;为正转
{
switch(t) // 选出几级速度
{

case 1: zz=4;break;
case 2: zz=3;break;
case 3: zz=2;break;
case 4: zz=1;break;
}

for(i=1;i<=8;i++) //实现转动
{
P1=table1[i];
delayus(zz*100); //100可以改,晶振不同有所不同,直到感觉转动平滑有力为止

}

}

else

{ switch(t)
{

case 1: zz=4;break;
case 2: zz=3;break;
case 3: zz=2;break;
case 4: zz=1;break;
}

for(i=8;i>=1;i--) //反转
{
P1=table1[i];
delayus(zz*100);

}

}

}

else

P1=table1[0];

}

main()
{
unsigned char k,j;

while(1)
{
for(k=30;k>0;k--)
qudong(1,0); //1表示1级转速,0表示反转,自己改就行了

delayms(500); //延迟500ms

}

}

我是个初学者,有什么错的敬请谅解,如果你也是,那么我们可以交流交流,还有什么不懂接着问就行了追问

你这个函数可以控制到大概多少转速哦?

追答

步进电机本来转的很慢,这个我也不确定会有多大转速,具体你可以查查资料,好像是走完{0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}转动多少度。主要理解它为什么会转,为什么能转快慢就行了,如果你想做到精确控制转多少度的话,你得再查查资料哦!

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-22
#include<reg51.h>

#define uchar unsigned char
uchar step[]={0x0a,0x06,0x05,0x09};
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
uchar i,j;
while(1)
{
for(i=0;i<25;i++)

{
for(j=0;j<4;j++)
{
P0=step[j];

delay(4);

}

}

delay(250);

for(i=0;i<25;i++)

{
for(j=3;j>=0;j--)
{
P0=step[j];

delay(4);

}

}

delay(250);

}

}本回答被提问者和网友采纳

求51单片机控制步进电机,实现其间歇运动的程序,最好要有C语言的
\/\/#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) \/\/延时函数 { while(--t);}...

关于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[...

步进电机驱动程序C语言
sbit bujin_fx_stop = P3^4; \/* 接步进电机 ,反向到位传感器 ,为 0 停机 *\/ sbit shache = P3^5; \/* 接刹车控制继电器 0 电位有效 *\/ sbit pri_dj = P3^6; \/* 接主电机控制继电器 0 电位有效 *\/ void main(){ TCON = 0x01;display();while(1) { IE...

51单片机控制步进电机
我们采用P1口来采集ADC0832的8位数据,用P0.0口控制步进电机动作,利用T0的时间中断来采集P1口的ADC0832数据并做出比较后设置步进电机启动标志位start=1;并设置他的运行频率,当然,楼主没说怎么比较,我这就只是写了个简单的例子,一通百通,希望对你有帮助 下面是程序:include <reg51.h> \/\/选用...

如何用c51编写51单片机控制步进电机转动程序
A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h )pc总是指向下一条指令的首地址的。但是在返回的时候得看堆栈中的数了。上面程序执行完之后:(A)=50H;sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后ret有在返回的时候减了两次...

求用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);...

51单片机步进电机正反转程序
单片机控制步进电机,我想你说的是两相步进电机,一般是控制其相序分配的顺逆从而控制正反转,一般而言,步进电机相序分配你可以做成一个数组比如step[]={0x03,0x06,0x0c,0x09},这样来说可以假设P0口是步进电机控制口,那么可以按如下方式来控制: while(1) { for(i=0;i<4;i++) { if(fx==1...

51单片机控制步进电机正反转、加减速
51单片机控制步进电机正反转、加减速 我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能加速了并且减几下就变得很慢了(经测试上下限都是可以正常速度运转的)求各位路过的大侠指点... 我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能...

求51单片机步进电动机控制设计程序
51单片步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:(1)控制换相顺序 通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。(2)控制步51单片进电机的转向 ...

用51单片机发脉冲给驱动器来控制步进电机,接线一切正常,点击出现间歇...
看了你的程序,你应该没有帖完整程序吧? 你贴出的部分就是一个用Nop延时控制方波频率的程序,没问题,关键是你的其他中断程序(比如串口接收)会打破这个时间,如果你有其他中断程序也贴出来,如果没有,再查查你的OC输出电路的波形.

相似回答