51单片机, 编一个控制步进电机转动的程序。
发布网友
发布时间:2022-04-24 23:03
我来回答
共2个回答
热心网友
时间:2023-08-07 09:38
#include <reg51.h> //51芯片管脚定义头文件
#include <intrins.h>//内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms
/*
/********************************************************/
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k<125; k++)
{ }
}
}
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void motor_ffw(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //转1×n圈
{
for (i=0; i<8; i++) //一个周期转30度
{
P1 = FFW[i]; //取数据
delay(15); //调节转速
}
}
}
/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void motor_rev(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //转1×n圈
{
for (i=0; i<8; i++) //一个周期转30度
{
P1 = REV[i]; //取数据
delay(15); //调节转速
}
}
}
/********************************************************
*
* 主程序
*
*********************************************************/
main()
{
while(1)
{
motor_ffw(5); //电机正转
delay(5000); //换向延时
//motor_rev(5); //电机反转
//delay(1000); //换向延时
}
}
/********************************************************/
热心网友
时间:2023-08-07 09:39
使用单片机直接发脉冲的话,低速可以,但是速度快了或者需要低速加速到高速运行,两个或者多个电机协同运行的时候,单片机就没有办法了。这种情况可以考虑使用单片机加专用运动控制芯片,比如hmc8033,8045多轴运动控制芯片,高速插补T型S型加减速由芯片完成,单片机就发送指令就可以了,使用非常简单
如何用c51编写51单片机控制步进电机转动程序
A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h )pc总是指向下一条指令的首地址的。但是在返回的时候得看堆栈中的数了。上面程序执行完之后:(A)=50H;sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后ret有在返回的时候减了两次...
求51单片机控制步进电机程序
void MOTOR(void){ //步进电机正反转一步子程序 code unsigned char MOTOR_DB[]={0x00,0xb0,0x90,0xd0,0x50,0x70,0x60,0xe0,0xa0,0x00};//定义电机输出编码 unsigned char i;MOIC=0; //开电机电流 i=0; //电机输出编码初值设00 CBB=10; //设减小电机电流时间设为10 i...
51单片机控制步进电机
我们采用P1口来采集ADC0832的8位数据,用P0.0口控制步进电机动作,利用T0的时间中断来采集P1口的ADC0832数据并做出比较后设置步进电机启动标志位start=1;并设置他的运行频率,当然,楼主没说怎么比较,我这就只是写了个简单的例子,一通百通,希望对你有帮助 下面是程序:include <reg51.h> //选用...
求keil-c51单片机控制步进电机运行的点动程序,一定要是点动功能的程序...
while(!key);//等待键抬起 num++;//计数值加1 num&=0x07;//计数值调整,使之不大于7 P0=step[num];//送步进数据 for(i=0;i<120;i++);//延时约1毫秒 } }
一个51单片机同时控制2个步进电机的C语言程序
include "string.h"include "math.h"xdata unsigned char PA _at_ 0x7f00;xdata unsigned char PB _at_ 0x7f01;xdata unsigned char PC _at_ 0x7f02;xdata unsigned char caas _at_ 0x7f03; //控制字 sbit P32=P3^2;sbit P33=P3^3;sbit P35=P3^5;define uchar unsigned char define ...
51单片机,如何给一个指令控制步进电机转动90度,再给另外一个指令,反转...
1、首先看看步进驱动器的细分设定,找出转动一圈需要的脉冲个数,再计算出转动90°需要的脉冲个数N;2、根据接线,使单片机的IO端口输出高电平或低电平,控制转动方向;3、根据需求的转动速度,设定定时器的定时常数,启动定时;4、在定时器的中断程序中,取反IO端口,如CPL P1.1,并计数。使单片机...
关于51单片机控制步进电机编程(c语言),求助
e=1;delay(50);e=0;delay(50);} void w_dat(uchar dd){ rs=1;rw=0;e=0;delay(50);P0=dd;e=1;delay(50);e=0;} void init(uchar smg4[],uchar time[]){ w_cmd(0x38);delay(2000);w_cmd(0x38);delay(500);w_cmd(0x38);//注意顺序 ,设置工作方式,显示模式设置 delay(...
51单片机驱动步进电机,能正反转,键盘调速,数码管显示转速
void delay(unsigned int t);sbit F1 = P1^0;sbit F2 = P1^1;sbit F3 = P1^2;sbit F4 = P1^3;unsigned char code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //反转 unsigned char code FFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正转 unsi...
求51单片机控制步进电机,实现其间歇运动的程序,最好要有C语言的
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可以改,晶振不同有所不同,直到...
求51单片机步进电动机控制设计程序
51单片步进电机控制原理与控制设计程序 51单片步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。51单片步进电机区别于其他控制电机...