基于STC89C51和L298N的42步进电机控制

2023-05-16

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

    技术指标:

    (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 int

static 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
//  定时器定时1ms
	TH0=(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);
			}
		}
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STC89C51和L298N的42步进电机控制 的相关文章

  • 使用PE微盘制作启动U盘变成两个盘符后,恢复原始状态

    在利用好系统U盘启动制作了U盘启动盘后 xff0c 我们就可以重装系统了 重装系统后 xff0c 有些朋友想要将U盘启动盘复原成普通U盘 xff0c 但发现仅仅靠格式化还不能完全释放空间 xff0c 这该怎么办呢 xff1f 别着急 xff
  • Idea搭建第一个Vue脚手架项目和遇到的问题

    官方教程传送门 新旧版的命令和项目结构不太一样 xff0c 具体可以看上面的官方文档 配置环境 见https blog csdn net qq 33189961 article details 106970036 在IDEA新建static
  • docker部署nodejs项目

    本文主要分享使用docker部署nodejs项目 使用docker部署项目主要分为三步 1 创建nodejs项目 编写package json为项目安装依赖所用 34 name 34 34 expressPro 34 34 version
  • Android 开发跨进程大图

    对于跨进程传输数据的问题 xff0c 我之前也写了一篇 xff0c 配合阅读效果更好 xff1a Android 开发太难了 xff0c 这异常竟然捕获不到 xff1f 1 抛一个问题 这一天 xff0c 法海想锻炼小青的定力 xff0c

随机推荐

  • linux修改键位:ctrl与caps调换

    ctrl比caps的使用频率更高 xff0c 但是ctrl的位置却对小拇指并不友好 有时使用gnome tweak tool设置键位并没有生效 下面介绍两个简单的方法修改键位 1 使用xmodmap修改键位 我们可以使用包管理器轻松安装xm
  • pandas无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported

    原因是最近xlrd更新后只支持 xls文件 所以pandas read excel xxx xlsx 会报错 可以安装旧版xlrd xff0c 在终端中运行 xff1a pip3 uninstall xlrd pip3 install xl
  • python&多路归并

    问题 xff1a 在项目中 xff0c 需从待分析的数据中选出最大的前几名 xff0c 但由于数据量太大 xff0c 直接排序会内存报错 xff0c 因此尝试用多路归并的思路来解决问题 接口 xff1a 一个目录下有x个已排序好的csv 最
  • 03_spring的基本配置

    bean元素的id和name属性 在Spring配置中 xff0c id和name属性都可以表示bean元素的名称 xff0c 不同的是 xff1a id属性 xff0c 遵守XML语法ID约束 必须以字母开始 xff0c 可以使用字母 数
  • Linux服务器的登录与使用

    Linux服务器的登录与使用 关于登录Linux服务器的方式有很多种 xff0c 本文重点介绍了Linux和Windows下的登录和使用Linux服务器的方式 Linux服务器 服务器可看为是一台功能配置强大的电脑 xff0c 有独立的操作
  • Angular2 - [innerHTML] && pipe(把字符串里的 /n 替换成 <br/>)

    需求 把接口返回的使用说明字符串innerHTML出来 xff1b 本来想直接 innerHTML 就可以了 xff0c 但是事不遂人愿 xff0c 那就写个pipe过滤一下 xff1b 过程 接口返回字符串 xff1a 34 coupon
  • vscode ftp-sync 插件使用

    插件安装和配置 1 下载ftp sync插件 extensions中直接搜索安装即可 2 ctrl 43 shift 43 p 选择执行Ftp sync init 配置文件json含义如下 span class token punctuat
  • Ubuntu16.04终端执行`sudo apt-get update`遇到appstream问题

    Ubuntu 16 04 终端执行sudo apt get update遇到问题 E xff1a Problem executing scripts APT Update Post Invoke Success br 39 if usr b
  • Cloudflare5s盾破解|爬虫自动验证|解决方案

    一 什么是Cloudflare5s盾 Cloudflare是一个网站加速和安全服务提供商 Cloudflare 5s盾是指网站防御模式 xff0c 它可以防止恶意流量和攻击 xff0c 如DDoS SQL注入 XSS等 xff0c 保护网站
  • 若依Vue入门——服务器部署篇

    目录 前端 xff0c ruoyi ui 编译 部署 后端 xff0c ruoyi 使用若依前后端分离的Vue 43 Springboot脚手架 xff0c 进行编译与在Windows Server服务器上的部署 使用IDEA作为IDE 使
  • Spring启动流程解析(总)

    一 xff0c Spring启动流程概述 Spring的IoC容器在实现控制反转和依赖注入的过程中 xff0c 可以划分为两个阶段 xff1a 容器启动阶段 Bean实例化阶段 容器初始化 加载配置 分析配置信息 将Bean信息装配到Bea
  • Node,docker 中安装node.js

    1 启动docker服务 首先启动docker服务 systemctl start docker 2 获取node最新镜像 启动完成之后拉取node最新镜像 xff1a docker pull node 然后开始等待 xff0c 最后拉取完
  • 慎用!!! rm -rf 潜藏着巨大的危险!

    平时删除文件爱偷个懒 笔直 rm rf 过去就不想事了 今天碰到一个很意外的情况 以前也有碰到过 但总没留意到 在这里记下提醒自己 希望大家也多留个神 先说说 rm 的用法 官方的描述是这样的 rm 命令可以删除一个目录中的一个或多个文件或
  • 个人面试细节、技巧总结(没有面试题哦!)

    面试除了自身技能过硬外 xff0c 良好的沟通 xff0c 平和的心态 xff0c 细节的拿捏也都是额外的加分项 最后 xff0c 以些许运气加以点缀 xff0c offer 便八九不离十了 参加工作两年有余 xff0c 只大专文凭 xff
  • EFCore 实现连接MySQL并创建实体类

    EFCore 实现连接MySQL并创建实体类 所需文件版本 1 Pomelo EntityFrameworkCore MySql 2 2 0 2 Microsoft EntityFrameworkCore Tools 2 2 0 3 Pom
  • Win10设置文件夹背景色

    右键个性化 选择左侧的颜色 xff0c 根据自己的喜欢进行设置
  • 快速计算代码行小工具

    非常方便用于统计代码行的小工具叫line counter xff0c 使用以下命令获取工具 pip install line counter 使用 34 line 34 命令可以获取当前目录下的文件与行数统计 xff0c 效果如下 line
  • 协议栈设计_LwIP笔记

    文章目录 LWIP主进程工作链路层LWIP数据包收发函数框架ARP 地址解析协议 表ARP表查询IP层ICMP处理 Internet 控制报文协议 TCPIP Thread线程启动流程 tcpip thread主线程处理 LWIP主进程工作
  • VirtualBox虚拟机串口调试方法

    1 windows下调试virtualbox的虚拟机串口 2 Cannot open dev ttyS0 Permission denied解决 出现了Cannot open dev ttyS0 Permission denied提示字样
  • 基于STC89C51和L298N的42步进电机控制

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件 电机的转速 停止的位置只取决于脉冲信号的频率和脉冲数 xff0c 而不受负载变化的影响 xff0c 即给电机加一个脉冲信号 xff0c 电机则转过一个步距角 步进电机必须由双环形脉冲