Future Transportation with Smart Grids & Sustainable Energy

Future Transportation with Smart Grids & Sustainable Energy
Future Transportation with Smart Grids & Sustainable Energy

PLC控制步进电机的实例(图与程序)

PLC控制步进电机的实例(图与程序) ·采用绝对位置控制指令(DRVA),大致阐述FX1S控制步进电机的方法。由于水平有限,本实例采用非专业述语论述,请勿引用。 ·FX系列PLC单元能同时输出两组100KHZ脉冲,是低成本控制伺服与步进电机的较好选择! ·PLS+,PLS-为步进驱动器的脉冲信号端子,DIR+,DIR-为步进驱动器的方向信号端子。 ·所谓绝对位置控制(DRVA),就是指定要走到距离原点的位置,原点位置数据存放于32位寄存器D8140里。当机械位于我们设定的原点位置时用程序把D8140的值清零,也就确定了原点的位置。 ·实例动作方式:X0闭合动作到A点停止,X1闭合动作到B点停止,接线图与动作位置示例如左图(距离用脉冲数表示)。 ·程序如下图:(此程序只为说明用,实用需改善。) ·说明: ·在原点时将D8140的值清零(本程序中没有做此功能) ·32位寄存器D8140是存放Y0的输出脉冲数,正转时增加,反转时减少。当正转动作到A点时,D8140的值是3000。此时闭合X1,机械反转动作到B点,也就是-3000的位置。D8140的值就是-3000。 ·当机械从A点向B点动作过程中,X1断开(如在C点断开)则D8140的值就是200,此时再闭合X0,机械正转动作到A点停止。 ·当机械停在A点时,再闭合X0,因为机械已经在距离原点3000的位置上,故而机械没有动作!

·把程序中的绝对位置指令(DRVA)换成相对位置指令(DRVI): ·当机械在B点时(假设此时D8140的值是-3000)闭合X0,则机械正转3000个脉冲停止,也就是停在了原点。D8140的值为0 ·当机械在B点时(假设此时D8140的值是-3000)闭合X1,则机械反转3000个脉冲停止,也就是停在了左边距离B点3000的位置(图中未画出),D8140的值为-6000。 ·一般两相步进电机驱动器端子示意图: ·FREE+,FREE-:脱机信号,步进电机的没有脉冲信号输入时具有自锁功能,也就是锁住转子不动。而当有脱机信号时解除自锁功能,转子处于自由状态并且不响应步进脉冲。 ·V+,GND:为驱动器直流电源端子,也有交流供电类型。 ·A+,A-,B+,B-分别接步进电机的两相线圈。

步进电机的控制程序

mega16的,16和32管脚兼容,只不过flash大小不一样,不过中断向量号也不一样,你看下自己改改。时钟频率:内部RC 1M 芯片:ULN2003 键值:0 小角度快正转。1 小角度快倒。2 大角度快转。3 大角度快倒。4 小角度正慢转。5 小角度倒慢转。6 大角度正慢转。7 大角度倒慢转。********************************************************************/ #include #include #define uchar unsigned char #define uint unsigned int uchar a=0,b=0; uchar KEY_num=0xe1; unsigned int m=9000; const uchar f1[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03}; //正转时序3.75度 const uchar f2[]={0x04,0x06,0x02,0x03,0x01,0x09,0x08,0x0c}; //倒转时序3.75度 const uchar f3[]={0x01,0x02,0x04,0x08}; //正转时序7.5度 const uchar f4[]={0x01,0x08,0x04,0x02}; //倒转时序7.5度 void delay(int k) //延时 { int i; for(i=0;i

步进电机控制及其汇编程序

综合实践报告之第二次大作业 题目:步进电机控制设计 说明:在工业电气自动化工程中,步进电机是一种常用的控制设备,它以脉冲信号控制电机的转速,在数控机床、仪器仪表、计算机外围设备以及其它自动设备中有广泛的应用。 步进电机是指一步步走的电动机,所谓“步”指转动角度,每步都会使电机转过一个固定的角度。步进电机有不同的种类,但其控制方法均相同,均以脉冲信号进行驱动,很适合使用单片机来进行控制。 本次大作业要求设计一个步进电机的控制部分。 已知: 采用2相制5线步进电机,其结构如下图所示,线圈中心抽头X1与X2连接在一起; B 相X1A 相 2相步进电机 步进电机采用1相激磁法,即在每一个瞬间只有一个线圈导通,其它线圈休息; 单片机与步进电机之间可采用ULN2003类的驱动IC ; 要求: 查找资料,设计出步进电机的硬件连接电路图; 给出控制软件流程图; 用汇编语言写出控制软件的代码。 提示:本作业对电机的转动方向不做要求,在实际应用中,改变线圈激磁的顺序可以改变步进电机的转动方向,每送一次激磁信号后应经过一小段时间延时,让步进电机有足够的时间建立激励磁场及转动。可以使用单片机的~端口输出控制信号,经驱动IC 传至步进电机。

电路图设计说明 此控制电路选用AT89S51型单片机作为驱动时序的输出控制器,其输出作为两相四线步进电机的时序信号,经过驱动芯片ULN2003放大后输入到两相四线步进电机的输入端口;单片机作为控制指令的输入按键K1-K3的输入端口,K1为电机正转按键,K2为电机正转按键,K3为电机停止按键,这三个按键均为高电平输入有效,按一下K1电机正转,按一下K2电机反转转,按一下K3电机停止。其硬件电路如图一: 控制程序流程图

步进电机的控制电路和程序

步进电机的控制电路和程序 先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC总线,SPI总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。 上图是我们将要使用的51单片机综合学习系统硬件平台,本期实验我们用到了综合系统主机、步进电机,综合系统其它功能模块原理与使用详见前几期《电子制作》杂志及后期连载教程介绍。 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。 步进电机分类与结构 现在比较常用的步进电机分为三种:反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)。本章节以反应式步进电机为例,介绍其基本原理与应用方法。反应式步进电机可实现大转矩输出,步进角一般为1.5度。反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。常用小型步进电机的实物如图1 所示。 图1步进电机实物图 图 2 步进电机内部图 步进电机现场应用驱动电路 综合系统使用的是小型步进电机,对电压和电流 要求不是很高,为了说明应用原理,故采用最简单 的驱动电路,目的在于验证步进电机的使用,在正 式工业控制中还需在此基础上改进。一般的驱动电 路可以用图3的形式。 图3 一般驱动电路 在实际应用中一般驱动路数不止一路,用上图的分立电路体积大,很多 场合用现成的集成电路作为多路驱动。常用的小型步进电机驱动电路可以用 ULN2003或ULN2803。本书配套实验板上用的是ULN2003。ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003A由7组达林顿晶体管阵列和相应的电阻网络以及钳位二极管网络构成,具有同时驱动7组负载的能力,为单片双极型大功率高速集成电路。ULN2003内部结构及等效电路图如图4:

完整的单片机控制步进电机程序

#include "reg52.h" #include "INTRINS.H" #include #include #define uint unsigned int #define uchar unsigned char void check_addr(void); /*地址核对*/ uchar code slave_addr[4]={00, 01, 02, 255}; /*从机地址*/ uchar idata T0low, T0high,common_count,input_order,cmd_in_permit,interval; uchar sent_ok,speed_change,start_up,start_end,address_true,i; uint y1; uint code add[100]={60006,62771,63693,64154,64430,64614,64746,64845,64922,64983,65033,65075,651 11,65141,65167,65190,65211,65229,65245,65260,65273,65285,65296,65306,65315,65323,65331 ,65339,65345,65352,65358,65363,65368,65373,65378,65382,65387,65390,65394,65398,65401,6 5404,65407,65410,65413,65416,65418,65421,65423,65425,65428,65430,65432,65434,65435,654 37,65439,65441,65442,65444,65445,65447,65448,65450,65451,65452,65453,65455,65456,65457 ,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65469,65470,6 5471,65472,65472,65473,65474,65475,65475,65476,65477,65477,65478,65478,65479,65480,654 80,65481}; sbit P2_0=P2^0; /*作输入步进电机的脉冲信号发送口*/ sbit P2_2=P2^2; /*作输入步进电机的旋转方向信号发送口*/ sbit P1_0=P1^0; /*作串口输出信号的使能口, P1_0=0时接通串口,输出信号*/ sbit WD=P1^7; /*看门狗*/ main() { P2_0=0; P2_2=0; /*步进电机的旋转方向待试验后确定*/ P1_0=1; /*开机时需要关断,串口发送功能,需要时再接通*/ WD=1; /*看门狗先为1,电平翻转为喂狗*/ i=0; common_count=0; cmd_in_permit=0; input_order=0; interval=0; address_true=1; speed_change=0; start_up=0;

plc控制步进电机程序.

plc控制步进电机程序 ·采用绝对位置控制指令(DRVA),大致阐述FX1S控制步进电机的方法。由于水平有限,本实例采用非专业述语论述,请勿引用。 ·FX系列PLC单元能同时输出两组100KHZ脉冲,是低成本控制伺服与步进电机的较好选择! ·PLS+,PLS-为步进驱动器的脉冲信号端子,DIR+,DIR-为步进驱动器的方向信号端子。·所谓绝对位置控制(DRVA),就是指定要走到距离原点的位置,原点位置数据存放于32位寄存器D8140里。当机械位于我们设定的原点位置时用程序把D8140的值清零,也就确定了原点的位置。 ·实例动作方式:X0闭合动作到A点停止,X1闭合动作到B点停止,接线图与动作位置示例如左图(距离用脉冲数表示)。 ·程序如下图:(此程序只为说明用,实用需改善。) ·说明: ·在原点时将D8140的值清零(本程序中没有做此功能) ·32位寄存器D8140是存放Y0的输出脉冲数,正转时增加,反转时减少。当正转动作到A点时,D8140的值是3000。此时闭合X1,机械反转动作到B点,也就是-3000的位置。D8140的值就是-3000。 ·当机械从A点向B点动作过程中,X1断开(如在C点断开)则D8140的值就是200,此时再闭合X0,机械正转动作到A点停止。 ·当机械停在A点时,再闭合X0,因为机械已经在距离原点3000的位置上,故而机械没有动作!

·把程序中的绝对位置指令(DRVA)换成相对位置指令(DRVI): ·当机械在B点时(假设此时D8140的值是-3000)闭合X0,则机械正转3000个脉冲停止,也就是停在了原点。D8140的值为0 ·当机械在B点时(假设此时D8140的值是-3000)闭合X1,则机械反转3000个脉冲停止,也就是停在了左边距离B点3000的位置(图中未画出),D8140的值为-6000。 ·一般两相步进电机驱动器端子示意图: ·FREE+,FREE-:脱机信号,步进电机的没有脉冲信号输入时具有自锁功能,也就是锁住转子不动。而当有脱机信号时解除自锁功能,转子处于自由状态并且不响应步进脉冲。 ·V+,GND:为驱动器直流电源端子,也有交流供电类型。 ·A+,A-,B+,B-分别接步进电机的两相线圈。 此主题相关图片如下: 此主题相关图片如下: PLC 在步进电机驱动系统中的应用 一、引言 步进电机是一种常用的执行元件,它可将电脉 冲信号变换为转轴的角位移。由于它的总的位移量 是严格等于输入的指定脉冲数,或其平均转速严格 正比于输入脉冲的频率,同时在其工作频段内,可以 从一种运动状态稳定地转换到另一种运动状态,因 此步进电机具有能精确位移,精确定位,且无累积误 差等特点,从而广泛应用于数字定位控制中。 步进拖动是多元件系统,包括:输入指令脉冲的 程控装置、环形分配器、功放器和执行元件步进电 机。而步进电机驱动源是由环形分配器,功放器两 部分组成,故步进拖动的结构图如图1 所示。 输入脉冲的

步进电机控制方法

第四节 步进电机的控制与驱动 步进电机的控制与驱动流程如图4-11所示。主要包括脉冲信号发生器、环形脉冲分配器和功率驱动电路三大部分。 步进脉冲 方向电平 图4-11 步进电机的控制驱动流程 二、步进电机的脉冲分配 环形分配器是步进电机驱动系统中的一个重要组成部分,环形分配器通常分为硬环分和软环分两种。硬环分由数字逻辑电路构成,一般放在驱动器的内部,硬环分的优点是分配脉冲速度快,不占用CPU的时间,缺点是不易实现变拍驱动,增加的硬件电路降低了驱动器的可靠性;软环分由控制系统用软件编程来实现,易于实现变拍驱动,节省了硬件电路,提高了系统的可靠性。 1.采用硬环分时的脉冲分配 采用硬环分时,步进电机的通电节拍由硬件电路来决定,编制软件时可以不考虑。控制器与硬环分电路的连接只需两根信号线:一根方向线,一根脉冲线(或者一根正转脉冲线,一根反转脉冲线)。假定控制器为AT89S52单片机,晶振频率为12MHz,如图4-18:P1.0输出方向信号,P1.1输出脉冲信号。 则控制电机走步的程序如下: (1)电机正转100步 MOV 0FH,#100D ;准备走100步 CONT1: SETB P1.0 ;正转时P1.0=1 CLR P1.1 ;发步进脉冲的下降沿(设驱动器对于脉冲的下降沿有效) NOP ;延时(延时的目的是让驱动电路的光耦充分导通) NOP ;延时(根据驱动器的需要,调整延时) SETB P1.1 ;发步进脉冲的上升沿 MOV 0EH,#4EH ;两脉冲之间延时20000μs(决定电机的转速) MOV 0DH,#20H ;20000的HEX码为4E20 CALL DELAY ;调用延时子程序 DJNZ 0FH,CONT1 ;循环次数减1后,若不为0则继续,循环100次 RET (2)电机反转100步 MOV 0FH,#100D ;准备走100步 CONT2: CLR P1.0 ;反转时P1.0=0 CLR P1.1 ;发步进脉冲的下降沿(设驱动器对于脉冲的下降沿有效) NOP ;延时(延时的目的是让驱动电路的光耦充分导通) NOP ;延时(根据驱动器的需要,调整延时) SETB P1.1 ;发步进脉冲的上升沿

三相步进电机控制程序及电路

题目:三相步进电机控制系统的设计课程名称:Proteus 学生姓名:刘卫东 学生学号: 系别:电子工程学院 专业:通信工程 年级:2012级 任课教师:王丽 电子工程学院制 2015年4月

三相步进电机控制系统的设计 学生:刘卫东 指导教师:王丽 电子工程学院通信工程 1 系统硬件介绍 AT89C51单片机简介 AT89C51是一种带4k字节闪烁可编程课擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 主要特性: (1)与MCS-51 兼容 (2)4K字节可编程闪烁存储器 (3)寿命:1000写/擦循环 (4)数据保留时间:10年 (5)全静态工作:0Hz-24Hz (6)三级程序存储器锁定 (7)128*8位内部RAM (8)32可编程I/O线 (9)两个16位定时器/计数器 (10)5个中断源 (11)可编程串行通道 (12)低功耗的闲置和掉电模式 (13)片内振荡器和时钟电路 ULN2003A芯片介绍 经常在以下电路中使用,作为: 1、显示驱动

2、继电器驱动 3、照明灯驱动 4、电磁阀驱动 5、伺服电机、步进电机驱动等电路中。 基本参数: 模块配置:7 NPN 电压, Vceo:50V 集电极直流电流:500mA 直流电流增益hFE:1000 工作温度范围:-20°C to +85°C 封装类型:PDIP 引脚数:16 封装类型:DIP 晶体管数:7 表面安装器件:通孔安装器件标号:2003 最大连续电流, Ic:500mA 芯片标号:2003 输入电压最大:30V 输入类型:5V TTL CMOS 输出电压最大:50V 输出电流最大:0.6A 通道数:7 2硬件电路设计 总体的硬件设计 (1)用K0-K2做为通电方式选择键,K0为单三拍,K1为双三拍,K2为三相六拍; 设计一个单片机三相步进电机控制系统要求系统具有如下功能: (2)K3、K4分别为启动和方向控制; (3)正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿色指示灯亮; (4)用4位LED显示工作步数。

步进电机控制程序

步进电机控制程序 #include bit Flag;//定义正反转标志位 unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正转表格unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反转表格/******************************************************************/ /* 延时函数 */ /******************************************************************/ void Delay(unsigned int i)//延时 { while(--i); } /******************************************************************/ /* 主函数 */ /******************************************************************/ main() { unsigned char i; EX1=1; //外部中断0开 IT1=1; //边沿触发 EA=1; //全局中断开 while(!Flag) {

P0=0x71;//显示 F 标示正转 for(i=0;i<4;i++) //4相 { P1=F_Rotation[i]; //输出对应的相可以自行换成反转表格 Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大 } } while(Flag) { P0=0x7C;//显示 b 标示反转 for(i=0;i<4;i++) //4相 { P1=B_Rotation[i]; //输出对应的相 Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大 } } } /******************************************************************/ /* 中断入口函数 */ /******************************************************************/ void ISR_Key(void) interrupt 2 using 1 { Delay(300); Flag=!Flag; //s3按下触发一次,标志位取反

步进电机控制实验

步进电机控制实验 一、实验目的: 了解步进电机工作原理,掌握用单片机的步进电机控制系统的硬件设计方法,熟悉步进电机驱动程序的设计与调试,提高单片机应用系统设计和调试水平。 二、实验内容: 编写并调试出一个实验程序按下图所示控制步进电机旋转: 三、工作原理: 步进电机是工业过程控制及仪表中常用的控制元件之一,例如在机械装置中可以用丝杠把角度变为直线位移,也可以用步进电机带螺旋电位器,调节电压或电流,从而实现对执行机构的控制。步进电机可以直接接收数字信号,不必进行数模转换,用起来非常方便。步进电机还具有快速启停、精确步进和定位等特点,因而在数控机床、绘图仪、打印机以及光学仪器中得到广泛的应用。 步进电机实际上是一个数字/角度转换器,三相步进电机的结构原理如图所示。从图中可以看出,电机的定子上有六个等分磁极,A、A′、B、B′、C、C ′,相邻的两个磁极之间夹角为60o,相对的两个磁极组成一相(A-A′,B-B′,C-C′),当某一绕组有电流通过时,该绕组相应的两个磁极形成N极和S极,每个磁极上各有五个均匀分布矩形小齿,电机的转子上有40个矩形小齿均匀地分布的圆周上,相邻两个齿之间夹角为9°。 当某一相绕组通电时,对应的磁极就产生磁场,并与转子形成磁路,如果这时定子的小齿和转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子和定子的齿 相互对齐。由此可见,错齿是促使步进电机旋转的原因。 三相步进电机结构示意图 例如在三相三拍控制方式中,若A相通电,B、C相都不通电,在磁场作用下使转子齿和A相的定子齿对齐,我们以此作为初始状态。设与A相磁极中心线对齐的转子的齿为0号齿,由于B相磁极与A相磁极相差120°,不是9°的整数倍(120÷9=40/3),所以此时转子齿没有与B相定子的齿对应,只是第13号小齿靠近B相磁极的中心线,与中心线相差3°,如果此时突然变为B相通电,A、C相不通电,则B相磁极迫使13号转子齿与之对齐,转子就转动3°,这样使电机转了一步。如果按照A→B→C的顺序轮流通电一周,则转子将动9°。 步进电机的运转是由脉冲信号控制的,传统方法是采用数字逻辑电路——环形脉冲分配器控制步进电机的步进。下图为环形脉搏冲分配器的简化框图。 三相六拍环形脉搏冲分配器 1、运转方向控制。如图所示,步进电机以三相六拍方式工作,若按A→AB→B→BC→C →CA→A次序通电为正转,则当按A→AC→C→CB→B→BA→A次序通电为反转。 2、运转速度的控制。图中可以看出,当改变CP脉冲的周期时,ABC三相绕组高低电平

LabVIEW程序控制步进电机说明

4 仿真实验 步进电机的控制 步进电机运行系统的连线 对于步进电机的控制程序主要在于编程控制轴的转动(PLS+/PLS-)和轴的正反向转动(DIR+/DIR-),在这里我们对于步进电机驱动器的连接方法采用共阳极接法,如图。 图共阳极接法 PLS+和DIR+要共同连接在数据采集卡的+5V接口上,PLS-和DIR-分别连接数据采集卡的随意两个通道,在这里我们选择了和这两个通道。 本次试验我们使用的步进电机的型号是YH57BYGH56-401A,它的步距角是°,相电流为。这个步进电机有四条接线,需要分别连接步进电机驱动 器的A+/A-、B+/B-的端口,需要步进电机的阴阳极分别接入驱动器的阴阳极端口。对于分辨接线接入驱动器是否正确,我们可以将其中两根线的金属外部用手捏在一起,转动步进电机的轴,如果很难转动那么说明这两根线可以接入A+/A-或B+/B-的接口中,如果顺利转动则需换线继续尝试知道难以转动。 驱动器需要接入电源运行,+V接入+25V,GND接地,如图。这个部分具体的运行过程就是电脑控制程序给数据采集卡一个连续脉冲信号,由采集卡传递到驱动器的DIR端口,再通过DIR-来输出到步进电机,从而导致步进电机轴的转动。 图步进电机驱动器端口 当驱动器的灯是红色时说明出现故障需要及时排查,电机轴失去自锁力。绿灯亮起则可以正常工作。 步进电机驱动器的设置

驱动器的设置主要是通过驱动器右侧8个上下拨动开关键来控制,SW1、SW2、SW3控制电流大小,SW4控制选择静态半流(OFF)或静态全流(ON),剩下的SW5到SW6是决定驱动器的细分程度,如图。 图驱动器的细分 细分是控制精度的标志,通过增大细分能改善精度。细分能增加电机平稳性,通常步进电机都有低频振动的特点,通过加大细分可以改善,使电机运行非常平稳。细分驱动模式具有低速振动极小和定位精度高两大优点。对于有时需要低速运行(即电机转轴有时工作在60rpm以下)或定位精度要求小于度的步进应用中,细分驱动器获得广泛应用。其基本原理是对电机的两个线圈分别按正弦和余弦形的台阶进行精密电流控制,从而使得一个步距角的距离分成若干个细分步完成。例如十六细分的驱动方式可使每圈200标准步的步进电机达到每圈200*16=3200步的运行精度(即°)。 在本次试验中对于设置键的最优配比进行了测试,当电流为,即前三个键为ON、OFF、ON时步进电机运行的最快。细分程度越大则运行速度越慢,电机的振动程度越小,在本次试验中没有剧烈的振动,因此我们选择了最低的细分数,即后四个键为ON、ON、ON、ON。 程序编制 图步进电机的控制程序 如图所示,这是一个控制步进电机轴转动和控制轴正反转的程序。上半部分是控制正反转的程序,主要是通过水平摇杆开关这个布尔控件输出信号来控制轴的正反转,条件结构部分主要为了显示调整方向的效果,点击开关左右显示灯亮,界面更加友好人性化。下半部分的程序就是控制运行,一个高低电平的信号通过for循环变成一个脉冲信号来运行步进电机轴的转动。

步进电机控制代码

基于单片机的步进电机控制系统设计 软件程序代码: #include #define uchar unsigned char //宏定义"uchar"代替"unsigned char"。#define uint unsigned int //宏定义"uint"用来定义无符号整型数。 //数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, // A B C D E F 不显示 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //断码 sbit A1=P2^1; //定义步进电机连接端口 sbit B1=P2^2; sbit C1=P2^3; sbit D1=P2^4; sbit LED_Z = P2^7; //正转指示灯 sbit LED_F = P2^6; //反转指示灯 sbit LED_Q = P1^6; //启动指示灯 sbit key1 = P3^5; //启动 sbit key2 = P3^4; //暂停 sbit key3 = P3^3; //正转 sbit key4 = P3^2; //反转 sbit key5 = P3^1; //速度加 sbit key6 = P3^0; //速度减

#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电 #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电 #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电 #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电 #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电 unsigned char StopFlag = 1; //启动/停止标志 bit ZXflag = 0 ; //转向标志 unsigned char sudu = 5; //速度变量 /******************************************************************** * 名称 : delay_1ms() * 功能 : 延时1ms函数 * 输入 : q * 输出 : 无 ***********************************************************************/ void delay_1ms(uchar q) { uint i,j; for(i=0;i

单片机控制步进电机转动程序

xxxxxxxxxxxxxxxxxxx #include "reg52.h" #include "INTRINS.H" #include #include #define uint unsigned int #define uchar unsigned char #define ACC_LEVEL 42 #define DEC_LEVEL 42 #define STOP_LEVEL 42 #define UP_LEVEL (ACC_LEVEL-2) #define DOWN_LEVEL 1 uchar code slave_addr[4]={00, 01, 02, 255}; uchar code c1[10]={0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xA0,0xA2}; uchar code c2[10]={0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,0xB0,0xB2}; /*加速过程各档速度定时器初值,用16位的T2实现*/ uint code acc_pulse_T2_const[ACC_LEVEL]= {64170,64170,64841,65065,65176,65243,65288,65320,65344,65362,65377,65389,65399,65407,6 5415,65421,65426,65431,65435,65439,65443,65446,65448,65451,65453,65455,65457,65459,654 61,65462,65464,65465,65466,65467,65468,65469,65470,65471,65472,65473,65474,65474}; /*加速过程各档速度加速持续时间(用脉冲数表示),用16位的T0计数,计数器初值*/ uint code acc_time_T0_const[ACC_LEVEL]= {65463,65463,65460,65458,65455,65452,65449,65446,65443,65440,65436,65433,65429,65425,6 5421,65417,65413,65409,65404,65399,65395,65389,65384,65379,65373,65368,65362,65355,653 49,65342,65335,65328,65321,65313,65305,65297,65289,65280,65271,65261,65251,65251}; /*减速过程各档速度定时器初值,用16位的T2实现*/ uint code dec_pulse_T2_const[DEC_LEVEL]= {64170,64170,64841,65065,65176,65243,65288,65320,65344,65362,65377,65389,65399,65407,6 5415,65421,65426,65431,65435,65439,65443,65446,65448,65451,65453,65455,65457,65459,654 61,65462,65464,65465,65466,65467,65468,65469,65470,65471,65472,65473,65474,65474}; /*减速过程各档速度减速持续时间(用脉冲数表示),用16位的T0计数,计数器初值*/ uint code dec_time_T0_const[DEC_LEVEL]=

STC89C52RC步进电机控制程序

四相五线步进电机控制程序。 #include unsigned char code ZZ[]= {0x0E, 0x0C, 0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06}; //正转 unsigned char code FZ[]= {0x06, 0x07, 0x03, 0x0B, 0x09, 0x0D, 0x0C, 0x0E}; //反转 //定义步进电机四相接口 sbit D1=P1^0; sbit D2=P1^1; sbit D3=P1^2; sbit D4=P1^3; //定义按键 sbit k1=P3^2; sbit k2=P3^3; //将步进电机四个口设置为一组I/O,只占用四个I/O口 void set_IO(unsigned char n) { D1 = n & 1; D2 = n >> 1 & 1; D3 = n >> 2 & 1; D4 = n >> 3 & 1; } void delay_ms(unsigned int x) //延时毫秒级 { while(x--); } void main() { unsigned int i; while(1) { if(k1==0) { delay_ms(100); if(k1==0) //按下不动,正转 { for(i=0;i<8;i++) { set_IO(ZZ[i]); delay_ms(200); } } } if(k2==0)

{ delay_ms(100); if(k2==0) //按下不动,反转 { for(i=0;i<8;i++) { set_IO(FZ[i]); delay_ms(200); } } } } }

51单片机控制步进电机程序及硬件电路图

#include <> static unsigned int count; //计数 static int step_index; //步进索引数,值为0-7 static bit turn; //步进电机转动方向 static bit stop_flag; //步进电机停止标志 static int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快 static int spcount; //步进电机转速参数计数 void delay(unsigned int endcount); //延时函数,延时为endcount*毫秒 void gorun(); //步进电机控制步进函数 void main(void) { count = 0; step_index = 0; spcount = 0; stop_flag = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; //允许CPU中断 TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许 TH0 = 0xFE; TL0 = 0x0C; //设定时每隔中断一次 TR0 = 1; //开始计数 turn = 0; speedlevel = 2; delay(10000); speedlevel = 1; do{ speedlevel = 2; delay(10000); speedlevel = 1; delay(10000); stop_flag=1; delay(10000); stop_flag=0; }while(1);

步进电机控制源程序

/********************************************/ /*电子信息工程学院*/ /* 作者:*/ /********************************************/ #include "Stepper.h" /* 定时器0服务子程序*/ void time0() interrupt 1 using 1 // 用定时器0中断来产生CLK时钟 { /* 定时10ms,产生20ms周期的时钟,也就是50Hz的时钟*/ TH0 = -T/256; TL0 = -T%256; CLK = ~CLK; } /* 键消抖延时函数*/ void delay(void) { uchar i; for (i=300;i>0;i--); } /* 键扫描函数*/ uchar keyscan(void) { uchar scancode,tmpcode; P1 = 0xf0; // 发全0 行扫描码 if ((P1&0xf0)!=0xf0) // 若有键按下 { delay(); // 延时去 抖动 if ((P1&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响 { scancode = 0xfe; while((scancode&0x10)!=0) // 逐行扫描 { P1 = scancode; // 输出行扫描码 if ((P1&0xf0)!=0xf0) // 本行有键按下 { tmpcode = (P1&0xf0)|0x0f; /* 返回特征字节码,为1的位即对应于行和列*/ return((~scancode)+(~tmpcode)); }

基于单片机的步进电机转速控制

电子器件市场调研与系统设计实践 专 业: *** 班 级: 姓 名: 学 号: 指导教师: ****大学****学院 **** 年 **月**日

基于单片机的步进电机调速与正反转控制系统 1 系统要求 步进电动机是用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机,它最突出的优点是可以在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,并且用其组成的开环系统既简单、廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制装置等众多领域有着极其广泛的应用。随着微电子和计算机技术的发展,步进电动机的需求量与日俱增,研制步进电机驱动器及其控制系统具有十分重要的意义。本设计基于单片机控制的步进电机设计课题是以单片机为主控制模块,从而实现电机的启停、正反转和调速的目的的一个设计课题。在课题设计之前,通过互联网了解到了当前步进电机的发展状况及发展前景。同时也了解了当今最先进的步进电机所具备的功能,方便为课题设计提供参考和借鉴;最后,通过画原理框图的形式,以最直观的方式为整个课题设计制定了流程及要求。 1.1 设计目的 《电子器件市场调研与系统设计实践》是本专业的重要实践教学环节,强调实际应用技能训练。结合自动化专业系列课程的学习,培养我们对电子器件的认知,锻炼我们的市场调研能力,加深我们对自动化专业系列课程知识的掌握。通过课程设计环节培养学生与人交往、独立思考和处理问题的能力。 1.2 设计内容及要求 本次课程设计所选的步进电机是四相步进电机,采用的方法是利用单片机控制步进电机的驱动。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。本次课程设计就是通过改变脉冲频率来调节步进电机的速度的,并且通过数码管显示其转速的级别。另外通过单片机实现它的正反转,步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。 2 系统方案及原理 2.1 系统设计方案 该步进电机调速系统主要具有电机启停、调速、正反转控制和显示功能,现

相关文档
最新文档