热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单片机底座有没有正反_PIC单片机之步进电机

大家好,通过前一期的学习,我们已经对ICD2仿真烧写器和增强型PIC实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光

c5c992694a5652f281d61da8db347e98.gif

大家好, 通过前一期的学习, 我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键、数码管、RS232 串口等资源,体会到了学习板的易用性与易学性,看了前几期实例,当你实验成功后一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下步进电机的工作原理及使用方法,这是我们用单片机来控制机械进行运动的开始。

步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机就按设定的方向转动一个固定的角度(步距角)。通过控制脉冲个数来控制角位移量,可以达到准确定位;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,达到调速的目的;可以通过改变各相的通电顺序,控制步进电动机的转动方向。

步进电机的特点

1、步进电动机的角位移与输入脉冲严格成正比,因此,它没有累计误差,具有良好的跟随性。

2、步进电动机的动态响应快,易于启停、正反转及变速。

3、速度可在相当宽的范围内平滑调节,低速下仍能保证获得较大转矩,因此,一般可以不用减速装置而直接驱动负载。

4、步进电动机只能通过脉冲电源供电才能运行,它不能直接使用交流电源和直流电源。

那我们该如何来控制步进电机转动呢?直流电机我们只要在电机两极加上电压,电机马上转动,但步进电机并非这样,它是数字控制方式,它将电脉冲信号转变成角位移,即给一个脉冲信号,步进电动机就转动一个角度,因此非常适合单片机的控制。

一般一个完整的步进电机控制系统包括控制器、驱动器、电机三部分。框图如图1 所示:

4b638d7f6f899f8b95814feb95cc7df1.png

图1 步进电机控制系统

现在,我们以反应式步进电机为例,介绍其基本原理与应用方法。反应式步进电机可实现大转矩输出,步进角一般为1.5 度。反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁极的变化产生转矩。常用小型步进电机的实物如图2 所示,该步进电机可以直接与我们的增强型PIC 实验板相连,完成步进电机控制实验。

d5f7459604fe7aca54b446447d5dc2c8.png

图2 步进电机实物图

步进电机的励磁方式。

步进电机的励磁方式一般分为1 相励磁、2 相励磁、1-2 相励磁。

1 相励磁时,步进电动机按32b3bb10abac1649d98e9b71d753547f.png方式循环通电,每次只对一相通电,磁场旋转一周需要换相4 次,转子转动一个齿距角。其通电方式最为简单,转矩最小。励磁方式见表1。

表1 1相励磁方式

111c16321d905db916ba82a304e375c3.png

2 相励磁时,每次对两相同时通电,磁场旋转一周需要换相4 次,转子转动一个齿距角。在双三拍工作方式中,步进电动机正转的通电顺序为:524b0a9ddacd2ce9b453708d00a1896b.png;反转的通电顺序为:

524b0a9ddacd2ce9b453708d00a1896b.png。双三拍工作方式的优点是:

可产生较大的转矩,不易产生失步。励磁方式见表2。

表2 2相励磁方式

9b392fe3203bf7c458336dfc57eeb828.png

1-2 相励磁是1 相励磁和2 相励磁交替使用的方法。磁场旋转一周需要换相8 次,转子才转过一个步距角,属于半步的方式,也就是说1-2 相励磁时的步距角比前两种方式的步距角小一半,所以步进精度提高了一倍。1-2 相励磁方式见表3。

表3 1-2相励磁方式

dde60b0a589926f5f21cde34a980d2aa.png

步进电机应用驱动电路

步进电机的驱动电路有单极性直流驱动和H 桥驱动两种,本例的小型步进电机,采用最简单的单极性直流驱动电路,目的在于验证步进电机的使用,在正式工业控制一般较之复杂。简单驱动电路如图3所示。

686d5263a9a7082c02a55659ebc239a1.png

图3 步进电机的单极性直流驱动电路

在实际应用中一般驱动路数不止一路,用图3的分立电路体积大,各路参数一致性难以保障。最好用现成的集成电路作为多路驱动。常用的小型步进电机驱动电路可以用ULN2003 或ULN2803。我们的实验板上用的是ULN2003。ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。

ULN2003A 由7 组达林顿晶体管阵列和相应的电阻网络以及钳位二极管网络构成本例实际只用其中4组。ULN2003 内部结构如图4 所示,达林顿晶体管等效电路图如图5 所示。

cdc10d8f91c916f45f48c36ec38fcd2a.png

图4 ULN2003内部结构图

7cd26331e7092b23c6c10eb03a72c683.png

图5 达林顿晶体管等效电路图

ULN2003A 型高压大电流达林顿晶体管阵列电路的典型应用电路框图如图6 所示。钳位二极管用于保护线圈通断时的反电动势击穿集成电路,可以看出,应用ULN2003 后电路比分立元件简洁得多。

88360fa7d4c6d1dab534645caf10da69.png

通过前文的原理介绍,我们已经对步进电机的特性以及工作原理有了大致地了解,但当我们拿到一个步进电机时要正确地应用它还是一时不知如何下手,比如我们现在要控制电机正转、反转、高速运转、低速运转时,需要怎么办呢?要控制步进电机进行正反转,已不是像直流电机这么简单,在电机两端加上正反相电源就可以了,而是通过输出不同规律的“正反转”时序脉冲来实现控制。现在,我们来一起看一下如何进行步进电机正反转以及转动速度的控制,通过一个实例,相信会给大家带来一个感性的认识。

首先,我们来看一下增强型PIC 实验板上的步进电机控制电路,因为我们需要将软件和硬件相结合进行考虑如何来编程。步进电机控制部分的电路原理图如图7 所示。PIC 单片机的RD0~RD3 为电机脉冲输出引脚,通过ULN2003 集成芯片来驱动小型步进电机,我们只要将步进电机的插头,直接插在板子J3 插座处即可。跳线J4 为我们为实验板设计的步进电机智能供电跳线,这样实验板可以适用于不同工作电压的步进电机,当跳线跳到VCC 这端,则给步进电机提供VCC +5V 的电源,我们现在做实验使用的步进电机工作电压是5V 的,所以我们跳线设置到VCC 这一端即可,如果用户使用自己的步进电机电压不是5V 的,那可以将跳线跳到VIN 这一端,即用户外部接入电源提供给步进电机工作电压。

6f3a2c40214f6c36e64bb1dba7089a95.png

对于单片机软件的编程,我们使用MPLab IDE软件来进行C 语言编程,它是我们的编程环境,同时我们可以通过使用ICD2 仿真烧写器和增强型PIC实验板连接进行程序的仿真调试和烧写步骤,具体的操作步骤,我们已经在前几期做了详细的说明和介绍,在此就不再重复说明,读者朋友可以参阅以前的文章或直接登陆我们的网站查看资料。现在我们可以输入程序代码进行调试了,我们在MPLabIDE 软件中新建工程,加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。编写的程序代码如下:

/* 步进电机演示程序 */

#include

#define key RB0

void delay(void)

{

int k;

for(k&#61;0;k<2000;k&#43;&#43;)&#xff1b;

}

void main()

{

TRISD&#61;0x00; // 设置RD 为输出口

TRISB&#61;0xFE;

// 设置RB0 为输出口&#xff0c;RB1~RB7 为输入口

PORTD&#61;0x00; // 初始化RD 输出低电平

key&#61;1; // 设置按键为输入状态

while(1) // 主循环

{

if(key&#61;&#61;1) // 如果没有键按下则电机正转

{

PORTD&#61;0xFC; //1100

delay()&#xff1b;

PORTD&#61;0xF6; //0110

delay()&#xff1b;

PORTD&#61;0xF3; //0011

delay()&#xff1b;

PORTD&#61;0xF9; //1001

delay()&#xff1b;

}

else // 如果有键按下则电机反转

{

PORTD&#61;0xFC; //1100

delay()&#xff1b;

PORTD&#61;0xF9; //1001

delay()&#xff1b;

PORTD&#61;0xF3; //0011

delay()&#xff1b;

PORTD&#61;0xF6; //0110

delay()&#xff1b;

}

}

}

编好程序后&#xff0c;读者朋友可以将编译好的HEX通过ICD2 仿真烧写器烧入单片机芯片&#xff0c;然后插上步进电机&#xff0c;上电运行&#xff0c;如图8 所示。这时我们可以看到步进电机已经开始正转起来&#xff0c;如果我们这时按下K2 按键&#xff0c;则步进电机开始反转&#xff0c;如果释放了K2按键&#xff0c;那么步进电机仍然继续正转&#xff0c;从而实现了步进电机正反转的控制。

fbdbaf81ec675da7b9e6d88eef39804b.png

图8 步进电机与增强型PIC实验板进行连接

前面&#xff0c;我们输入了这么长一段程序后&#xff0c;作为初学者的读者一定对有些语句会有点疑问&#xff0c;下面我们就来一起结果实际&#xff0c;看一下一些关键程序语句的作用。

#include 语句用来加载PIC 库文件&#xff0c;#define key RB0 这条语句将RB0 宏定义为key&#xff0c;void delay () 是延时函数&#xff0c;步进电机在输出正反转时序时进行延时&#xff0c;如要调整步进电机的转动速度&#xff0c;我们只要调速这个延时函数的延时值即可。TRISD、TRISB 相关的语句用来设置RD、RB 口的输入、输出状态&#xff0c;在此我们设置RD 为输出口&#xff0c;用来给步进电机输出时序使用&#xff0c;RB 口中的RB0 设置为输入口&#xff0c;因为该口是我们实验板上的按键&#xff0c;按键是输入设备。然后赋值key&#61;1&#xff0c;即把RB0 初值设置为1&#xff0c;当没有按键按下时&#xff0c;RB0 的值为1&#xff0c;当按键被按下时&#xff0c;RB0 的值为0&#xff0c; while(1) 是死循环语句&#xff0c;即周而复始地执行{ } 内的语句体&#xff0c;我们在死循环体内不停地判断key 这个变量&#xff0c;如果按键有没有被按下&#xff0c;key 为1&#xff0c;同时我们在单片机RD 口输出步进电机正转的时序表&#xff0c;分别输出 1100 、0110、 0011、 1001 这些信号&#xff0c;每串信号之间用delay 函数进行延时&#xff0c;该延时值不能太快&#xff0c;否则步进电机会无法响应&#xff0c;具体设置多少合适&#xff0c;读者朋友可以通过ICD2 在线调试时&#xff0c;修改延时值来进行实际测试&#xff0c;观察步进电机的工作状态&#xff0c;从而实现了步进电机的速度控制&#xff1b;同理&#xff0c;如果按键被按下时&#xff0c;key 为0&#xff0c;同时我们在单片机RD 口输出步进电机反转的时序表&#xff0c;分别输出 1100 、1001、0011、 0110 这些信号&#xff0c;可以发现步进电机进行了反转运动。

看到这里&#xff0c;相信你现在已经可以对步进电机进行基本控制了&#xff0c;步进电机的原理与使用我们讲到这里&#xff0c;接下来几期&#xff0c;我们将继续一起学习增强型PIC实验板的其它各部分资源的原理与使用&#xff0c;使你对单片机应用的各方面知识都有所入门与提高。

5205d92b5e784dc13b902027598f8ec4.png

cd1c497fb48a2bb6819d0caeb920a5bd.png

为了方便大家更好的学习&#xff0c;畅学电子网特别增加了针对单片机和EDA的公众号&#xff0c;每天推送相关知识&#xff0c;希望能对你的学习有所帮助&#xff01;

b731effdb7b063570bf1c79dde95421c.png

2450149ae90097aeb1e3d2bd9841fad9.png



推荐阅读
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • vue使用
    关键词: ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
萌萌美人鱼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有