【单片机】11-步进电机和直流电机

news2024/12/29 9:42:28

1.直流电机

1.什么是电机

电能转换为动能

2.常见电机

(1)交流电机【大功率】:两相【200W左右】,三相【1000W左右】

(2)直流电机【小功率】:永磁【真正的磁铁】,励磁【电磁铁】

(3)步进电机【精确控制功率】,伺服电机【非常精确功率】

3.直流电机详解

(1)外观

(2)接线和工作原理

在电池位置有VCC和GND

(3)直流电机的驱动问题:不能用IO口直接驱动

4.直流电机实验

(1)直流电机直接接在开发板的主板的VCC和GND引出接口上看电机是否转动,还可以调换VCC和GND看是否反转

(2)单片机的IO口的数字口,本身的驱动能力非常小(最多20mA级别),这个驱动能力是带不动电动机的。

(3)一般单片机需要实验专门的驱动芯片来驱动电机。驱动芯片的作用就是把单片机的小电流的控制信号转成逻辑上相同的大电流的驱动源。这就是所谓的弱电控制强电。

#include<reg51.h>

/**

	驱动电机驱动直流电机
*/

sbit ALine=P0^0;
sbit BLine=P0^1;

void main(){

	ALine=1;
	BLine=0;
	//实际上不会动,因为电流不足
	while(1);
	
}

2.步进电机理论

1.什么是步进电机

1.外观

2.功能特点

(1)步进(step)的动起来,可以控制自己转多少

(2)不是直接给接电就动,要有规律的电才可以动

(3)以步长为单位,不断的转

(4)可以控制转多少就停

3.操作接口

(1)四线步进电机

2.步距角:步长

(1)就是精度,360°的⚪,可以走多少°。

(2)步长==精度

(3)步进电机有一个固有步距角,这个参数和步进电机本身有关的。

(4)步进电机一般情况下只能以固有步距角的整数倍来运动,这一个固有步距角的移动就叫一个节拍。

(5)电机还有一个比固有步距角更小的运动方法,这种方法叫细分,由电机驱动器来支持的。

3.相数

(1)步进电机绕阻的组数

(2)相数多的步距角越小,越精确,引出的线越多

4.细分

(1)电机还有一个比固有步距角更小的运动方法,这种方法叫细分,由电机驱动器来支持的。

5.极性

单极性步进电机和双极性步进电机有什么区别? – AKT Motor and Drive

单极性和双极性是步进电机最常用的两种驱动架构

有一些可以通过2种进行驱动。

我们拿到的步进电机中只有电路(线路),没有驱动。真正的驱动在开发板上。

1.单极性

单极性驱动电路使用四颗晶体管来驱动步进电机的两组相位,电机结构则如图1所示包含两组带有中间抽头的线圈,整个电机共有六条线与外界连接。这类电机有时又称为四相电机,但这种称呼容易令人混淆又不正确,因为它其实只有两个相位,精确的说法应是双相位六线式步进电机。六线式步进电机虽又称为单极性步进电机,实际上却能同时使用单极性或双极性驱动电路。

2.双极性

双极性步进电机的驱动电路则如图2所示,它会使用八颗晶体管来驱动两组相位。双极性驱动电路可以同时驱动四线式或六线式步进电机,虽然四线式电机只能使用双极性驱动电路,它却能大幅降低量产型应用的成本。双极性步进电机驱动电路的晶体管数目是单极性驱动电路的两倍,其中四颗下端晶体管通常是由微控制器直接驱动,上端晶体管则需要成本较高的上端驱动电路。双极性驱动电路的晶体管只需承受电机电压,所以它不像单极性驱动电路一样需要箝位电路。

6.拍数

单相和双相的带载能力不同

1.单相四拍

单相:一边的线在工作

A/   B   A    B/        正转

B/    A    B    A/      反转   

解释:想要动起来就在一端有电压差,另外一端没有电压差

A/   B   A    B/     

四根线上电平

A/   A    B    B/   

0     1    0     0               第一拍

0      0   1    0                第二拍

1      0    0   0                第三拍

0      0    0   1                第四拍

4个节拍加起来就是一个完整的周期,按照这个周期给步进电机供电,则步进电机就会转动1个步距角(一个步长)。

2.双相四拍

双相:两边的线在工作

A/B   AB    AB/     A/B/        正转

时序:A/B   AB    AB/     A/B/

            1       0        0         0

             0       1        0        0

             0        0       1         0

             0         0        0        1

               A        A/        B        B/

A/B         0          1        1          0                第一拍

AB         1            0       1       0                  第二拍

AB/         1          0        0          1                第三拍

A/B/         0          1        0          1               第四拍

3.半步八拍

A/    A/B     B    AB    A      AB/     B/      A/B/【实际上就是单相和双相交互】

7.控制器和驱动器

(1)一套步进电机的系统需要三部分:控制器【控制信号】+驱动器【功率部件】+步进电机【负责转动】

控制器

(1)控制器就是我们的单片机

(2)控制器负责产生时序信号

驱动器

(1)驱动器一般是接在单片机的IO口上面的专用的电机驱动芯片(比如我们开发板上的TC1508S)

(2)驱动器负责将时序信号转成功率驱动信号给步进电机用

7.结论

我们使用的是两相步进电机

4.开发板原理图分析说明

1.原理图分析

(1)原理图中INA,INB,INC,IND将来要接单片机的IO口,单片机是控制器的,通过单片机的IO口给驱动器芯片输入1或者0的控制信号,控制信号经过TC1117的转换,从OUTA,OUTB,OUTC,OUTD四个脚输出具有驱动步进电机能力的驱动信号。【将控制信号转换为驱动信号,实际上就是将电流放大输出】

(2)接线:比如可以用P0端口的4个引脚(实际用P0.0-P0.3)接INA,INB,INC,IND

(3)输出端本来符号是OUTA,OUTB,OUTC,OUTD,但是开发板上实际是对应则:OA,OB,OC,OD。所以这里有一个对应关系:OUTA-OA,OUTB-OB,OUTC-OC,OUTD-OD。

(4)但是步进电机上是A,A-,B,B-,让我们方便接线不会接错。

(5)结合之前讲的步进电机的原理,可知:A-和A+是一个相线线圈的2端,B-和B+是另外一个线圈。

2.电机驱动芯片数据手册

https://datasheet.lcsc.com/lcsc/2202252130_Shenzhen-Fuman-Elec-TC1508S_C89480.pdf

5.步进电机编程实践

1.接线

(1)P0端口的P0.0-P0.3接电机驱动芯片TX1508S的4个输入端

(2)TC1508S的4个输出端接步进电机(按照丝印符号相对于即可)

(3)根据上面的接线,实际得到的接线逻辑是:P0.0和P0.1对应的一组线圈,而且P0.2和P0.3对应另一组线圈。【注意A+对应OA,A-对应OB,B+对应OC,B-对应OD

2.单相四排方式驱动

1.时序编程

A/    B    A    B/

#include<reg51.h>

/**

	步进电机编程实践1:单相四排
*/

sbit APositive=P0^0;
sbit ANegative=P0^1;
sbit BPositive=P0^2;
sbit BNegative=P0^3;

void delay(unsigned char i){  //i越大,延迟时间越大
	unsigned char a,b;
	for(a=i;a>0;a--){
		for(b=240;b>0;b--);
	}
}



void main(){

	while(1){
		//循环内实现1个周期
		//一个周期其实就是各个节拍依次排列构成的,注意节拍之间要延时
		//延时时间---控制速度
		//单相四拍
		//第一拍:  [A/  B    A    B/]
		//           1   0    0     0
		APositive=0;
		ANegative=1;
		BPositive=0;   //等于1也可以,只要两个相同即可
		BNegative=0;   //等于1也可以,只要两个相同即可
		delay(30);
		
		//第二拍:  [A/  B    A    B/]
		//           0   1    0     0
		APositive=0;
		ANegative=0;
		BPositive=1;   //等于1也可以,只要两个相同即可
		BNegative=0;   //等于1也可以,只要两个相同即可
		delay(30);
		
		
		//第3拍:  [A/  B    A    B/]
		//           0   0    1     0
		APositive=1;
		ANegative=0;
		BPositive=0;   //等于1也可以,只要两个相同即可
		BNegative=0;   //等于1也可以,只要两个相同即可
		delay(30);
		
		
		//第3拍:  [A/  B    A    B/]
		//           0   0    0   1
		APositive=0;
		ANegative=0;
		BPositive=0;   //等于1也可以,只要两个相同即可
		BNegative=1;   //等于1也可以,只要两个相同即可
		delay(30);
		
	}
	
}

2.转速控制

转速是由脉冲信号控制的频率控制的,其实就是delay控制的

延时时间越短,转速越快

3.正转和反转

将时序进行反转

3.双相四拍方式驱动

#include<reg51.h>

/**

	步进电机编程实践2:双相四拍方式驱动
*/

sbit APositive=P0^0;
sbit ANegative=P0^1;
sbit BPositive=P0^2;
sbit BNegative=P0^3;

//延时时间
//延时时间越短,转速越快
#define TIME 30



void delay(unsigned char i){  //i越大,延迟时间越大
	unsigned char a,b;
	for(a=i;a>0;a--){
		for(b=240;b>0;b--);
	}
}



void main(){

	while(1){
		//循环内实现1个周期
		//一个周期其实就是各个节拍依次排列构成的,注意节拍之间要延时
		//延时时间---控制速度
		//单相四拍
		
		/*
			正序旋转
			逆序就是将节拍反过来
		
		*/
		
		//第一拍:  [A/B  AB    AB/   A/B/]
		//           1   0    0     0
		APositive=0;
		ANegative=1;
		BPositive=1;   
		BNegative=0;   
		delay(TIME);
		
		//第二拍:  [A/B  AB    AB/   A/B/]
		//           0   1    0     0
		APositive=1;
		ANegative=0;
		BPositive=1;   
		BNegative=0;   
		delay(TIME);
		
		
		//第3拍:  [A/B  AB    AB/   A/B/]
		//           0   0    1     0
		APositive=1;
		ANegative=0;
		BPositive=0;   
		BNegative=1;   
		delay(TIME);
		
		
		//第3拍:  [A/B  AB    AB/   A/B/]
		//           0   0    0   1
		APositive=0;
		ANegative=1;
		BPositive=0;   
		BNegative=1;   
		delay(TIME);
		
		
	}
	
}

4.半步八拍方式驱动

速度越慢,动力越大

#include<reg51.h>

/**

	步进电机编程实践3:半步八拍方式驱动
*/

sbit APositive=P0^0;
sbit ANegative=P0^1;
sbit BPositive=P0^2;
sbit BNegative=P0^3;

//延时时间
//延时时间越短,转速越快
#define TIME 3


void delay(unsigned char i){  //i越大,延迟时间越大
	unsigned char a,b;
	for(a=i;a>0;a--){
		for(b=240;b>0;b--);
	}
}



void main(){

	while(1){
		//循环内实现1个周期
		//一个周期其实就是各个节拍依次排列构成的,注意节拍之间要延时
		//延时时间---控制速度
		//单相四拍
		
		/*
			正序旋转
			逆序就是将节拍反过来
		
		*/
		
		//第一拍:  [A   A/B   B    AB    A    AB/    B/     A/B/]
		//           1    0    0    0     0     0     0       0
		APositive=1;
		ANegative=0;
		BPositive=0;   
		BNegative=0;   
		delay(TIME);
	
		
		//第2拍:  [A   A/B   B    AB    A    AB/    B/     A/B/]
		//          0   1    0    0     0     0     0       0
		APositive=0;
		ANegative=1;
		BPositive=1;   
		BNegative=0;   
		delay(TIME);
	
	
		//第3拍:  [A   A/B   B    AB    A    AB/    B/     A/B/]
		//           0    0    1    0     0     0     0       0
		APositive=0;
		ANegative=0;
		BPositive=1;   
		BNegative=0;   
		delay(TIME);
	
	
			//第4拍:  [A   A/B   B    AB    A    AB/    B/     A/B/]
		//           0    0    0      1     0     0     0       0
		APositive=1;
		ANegative=0;
		BPositive=1;   
		BNegative=0;   
		delay(TIME);
	
	
			//第5拍:  [A   A/B   B    AB    A    AB/    B/     A/B/]
		//           0    0    0    0     1     0     0       0
		APositive=1;
		ANegative=0;
		BPositive=0;   
		BNegative=0;   
		delay(TIME);
	
	
			//第6拍:  [A   A/B   B    AB    A    AB/    B/     A/B/]
		//           0    0    0    0     0     1     0       0
		APositive=1;
		ANegative=0;
		BPositive=1;   
		BNegative=1;   
		delay(TIME);
	
	
			//第7拍:  [A   A/B   B    AB    A    AB/    B/     A/B/]
		//           0    0    0    0     0     0     1       0
		APositive=0;
		ANegative=0;
		BPositive=0;   
		BNegative=1;   
		delay(TIME);
	
	
	
			//第8拍:  [A   A/B   B    AB    A    AB/    B/     A/B/]
		//           0    0    0    0     0     0     0       1
		APositive=0;
		ANegative=1;
		BPositive=0;   
		BNegative=1;   
		delay(TIME);

		
	}
	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1050961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql 安装搭建

文章目录 Mysql 搭建一、安装包下载二、创建用户组用户和修改权限三、配置my.cnf Mysql 搭建 一、安装包下载 mysql 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 这里有所有的mysql的版本&#xff0c;下载自己需要的版本&#xff0c;我们这里下载 …

知识储备--基础算法篇-回溯法

1.回溯法介绍 1.1递归和回溯 每一个递归都包含回溯&#xff0c;回溯是一种纯暴力搜索方法。每个回溯法都可以抽象为一种N叉树。树的宽度为子集的个数&#xff0c;深度为递归返回的条件。二叉树中的递归都会有回溯算法&#xff0c;只不过有些题目用到了&#xff0c;有些没有用…

计算机竞赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

R语言进行孟德尔随机化+meta分析(2)----基于R和stata

目前不少文章用到了孟德尔随机化meta分析&#xff0c;在上一章咱们简单介绍了一下meta分析的基础知识。咱们今天来介绍一篇11分文章&#xff0c;由文章看看孟德尔随机化meta分析如何进行&#xff0c;文章的题目是&#xff1a;Appraising the causal role of smoking in multipl…

大数据Doris(二):Doris原理篇

文章目录 Doris原理篇 一、Doris 特点 1、支持标准SQL接口 2、列式存储引擎

百度统计配置详细图文教程包含siteId、百度统计AccessToken、百度统计代码获取步骤教程

一、前言 很多网友开发者都不知道百度统计siteId、百度统计token怎么获取&#xff0c;在网上找的教程都是几年前老的教程&#xff0c;因此给大家出一期详细百度统计siteId、百度统计token、百度统计代码获取详细步骤教程。 二、登录到百度统计 1.1 登录到百度统计官网 使用个…

【利用冒泡排序的思想模拟实现qsort函数】

1.qsort函数 1.1qsort函数的介绍 资源来源于cplusplus网站 1.2qsort函数的主要功能 对数组的元素进行排序 对数组中由 指向的元素进行排序&#xff0c;每个元素字节长&#xff0c;使用该函数确定顺序。 此函数使用的排序算法通过调用指定的函数来比较元素对&#xff0c;并将指…

测试用例的编写(面试常问)

作者&#xff1a;爱塔居 专栏&#xff1a;软件测试 作者简介&#xff1a;不断总结&#xff0c;才能变得更好~踩过的坑&#xff0c;不能再踩~ 文章简介&#xff1a;常见的几个测试用例。 一、淘宝购物车 二、登录页面 三、三角形测试用例 abc结果346普通三角形333等边三角形334…

文件I/O与标准I/O

如果不知道inode&#xff0c;请看这篇文章inode 我们知道当打开一个文件时&#xff0c;OS会先使用inode编号在磁盘文件系统里面去寻找这个文件&#xff0c;找到以后根据文件的属性为其创建一个内核层面的结构体来描述这个文件&#xff0c;该结构体里面含有文件的属性信息&#…

我的创作纪念日 不忘初心,砥砺前行

机缘 本来我只是记录一些自己平时安装各种软件或者组件的教程&#xff0c;以及记录平时遇到的一些bug。 没想到一些教程收到了各位同学的喜爱。 收获 这篇VMware虚拟机安装Linux教程(超详细) 深受大家喜爱。写这篇文章的初衷一是为了记录&#xff0c;二是为了分享。自己一步…

操作符详解——(比特课件)

操作符怎么搞&#xff1f;没办法掌握基础知识就可以 ** 需要课件完整版的可以关注私信我&#xff01;&#xff01;&#xff01; 你的支持就是我更新的最大动力 **

String常见面试题

目录 1.String为什么不可变2.String和StringBuilder、StringBuffer的区别3.String为什么要设置为不可变4.判断定义为String类型的s1和s2是否相等5.下面这句话在内存中创建了几个对象?6.判断定义为String类型的s1和s2是否相等7.判断定义为String类型的s1和s2是否相等8.判断定义…

【PHP】如何关闭buffer实时输出内容到前端

前言 默认情况下&#xff0c;我们在PHP里使用echo等函数输出的内容&#xff0c;是不会马上发送给前端的&#xff0c;原因是有 buffer 的存在&#xff0c;buffer又分两处&#xff0c;一处是PHP本身的buffer&#xff0c;另一处是Nginx的buffer。只有当buffer满了之后&#xff0c…

unity打包工具

接手了一个项目&#xff0c;打包存在重大问题&#xff0c;故此在unity addressables 基础上弄了一个简单的打包工具&#xff0c;代码也都做好了注释&#xff0c;操作非常简单以下为操作方法&#xff1a; 首先设置导入Addressables插件&#xff0c;并设置好详细参见&#xff1a…

普通学校,普通背景,普通公司,不普通总结。

作者&#xff1a;阿秀 InterviewGuide大厂面试真题网站&#xff1a;https://top.interviewguide.cn 这是阿秀的第「313」篇原创 小伙伴们大家好&#xff0c;我是阿秀。 可能很多人点开牛客、知乎、B站&#xff0c;一看帖子的标题都是"某985xxxx"、"不入流211xxx…

一文读懂集合竞价,建议收藏,读完少交学费

集合竞价每个时间段交易规则及作用都不一样&#xff0c;了解集合竞价的规则&#xff0c;有利于琢磨主力的意图。 大部分同学都不是很关心集合竞价&#xff0c;也不知道如何利用集合竞价买卖股票。如上图所示&#xff0c;有同学在9点15看着股票涨停&#xff0c;立马冲进去&…

[Machine Learning][Part 2]监督学习的实现

目录 线性模型实现&#xff1a; cost function &#xff1a;代价函数或者损失函数——衡量模型优劣的一个指标 理论&#xff1a; 代码实现: 梯度下降——自动寻找最小的cost function 代价函数 梯度的概念&#xff1a; 梯度下降公式&#xff1a; 实现一个简单的监督学习…

web:[极客大挑战 2019]LoveSQL

题目 打开页面显示如下 查看源代码&#xff0c;查到一个check.php&#xff0c;还是get传参 尝试账号密码输入 题目名为sql&#xff0c;用万能密码 1or 11# 或 admin or 11 给了一段乱码&#xff0c;也不是flag 查看字段数 /check.php?usernameadmin order by 3%23&pass…

Go语言开发小技巧易错点100例(九)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】

一、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 在关系数据库中&#xff0c;一个事务由一组SQL语句组成。 事务应该具有4个属性: 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity) ∶个事务…