用C51单片机,编写脉冲控制步进电机的驱动器
发布网友
发布时间:2022-05-12 06:52
我来回答
共2个回答
热心网友
时间:2024-02-19 03:13
#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; }
}
热心网友
时间:2024-02-19 03:14
是什么步进电机啊,有没有驱动器,如果有的话,就直接给脉冲就好了。追问白山步进电机型号BSHB368,没有驱动器。我需要一产生脉冲的电路,请大侠赐教
如何用c51编写51单片机控制步进电机转动程序
A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h )pc总是指向下一条指令的首地址的。但是在返回的时候得看堆栈中的数了。上面程序执行完之后:(A)=50H;sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后ret有在返回的时候减了两次...
步进电机用单片机控制转动
很简单,看你的意思,你应该已经有了与之配套的【步进电机驱动器】,那就可以用单片机I/O口控制了,一路输出CP脉冲信号,一路输出DIR方向信号,电源接好后,连通电路,就OK了。简单的C51调试程序:一个大的FOR循环里包含:【C P脉冲信号】:可以用一个有限的FOR循环(循环时间可控制在几秒钟左右)...
怎样用51单片机接两相步进电机驱动器来控制步进电机?
脉冲信号就是像流水灯差不多,用两个口。例如:用到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(10...
求51单片机步进电动机控制设计程序
51单片步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:(1)控制换相顺序 通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。(2)控制步51单片进电机的转向 ...
请问单片机控制步进电机 脉冲频率如何思路。C51
一般来讲步进电机在购买的时候随机的说明书或者产品质量保证条件里边有一项电机的最高响应频率,就是说高于这个频率电机可能丢步。那么单片机也好,硬件也好,既然是为这个电机服务,那么其输出的步进脉冲频率一定不能高于电机参数中的响应频率。步进电机的响应频率各不相同,需要购买时甄别。
用51单片机产生PWM 控制步进电机的256细分,以下是protues原理图和C语...
试着玩的,你参考一下吧:/***四相步进电机驱动实验***/ include<reg51.h> unsigned char ABCD=0; //工做相标志 unsigned char TIM=0;sbit LD=P1^5;sbit LC=P1^4;sbit LB=P1^3;sbit LA=P1^2;void main(void){ LA=1;LB=0;LC=0;LD=0;TMOD = 0x01;TH0 = 0x3C;TL0 = 0xB...
51单片机步进电机正反转程序
//正向 else P0=step[3-i]; //反向 delay(x); //x大小决定电机速度。根据电机相数买个驱动器。然后用单片机产生脉冲来控制电机的转动以及正反转。单片机产生脉冲的方法和单片机控制流水灯是一样的。ULN2003D 是驱动步进电机的驱动芯片,主要是匹配电机所需的电流。 由于是四相电机,步进电机之所以可...
步进电机1、要配置51单片机还要配置步进电机驱动器吗?2、配置步进电机...
步进电机之所以要驱动器,是因为其需要较大的驱动电压及电流,一般单片机IO口不足以驱动;驱动器位于单片机与步进电机之间,单片机IO口控制驱动器与驱动步进电机,IO口与步进电机的励磁端口是逻辑相连的。对于你3个提问中分别提到的三个概念:51单片机、步进电机驱动器、步进电机控制器——我们通过把后两者合...
用51单片机控制3个步进电机时的程序!越详细越好。
程序是指基本指令,通过范围内的修改达到使用目的。一个步进电机控制器和3个步进电机的控制器只是脉冲输出点位不一样而已(芯片不一样)当然,输出的IO点也会增加,3个步进电机的控制器可以控制1~3个步进电机不同的工作,基于51单片机的开发代码指令和软件由芯片生产商提供,基础代码由控制器工程师提供,...
用单片机对步进电机进行控制
很多工业控制设备对位移和角度的控制精度要求较高, 一般电机很难实现, 而步进电机可精确实现所设定的角度和转数。本设计主要是运用51 单片机控制六线4 相步进电机系统, 由单片机产生驱动脉冲信号, 控制步进电机以一定的转速向某一方向产生一定的转动角度。同时能够利用单片机实现电机的正、反转及速度控制,并能在数码管...