历史上的今天
返回首页

历史上的今天

今天是:2025年02月04日(星期二)

2020年02月04日 | PIC单片机之步进电机

2020-02-04 来源:eefocus

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


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


步进电机的特点


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


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


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


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


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


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


图1 步进电机控制系统


图1 步进电机控制系统


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


图2 步进电机实物图


图2 步进电机实物图


步进电机的励磁方式。


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


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


表1 1相励磁方式


表1 1相励磁方式


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


。双三拍工作方式的优点是:


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


表2 2相励磁方式


表2 2相励磁方式

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


表3 1-2相励磁方式


表3 1-2相励磁方式


步进电机应用驱动电路


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


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


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


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


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


图4 ULN2003内部结构图


图4 ULN2003内部结构图


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


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




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



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


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



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


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


#include


#define key RB0


void delay(void)


{


int k;


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


}




void main()


{


TRISD=0x00; // 设置RD 为输出口


TRISB=0xFE;


// 设置RB0 为输出口,RB1~RB7 为输入口


PORTD=0x00; // 初始化RD 输出低电平


key=1; // 设置按键为输入状态


while(1) // 主循环


{


if(key==1) // 如果没有键按下则电机正转


{


PORTD=0xFC; //1100


delay();


PORTD=0xF6; //0110


delay();


PORTD=0xF3; //0011


delay();


PORTD=0xF9; //1001


delay();


}


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


{


PORTD=0xFC; //1100


delay();


PORTD=0xF9; //1001


delay();


PORTD=0xF3; //0011


delay();


PORTD=0xF6; //0110


delay();


}


}


}


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


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


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


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


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


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

推荐阅读

史海拾趣

欧密格光电(Amicc)公司的发展小趣事

由于电子行业内江苏欧密格光电科技股份有限公司(Amicc)的详细发展故事并不公开透明,并且会涉及到公司内部的具体运营和策略,因此我无法直接提供5个具体的发展故事。但我可以根据公开信息,概括性地描述欧密格光电在电子行业中的几个重要发展节点和事实。

  1. 创立与初期发展:江苏欧密格光电科技股份有限公司成立于2009年,由现任董事长兼总经理盛刚创立。盛刚在创办公司之前,拥有丰富的工学背景和外贸业务经验。这为公司早期的技术研发和市场拓展奠定了坚实的基础。在创立初期,欧密格光电就专注于半导体和光电元器件的生产加工,凭借过硬的技术和品质,逐渐在行业中崭露头角。

  2. 新三板挂牌上市:经过几年的稳健发展,欧密格光电于2015年成功在新三板挂牌上市。这一举措不仅为公司带来了更多的资金支持,也提升了公司的知名度和市场影响力。上市后,欧密格光电进一步加强了技术研发和市场拓展,逐步巩固了在行业中的地位。

  3. 质量管理体系建设:欧密格光电高度重视产品质量和企业管理。公司先后通过了ISO9001、ISO14001、ISO45001等多项国际质量管理体系认证,建立了严格的质量管理体系。同时,公司还建设了千级至万级净化车间,确保产品在生产过程中能够达到最高品质标准。这些举措不仅提升了公司的产品质量,也增强了客户对公司的信任。

  4. 产品多元化与市场拓展:随着技术的不断进步和市场需求的不断变化,欧密格光电的产品线也逐渐丰富起来。从最初的半导体和光电元器件,逐渐扩展到CHIP LED、PLCC LED、LAMP LED、红外发射管等多种产品。同时,公司还积极拓展市场,产品广泛应用于手机、安防、照明、汽车等多个领域,为众多知名企业提供产品服务。

  5. 持续创新与技术升级:在竞争激烈的电子行业中,欧密格光电始终保持对创新的追求。公司不断投入研发资金,引进先进技术和设备,提升产品的技术含量和附加值。同时,公司还积极与高校、科研机构等合作,开展产学研合作,推动技术创新和产业升级。

这些只是欧密格光电在电子行业中的部分发展事实,每个节点都体现了公司的战略眼光和执行力。当然,公司的发展过程中也面临过各种挑战和困难,但正是通过不断的努力和创新,欧密格光电才能在竞争激烈的市场中脱颖而出,成为行业内的佼佼者。

Broadband公司的发展小趣事

由于电子行业中Broadband公司的发展故事可能涉及众多细节和具体数据,且这些故事往往与公司的战略决策、市场环境、技术创新等多方面因素紧密相关,因此,我无法直接为您虚构或编造五个具体的发展故事。不过,我可以为您提供一种可能的框架或思路,帮助您了解如何构建这样的故事。

在构建Broadband公司的发展故事时,您可以考虑以下几个方面:

  1. 公司背景与初创阶段:描述公司的成立背景,包括创始人、初始资金、技术基础等。讲述公司如何抓住市场机遇,推出首款产品或服务,并在早期市场中获得一定的份额。

  2. 技术创新与产品升级:描述公司在发展过程中如何通过技术创新不断提升产品性能和服务质量。可以提及公司在研发方面的投入、取得的专利成果,以及这些创新如何转化为市场竞争力。

  3. 市场拓展与合作:讲述公司如何逐步扩大市场份额,包括进入新的地区市场、拓展应用领域等。同时,可以提及公司与其他企业或机构的合作,如产业链上下游的整合、战略合作等。

  4. 应对市场挑战与竞争:分析公司在发展过程中遇到的市场挑战和竞争压力,如竞争对手的崛起、政策调整等。描述公司如何调整战略、优化运营,以应对这些挑战。

  5. 未来展望与战略规划:基于当前的市场环境和公司实力,展望公司的未来发展前景,包括可能的市场趋势、技术方向等。同时,描述公司的战略规划,如扩大产能、拓展新业务领域等。

在构建这些故事时,请确保基于事实进行描述,避免夸大或缩小事实。您可以查阅相关公司的官方资料、行业报告、新闻报道等,以获取准确的信息和数据。同时,注意保持故事的连贯性和逻辑性,使读者能够清晰地了解公司的发展历程和现状。

希望这个框架能够帮助您构建出符合要求的Broadband公司的发展故事。如果您需要更具体的帮助或建议,请随时告知。

ERNI Electronics公司的发展小趣事

随着公司规模的扩大和产品线的丰富,ERNI Electronics开始积极拓展全球市场。1980年,公司在美国建立了分公司,为后续成为全球供应商打下了坚实的基础。此后,ERNI在新加坡建立了亚洲区总部,并在中国、台湾、韩国、泰国、马来西亚和印度等地设立了销售办事处。这一系列举措使得ERNI的产品能够覆盖更广泛的市场,满足了全球客户的需求。

Datapro International Inc公司的发展小趣事

随着技术的不断进步和市场的不断扩大,Datapro International Inc公司开始寻求新的市场机会。他们发现,随着企业信息化程度的提高,对数据存储和处理的需求也越来越大。于是,公司决定进军企业市场,并开发了一系列针对企业的数据存储解决方案。

在拓展企业市场的过程中,Datapro International Inc公司面临着来自竞争对手的激烈竞争。然而,他们凭借卓越的产品质量、专业的技术服务和灵活的商业模式,成功赢得了客户的信任和支持。随着企业市场的不断拓展,Datapro International Inc公司的业务规模也逐渐扩大。

Global Power Technology Co., Ltd公司的发展小趣事
冰箱噪音大可能是由于压缩机运转声音、风扇转动声音或冰箱摆放不平稳等原因造成的。首先检查冰箱是否摆放平稳,如不平稳需调整冰箱底部螺丝使其平稳;若冰箱摆放平稳但噪音仍大,可能是压缩机或风扇故障,需联系专业维修人员检查并维修。
Compostar Technology Co Ltd公司的发展小趣事

随着产品线的不断丰富,Compostar Technology Co Ltd开始积极寻求市场拓展。公司通过与国内外知名电子品牌建立战略合作关系,成功将产品打入国际市场。同时,公司还积极参加各类行业展会和技术交流会,与业界同行建立了广泛的联系。这些努力不仅为公司带来了更多的商机,也进一步提升了公司的知名度和影响力。

问答坊 | AI 解惑

请教非门的作用??

请教一下:信号从光耦接收出来,到达两个四个并联的非门再与两个非门串联来驱动三极管,其中这些非门的作用是为了增强驱动能力的作用吗? [ 本帖最后由 qmchen 于 2009-3-18 10:16 编辑 ]…

查看全部问答>

IGBT 损坏后结果情况

IGBT损坏后,有哪些结果情况?比如IGBT开路,但开路后IGBT的续流二极管还继续有用吗?…

查看全部问答>

波特率一高 串口传输就出錯

用串口收发数据,只要提高波特率,传输数据就出错,尤其是接收方,不知道是什么原因。 代码是C写的,查询方式。 比如红外用2400bps是好的,发01,02,03。。。20共20个数,接收都对,收到01,02,03,04,05,06一直到20. 但是改成4800bps之 ...…

查看全部问答>

"已失去对设备的远程连接。请验证设备连接并重新启动调试 "????

PDA上从电脑上pull入一个数据表,然后PDA自己存入数据时出现 \"已失去对设备的远程连接。请验证设备连接并重新启动调试 \",程序会自动退出,没有出现其它异常报告。 PDA重启程序后,再往刚才的数据表里存储数据一切正常。每次都是刚从电脑上pull入 ...…

查看全部问答>

cpu风扇转速

如何设置cpu风扇的转速呢,我的生音太大…

查看全部问答>

将要进入嵌入软件开发 的人

各位大哥们,我还是一个大一的学生,现在听说嵌入开发还可以,所以就有一点想向这一方面发展,但是现在在我面前的一个问题就是 我不知道要学那些东西,我也是一个计算机班的学生,这是不是有很大的优点. 所以就想问一下大哥们的应该出什么方向入手好一 ...…

查看全部问答>

tShell重定向到pty后,一直被PEND(内详)

将shell定向到2个pty上,分别是    数据写--> pty1 -->shell读取    数据读…

查看全部问答>

LPC2103匹配中断进不了

#include<LPC21xx.h> #define uint8  unsigned char#define uint32 unsigned intvoid Timer0_ISR(void) __attribute__ ((interrupt));uint8 num; void DelayNs(uint32 dly){  uint32 i;  for(;dly>0;dly--)  &nbs ...…

查看全部问答>

请教小数的处理,和小数的输出!

我AD采样的范围是0 - 2.5 V , 采样肯定是小数, 其类型应该是 float 型吧? 假如其采样点储存在float型数组内, 经过一系列运算后 如何使其转换成十进制数据 输出? 是有固定程序么? 比如将其转换成BCD码! 还请高手指点!…

查看全部问答>