用C51单片机,编写脉冲控制步进电机的驱动器

作者&投稿:类梦 (若有异议请与网页底部的电邮联系)
用C51单片机,编写脉冲控制步进电机的驱动器~

楼上的真有意思,人家要c51控制步进电机驱动的毕业设计,你给弄一大堆不相关的。
楼主可以联系我,免费索取。

脉冲信号就是像流水灯差不多,用两个口。
例如:
用到P1^0和P1^1;把P10制低电平,P11制高电平,延时一段时间后,P10制高电平 P11制低电平,如此循环,看程序:
#include "reg52.h"
sbit P10=P1^0;
sbit P11=P1^1;
void delay(unsigned int x)
P10=0;P11=1;
delay(1000);
P10=1;P11=0;
delay(1000);
}
}1-B1-B1A0;
两相四线程序 接P1口

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0xfd,0xfb,0xf7,0xef};
uint i;
void delay(uint x)
{
uint y;
for(;x>0;x--)
{
for(y=0;y<124;y++);
void main()
while(1)
P1=tab[i];
i++;
if(i==4)
{
i=0;
}
delay(20);

扩展资料:
同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS,和WINBOND等;
常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取代了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。
参考资料来源:百度百科-步进电机

#include <Reg51.h>
#define uchar unsigned char
//显示扫描定时常数,定时时间5ms(fosc=6MHz)
#define TC -2500
//点动软定时常数,定时时间160ms(单位20ms)
#define TCS 8
//快速软定时常数,定时时间40ms(单位20ms)
#define TCF 2
void disp(unsigned);
sbit DOWN = P3^0; //定义P3.0脚名
sbit UP = P3^1; //定义P3.1脚名
sbit MOD = P3^7; //定义P3.7脚名
uchar dbuf[4]; //显示缓冲区
unsigned count = 0; //进给计数

Int0SER() interrupt 0 //INT0中断服务(方式切换)
{ MOD = ! MOD;
}
Time0() interrupt 1 //T0中断服务(显示扫描、步进驱动)
{ static uchar pot[4] = {0x01,0x02,0x04,0x08}; //LED位置输出数据
static uchar i = 0; //扫描位置
static uchar rht[8] = {0x01,0x03,0x02,0x06, //步进电机节拍表
0x04,0x0c,0x08,0x09};
static uchar rhi = 0; //节拍索引
static uchar str = TCF; //进给软定时器
TH0 = TC>>8; //重置T1计数初值
TL0 = TC;
//显示扫描
P2 = P2 & 0xf0;
P2 = P2 | pot[i]; //修改显示位置
P0 = dbuf[i]; //输出字形数据
if(++i==4)
{i = 0; //修改扫描位置
//步进驱动
if(--str==0)
{str = MOD==1 ? TCF : TCS;
P1 = ~rht[rhi]; //输出节拍
disp(count); //显示进给步数
if(!UP ) //正向进给
{rhi = rhi==0 ? 7 : rhi-1;
count++; }
else if(! DOWN) //反向进给
{rhi = rhi==7 ? 0 : rhi+1;
count--; }
}
}
}
main( ) //主函数
{ TMOD = 0x01; //置T0定时、方式1、内启动
TCON = 0x01;
TH0 = TCF>>8; //装入T0时常
TL0 = TCF;
IE = 0x83;
P1 = 0xff;
TR0 = 1;
while( 1 );
}
//输出函数
void disp(unsigned x)
{ //字形数据表
static uchar font[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
char i;
for(i=3;i>=0;i--)
{dbuf[i] = font[x & 0x0f];
x >>= 4; }
}

是什么步进电机啊,有没有驱动器,如果有的话,就直接给脉冲就好了。


编程,单片机C51编程
单片机c语言下lcd多级菜单的一种实现方法可通过“向上”、“向下”、“回退”、“确认”4 个键或遥控器来实现对菜单的选择。具体功能:“向上”键:在本层菜单的项目中向上移动进行选择;“向下”键:在本层菜单的项目中向下移动进行选择;“回退”键:取消本层的菜单设置,返回上层菜单;“确认”键:确认本...

c51单片机中如何用汇编语言编写流水灯
51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:;假设晶振12MHZ,P1控制8个LED低电平亮 ;启动入口=== ORG 0000H;复位启动 AJMP START;ORG 001BH;T1中断 AJMP T1INT;...

跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从...
MAIN: MOV P1, #11111110B ; P1 口 点亮一个发光二极管 ACALL DELAY ; 调用延时子程序 MOV P1, #11111101B ; 从左向右移动 一位 ACALL DELAY MOV P1, #11111011B ACALL DELAY MOV P1, #11110111B ACALL DELAY MOV P1, #11101111B ACALL DEL...

c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序
1、首先先在proteus画出仿真图,方便仿真程序。2、接着来编写程序,先来写入头函数。2、根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写。3、然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义。4、下图就是主函数,包括流水灯的反复循环和j流水灯的方向。5、检查没有错误,...

单片机C51编程(C语言):1到100的求和显示,在数码管里显示出来.
include <reg51.h> include <stdio.h> define uchar unsigned char void convert();void display();void delay();\/\/共阴:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F code unsigned char Led[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x...

用C51单片机控制12个LED流水灯的C语言程序怎么写?
include "REG52.H"\/\/控制引脚定义 sbit LED1 = PX.X; \/\/P0.0-P3.7任意引脚 ... ... ...sbit LED12 = PX.X;\/\/宏定义灯亮灯灭 define LED1_ON( ) LED1 =0 \/\/阳极接电源 define LED1_OFF( ) LED1 =1 \/\/阳极接电源 ... ... ...define LED12_ON( )...

51单片机编写lcd1602显示程序,第一行显示自己的姓名,第二行显示学号_百...
1、首先我们打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并启动器添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。2、导入51单片机的头文件以及LCD1602的头文件。3、创建一个延时函数,可以传入想要具体延时的时长,...

C51单片机计时器50ms程序编写
12MHz晶振,经典51核是12分频,因此时钟周期为1μs。50ms = 50000μs,因此定时器累加至溢出需要50000个周期。因此65536 - 50000 = 15536 = 0x3CB0 因此TH0 = 0x3C,TL0 = 0xB0。0x4C00这个初值对应的不是12MHz晶振,*而是11.0592MHz晶振。你抄错了。

C51单片机程序编写
include <REG51.H> include <intrins.h> define uchar unsigned char void delay(uchar ms);void main(){ uchar i,LED;\/\/定义两个变量 P2 = 0xFF;\/\/初始化P2口 LED = 0x7F;\/\/初始化变量 while(1){ for(i=0;i<8;i++){ P2 = LED;\/\/LX灯亮其它灭 delay(100);\/\/稳定显示100毫秒...

c51单片机程序实例
include<reg51.h>#define uchar unsigned charuchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; \/\/0到9uchar num,cnt,disn;uchar keyval,disk;uchar led[]={1,2,3,4};void dealdat(uchar a){led[0]=0;led[1]=0;led[2]=0;led[3]=0;led[a]=...

五华区18824652726: 可以给发一个用C编写通过C51单片机控制步进驱动器的简单案例嘛(包括加减速,运行速度,脉冲频率).谢谢 -
实厘丁疏: 楼主:步进驱动器是两相电机吧,主要是加一个驱动芯片;然后通过单片机编写代码即可完成;编写时制作几个数组,分别是全步、半步、1/4步等.然后在单位时间内进行IO控制就好了,主要参考驱动芯片的时序.代码就要自己慢慢写,慢慢调!

五华区18824652726: 单片机控制步进电机的程序编写 -
实厘丁疏: #include <REGX51.H> #define uchar unsigned char #define uint unsigned int sbit s1=P3^5; sbit s2=P3^6; sbit s3=P3^7; uchar keyval;void delayms(uchar z) { uchar i,j; for (i=z; i>0; i++) for(j=110;j>0; j++); } void delay() { uint k; for(k=0;k<2000;k++); } ...

五华区18824652726: 我想用单片机控制步进电机,请问该如何输出步进脉冲?诸位请教一下,给些C程序 -
实厘丁疏: //电机正转8步一个脉冲周期函数 void Arunz(unsigned int step,unsigned int TIM) { unsigned int a,b,c,d; a=wfa; for(b=step;b>0;b--) { WDTR=0x5A; switch(a) { case 0: FP23=0; FP22=0; FP21=1; FP20=1; break; case 1: FP23=0; FP22=0; FP21=1; FP...

五华区18824652726: 单片机控制步进电机 -
实厘丁疏: 但用单片机是不够的,关键是要有个专用的驱动芯片,驱动芯片含有每相电流检测,当收到单片机相位开关信号时打开电流通路,由电机电感形成三角波电流,到达电机额定电流即停止而维持等待下个相位信号,并且该芯片还有停转保持半电流控制脚等功能,具体可参考芯片资料,才能根据芯片功能编程,步进电机越转越快可通过单片机对相应相位脚发控制脉冲,使脉冲频率变快就可实现,但最高速度受给驱动芯片的主电源电压有关,电压低时电感中的三角波电流到不了额定就可能发生不同步. 如果带有电机控制器的,控制器只有步进输入脉冲脚,正反转控制脚,就可对控制器的这两脚控制,在步进输入脚脉冲加快就可使转速加快.

五华区18824652726: 51单片机控制步进电机程序.在线等高分,请会写的高手大侠写出来. -
实厘丁疏: 我上周刚做的这个实验 成功拉,给你参考一下吧 这可是我当时辛辛苦苦编出来的啊,不过我用的是L298驱动的 和ULN2003一样,你把它换成2003就行拉#include <AT89X51.H> unsigned char code table[]=; unsigned char temp,temp_old; ...

五华区18824652726: 单片机接控制步进电机的程序 很简单的 过来看看吧 -
实厘丁疏: 把来break改为while(1)试下,,当a=100,时,让程序停在那里..如果你用break,当a=100时,程自序退出去了,这时单片机不知道该干什么事了,所以他百有可能又再次进入主函数运度行,就一直转了,

五华区18824652726: 单片机怎样控制步进电机的正反转以及加减速C51编程,急求...谢谢... -
实厘丁疏: 简单应用,采用开关控制型驱动器如英纳仕EZD552,改变方向信号的的高低电平,即控制了步进电机的正反转.

五华区18824652726: 跪求:单片机控制步进电机的原理 -
实厘丁疏: 步进电机控制原理 步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制.步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步...

五华区18824652726: 哥,步进电机驱动器怎么用单片机控制啊? -
实厘丁疏: 步进电机驱动器一般接受的控制信号为: 1、cw+ccw,即正转脉冲加反转脉冲 2、pulse+dir,即脉冲加方向 一般驱动器都可以兼容两种方式,即通过DIP开关选择采用哪种方式. 如此,你用单片机控制起来就很方便了,用两个IO口发控制信号就OK了,哪种方式都可以,脉冲的频率大小决定电机的速度快慢. 当然,你也要注意驱动器需要信号的电压大小,如果是5V,直接IO相连就行,如果需要12V,那么需要加个光耦就行了.

五华区18824652726: 用51单片机怎么控制步进电机(需要程序并解释) -
实厘丁疏: /************************************************************************************** * 步进电机实验 * 实现现象:下载程序后,按照光盘内操作视频接线,步进电机旋转 注意事项:无 ************************************************************************************...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网