步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。步进电机必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。

技术指标:

(1)、相数-----------电机内部的线圈组数。电机相数不同,一般二相电机的步距角为0.9°/1.8°。

(2)、步距角--------表示控制系统每发一个步进脉冲信号,电机所转动的角度。二相四线步进电机步距角为0.9°/1.8°(表示 半步工作时为0.9°、整步工作时为1.8°),这个步距角称为“电机固有步距角”。

(3)、拍数-----------完成一个 磁场周期性变化所需要脉冲数或导电状态。

工作原理:

两相四线步进电机以8拍方式工作,则每个脉冲旋转0.9°,即每旋转一圈需要400个脉冲信号来励磁。步进电机的正、反转由励磁脉冲产生的顺序来控制,它的控制等效电路如图所示:

它有4条励磁信号引线1,2,3,4分别代表A,-A, B, -B。通过控制这4条引线上励磁脉冲产生的时刻,即可控制步进电机的转动。每出现一个脉冲信号,步进电机只走一步。因此,只要依序不断送出脉冲信号,步进电机就能实现连续转动。

一-二相励磁-----为一相励磁与二相励磁交替导通的方式。每送一个励磁信号,步进电机旋转0.9°。

励磁顺序表:

STEP              A            -A           B               -B

1                    1            0            0                0

2                    1            0            1                0

3                    0            0            1                0

4                    0            1            1                0

5                    0            1            0                0

6                    0            1            0                1

7                    0            0            0                1

8                    1            0            0                1

L298N引脚图:

逻辑输入IN1~IN4分别与单片机的控制引脚相连,输出A和输出B(OUT1~OUT4)分别与电机的A、-A、B、-B相连。

12V供电和GND使用稳压电源(可以电源适配器6-12V,我使用的是8.2V)。

注意:同时GND还要与单片机的GND相连接,这样才能控制。

最后STC89C51的步进电机控制代码代码:

其中IN1~IN4分别与P1.0~P1.3口连接。使用定时器T0实现准确延时。

//*********************************************
//Developer:Saber
//Project:Motor Control
//Time:2018/4/18
//*********************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned intstatic unsigned int count;
static unsigned int endcount;
//八拍驱动方式正转表 A-B- --> B- --> B-A --> A --> AB --> B
// --> BA- --> A- --> A-B-
uchar upstep8_table[]={0x05,0x01,0x09,0x08,0x0A,0x02,0x06,0x04};//四拍驱动方式正转表 A --> B --> A- --> B-
uchar upstep4_table[]={0x08,0x02,0x06,0x01};void delay(uint ims);               //变量延时函数
void Interrupt0_Init();             //中断0初始化
void MotorSpeedOrDirection(uint var, uchar state);        //控制电机转速和方向
void ConStep(uchar var);            //步进控制器
void MotorStop(void);               //停止void main()
{unsigned int sum=0;P1 = 0x00;count = 0;Interrupt0_Init();while(1){MotorSpeedOrDirection(1, 0);}
}//******************************
//      步进电机停止函数
//作用:停止
//******************************
void MotorStop(void)
{P1 = 0x00;
}//******************************
//      外部中断0初始化函数
//作用:初始化外部中断
//******************************
void Interrupt0_Init()
{EA = 1;TMOD = 0x11;ET0 = 1;//   TH0=0xFF;
//  TL0=0x28;TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1;
}//******************************
//      中断处理函数
//作用:定时器0的中断处理
//******************************
void timeint(void) interrupt 1
{
//  TH0=0xFF;
//  TL0=0x28;   //216----234us
//  定时器定时1msTH0=(65536-1000)/256;TL0=(65536-1000)%256;count++;
}//******************************
//
//延时i ms
//******************************
void delay(uint ims)
{endcount=ims;count=0;do{}while(count<endcount);
}//******************************
//      步进电机驱动函数
//作用:通过变量var控制电动机的转速高低,通过变量state判断电动机的正反转
//          state:0 正转,state: 1 反转
//使用8拍能够实现比较平滑的转动,使用4拍时电机震动比较大。
//******************************
void MotorSpeedOrDirection(uint var, uchar state)
{uchar i=0;if(!state){for(i=0; i<8; i++){P1=upstep8_table[i];delay(var);}}else{for(i=7; i>0; --i){P1=upstep8_table[i];delay(var);}}
}//******************************
//      步进控制函数
//作用:通过变量var控制旋转圈速
//******************************
void ConStep(uchar var)
{uchar i=0,j=0,m=0,k=0;while(k++<var){for(i=0;i<20;i++){for(m=0;m<20;m++){P1=upstep8_table[j];j++;if(j>=8)             //每8次一个循环j=0;delay(1);}}}
}

基于STC89C51和L298N的42步进电机控制相关推荐

  1. 42步进电机控制入门

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.什么是42步进电机 二.步进电机驱动板 三.电路接线 四.实验室实验操作 总结 前言 随着考试结束回到老家,翻了一 ...

  2. 基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(七)基于CrossApp跨平台框架的MQTT客户端控制应用android版

    本文在前一篇基础上,详细介绍以CrossApp跨平台框架为基础,利用mosquito库和easySQLite库设计实现了基于MQTT协议的android版步进电机控制客户端. 一.开发环境的准备 编译 ...

  3. “S“型曲线加减速在42步进电机的位置控制和速度控制中的交叉应用

    "S"型曲线加减速在42步进电机位置和速度交叉控制应用 兴趣使然,兴趣使然-哈哈,花了一个多星期研究了一下S型曲线在步进电机的加速减速中应用,以及简单的结合了一下位置控制和速度控制 ...

  4. 基于ESP8266WiFi步进电机控制

    ■ 步进平台驱动模块 在 基于ESP8266WiFi控制的不仅升降机械平台 介绍了该机械平台的特性和支持命令,但还存在一下两部分内容需要改造: 在步进电机控制的升降平台运动过程中,两端的极限位置没有能 ...

  5. STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序

    STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序 一.ULN2003驱动器 1.工作原理 2.步距角以及一圈所需步数的计算 二.硬件连接 三.STM32F103定时器中断 ...

  6. 步进电机的计算机控制系统设计,基于计算机并口的步进电机控制系统设计

    [摘要]本文提出了一种基于计算机并口的步进电机的控制方法,精确实现对步进电机旋转方向.转速及步距数的控制,用计算机并行口与步进电机进行通信,具有传输率高.低成本的特点.本文对步进电机控制系统的驱动电路 ...

  7. 51单片机控制TB6600驱动器驱动42步进电机

    51单片机控制TB6600驱动器驱动42步进电机 第一次 功能实现目标 硬件简介 硬件连接 程序代码 第一次 以前总是看别人写的博客,通过别人的博客解决了我很多问题,从中也学到了各种知识,虽然不是很系 ...

  8. 【电机控制】Arduino mega 2560控制42步进电机接线

    Arduino mega 2560控制42步进电机接线图 ****TB6600驱动器与42步进电机接线图**** 接线: 12V电源适配器正负极分别接驱动器VCC和GND 步进电机黑绿红蓝线分别接驱动 ...

  9. 水位传感器c语言程序,基于STC89C51单片机的水位传感器控制系统设计.doc

    基于STC89C51单片机的水位传感器控制系统设计 摘 要 本设计简单.方便.成本低,采用的是比较优化的电路设计方案:以单片机STC89C51为核心控制水塔水位, 利用简易的水位传感器进行水位信号采集 ...

  10. 【arduino】arduino uno + A4988控制42步进电机

    http://blog.csdn.net/ling3ye/article/details/47001251 MS1 , MS2 , MS3 跳线说明:(例子里是低电平,悬空或接地线,使用全步进模式) ...

最新文章

  1. Pytorch可视化工具tensorboardX(安装不踩坑)
  2. 【转载】WINCE物理和虚拟地址的问题
  3. 小学一年级第一次上计算机课,小学一年级上册信息技术教案【三篇】
  4. 【数据结构与算法】之深入解析“太平洋大西洋水流问题”的求解思路与算法示例
  5. pl/postgresql_将PostgreSQL PL / Java安装为PostgreSQL扩展
  6. 一个报文的路由器之旅_一个报文的路由器之旅
  7. mysql-电商库演练2-拆表-修改字段-添加外键
  8. FaceDetector(人脸识别)
  9. 数学建模笔记2方法分类
  10. PD2SE-Net:植物病害诊断和严重性评估网络(首次)
  11. iOS报错:linker command failed with exit code 1 (use -v to see invocation) 问题解决方式之一
  12. 后端-SpringBoot MySql 连接语句
  13. pp助手苹果版_微商相册助手ios版下载-微商相册助手苹果版下载v1.0.8
  14. 微信小程序实现客服默认自动回复功能
  15. 误删除数据恢复 plsql
  16. 武汉大学:最美大学最美网络
  17. 青春期发育阶段的测量
  18. Cesium加载建筑物模型(shp转Geojson\3Dtiles)
  19. 三级分销如何做分销推广 如何设置分销比例
  20. Nordic芯片怎样烧录UICR

热门文章

  1. 记一次spirngMVC整合HttpPrinter的过程
  2. 机器学习笔记 - 基于最简单的编码器/解码器架构SegNet进行语义分割
  3. java 虚拟机常用启动参数
  4. java to vb converter_VBto Converter
  5. Ubuntu 下安装 GCC 的方法
  6. 高质量计算机学习网站
  7. PMP更新教材了,怎么备考?
  8. 机敏问答[博弈][0] #20210628
  9. 软件实习项目4——校园一卡通管理系统(代码实现)
  10. Java丨基础:十三、集合