步进电机程序流程图
步进电机驱动PROTEL_原理图及C程序
o t o rP1.0,P1.1,P1.2用来设计三个按键,key1,key2,key3;P2.0,P2.1用来与L298N中的IN1,IN2相连接;控制步进电机的正转、反转和停止;P2.2是用来控制电机的使能的,接在ENA上;如要实现电机的正传、反转的加减速就要对P2.2即ENA脚给PWM信号比如还要设置两个按键key4和key5来控制直流电机的加速和减速;比如有如下函数;/*********************************************************/uchar NUM0=600;//全局变量uchar Flag=0;//清零标志位;对Ms清零;/*id time0_init(void){TMOD=0x01; //16 位计数器/定时器,定时器0;TH0=(65536-1000)/256; //A T89S52为12M晶振,计数1200才产生1msTL0=(65536-1000)%256;EA=1; //开启总中断ET0=1; //开启定时器1中断TR0=1; //开启定时器1,定时器一允许}void time0_int(void) interrupt 1{H0=(65536-1000)/256; // A T89S52为12M晶振,计数1200才产生1ms TL0=(65536-1000)%256;Ms=NUM0}*/for(i=0;i< Ms;i++){ENA=1;}else if(i= Ms;i<=1200;i++){ENA=0;Flag=1;}if(flag){Ms= NUM0;}/*****************************************************************/ KEY ADD_SUB(){if(key4==0) //加速按键{delayms(2) ;//while(key1==0);Ms++;//正脉宽加一if(Ms>=1200)Ms=1200;//最高速度}if(key5==0)//减速按键{delayms(2) ;//while(key2==0);Ms-- //脉宽减一if(Ms<=0)Ms=0; //停止}}/***************************************************************/ /***************************************************************/下面是控制程序;经现场调试,可行;程序如下:/************************************************************/#include<reg52.h>#include"delay.h"#define uchar unsigned char#define uint unsigned int//*********************//sbit ENA = P2^2; //驱动芯片使能,若为0则电机停止;sbit IN1 = P2^1; //控制电机正转和反转sbit IN2 = P2^0; //控制电机正转和反转sbit key1 = P1^0; //此键按下,电机正转;IN1=1;IN2=0 ;ENA=1sbit key2 = P1^1; //此键按下,电机反转;IN1=0,IN2=1 ;ENA=1sbit key3 = P1^2; //此键按下,电机刹停; IN1=1,IN2=1 ;ENA=1//*********************//int motor_change_mank=0;// 按键设置//**********************//uint keylogo(){if(key1==0){delayms(2) ;//while(key1==0);motor_change_mank=1;//正转标志位}if(key2==0){delayms(2) ;//while(key2==0);motor_change_mank=2;//反转标志位}if(key3==0){delayms(2) ;//while(key3==0);motor_change_mank=0;//刹停标志位}return(motor_change_mank);}//**********************////控制驱动芯片函数//**********************//void execute_motor(){switch(motor_change_mank){case 0: //刹停标志位{IN1 = 1;IN2 = 1;ENA = 1;}break;case 1://正转标志位{IN1 = 1;IN2 = 0;ENA = 1;}break;case 2: //反转标志位{IN1 = 0;IN2 = 1;ENA = 1;}break;default:break;}}//**********************//void main(){while(1){keylogo();execute_motor();}}/**********************************************************************/ /**********************************************************************/ #define uint unsigned intvoid delayms(uint n){int i;for(;n>0;n--)for(i=0;i<1;i++);}/**********************************************************************//**********************************************************************/#ifndef delay_h#define delay_h#define uint unsigned intextern void delayms(uint n);#endif/***********************************************************************//***********************************************************************/对如驱动芯片L298N的中文资料我这里有很多,你在论文中阐述时要抓住要点;进行简短的说明;对于调速的问题也有第二种方法;就是对驱动芯片的功率电源Vs进行改变电压;可以用DAC进行控制,如用单片机控制DAC,是输出的模拟电压可通过按键来升高和降低;这样在电机正传或者反转时只要Vs所给的电压升高或者降低则电机的转速就会增加或者减少;这样亦不失为一种好的控制直流电机转速的方法;就是成本稍高而已!////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 或者用下面的一个程序略作修改即可;/*1、学习目的:利用定时器产生PWM,了解原理和使用方法2、硬件要求:LED灯定时器3、试验现象:LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象*/#include <reg52.h>sbit LED = P1^2;unsigned char CYCLE; //定义周期该数字X基准定时时间如果是10 则周期是10 x 0.1ms unsigned char PWM_ON ;//定义高电平时间void delay(unsigned int cnt)while(--cnt);}main(){bit Flag;TMOD |=0x01;TH0=(65536-100)/256;//定时器设置0.1ms in 12M crystalTL0=(65536-100)%256;//定时0.1mSIE= 0x82; //打开中断TR0=1;CYCLE = 10;// 时间可以调整这个是10调整8位PWM就是256步while(!Flag){delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果PWM_ON++; //这个使用较长延时,以便能看清楚变化过程if(PWM_ON == CYCLE){ //这个里可以添加其他程序如到最亮时候控制设备Flag=1;}}while(Flag) //亮度递减同上,是个相反的过程{delay(20000);PWM_ON--;if(PWM_ON == 0){Flag=0;}}}/********************************//* 定时中断*//********************************/void tim(void) interrupt 1 using 1{static unsigned char count; //TH0=(65536-100)/256;TL0=(65536-100)%256;//定时0.1mSif (count==PWM_ON){LED = 1; //灯灭}count++;if(count == CYCLE){count=0;if(PWM_ON!=0) //如果左右时间是0 保持原来状态LED = 0;//灯亮}}。
步进电机工作原理及控制电路
//按键标志变量
flag1=0;
//步进数标志变量
init();
//液晶初始化子程序
while(1)
{
keyscan();
//键盘扫描子程序
if(flag==1)
{
zz();
//正转子程序
}
else if(flag==3) {
fz(); } writebjs(8,count); } }
//反转子程序
it 动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。励
磁顺序: A→AB→B→BC→C→CD→D→DA→A
A-B 表4.3 1-2 相励磁法
步进电动机的负载转矩与速度成反比,速度愈快负载转矩愈小,当速度快至 其极限时,步进电动机即不再运转。所以在每走一步后,程序必须延时一段时间。 下面介绍的是国产20BY-0型步进电机,它使用+5V直流电源,步距角为18度。电 机线圈由四相组成,即A、B、C、D四相,驱动方式为二相激磁方式,电机示意图 和各线圈通电顺序如图4.2和表4.1所示:
6
法增大起动电流,以提高步进电机转动力矩,即提高其工作频率。由于步进电机
是感性负载,所以进入绕组的电流脉冲是以指数形式上升,即这时电流脉冲i为:
i = IH (1 − e−1/Tj )
(4.4)
公式
其中:i是电流脉冲瞬时值;
IH 是在开关回路电压为u时的电流稳态值;
Tj 是开关回路的时间常数,Tj = L / ( RL + RC )
θ s = 2Π / Nrk
公式(4.1) 或
θ s = 360o / Nrk
公式(4.2)
其中:k是步进电机工作拍数,Nr是转子的齿数。
四相步进电机原理图及程序
四相步进电机原理图本文先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。
1. 步进电机的工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图1是该四相反应式步进电机工作原理示意图。
图1 四相步进电机步进示意图开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:a. 单四拍b. 双四拍 c八拍图2.步进电机工作时序波形图2.基于AT89C2051的步进电机驱动器系统电路原理步进电机驱动器系统电路原理如图3:图3 步进电机驱动器系统电路原理图AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。
使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。
图中L1为步进电机的一相绕组。
AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。
#S7200直流步进电机plc控制方法
直流步进电机plc控制方法系统功能概述:本系统采用PLC通过步进电机驱动模块控制步进电机运动。
当按下归零按键时,电机1和电机2回到零点<零点由传感器指示)。
当按下第一个电机运行按键时,第一个电机开始运行,直到运行完固定步数或到遇到零点停止。
当按下第二个电机运行按键时,第二个电机开始运行,运行完固定步数或遇到零点停止。
两电机均设置为按一次按键后方向反向。
电机运行时有升降速过程。
PLC输入点I0.0为归零按键,I0.1为第一个电机运行按键,I0.2为第二个电机运行按键,I0.3为第一个电机传感器信号反馈按键,I0.4为第二个电机传感器信号反馈按键。
PLC输出点Q0.0为第一个电机脉冲输出点,Q0.1为第二个电机脉冲输出点,Q0.2为第一个电机方向控制点,Q0.3为第二个电机方向控制点,Q0.4为电机使能控制点。
所用器材:PLC:西门子S7-224xpcn及USB下载电缆。
编程及仿真用软件为V4.0 STEP 7 MicroWIN SP3。
直流步进电机2个,微步电机驱动模块2个。
按键3个。
24V开关电源一个。
导线若干。
各模块连接方法:PLC与步进电机驱动模块的连接:驱动模块中EN+、DIR+、CP+口均先接3k电阻,然后接24V电源。
第一个驱动模块CP-接PLC的Q0.0,DIR-接PLC的Q0.2,EN-接PLC的Q0.4第二个驱动模块CP-接PLC的Q0.1,DIR-接PLC的Q0.3,EN-接PLC的Q0.4注意:1、PLC输出时电压为24V,故和驱动器模块连接时,接了3k电阻限流。
2、因为PLC处于PTO模式下只有在输出电流大于140mA时,才能正确的输出脉冲,故在输出端和地间接了200欧/2w下拉电阻,来产生此电流。
<实验室用的电阻功率不足,用200欧电阻时功率至少在24*24/200=2.88w,即用3w的电阻)3、PLC与驱动模块连接时,当PLC输出低电平时不能将驱动模块电平拉低,故在EN-和DIR-上接了200欧/2W下拉电阻驱动模块与电机接法:驱动模块的输出端分别与电机4根线连接电机传感器与PLC连接:传感器电源接24v,信号线经过240欧电阻<实验中两个470电阻并联得到)与24v电源上拉后,信号线接到PLC的I0.3和I0.4将各模块电源、地线接好。
步进电机的PLC控制梯形图程序设计
2 梯形图程序设计
2. 1 输入/ 输出编址 控制步进电机的各输入开关及控制 A 、B 、C
三相绕组工作的输出端在 PL C 中的 I/ O 编址如 表 1 所示 。
表 1 输入/ 输出编址
输入端
I0. 0 步进电机正转起动按钮 Q0. 0
I0. 1 步进电机反转起动按钮 Q0. 1
I0. 2
A 相 Q0. 0 = M0. 5 + M0. 4 + M0. 0 B 相 Q0. 1 = M0. 4 + M0. 3 + M0. 2 C 相 Q0. 2 = M0. 2 + M0. 1 + M0. 0 反转时 A 相 Q0. 0 = M0. 5 + M0. 4 + M0. 0 B 相 Q0. 1 = M0. 2 + M0. 1 + M0. 0 C 相 Q0. 2 = M0. 4 + M0. 3 + M0. 2
Abstract : The PL C program cont rolling on t he stepping motor can be designed by diverse means. The paper put s forward t he design t hinking and met hod. The ladder program is programmed wit h“SHIF T”inst ruc2 tion of SIMA TIC S7 - 200 as t he keystone of cont rolling step - by - step and by means of program modu2 larization. Thus t he ladder is compact ,clear and flexible , and quite meet s t he cont rol requirement s. Key words : stepping motor ; PL C ; ladder ; SHIF T ; modularization
第3章步进电动机的控制
升速 恒速 减速 低速
起点
终点
(时间) t
图3-24
点、位控制中的加减速控制
15
变速控制的方法有:
改变控制方式的变速控制:最简单的变速控制可利用改变步进电 机的控制方式实现。例如:对于三相步进电机系统,启动或停止时 用三相六拍,大约0.1s以后,改用三相三拍,快到达终点时再采用 三相六拍,以达到减速控制的目的。 均匀地改变脉冲时间间隔的变速控制:步进电机的加速(或减速) 控制,可以用均匀地改变脉冲时间间隔来实现。 采用定时器的变速控制:单片机控制系统中,用单片机内部的定 时器来提供延时时间。方法是将定时器初始化后,每隔一定的时间, 由定时器向CPU申请一次中断,CPU响应中断后,便发出一次控制脉 冲。此时只要均匀地改变定时器时间常数,即可达到均匀加速(或 减速)的目的。这种方法可以提高控制系统的效率。
脉冲 方向控制
步进控制器
功率放大器
步进电机
负载
图3-19 步进电机控制系统的组成
2
随着电子技术的发展,除功率驱动电路之外,其它硬件电路均可由软 件实现。采用计算机控制系统,由软件代替步进控制器,不仅简化了 线路,降低了成本而且可靠性也大为提高,同时,根据系统的需要可 灵活改变步进电机的控制方案,使用起来很方便。典型的微型机控制 步进电机系统原理图如图3-20所示。 使用微型机对步进电机进行控制有串行和并行两种方式。 步 进 电 机
6
二、步进电动机的闭环控制
在开环步进电动机系统中,电动机的输出转矩在很大程度上取决于驱 动电源和控制方式。对于不同的步进电动机或同一种步进电动机而不 同负载,励磁电流和失调角发生改变,输出转矩都会随之发生改变, 很难找到通用的控速规律,因此,也很难提高步进电机的技术指标。 闭环系统是直接或间接地检测转子的位置和速度,然后通过反馈和适 当处理自动给出驱动脉冲串。因此采用闭环控制可以获得更精确的位 置控制和更高、更平稳的转速,从而提高步进电动机的性能指标。 步进电动机的输出转矩是励磁电流和失调角的函数。为了获得较高的 输出转矩,必须考虑到电流的变化和失调角的大小,这对于开环控制 来说是很难实现的。
三相六拍步进电机PLC梯形图控制程序设计与调试
现代控制技术及PLC控制课程设计姓学班专院名号级业别机电机械电子工程机械工程学院指导教师2013年7月5日内容摘要步进电动机具有快速起停、精确步进和定位等特点,所以常用作工业过程控制及仪器仪表的控制元件。
目前,比较典型的控制方法是用单片机产生脉冲序列来控制步进电机。
但采用单片机控制, 不仅要设计复杂的控制程序和I/O 接口电路, 实现比较麻烦, 而且对工业现场的恶劣环境适应性差,可靠性不高。
使用PLC可编程控制器实现三相六拍步进电动机驱动,可使步进电动机东芝的抗干扰能力强,可靠性高,同时,由于实现了模块化结构,是系统结构十分灵活,而且编程语言简短易学,便于掌握,可以进行在线修改,柔性好,体积小,维修方便。
本设计是利用PLC做三相六拍步进电动机的控制核心,用按钮开关的通断来实现对步进电机正,反转控制,而且正,反转切换无须经过停车步骤。
其次可以通过对按钮的控制来实现对高,低速度的控制。
充分发挥PLC的功能,最大限度地满足被控对象的控制要求,是设计PLC控制系统的首要前提,这也是设计最重要的一条原则。
本设计更加便于实现对步进电机的制动化控制。
目录1引言 (1)2系统总体方案设计 (2)2.1系统硬件配置及组成原理 (2)2.2 方案原理分析 (3)2.3 可行性研究 (3)2.4 设计思想 (3)3 控制系统设计 (4)3.1 控制程序图及软件模块 (4)3.2 梯形图程序设计与梯形图 (5)3.3 三相六拍步进电机控制语句表 (9)3.4 PLC接线图与主电路图 (10)4 5心得体会 (11)参考文献 (12)引言课题内容用PLC控制三相六拍电动机,控制要求如下:1.三相步进电动机有三个绕组:A,B,C,正转通电顺序为:A→AB→B→BC→C→CA→A反转通电顺序为:A→CA→C→BC→B→AB→A2.要求能实现正,反转控制,而且正,反转切换无须经过停车步骤。
3.就有两种转速:1号开关合上,则转过一个步距角需0.5秒。
步进电机工艺流程图.
测摩 擦力 矩
装齿轮Ⅱ/Ⅲ
装齿轮Ⅰ/输出 轴
装盖板
封前检 验
铆封
齿轮吻 合检查
测牵 入力
矩
耐压 测试
线束捆扎 贴铭牌
成品 检验 包装 入库
铆输出轴 摇轴 拉轴检 验
装轴套
噪声 检测
步进电机工艺流程图
骨架中磁板装配
裁线铆端子
装焊针
沾锡
线圈绕制
穿插头
裁套管
缠胶带
压焊针
浸锡
浸锡检 验
浸锡检 验
绑绝缘胶带
穿烘热缩套管
线位测 试
外观检 验
线束捆扎
线路板焊接
铆固定轴
线圈组件焊接
组件检 测/装护
套
通电检 验
装上磁板
铆中心轴 机壳装三角弹片
磁芯除尘
机壳装磁芯加油
齿轮加油
装固定ห้องสมุดไป่ตู้组件
摩擦片加油 装输出轴
单片机课程设计-正反转可控的步进电机
正反转可控的步进电机1 引言本课程设计目的是为了进一步掌握单片机系统,加强对系统设计和应用能力的培养而开设的综合设计训练环节。
本系统用51单片机和ULN2003A电机驱动芯片并加入控制按钮来实现步进电机的正、反转控制。
2 设计方案及原理步进电机可以对旋转角度和转动速度进行高精度的控制。
作为控制执行部件,广泛应用于自动控制和精密仪器等领域。
例如在仪器仪表、机床设备以及计算机的外围设备中(如打印机和绘图仪),常有对精确的、可控制的回转源的需要。
在这种情况下,使用步进电机最为理想。
2.1 步进电机控制步进电机两个相邻磁极之间的夹角为60°,线圈绕过相对的两个磁极构成一相。
此外各磁极上还有5个分布均匀的锯形小齿。
电机转子上没有绕组。
当某相绕组通电时,响应的两个磁极就分别形成N-S极,产生磁场,并与转子形成磁路。
如果这是定子的小齿与转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子齿与定子齿对齐,从而使步进电机向前“走”一步。
如果通过单片机按顺序给绕组施加有序的脉冲电流,就可以控制电机的转动,从而进行了数字到角度的转换。
转动的角度大小与施加的脉冲数成正比,转动的速度与脉冲频率成正比,而转动方向则与脉冲的顺序有关。
2.2 步进电机驱动方式步进电机常用的驱动方式是全电压驱动,即在电机移步与锁步时都加载额定电压。
为防止电机过流及改善驱动特性需加限流电阻。
由于步进电机锁步时,限流电阻要消耗掉大量的功率。
因此,限流电阻要有较大功率容量,并且开关管也要有较高的负载能力。
步进电机也可以使用软件方法,即使用单片机实现,这样不但简化了电路,同时降低了成本。
使用单片机以软件方式驱动步进电机,不但可以通过编程方法在一定范围之内自由的设定步进电机的转速,往返转动的角度以及转动次数等;还可以方便灵活的控制步进电机的运行状态,以满足不同用户的需求。
因此常把单片机步进电机控制电路称之为可编程步进电机控制驱动器。
8255端口控制步进电机控制框图和程序
9.4工程应用9.4.1项目1:用8255A端口控制步进电机1.项目要求与目的(1)项目要求:根据开关的状态,用8255端口控制步进电机,编写程序输出脉冲序列到8255的PA口,控制步进电机正转、反转,加速,减速。
(2)项目目的:●了解步进电机控制的基本原理。
●掌握控制步进电机转动的编程方法。
●了解单片机控制外部设备的常用电路。
2.项目电路连接与说明(1)项目电路连接:8255的片选CS孔用导线接至译码处200H~207H插孔,8255的PA0-PA3用导线接至步进电机的A、B、C和D,PB0-PB3用导线接至开关K0、K1和K2。
(2)项目说明:步进电机驱动原理是通过对每相线圈中的电流的顺序切换来使电机作步进式旋转。
切换是通过8255输出脉冲信号来实现的。
所以调节脉冲信号的频率便可以改变步进电机的转速,改变各相脉冲的先后顺序,可以改变电机的旋转方向。
步进电机的转速应由慢到快逐步加速。
步进电机驱动方式可以采用双四拍(AB→BC→CD→DA→AB)方式,也可以采用单四拍(A→B→C→D→A)方式,或单、双八拍(A→AB→B→BC→C→CD→D→DA→A)方式。
实际控制时公共端是接在+5V上的,所以实际控制脉冲是低有效。
8255的PA口输出的脉冲信号经(MC1413或ULN2003A)倒相驱动后,向步进电机输出脉冲信号序列。
当开关K0=0时,步进电机驱动方式采用单/双八拍工作方式,当开关K1=0时,步进电机驱动方式采用双四拍工作方式,当开关K2=0时,步进电机驱动方式采用单四拍反转工作方式。
3.项目电路原理框图项目电路原理框图如图7-1所示。
电路由8255A芯片、驱动和步进电机等组成。
图7-1 用8255A端口控制步进电机电路框图4.项目程序设计(1)程序流程图用8255A端口控制步进电机程序流程图如图7-2所示。
图7-2 程序流程图(2)程序清单用8255A端口控制步进电机程序清单如下所示。
ASTEP EQU 01HBSTEP EQU 02HCSTEP EQU 04HDSTEP EQU 08HCODE SEGMENTASSUME CS:CODESTART :MOV DX, 203H ;8255控制口地址MOV AL, 82H ;PA口输出,B口输入OUT DX, AL ;写控制字K0:MOV DX, 200H ;PA口地址MOV AL,0 ;输出低电平OUT DX,AL ;电机停止转动MOV DX,201H ;PB口地址IN AL,DX ;读开关状态TEST AL,01H ;PB0位(K0=0吗?)JNZ K1 ;不是零转K1JMP STEP8 是零转单/双八拍工作方式K1: IN AL,DX ;读开关状态TEST AL,02H ;PB1位(K1=0吗?)JNZ K2 ;不是零转K2JMP STEP4 ;是零转双四拍工作方式K2:IN AL,DX ;读开关状态TEST AL,04H ;PB2位(K2=0吗?)JZ STEP41 ;是零转单四拍反转工作方式JMP K0 ;循环; 单/双八拍工作方式:A→AB→B→BC→C→CD→D→DA→A STEP8:MOV BX,9000H;设置初始延时时间MOV DX, 200H;PA口地址MOV AL,ASTEPOUT DX,ALCALL DELAYMOV AL,ASTEP+BSTEPOUT DX,ALCALL DELAYMOV AL,BSTEPOUT DX,ALCALL DELAYMOV AL,BSTEP+CSTEPOUT DX,ALCALL DELAYMOV AL,CSTEPOUT DX,ALCALL DELAYMOV AL,CSTEP+DSTEPOUT DX,ALCALL DELAYMOV AL,DSTEPOUT DX,ALCALL DELAYMOV AL,DSTEP+ASTEPOUT DX,ALCALL DELAYJMP K0; 双四拍工作方式:AB→BC→CD→DA→ABSTEP4:MOV BX,5000H;设置延时时间MOV DX, 200H;PA口地址MOV AL,ASTEP+BSTEP;PA0PA1(AB相)输出高电平 OUT DX,ALCALL DELAY ;调延时MOV AL,BSTEP+CSTEP ;BC输出高电平OUT DX,ALCALL DELAY ;调延时MOV AL,CSTEP+DSTEP;CD输出高电平OUT DX,ALCALL DELAY ;调延时MOV AL,DSTEP+ASTEP;DA输出高电平OUT DX,ALCALL DELAY ;调延时JMP K0; 单四拍反转工作方式: D→C→B→A→DSTEP41:MOV BX,1000H;设置延时时间MOV DX,200H;PA口地址MOV AL,DSTEP; D输出高电平OUT DX,ALCALL DELAY;调延时MOV AL,CSTEP; C输出高电平OUT DX,ALCALL DELAY;调延时MOV AL,BSTEP; B输出高电平OUT DX,ALCALL DELAY;调延时MOV AL,ASTEP; A输出高电平OUT DX,ALCALL DELAY;调延时JMP K0DELAY PROC NEAR ;延时子程序PUSH CXMOV CX,BXDD1:NOPLOOP DD1POP CXRETDELAY ENDP ; 延时子程序结束CODE ENDS ;代码段结束END START。
自己做的四相八拍步进电机调速
1 引言在工业控制系统里步进电动机是主要的控制元件之一。
步进电机具有快速启动停止,精确定位和能够使用数字信号进行控制,能够实现脉冲-角度转换的特点,因此得到广泛的应用。
在使用步进电机的控制系统里,脉冲分配器产生周期的控制脉冲序列,步进电机驱动器每接收一个脉冲就控制步进电机沿给定方向步进一步。
本实验旨在通过控制AT89S52芯片,实现对四相步进电机的转动控制。
具体功能主要是控制电机正转、反转、加速与减速。
具体工作过程是:给试验箱上电后,拨动启动开关,步进电机按照预先设置的转速和转动方式转动。
调整正反转按钮,步进电机实现正反转切换;拨动加速开关,步进电机转速加快,速度达到最大值,不再加速;拨动减速开关时,电机减速转动,速度减到最小速度,停止减速。
2 四相步进机2.I 步进电机步进电机是一种将电脉冲转化为角位移的执行机构。
电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
2.2 步进电机的控制1.换相顺序控制:通电换相这一过程称为脉冲分配。
例如:混合式步进电机的工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。
2.控制步进电机的转向控制:如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
3.控制步进电机的速度控制:如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。
两个脉冲的间隔越短,步进电机就转得越快。
2.3 步进电机的工作过程图2.1步进电机设计图开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
步进电机控制接口实验
实验一 步进电机控制接口实验一、实验目的通过步进电机控制实验,学习并行接口电路及其控制程序的设计原理与方法。
二、实验内容基本实验 控制四相步进电机以双八拍方式运行,自己设置按键来控制电机的启停。
三、实验要求利用MFID 实验平台和步进电机驱动模块板进行硬件连接,利用MF2KI 集成开发环境进行步进电机软件控制程序的设计、调试,直到使步进电机正常运行。
四、实验原理1.步进电机驱动模块板电路原理如图2.1.2所示。
模块板上包括接口的对象永磁式四相步进电机和驱动电路达林顿管TIP ,保护电路74LS373,相序指示灯以及开关SW 1和SW 2等。
2.步进电机接口设计原理与方法的详细阐述,参考计算机接口技术相关参考书。
图2.1.2 步进电机驱动模块电路原理框图五、实验步骤 步骤一:硬件连接跳线设置:模块电源L 区 JP8跳接。
单线连法如右图:F 区A 相B 相C 相D 相OE#74LS373开关P 区 PA0 PA2 PA4 PA6 PC4 PC0 PC1连接线按键开关T 区SW1 SW2排线接法如右图:步骤二:将平台的电源开关拔到“内”的位置上。
在配套集成环境下进行硬件检测,来达到初始化芯片的目的。
步骤三:(演示实验步骤)打开集成环境在“演示实验”菜单下点开“基本接口实验”。
在“基本接口实验”中的“并行接口实验”中选择“步进电机”实验进行演示。
步骤四:(学生实验步骤)打开集成环境在“文件”菜单下学生可以选择新建自己的C++/ASM文件或者集成环境自带的C++/ASM参考程序进行调试、运行。
步骤五:观看实验现象得出结论。
△步进电机接口控制流程图①△步进电机接口控制主程序:NAMA BUJINDIANJIDATA SEGMENTPSTA DB 05H,15H,14H,54H,50H,51H,41H,45H ;DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:CODEORG 100HBEGIN: MOV DX,303H ;初始化8255AMOV AL, 10000001B ;命令控制字OUT DX,AL ;送命令MOV AL,00001001B ;置PC4=1关闭74LS373OUT DX,ALL: MOV DX,302HIN AL,DXAND AL,00000010 ;查SW2按下?未按下,等待 JNZ L ;按下后继续执行MOV DX,303H ;置PC4=0,打开74LS37MOV AL,08HOUT DX,ALRELOAD: MOV SI,OFFSET PSTA ;设置相序表指针MOV CX,8 ;设8拍循环次数LOP: MOV DX,302HIN AL,DXAND AL,00000001 ;查SW1按下?未按下,等待 JZ QUIT ;已按下,退出MOV AL,[SI] ;未按下,送相序代码到PA口 MOV DX,300HOUT DX,ALMOV DI,0AFHMOV BX,0FFFFH ;延时DELAY: DEC BXJNZ DELAYDEC DIJNZ DELAYINC SI ;相序表指针+1DEC CX ;循环次数-1JNZ LOP ;未到8次,继续JMP RELOAD ;已到8次,重新赋值QUIT: MOV DX,303H ;置PC4=1,关闭74LS373MOV AL,09OUT DX,ALMOV AH,4CH ;程序退出,带返回码结束INT 21HCODE ENDSEND START七、心得体会上机实验操作是一个把理论用于实践的很好机会。
四相步进电机原理图及程序
四相步进电机原理图本文先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。
1. 步进电机的工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图1是该四相反应式步进电机工作原理示意图。
图1 四相步进电机步进示意图开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:a. 单四拍b. 双四拍c八拍图2.步进电机工作时序波形图2.基于AT89C2051的步进电机驱动器系统电路原理步进电机驱动器系统电路原理如图3:图3 步进电机驱动器系统电路原理图AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。
使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。
图中L1为步进电机的一相绕组。
AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。
相步进电机驱动程序及工作原理
1. 步进电机的工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图1是该四相反应式步进电机工作原理示意图。
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D 相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图、b、c所示:驱动电路:程序:大家对照一下程序就知道,本程序采用了八拍工作方式/***********************************************项目:步进电机正反转(EE01学习板演示程序)**作者:一线工人**网站:电子工程师之家 <>#define uchar unsigned char#define uint unsigned intuchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};/********************************************************//*/* 延时t毫秒/* 时钟,延时约1ms/*/********************************************************/void delay(uint t){uint k;while(t--){for(k=0; k<123; k++){ }}}/********************************************************/ /*/*步进电机正转/*/********************************************************/ void motor_ffw(uint n){uchar i;uint j;for (j=0; j<12*n; j++) //转1×n圈{for (i=0; i<8; i++) //一个周期转30度{P0 = FFW; //取数据delay(15); //调节转速}}}/********************************************************/ /*/*步进电机反转/*/********************************************************/ void motor_rev(uint n){uchar i;uint j;for (j=0; j<12*n; j++) //转1×n圈{for (i=0; i<8; i++) //一个周期转30度{P0 = REV; //取数据delay(15); //调节转速}}}/******************************************************** ** 主程序**********************************************************/main(){while(1){motor_ffw(5); //电机正转delay(1000); //换向延时motor_rev(5); //电机反转delay(1000); //换向延时}}。
步进电机实验报告(1)
步进电机控制实验一、实验目的步进电机作为一种数字控制电机,可以准确的控制角度和距离应用非常广泛,本实验利用SPCE061A单片机通过自己编写程序实现步进电机的控制使我们加深对步进电机的了解,同时学会使用步进电机的驱动芯片WZM-2H042M。
另外要求我们掌握单片机控制步进电机的硬件接口电路,以及熟悉步进电机的工作特性。
二、实验内容根据步进电机驱动电路,使用单片机驱动步进电机,控制步进电机正转、反转操作。
三、实验要求按实验内容编写程序,并在实验仪上调试和验证。
四、实验说明1.步进电动机有三线式、五线式、六线式三种,但其控制方式均相同,必须以脉冲电流来驱动。
若每旋转一圈以20个励磁信号来计算,则每个励磁信号前进18度,其旋转角度与脉冲数成正比,正、反转可由脉冲顺序来控制。
2.步进电动机的励磁方式可分为全部励磁及半步励磁,其中全步励磁又有1相励磁及2相励磁之分,而半步励磁又称1-2相励磁。
图为步进电动机的控制等效电路,适应控制A、B、/A、/B的励磁信号,即可控制步进电动机的转动。
每输出一个脉冲信号,步进电动机只走一步。
因此,依序不断送出脉冲信号,即可步进电动机连续转动。
a.1相励磁法:在每一瞬间只有一个线圈导通。
消耗电力小,精确度良好,但转矩小,振动较大,每送一励磁信号可走18度。
若欲以1相励磁法控制步进电动机正转,其励磁顺序如图所示。
若励磁信号反向传送,则步进电动机反转。
励磁顺序: A→B→C→D→AA B C DSTEP1 1 0 0 02 0 1 0 03 0 0 1 04 0 0 0 1b.2相励磁法:在每一瞬间会有二个线圈同时导通。
因其转矩大,振动小,故为目前使用最多的励磁方式,每送一励磁信号可走18度。
若以2相励磁法控制步进电动机正转,其励磁顺序如图所示。
若励磁信号反向传送,则步进电动机反转。
励磁顺序: AB→BC→CD→DA→ABSTEP A B C D1 1 1 0 02 0 1 1 03 0 0 1 14 1 0 0 1c.1-2相励磁法:为1相与2相轮流交替导通。
步进电机程序及原理图
附录Ⅱ:/************************************************************* *************************************************************/#include "reg52.h"#include <intrins.h>sbit ForeWordLed=P1^0;#define Set_ForeWordLed ForeWordLed=0;#define ReSet_ForeWordLed ForeWordLed=1;sbit BackWordLed=P1^1;#define Set_BackWordLed BackWordLed=0;#define ReSet_BackWordLed BackWordLed=1;sbit AddSpdLed=P1^3;#define Set_AddSpdLed AddSpdLed=0;#define ReSet_AddSpdLed AddSpdLed=1;sbit SubSpdLed=P1^5;#define Set_SubSpdLed SubSpdLed=0;#define ReSet_SubSpdLed SubSpdLed=1;sbit ResetLed=P1^7;#define Set_ResetLed ResetLed=0;#define ReSet_ResetLed ResetLed=1;sbit ReSetKeyIn=P2^0; //0 低表有代输入sbit SubSpdKeyIn=P2^1;sbit AddSpdKeyIn=P2^2;sbit BackWordKeyIn=P2^3;sbit ForeWordKeyIn=P2^4;unsigned int motorSpdDelayUs;//A-AB-B-BC-C-CD-D-DA#define A_run P0=0x01;#define AB_run P0=0x03;#define B_run P0=0x02;#define BC_run P0=0x06;#define C_run P0=0x04;#define CD_run P0=0x0C;#define D_run P0=0x08;#define DA_run P0=0x09;unsigned char nowWordFlg;/****************************************************************** 函数功能:延时US入口函数:unsigned char us_value返回参数:无/******************************************************************/ void delay_us(unsigned int value) //delay about 1 us{while(value--){_nop_();}}/****************************************************************** 函数功能:延时MS入口函数:unsigned int ms_value返回参数:无/******************************************************************/ void delay_ms(unsigned int ms_value) //delay about 1 ms{unsigned int k,i;for(k=0;k<ms_value;k++){i=200;while(i--){_nop_();}}}/****************************************************************** 函数功能:电机正转程序入口函数:返回参数:无/******************************************************************/ void motor_Foreward(){A_run;delay_us(motorSpdDelayUs);AB_run;delay_us(motorSpdDelayUs);B_run;delay_us(motorSpdDelayUs);BC_run;delay_us(motorSpdDelayUs);C_run;delay_us(motorSpdDelayUs);CD_run;delay_us(motorSpdDelayUs);D_run;delay_us(motorSpdDelayUs);DA_run;delay_us(motorSpdDelayUs);}/****************************************************************** 函数功能:电机反转程序入口函数:返回参数:无/******************************************************************/ void motor_Backward(){DA_run;delay_us(motorSpdDelayUs);D_run;delay_us(motorSpdDelayUs);CD_run;delay_us(motorSpdDelayUs);C_run;delay_us(motorSpdDelayUs);BC_run;delay_us(motorSpdDelayUs);B_run;delay_us(motorSpdDelayUs);AB_run;delay_us(motorSpdDelayUs);A_run;delay_us(motorSpdDelayUs);}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_ForeWordKeyIn(){if(!ForeWordKeyIn){delay_ms(10);if(!ForeWordKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_BackWordKeyIn(){if(!BackWordKeyIn){delay_ms(10);if(!BackWordKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取加速按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_AddSpdKeyIn(){if(!AddSpdKeyIn){delay_ms(10);if(!AddSpdKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_SubSpdKeyIn(){if(!SubSpdKeyIn){delay_ms(10);if(!SubSpdKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_ReSetKeyIn(){if(!ReSetKeyIn){delay_ms(10);if(!ReSetKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:主函数入口函数:无返回参数:无/******************************************************************/ void main(){P0=0xff;P1=0xff;P2=0xff;motorSpdDelayUs=500;while(1){if(read_ReSetKeyIn()) //参数复位{motorSpdDelayUs=500;nowWordFlg=1;ReSet_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;Set_ResetLed;while(read_ReSetKeyIn());ReSet_ResetLed ;}if(read_SubSpdKeyIn()) //减速{ReSet_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;Set_SubSpdLed;while(read_SubSpdKeyIn()){if(motorSpdDelayUs<1000) motorSpdDelayUs+=5;if(nowWordFlg) motor_Foreward();else motor_Backward();}ReSet_SubSpdLed;}if(read_AddSpdKeyIn()) //加速{ReSet_BackWordLed;ReSet_ForeWordLed;Set_AddSpdLed;ReSet_SubSpdLed;while(read_AddSpdKeyIn()){if(motorSpdDelayUs>100) motorSpdDelayUs-=5;if(nowWordFlg) motor_Foreward();else motor_Backward();}ReSet_AddSpdLed;}if(read_ForeWordKeyIn()) //前进{Set_ForeWordLed;ReSet_BackWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;nowWordFlg=1;while(read_ForeWordKeyIn())motor_Foreward();ReSet_ForeWordLed;}if(read_BackWordKeyIn()) //后退{Set_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;nowWordFlg=1;while(read_BackWordKeyIn())motor_Backward();ReSet_BackWordLed;}};}。