89c51单片机控制两个步进电机正反转加减速

发布者:不懂之人最新更新时间:2020-02-18 来源: 51hei关键字:89c51  单片机控制  步进电机  正反转  加减速 手机看文章 扫描二维码
随时随地手机看文章

序有详细注释。

仿真原理图如下
0.png

单片机源程序如下:

/*******************************************************************************

* 实 验 名: 步进电机实验


* 使用的IO: 电机用P1口,键盘使用P2.0、P2.1、P2.2、P2.3、P2.4、P2.5


* 按键功能:K1;正转  K2;反转  K3;低速转动  K4;高速转动  K5:电机切换  K6;停止


* 实验效果: 按下K1键,顺时针转,按下K2键,逆时针转,按下K3键,低速,按下K4键,高速。


按下K5键,转动的电机停止,并切换到控制另一个电机

按下K6键,转动的电机停止,按下K1或K2时,刚才停止的电机继续转动

*******************************************************************************/

#include "reg52.h"


//电机IO


#define GPIO_MOTOR P1            //宏定义 对端口进行操作,定义电机接口为P1


//sbit F1 = P1^0;


//sbit F2 = P1^1;


//sbit F3 = P1^2;


//sbit F4 = P1^3;


//sbit F5 = P1^4;


//sbit F6 = P1^5;


//sbit F7 = P1^6;


//sbit F8 = P1^7;                //另种操作,位操作,定义电机接口为P1.0~p1.7


//按键IO


sbit K1=P2^0;          //正转


sbit K2=P2^1;          //反转


sbit K3=P2^2;          // 减速


sbit K4=P2^3;          // 加速


sbit K5=P2^4;          // 电机切换


sbit K6=P2^5;          // 停止


unsigned char code FFW_X[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //X反转顺序


unsigned char code FFZ_X[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //X正转顺序


unsigned char code FFW_Y[8]={0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f}; //Y反转顺序


unsigned char code FFZ_Y[8]={0x9f,0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f}; //Y正转顺序


unsigned char Direction,Speed,X_Y=0,stop=0;           //  Direction  转向标志位,Speed 延时函数的参数,通过改变它大小来控制电机转速

                                                                                           //X_Y 电机的参数  X_Y=0为Y电机 X_Y=1为X电机

void Delay(unsigned int t);                                           //stop为控制电机停止的标志位,但它为1时,电机停止


void Motor();                                                                   //电机旋转函数



/*******************************************************************************


* 函 数 名 : main


* 函数功能 : 主函数


* 输    入 : 无


* 输    出 : 无


*******************************************************************************/



void main(void)


{


unsigned char i;


Speed=30;                   //Speed 延时函数的参数,通过改变它大小来控制电机转速


while(1)


{


/********************检测按键K1是否按下***********************/

if(K1==0) //检测按键K1是否按下


{


Delay(1); //消除抖动


if(K1==0)


{


Direction=1;           //Direction 转向标志位,为1时为正转

stop=0;                   //按下K1时,对stop停止标志位清零,如果之前按下停止键,清零之后才能启动


}


while((i<200)&&(K1==0))//检测按键是否松开


{


Delay(1);


i++;


}


i=0;


}


/********************检测按键K2是否按下***********************/


if(K2==0) //检测按键K2是否按下


{


Delay(1); //消除抖动


if(K2==0)


{


Direction=2;                  //Direction 转向标志位,为2时为反转

stop=0;                          //按下K1时,也对stop停止标志位清零,如果之前按下停止键,清零之后才能启动


}


while((i<200)&&(K2==0))//检测按键是否松开


{


Delay(1);


i++;


}


i=0;


}


/********************检测按键K3是否按下***********************/

if(K3==0)//检测按键K3是否按下


{


Delay(1);//消除抖动


if(K3==0)


{


Speed=60;                                   //Speed 延时函数的参数,通过改变它大小来控制电机转速

                                                   //87行代码定义Speed=30;但按键K3按下后,Speed=60,这时转速就会降下来

}


while((i<200)&&(K3==0))//检测按键是否松开


{


Delay(1);


i++;


}


i=0;


}



/********************检测按键K3是否按下***********************/


if(K4==0) //检测按键K4是否按下


{


Delay(1); //消除抖动


if(K4==0)


{


Speed=20;                         //Speed 延时函数的参数,通过改变它大小来控制电机转速

                                                   //87行代码定义Speed=30;但按键K4按下后,Speed=20,这时转速就会降下来升上去

}


while((i<200)&&(K4==0))//检测按键是否松开


{


Delay(1);


i++;


}


i=0;


}


  if(K5==0)//检测按键K1是否按下


{


Delay(1);//消除抖动


if(K5==0)


   Direction=0;                                   //X_Y 电机的参数  X_Y=0为Y电机 X_Y=1为X电机

   if(X_Y==0)                                   //当切换电机时,对Direction=0;对标志位清零,防止上个电机的转向影响本次所控电机

       X_Y=1;

   else

       X_Y=0;


}


while((i<200)&&(K5==0))//检测按键是否松开


{


Delay(1);


i++;


}


i=0;


}


   if(K6==0)//检测按键K1是否按下


{


Delay(1);//消除抖动


if(K6==0)


   stop=1;                                   //stop为控制电机停止的标志位,但它为1时,电机停止


}


while((i<200)&&(K6==0))//检测按键是否松开


{


Delay(1);


i++;


}


i=0;


}


Motor();


}


}


/*******************************************************************************


* 函 数 名: Motor


* 函数功能: 电机旋转函数


* 输    入: 无


* 输    出: 无


*******************************************************************************/



void Motor()


{


unsigned char i;


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


{


if(Direction==1&&X_Y==0&&stop==0)                 //正转&Y电机&电机没按下停止


GPIO_MOTOR = FFW_Y[i]&0xf0;//取数据,‘&’按位与


if(Direction==2&&X_Y==0&&stop==0)                 //反转&Y电机&电机没按下停止


GPIO_MOTOR = FFZ_Y[i]&0xf0;


  if(Direction==1&&X_Y!=0&&stop==0)                 //正转&X电机&电机没按下停止


GPIO_MOTOR = FFW_X[i]&0x0F;//取数据


if(Direction==2&&X_Y!=0&&stop==0)                 //反转&X电机&电机没按下停止


GPIO_MOTOR = FFZ_X[i]&0x0f;


Delay(Speed); //调节转速


}


}


/*******************************************************************************


* 函 数 名  : Delay


* 函数功能  : 延时


* 输    入  : t


* 输    出  : 无


*******************************************************************************/


void Delay(unsigned int t)


{


unsigned int k;


while(t--)


{


for(k=0; k<80; k++)


{ }


}


}


关键字:89c51  单片机控制  步进电机  正反转  加减速 引用地址:89c51单片机控制两个步进电机正反转加减速

上一篇:基于单片机的火灾报警器设计
下一篇:C51单片机利用74hc138扩展流水灯的仿真电路图+程序

推荐阅读最新更新时间:2024-11-10 04:39

TMC4671驱动步进电机之tmc4671配置代码与TMC4671模拟编码器设置
ADI TMC4671是一款完全集成的伺服控制器,可为BLDC/PMSM和两相步进电机以及直流电机和音圈提供磁场定向控制(FOC)。所有控制功能都在硬件中实现。TMC4671可以为直流无刷电机、永磁同步电机、2相步进电机、直流有刷电机和音圈电机提供磁场定向控制。 此外TMC4671还集成 ADC、位置传感器接口、位置插值器,为广泛的伺服应用提供功能齐全的伺服控制器。 TMC4671硬件集成的电机控制算法及三环控制算法使得开发电机不需要编写一行代码即可完成。 而且TMC4671具有高达100kHz的开关频率和控制器更新速率,并具有滤波和插值功能,如数字霍尔信号插值,以实现更顺畅的操作。该集成电路可以与各类编码器协同工作:
[嵌入式]
TMC4671驱动<font color='red'>步进电机</font>之tmc4671配置代码与TMC4671模拟编码器设置
步进电机控制系统程序如何设计
导语:步进电机控制系统程序的设计是实现步进电机控制的重要环节。 一、确定控制要求 首先需要确定步进电机控制系统的控制要求,包括控制精度、速度、转向等方面。例如,在机械加工中,需要根据加工要求来确定步进电机的步进角度和转速等参数。 二、选择合适的控制器 根据控制要求,选择合适的控制器。常见的控制器包括单片机、PLC、DSP等。在选择控制器时需要考虑控制器的性能和成本等因素。同时还需要考虑控制器与步进电机的匹配问题,确保控制器能够正常工作。 三、设计控制程序 在设计控制程序时,需要考虑控制器的特点和步进电机的特性。下面介绍一种基于单片机的步进电机控制系统程序的设计方法。 确定输入输出端口 首先需要确定输入输出端口,包括控制器的输入
[嵌入式]
三相异步电动机正反转工作原理/控制电路图/接线图讲解
  三相异步电动机正反转工作原理   三相异步电动机的正反转工作原理是通过改变电动机的线圈接线方式实现的。在三相异步电动机中,电动机的三个线圈称为A、B、C相,它们互相之间呈120度的电位差,电动机正常运行时,三相电源的三根导线接到电动机的三个相上,即A、B、C相,此时电动机的旋转方向是由导线的相对位置和电流的相对方向决定的。   要实现三相异步电动机的正反转,需要将任意两个相的接线位置进行互换,这样电动机的旋转方向就会反转。具体来说,如果将A、B两相的接线位置互换,那么电动机就会发生反转,此时电流的相对方向和线圈的相对位置都会发生变化,导致电动机旋转方向反转。   在实际的电路中,可以通过使用一个正反转开关或者一个继电器
[嵌入式]
三相异步电动机正<font color='red'>反转</font>工作原理/控制电路图/接线图讲解
MCS-51系列单片机控制寄存器TCON(88H)
特殊功能寄存器TCON的高4位为定时器的运行控制位和溢出标志位,低4位为外部中断的触发方式控制位和锁存外部中断请求源。TCON格式如下: D7 D6 D5 D4 D3 D2 D1 D0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0   1.定时器T0运行控制位TR0      TR0由软件置位和清“0”。门控位GATE为0时,T0的计数仅由TR0控制,TR0为1时允许T0计数,TR0为0时禁止T0计数;门控位GATE为1时,仅当TR0等于1且INT0(P3.2)输入为高 电平 时T0才计数,TR0为0或INT0输入低电平时都禁止T0计数。   2.定时器T0溢出标志位TF0      当T0被允许计数以后,
[单片机]
基于STM32的步进电机速度控制
项目需求 在制作一个使用全向轮的机器人底盘,对于全向轮,电机的精度是影响效果的重要因素。所以使用了步进电机,使用步进电机的优点是可以不使用编码器,开环控制即可达到高精度的效果。 调整占空比或者调整周期 众所周知,PWM有两个重要参数,周期与占空比。 步进电机的运动方式是,每收到一个脉冲,就旋转指定的角度。因此影响电机速度的唯一参数就是PWM的频率。以下附图两张来说明调整占空比与调整周期的区别。 周期固定,调整占空比 上图中有4个PWM,它们的周期是一样的,不同之处是拥有从80%至20%的占空比。可以看出,无论占空比为多少,在1s内,它们产生的高电平的数量是一样的,即无论占空比为多少,PWM的频率都一致。因此也就无法调整步进
[单片机]
基于STM32的<font color='red'>步进电机</font>速度控制
伺服电机与步进电机的选择
最好的电机是满足应用要求的电机。然而,当伺服电机和步进电机都满足定位应用的基本要求时,对这两种技术有更深入的了解以做出明智的决定就很重要了。 在这篇博文中,我们将总结伺服电机系统和步进电机系统之间的区别。 让我们从快速比较这两种电机技术开始。 步进电机 伺服电机 优点 优点 良好的低速扭矩 没有调整,没有狩猎 紧凑的电机尺寸 高性价比 良好的高速扭矩 可用的峰值扭矩 连续工作 功能齐全 缺点 缺点 高速扭矩小 有限的工作周期 无峰值扭矩 通常以开环方式运行 需要调整 仅适用于反馈 打猎 成本 虽然伺服电机和步进电机都在转子中使用永磁体,并且需要驱动电路才能运行,但它们的设计存在根本差异,从而导致性能差异。
[嵌入式]
伺服电机与<font color='red'>步进电机</font>的选择
51单片机控制彩色点阵制作沙漏型交通灯
本文介绍了彩色点阵的使用,以及利用51单片机控制点阵制作的沙漏型交通灯,希望对打算用点阵做课程设计的同学有点帮助。 一、效果展示 二、彩色点阵的使用 彩色点阵有32个引脚,这里以背面图来讲解: 从背面看到点阵型号(就是能正看到一串数字和英文),上面的一排从左到右为 1,2,3,4, 5,6,7,8,9,10,11,12, 13,14,15,16 行控制高电平输入 列:低电平点亮绿灯 行控制高电平输入 下面一排从左到右 17,18,19,20,21,22,23,24, 25,26,27,28,29,30,31,32 列:低电平点亮红灯 列:低电平点亮蓝
[单片机]
51<font color='red'>单片机控制</font>彩色点阵制作沙漏型交通灯
解析:电压电流对步进电机的性能有什么影响
  通用步进电机驱动器都是恒流斩波的,那么在实际应用中,驱动器驱动电压和驱动器设置电流对步进电机的性能有什么影响呢?   总体来说:电压影响速度,电流影响力矩。   步进电机的矩频特性,都是在某一特定电流电压下测试的数据,当电流电压发生变化,其矩频特性也会发生相应变化。   举例来说:适用电压波动范围比较大的85电机来说,从24V到220V的驱动器都可以适用,FY86EC502A力矩为6N.m,这是在DC80V ,平均电流5A的环境下的静转矩,在300转的时候力矩约5.2N.m;如果我们把电流提高到6A的话,静转矩则提升到6.3N.m,300转时的力矩提升到5.4N.m;如果把电压降低到DC24V,电流依然保持5A,静转矩只有5.
[电源管理]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved