控制步进电机正反转的实际应用

控制步进电机正反转的实际应用
控制步进电机正反转的实际应用

控制步进电机正反转的实际应用程序

/*这是一个控制步进电机正反转的实际应用程序*/

/*选用的是三相步进电机驱动器,p14口线用做步进电机的脉冲控制*/

/*p13口线用做步进电机的方向控制。p15,p16,p17是光耦开关量输入*/

/*信号端,p20,p21,p22,p23与x25045看门狗存储器相连*/

/*k7,k8键是设定步进电机转动速度参数的加减键*/

/*k9是启动运行键,按一下k9,步进电机开始运行,直到p17口线有信号输入才停止*/

/*k10是停止键,任何时候按下k10都将停止步进电机当前的运行*/

/*k11是步进运行键,按一下,步进电机动一下*/

/*k12键是反向运行键,按一下,步进电机开始反向运行,知道p15口线有信号才停止*/

/*如果p16口线有信号输入,则只有k12键才起作用,其它键都没反应。*/ START:do;

$INCLUDE(REG51.DCL)

DECLARE (addrl,n,I,j,ok,ds) byte; /*定义变量*/

declare l(5) byte;

declare (dat,data) byte at (30h);

declare delay word;

DECLARE ACO(11) BYTE CONSTANT (05h,9fh,23h,0bh,99h,49h,/*定义LED段码表*/

41h,1fh,01h,09h,00h);

declare si literally 'p21',sck literally 'p20'; /*X25045囗线定义*/ declare so literally 'p22',cs literally 'p23';

dog:procedure; /* 初始化看门狗x25045 */

cs=1;

call time(1);

cs=0;

call time(1);

cs=1;

end dog;

run:procedure; /*步进电机运行脉冲输出程序*/

if ok=1 then

call dog;

do;

p14=0;

call time(1);

p14=1;

call time(1);

end;

end run;

DISPLAY:PROCEDURE(L0,L10); /*显示子程序*/

DECLARE (L0,L10) BYTE; /*定义显示二位*/

n=L10;

n=aco(n); /*十位数BCD码译成段码*/

sbuf=n; /*十位数送164显示*/

do while ti=0; /*等待发送结束*/

call dog; /*看门狗定时器复位*/

end;

n=L0;

n=aco(n);

sbuf=n; /*个位数送164显示*/

do while ti=0;

call dog;

end;

end display;

outbyt: procedure(da); /*向看门狗存储器写入一字节*/

declare (i,da) byte;

j=da; /*将要写入的字节赋给临时变量J */

do i=0 to 7; /*左移8位,送到口线si */

sck=0;

j=scl(j,1);

si=cy;

sck=1; /*每移一位数据,跟一个时钟信号*/ end;

end outbyt;

inbyt: procedure; /* 从看门狗存储器读出一字节 */ declare (i,di) byte;

j=0;

do i=0 to 7;

sck=1;

sck=0;

cy=so;

j=scl(j,1); /*从看门狗存储器读出一字节送入临时变量j*/ end;

dat=j;

end inbyt;

wrenable: procedure; /* 置看门狗写使能*/

sck=0;

cs=0;

; /* write enable command */

call outbyt(06h); /* x25045 写使能指令06h */

cs=1;

sck=0;

end wrenable;

wrdisable: procedure; /* 置看门狗写禁止 */

sck=0;

cs=0;

; /* write disable command */

call outbyt(04h);

sck=0;

cs=1;

end wrdisable;

wrregister: procedure; /* 写状态寄存器 */

sck=0;

cs=0;

dat=01h; /* write register command */

call outbyt(dat);

; /* 00h--1.4S, 20h--200MS, 10h--600MS, 30h--disable Wdog */ call outbyt(00h); /* 设定看门狗定时时间 */

;

sck=0;

cs=1;

call time(200); /* wait to complete writting cycle */

end wrregister;

rdregister:procedure; /* 读看门狗状态寄存器 */

sck=0;

cs=0;

; /* register read command */

call outbyt(05h);

call inbyt; /* status register read in */

sck=0;

cs=1;

end rdregister;

wbyte:procedure; /* 看门狗存储器字节写入子程序 */

declare comm byte;

sck=0;

cs=0;

comm=02h; /* 写指令 02h */

call outbyt(comm);

call outbyt(addrl);

call outbyt(dat); /* send one byte data to X25043 */

cs=1;

sck=0;

call time(150);

end wbyte;

rbyte:procedure; /*看门狗存储器字节读出子程序 */

declare comm byte;

sck=0;

cs=0;

comm=03h; /* read command */

call outbyt(comm);

call outbyt(addrl);

call inbyt; /* read one byte to */

sck=0;

cs=1;

end rbyte;

incdata: procedure; /* 参数修改--"加"键处理子程序+ */ if p10=0 then /* 如果K7键按下*/

do;

do while p10=0; /* 等待键松开有效 */

call dog; /* 此处必需调用看门狗复位子程序("喂狗"),否则程序将被看门狗复位*/

end;

data=data+1; /* 设定值+1 */

if data>99 then data=1; /* 规定设定值的上限*/

L(1)=data MOD 10; /*将设定值的十位数拆出来送给十位数显示变量L(1) */

L(2)=data/10; /*将设定值的个位数拆出来送给个位数显示变量

L(2) */

call display(L(1),L(2)); /* 将改变后的设定值送164显示出来*/

call time(200); /* 延时 */

call dog;

call time(200);

call dog;

call wrenable; /* 置存储器写使能 */

addrl=00h; /* 置存储器地址 */

dat=l(1);

call wbyte; /* 将变量L(1)的值写入存储器00h位置 */

call wrenable;

addrl=01h;

dat=l(2);

call wbyte; /* 将变量L(2)的值写入存储器01h位置 */

end;

end incdata;

decdata: PROCEDURE; /* 参数修改---"减"键处理子程序- */

IF p11=0 THEN /* k8 键处理子程序 */

do;

do while p11=0;

call dog;

end;

DATA=DATA-1; /* 设定值-1 */

if data=0 then data=99;

L(1)=data MOD 10;

L(2)=data/10;

call display(l(1),l(2));

call dog;

call time(200);

call dog;

call time(200);

call dog;

call wrenable;

addrl=00h;

dat=l(1);

call wbyte;

call wrenable;

addrl=01h;

dat=l(2);

call wbyte;

end;

END decdata;

starton: PROCEDURE; /* start */

declare sd byte;

if p12=0 THEN /* K9键处理子程序 */ do;

do while p12=0;

call dog;

end;

if p17=0 then ok=0; /* 如果p17 口线上有信号输入,则运行标志置0 (停止运行)*/

p13=1; /* 置步进电机正向运转 */

call time(200);

call dog;

do while ok=1; /* 当运行标志为1时,执行速度延时操作 */

do sd= 0 to data; /* 根据设定值 data的数值延时来确定步进电机运行时的脉冲给定速度*/

call dog;

end;

end;

END starton;

step: PROCEDURE; /* step */

declare sd byte;

p13=1; /* 置步进电机正向运转 */

call time(200);

call dog;

IF p33=0 THEN /* k11键处理子程序 */

do;

if p17=0 then ok=0; /* 如果p17上有信号输入,则停止运行*/

do while p33=0;

do sd= 0 to data; /* 调用延时,调整步进电机的运行速度 */

call dog;

call time(2);

end;

call run;

call dog;

end;

end;

ok=0;

END step;

back: PROCEDURE; /* 反向运行处理子程序 */

declare sd byte;

IF p34=0 THEN

do;

do while p34=0;

call dog;

end;

if p15=0 then ok=0; /* 反向运行时,如果遇到p15上有信号输入,则停止步进电机运行 */

p13=0; /* 置步进电机反向运行 */

call time(200);

call dog;

do while ok=1;

do sd=0 to data; /*根据设定值调节步进电机的运行速度 */

call dog;

call time(2);

end;

call run;

if (p15=0 or p32=0 ) then ok=0; /* p15 或 p32 口线任意一个有信号输入,停止运行 */

end;

end;

END back;

MAIN$PROGRAM: /* 初始化主程序 */

ea=0; /* 关中断 */

SCON=00h; /*置串口方式0 ,串行数据输出模式*/

PCON=00h;

tmod=11h;

et0=1;

enable; /* 开中断 (ea=1) */

SCK=0;cs=1; /* 定义存储器口线初始状态 */

call wrenable;

call wrregister; /* 看门狗存储器初始化 */

call wrenable;

call dog;

p2=0ffh; /* 初始化各个口线的状态 */

p1=0ffh;ok=0;

p14=1;p32=1;p33=1;p34=1;

p13=1;

ADDRL=00h; /* 上电复位后从存储器中读出设定的速度值 */ CALL rbyte;

l(1)=dat;

addrl=01h;

call rbyte;

l(2)=dat;

DATA=L(1)+L(2)*10; /*将读出的值合并成十进制,存入变量data中 */ /* 以下是主循环程序 */

LOOP:

IF p10=0 THEN CALL incdata; /* 检测各个按键是否有按下 */

IF p11=0 THEN CALL decdata;

if p12=0 then

do;

ok=1;

call starton;

end;

if p34=0 then

do;

ok=1;

call back;

end;

if p33=0 then

do;

ok=1;

call step;

end;

call dog;

CALL DISPLAY(L(1),L(2)); /* 将设定值送164显示 */ call dog;

CALL TIME(100);

call dog;

GOTO LOOP;

END START;

西门子S 系列PLC控制步进电机进行正反转的方法

1、主程序先正转,等到正转完了就中断,中断中接通个辅助触点(),当闭合,住程序中的反转开始运做。这样子就OK了。 2、用PTO指令让OR 高速脉冲,另一个点如做方向信号,就可以控制正反转了,速度快慢就要控制输出脉冲周期了,周期越短速度越快,如果你速度很快的话请考虑缓慢加速,不然它是启动不了的,如果方向也变的快的话就要还做一个缓慢减速,不然它振动会蛮厉害,而且也会失步。 3、程NETWORK 1 // 用于单段脉冲串操作的主程序(PTO) // 首次扫描时,将映像寄存器位设为低 // 并调用子程序0 LD R 1 CALL SBR_0 NETWORK 1 // 子程序0开始 LD MOVB 16#8D SMB67 // 设置控制字节: // - 选择PTO操作 // - 选择单段操作 // - 选择毫秒增加 // - 设置脉冲计数和周期数值 // - 启用PTO功能 MOVW +500 SMW68 // 将周期设为500毫秒。 MOVD +4 SMD72 // 将脉冲计数设为4次脉冲。 ATCH INT_0 19 // 将中断例行程序0定义为 // 处理PTO完成中断的中断。 ENI // 全局中断启用

PLS 0 // 激活PTO操作,PLS0 =》 MOVB 16#89 SMB67 // 预载控制字节,用于随后的 // 周期改动。 NETWORK 1 // 中断0开始 // 如果当前周期为500毫秒: // 将周期设为1000毫秒,并生成4次脉冲 LDW= SMW68 +500 MOVW +1000 SMW68 PLS 0 CRETI NETWORK 2 // 如果当前周期为1000毫秒: // 将周期设为500毫秒,并生成4次脉冲 LDW= SMW68 +1000 MOVW +500 SMW68 PLS 0序注释 艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。 如需进一步了解相关PLC产品的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城。

基于单片机ATS控制步进电机正反转

基于单片机A T S控制步进 电机正反转 The latest revision on November 22, 2020

目录 步进电机 (7) 附件A 源程序 .......................................... (12) 附件B 仿真结果 (15) 致谢 (18)

摘要 能够实现步进电机控制的方式有多种,可以采用前期的模拟电路、数字电路或模拟与数字电路相结合的方式。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测日新月异更新。本文介绍一种用AT89S52作为核心部件进行逻辑控制及信号产生的单片机技术和汇编语言编程设计的步进电机控制系统,步进电机背景与现状、硬件设计、软件设计及其仿真都做了详细的介绍,使我们不仅对步进电机的原理有了深入的了解,也对单片机的设计研发过程有了更加深刻的体会。本控制系统采用单片机控制,通过人为按动开关实现步进电机的开关,复位。该系统还增加了步进电机的加速及减速功能。具有灵活方便、适用范围广的特点,基本能够满足实践需求。 关键词: AT89S52 步进电机 ULN2003 第一章系统分析 框图设计 根据系统要求画出基于AT89S52单片机的控制步进电机的控制框图如图2-1所示。

图2-1基于AT89C52单片机的控制步进电机的控制框图 系统主要包括单片机、复位电路、晶振电路、按键电路、步进电机及驱动电路几部分。 晶振电路 AT89C52单片机有一个用于构成内部振荡器的反相放大器,XTAL1 和XTAL2 分别是放大器的输入、输出端。石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。 晶振模块自带振荡器、提供低阻方波输出,并且能够在一定条件下保证运行。最常用的两种类型是晶振模块和集成RC振荡器(硅振荡器)。晶振模块提供与分立晶振相同的精度。硅振荡器的精度要比分立RC振荡器高,多数情况下能够提供与陶瓷谐振槽路相当的精度。图2-2为晶振电路。 图2-2 晶振电路 第二章系统设计 硬件连接图 根据图2-1,可以设计出单片机控制步进电机的硬件电路图,如图3-1所示。

步进电机启动停止正反转控制程序的汇编语言的实现

DELAY 1MS MACRO TIME ;延时宏命令 LOCAL AA LOCAL BB PUSH CX MOV CX,TIME AA: PUSH CX MOV CX,1000 BB: NOP LOOP BB POP CX LOOP AA POP CX ENDM DATA SEGMENT TABA DB 01H,03H,02H,06H,04H,05H;正转的模型 TABB DB 05H,04H,06H,02H,03H,01H;反转的模型DATA ENDS CODE SEGMENT ZZ PROC NEAR PUSH DS MOV AX,DATA MOV DS,AX MOV AX,0 PUSH AX MOV DX,203H MOV AL,80H OUT DX,AL ;8255的控制字设定 MOV DX,200H MOV AL,0 OUT DX,AL ;先输出制动命令 MOV CX,360 ;设定正转步数 DD: MOV BL,6 ;六拍 MOV DX,200H LEA DI,TABA ;指针指向正转的数字模型 CC: MOV AL,[DI] OUT DX,AL DELAY 1MS 10 INC DI ;指针加1,指向下一步的数字模型 DEC BL ;拍数减1 JNZ CC ;六拍未结束,则继续循环 LOOP DD;360个周期的六拍未结束,继续循环 ZZ ENDP

FZ PROC NEAR MOV CX,400 ;设定反转步数 FF: MOV BL,6 MOV DX,200H LEA DI,TABB ;指针指向反转的数字模型 EE: MOV AL,[DI] OUT DX,AL DELAY 1MS 10 DEC DI ;指针减1,指向反转下一步数字模型 DEC BL JNZ EE LOOP FF FZ ENDP MOV DX,200H MOV AL,0 OUT DX,AL ;结束后,输出制动命令 RET MAIN ENDP CODE ENDS END START

西门子S系列PLC控制步进电机进行正反转的方法

西门子S系列P L C控制步进电机进行正反转 的方法 SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#

1、主程序先正转,等到正转完了就中断,中断中接通个辅助触点(),当闭合,住程序中的反转开始运做。这样子就OK了。 2、用PTO指令让 OR 高速脉冲,另一个点如做方向信号,就可以控制正反转了,速度快慢就要控制输出脉冲周期了,周期越短速度越快,如果你速度很快的话请考虑缓慢加速,不然它是启动不了的,如果方向也变的快的话就要还做一个缓慢减速,不然它振动会蛮厉害,而且也会失步。 3、程NETWORK 1 // 用于单段脉冲串操作的主程序(PTO) // 首次扫描时,将映像寄存器位设为低 // 并调用子程序0 LD R 1 CALL SBR_0 NETWORK 1 // 子程序0开始 LD MOVB 16#8D SMB67 // 设置控制字节: // - 选择PTO操作 // - 选择单段操作 // - 选择毫秒增加 // - 设置脉冲计数和周期数值 // - 启用PTO功能 MOVW +500 SMW68 // 将周期设为500毫秒。 MOVD +4 SMD72 // 将脉冲计数设为4次脉冲。 ATCH INT_0 19 // 将中断例行程序0定义为 // 处理PTO完成中断的中断。 ENI // 全局中断启用

PLS 0 // 激活PTO操作,PLS0 =》 MOVB 16#89 SMB67 // 预载控制字节,用于随后的 // 周期改动。 NETWORK 1 // 中断0开始 // 如果当前周期为500毫秒: // 将周期设为1000毫秒,并生成4次脉冲 LDW= SMW68 +500 MOVW +1000 SMW68 PLS 0 CRETI NETWORK 2 // 如果当前周期为1000毫秒: // 将周期设为500毫秒,并生成4次脉冲 LDW= SMW68 +1000 MOVW +500 SMW68 PLS 0序注释 艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。 如需进一步了解相关PLC产品的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城。

单片机课设步进电机控制正反转(单片机爱好者)

单片机课程设计报告设计题目:步进电机控制系统 学院机械工程学院 专业机械设计制造及其自动化 班级 姓名 学号 指导教师 湖北工业大学 2010 年秋季学期

目录 1.设计目的 (2) 2.设计的主要内容和要求 (2) 3.题目及要求功能分析 (2) 4.设计方案 (5) 4.1 整体方案 (5) 4.2 具体方案 (5) 5.硬件电路的设计 (6) 5.1 硬件线路 (6) 5.2 工作原理 (7) 5.3 操作时序 (8) 6. 软件设计 (8) 6.1 软件结构 (8) 6.2 程序流程 (9) 6.3 源程序清单 (9) 7. 系统仿真 (9) 8. 使用说明 (10) 9. 设计总结 (10) 参考文献 (11) 附录 (12)

步进电机的控制 1.设计目的 (1)熟悉单片机编程原理。 (2)熟练掌握51单片机的控制电路和最小系统。 (3)单片机基本应用系统的设计方法。 2.设计的主要内容和要求 (1)查阅资料,了解步进电机的工作原理。 (2)通过单片机给参数控制电机的转动。 (3)通过按钮控制启停及反转。 (4)其他功能。 3.题目及要求功能分析 步进电机:步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其精度高等特点,广泛应用于各种工业控制系统中。 三相单、双六拍步进电机的结构和工作原理: 三相单、双六拍步进电机通电方式:这种方式的通电顺

步进电机正反转控制C语言程序 只为初学者

只为初学者的步进电机正反控制程序 #include<> #define uchar unsigned char #define uint unsigned int #define MotorData P2 //步进电机控制接口定义 sbit zheng=P3^0; sbit fan=P3^1; sbit stop=P3^2; uchar phasecw[8] ={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转 uchar phaseccw[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//反转 //ms延时函数 void delay(uint t) { uint k; while(t--) { for(k=0; k<125; k++); } } void Delay_xms(uint x) { uint i,j; for(i=0;i

void Motor_work(uint t) { uchar i,j; switch(t) { case 0: while(1) {if(stop==0) break; for(i=0;i<8;i++) {MotorData=phasecw[i]; delay(50);//转速调节 } } break; case 1: while(1) {if(stop==0) break; for(j=0;j<8;j++) {MotorData=phaseccw[j]; delay(50);//转速调节 } } break; } } //停止转动 void Motor_test(void) { if(zheng==0) { Delay_xms(10); if(zheng==0) Motor_work(0); } if(fan==0) { Delay_xms(10); if(fan==0) Motor_work(1); } } //主函数 void main(void) {

步进电机正反转控制及转速显示

/***************************************************** 程序调试成功 *********************************************************/ #include #define uchar unsigned char #define uint unsigned int sbit wale = P1^4; sbitdula = P1^5; sbitjia_key=P3^3; sbitjian_key=P3^2; sbitZ_key=P3^0; sbitF_key=P3^1; sbit Z_LED=P1^0; sbit F_LED=P1^1; sbit J_LED=P1^2; sbit JA_LED=P1^3; uint flag; ucharnum,show_num=2,maichong=4,table_begin; uchar code SHU[10]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阳数码管驱动信号0---9,不显示 uchar code table[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3};//电机正反转 void delay(uchar x) { uint y; for(;x>0;x--) for(y=0;y<124;y++); } void display() //显示函数 { uint a; a=num; if(a<10) a=a+1; else a=a%10; wale=1; P0=0xfb; wale=0; dula=1; P0=SHU[(num/10)]; dula=0; delay(10);

步进电机正反转程序

步进电机正反转程序 #include //51芯片管脚定义头文件 #include //内部包含延时函数 _nop_(); #define uchar unsigned char #define uint unsigned int uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码 uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码 sbit K1 = P3^2; //正转 sbit K2 = P3^3; //反转 sbit K3 = P3^4; //停止 sbit BEEP = P3^6; //蜂鸣器 /********************************************************/ /* /* 延时t毫秒 /* 11.0592MHz时钟,延时约1ms /* /********************************************************/ void delay(uint t) { uint k; while(t--) {

for(k=0; k<125; k++) { } } } /********************************************************** / void delayB(uchar x) //x*0.14MS { uchar i; while(x--) { for (i=0; i<13; i++) { } } } /********************************************************** / void beep() { uchar i; for (i=0;i<100;i++) { delayB(4); BEEP=!BEEP; //BEEP取反

步进电机正反转程序 一

步进电机正反转程序一 #include <reg51.h> //51芯片管脚定义头文件 #include <intrins.h> //内部包含延时函数_nop_(); #define uchar unsigned char #define uint unsigned int uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码 uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码 sbit K1 = P3^2; //正转 sbit K2 = P3^3; //反转 sbit K3 = P3^4; //停止 sbit BEEP = P3^6; //蜂鸣器 /********************************************************/ /* /* 延时t毫秒 /* 11.0592MHz时钟,延时约1ms /* /********************************************************/ void delay(uint t) { uint k; while(t--) { for(k=0; k<125; k++) { } } } /**********************************************************/ void delayB(uchar x) //x*0.14MS { uchar i; while(x--) { for (i=0; i<13; i++) { } } } /**********************************************************/

步进电机正反转

步进电机控制设计 摘要 步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。结合对步进电机的了解,然后对步进电机的控制原理包括步进电机的控制方式和驱动方式作了系统的说明,采用8051单片机来控制步进电机,并给出了步进电机的双相三拍控制单片机控制和三相六拍的单片机控制的具体实现方法,用汇编程序进行控制运行。控制系统通过单片机存储器、I/O接口、中断、键盘、LED显示器的扩展、步进电机的环形分频器、驱动及保护电路、人机接口电路、中断系统及复位电路、单电压驱动电路等的设计,实现了四相步进电机的正反转,急停等功能。 电机的控制系统由AT80C51单片机控制,具有抗干扰能力强,可靠性高而且系统扩展容易等优势。本次课程设计中着重于通过控制脉冲数来控制位移,实现准确定位。基于步进电机本身的优越性和应用的广泛性,这正是用单片机控制步进电机课程设计的实际意义。 关键字:步进电机 ,角位移,单片机 ,脉冲

目录 1 课题描述 (1) 2总体实现原理 (1) 3 步进电机原理及硬件设计 (2) 3.1 单片机电路 (2) 3.1.1 AT89C51单片机的组成结构 (2) 3.1.2 AT89C51单片机的引脚及功能 (4) 3.2步进电机 (6) 3.2.1 步进电机的工作原理 (6) 3.2.2控制原理 (7) 3.2.3步进电机的驱动方式 (8) 3.2.4最小系统 (9) 3.3输入显示部分 (10) 3.4 电源 (10) 4 软件程序设计 (11) 4.1 主程序的设计 (11) 4.2 定时中断设计 (12) 4.3 外部中断设计 (13) 4.4 系统软件程序 (14) 总结 (19) 致谢 (20) 参考文献 (21)

步进电机正反转控制C语言程序只为初学者

步进电机正反转控制C 语言程序只为初学者公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

只为初学者的步进电机正反控制程序 #include<> #define uchar unsigned char #define uint unsigned int #define MotorData P2 //步进电机控制接口定义 sbit zheng=P3^0; sbit fan=P3^1; sbit stop=P3^2; uchar phasecw[8] ={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转uchar phaseccw[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//反转//ms延时函数 void delay(uint t) { uint k; while(t--) { for(k=0; k<125; k++); } } void Delay_xms(uint x) { uint i,j; for(i=0;i

void Motor_work(uint t) { uchar i,j; switch(t) { case 0: while(1) {if(stop==0) break; for(i=0;i<8;i++) {MotorData=phasecw[i]; delay(50);//转速调节 } } break; case 1: while(1) {if(stop==0) break; for(j=0;j<8;j++) {MotorData=phaseccw[j]; delay(50);//转速调节 } } break; } } //停止转动 void Motor_test(void) { if(zheng==0) { Delay_xms(10); if(zheng==0) Motor_work(0); } if(fan==0) { Delay_xms(10); if(fan==0) Motor_work(1); } } //主函数 void main(void) {

步进电机正反转及调速设计

步进电机正反转及调速设计 陈超 渭南师范学院物理与电气工程系2008级电气(1)班 摘要:本系统用52系列单片机和LY-36电机驱动芯片并加入了按钮来控制步进电机实现转向、转速等。系统中使用的四相步进电机,相应的驱动和控制电路对于其整体性能起着非常重要的作用。经系统调试,能够很好的控制步进电机的正反转、加减速,从而达到预期目的。整个系统具有结构简单、可靠性高、成本低和实用性强等特点,具有较高的通用性和应用推广价值。 关键词:四相步进电机 52单片机控制 YL-36驱动电路正反转 1 绪论 1.1 概述 步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化系统中,与其他类型的电机相比具有易于精确控制,无累积误差等优点。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,就驱动步进电机按设定的方向转一个固定的角度,它的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其没有累积误差的特点,广泛应用于各种开环控制。 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上,用它来做一些控制电器一类不是很复杂的工作[1]。单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件。 本文设计一种用STC89C52作为核心部件进行逻辑控制及信号产生的步进电机控制系统。为使步进电机系统的可靠性、通用性、可维护性以及性价比最优,根据系统的功能要求,通过单片机存储器、I/O口、中断、键盘、LED显示器的扩展来实现步进电机的启停、正反转、加减速等功能。 1.2 步进电机及单片机的发展趋势 步进电机的发展,将依赖于新型材料的应用、设计手段,以及与驱动技术的最佳匹配。随着自动控制技术、计算机网络通信技术在众多领域中的快速发展,以及进一步数字化、智能化,步进电机将会在更深入广泛的领域中得意应用。电

基于单片机原理的步进电机的正反转程设计报告89397460

电机控制课程设计报告书题目基于单片机原理的步进电机的正反转

目录 目录 (1) 摘要 (2) 1.概述 (3) 1.1课程设计的任务和要求 (3) 1.2设计思路框架 (3) 1.3设计方案的模块解释 (3) 2.系统硬件设计 (5) 2.1单片机最小系统原理介绍 (5) 2.1.1 AT89C51的工作原理 (6) 2.1.2复位电路的工作原理 (8) 2.1.3晶振电路的工作原理 (9) 2.2电机驱动电路原理介绍 (9) 3.系统软件设计 (11) 3.1系统流程图 (11) 3.2系统程序分析 (11) 4.调试过程与结果 (20) 5.总结与体会 (21) 6.参考资料 (21) 7.附录 (23)

摘要 介绍了步进电机正反转控制原理及其接口驱动控制电路,编制了基于MCS-51单片机的步进电机正反转控制的子程序,并应用wave软件进行了仿真。证明在并行口控制中,可以利用软件实现环行脉冲分配,实现程序较简单,同时还可以节省硬件投资。结合单片机控制步进电动机的实际工作环境,从提高控制系统运行的可靠性角度,讨论了实际应用的软件抗干扰技术。 关键词单片机;步进电机;正反转控制

1.概述 1.1课程设计的任务和要求 电机控制课程设计是考察学生利用所学过的电机控制专业知识,进行综合的电机控制系统设计并最终完成实际系统连接,能够使学生对电气与自动化的专业知识进行综合应用,培养学生的创新能力和团队协作能力,提高学生的动手实践能力。最终形成一篇符合规范的设计说明书,并参加综合实践答辩,为后期的毕业设计做好准备。 本次设计考核的能力主要有: 专业知识应用能力,包括电路分析、电子技术、单片机、检测技术、电气控制、电机与拖动、微特电机及其驱动、计算机高级语言、计算机辅助设计、计算机办公软件等课程,还包括本专业的拓展性课程如变频器、组态技术、现场总线技术、伺服电机等课程。 项目设计与运作能力,团队协作能力,技术文档撰写能力,PPT汇报与口头表达能力。 电气与自动化系统的设计与实际应用能力。 要求完成的工作量包括: 制作实际成品,并现场演示效果。 学生结合课题进行PPT演讲与答辩。 学生上交课题要求的各类设计技术文档。 1.2设计思路框架 1.3设计方案的模块解释 本系统主要由电源模块、控制模块、电机驱动模块、按键中断模块等四个模块组成。 电源模块的功能是将交流220V电源经过整流转化为直流+5V电源,以供给

PLC控制步进电机正反转

实验名称:步进电机正反转的PLC控制 一、实验目的 了解步进电机运转的基本原理和步进电机控制系统的基本组成,熟练运用梯形图语言进行编程,掌握用PLC控制系统控制步进电机正反转的方法。 二、实验要求 1)通过查找相关资料和教师讲解了解步进电机运转的基本原理和步进电机 控制系统的基本组成; 2)以实验室西门子SIMATIC S7-200为硬件设备,认识掌握用PLC控制系统 控制步进电机正反转的方法; 3)学习STEP7-Micro/WIN4.0软件,运用梯形图语言进行编程。 三、实验设备 1)西门子SIMATIC S7-200 PLC硬件系统 2)西门子SIMATIC S7-200 PLC编程软件STEP7-Micro/WIN4.0 3)SH全系列步进电机驱动器SH-3F075 四、实验原理 1、PLC控制系统I/O分配表

2、PLC电气接线图 24 伏 电 源 步 进 电 机 步 进 电 机 驱 动 器 7-200 图1 PLC电气接线图 3、程序代码(梯形图) 图2 电机停止梯形图 (1)按下停止键,I0.0接通,脉冲输出功能关闭,电机停止。

图3 电机正转梯形图 (2)按下正转键,I0.1接通,方向电平复位,脉冲输出功能PWM输出脉冲周 期为2000um,脉宽为1000um的脉冲,电机正转。 注:寄存器说明 SM77.0 PWM update cycle time value 0 = no update; 1 = update cycle time SM77.1 PWM update pulse width time value 0 = no update; 1=update pulse width SM77.3 PWM time base select 0 = 1 us/tick; 1 = 1ms/tick SM77.4 PWM update method: 0 = asynchronous update, 1 = synchronous update SM77.6 PWM mode select 0 = selects PTO; 1 = selects PWM SM77.7 PWM enable 0 = disables PWM; 1 = enables PWM SMW78 :PWM cycle time value (range: 2 to 65535) SMW80 :PWM pulse width value (range: 0 to 65535)

单片机控制步进电机正反转

简单的单片机控制步进电机 电路原理图: 过程简介: 用AT89C52单片机控制步进电机,P3.0和P3.1引脚外接两个开关按钮,做控制用。P2.0引脚接一LED灯,接上拉电阻,做提示信号用。P1口为电机提供信号。用ULN2003D,它是个达林顿器件,主要是给步进电机供电,因为如果直接用单片机对步进电机供电,则电压不足。RST引脚外接开关按钮,提供程序复位。步进电机采用M42SP-5五线四相步进电机,直接接在DIANJI口。其基本工作过程是单片机先查看是否有按键按下,延时消抖,检查是否松开。然后进入电机驱动程序,电机驱动程序主要是向P1口按规律发送0或1,之前建立的数组按照A,AB,B,BC,C,CD,D,DA顺序向ULN2003D提供信号,ULN2003D也按照这个顺序给电机供电。从而使步进电机进行步进。当轴旋转180°后,单片机向P2.0引脚发出低电平信号,则LED灯亮。 其实本题目要求是要转180°,所以才一步一步走的,如果只是一直转则只需把电机驱动函数改为: void Motor() {

unsigned char i; for(i=0;i<8;i++) { GPIO_MOTOR = FFW[i]; Delay(Speed); //调节转速 } } 当然,这种控制个人觉得是不太精确的,如果只是让一个轴转动180度,则用步进电机外接减速箱,然后接一轴,让电机转一圈,轴转10度或20度,则控制会更精准。 C语言程序: #include #define GPIO_MOTOR P1 sbit LED=P2^0; sbit K1=P3^0; sbit K2=P3^1; unsigned char code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //反转顺序 unsigned char code FFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正转顺序 unsigned char Direction; void Delay(unsigned int t); void Motor(); void main() { unsigned char i; while(1) {

PLC实现步进电机的正反转及调整控制

实训课题三 PLC实现步进电机正反转和调速控制 一、实验目的 1、掌握步进电机的工作原理 2、掌握带驱动电源的步进电机的控制方法 3、掌握DECO指令实现步进电机正反转和调速控制的程序 二、实训仪器和设备 -48MR PLC一台 1、FX 2N 2、两相四拍带驱动电源的步进电机一套 3、正反切换开关、起停开关、增减速开关各一个 三、步进电机工作原理 步进电机是纯粹的数字控制电动机,它将电脉冲信号转换成角位移,即给一个脉冲信号,步进电机就转动一个角度,图3-1是一个三相反应式步进电机结图。从图中可以看出,它分成转子和定子两部分。定子是由硅钢片叠成,定子上有六个磁极(大极),每两个相对的磁极(N、S极)组成一对。共有3对。每对磁极都绕有同一绕组,也即形成1相,这样三对磁极有3个绕组,形成三相。可以得出,三相步进电机有3对磁极、3相绕组;四相步进电机有4对磁极、四相绕组,依此类推。 反应式步进电动机的动力来自于电磁力。在电磁力的作用下,转子被强行推动到最大磁导率(或者最小磁阻)的位置,如图3-1(a)所示,定子小齿与转子小齿对齐的位置,并处于平衡状态。对三相异步电动机来说,当某一相的磁极处于最大导磁位置时,另外两相相必处于非最大导磁位置,如图3-1(b)所示,即定子小齿与转子小齿不对齐的位置。 把定子小齿与转子小齿对齐的状态称为对齿,把定子小齿与转子小齿不对齐的状态称为错齿。错齿的存在是步进电机能够旋转的前提条件,所以,在步进电机的结构中必须保证有错齿的存在,也就是说,当某一相处于对齿状态时,其它绕组必须处于错齿状态。 本实验的电机采用两相混合式步进电机,其内部上下是两个磁铁,中间是线圈,通了直流电以后,就成了电磁铁,被上下的磁铁吸引后就产生了偏转。因为

PLC实现步进电机的正反转和调整控制

实训课题三PLC实现步进电机正反转和调速控制 一、实验目的 1、掌握步进电机的工作原理 2、掌握带驱动电源的步进电机的控制方法 3、掌握DECO指令实现步进电机正反转和调速控制的程序 二、实训仪器和设备 1、FX2N-48MR PLC一台 2、两相四拍带驱动电源的步进电机一套 3、正反切换开关、起停开关、增减速开关各一个 三、步进电机工作原理 步进电机是纯粹的数字控制电动机,它将电脉冲信号转换成角位移,即给一个脉冲信号,步进电机就转动一个角度,图3-1是一个三相反应式步进电机结图。从图中可以看出,它分成转子和定子两部分。定子是由硅钢片叠成,定子上有六个磁极(大极),每两个相对的磁极(N、S极)组成一对。共有3对。每对磁极都绕有同一绕组,也即形成1相,这样三对磁极有3个绕组,形成三相。可以得出,三相步进电机有3对磁极、3相绕组;四相步进电机有4对磁极、四相绕组,依此类推。 反应式步进电动机的动力来自于电磁力。在电磁力的作用下,转子被强行推动到最大磁导率(或者最小磁阻)的位置,如图3-1(a)所示,定子小齿与转子小齿对齐的位置,并处于平衡状态。对三相异步电动机来说,当某一相的磁极处于最大导磁位置时,另外两相相必处于非最大导磁位置,如图3-1(b)所示,即定子小齿与转子小齿不对齐的位置。 把定子小齿与转子小齿对齐的状态称为对齿,把定子小齿与转子小齿不对齐的状态称为错齿。错齿的存在是步进电机能够旋转的前提条件,所以,在步进电机的结构中必须保证有错齿的存在,也就是说,当某一相处于对齿状态时,其它绕组必须处于错齿状态。 本实验的电机采用两相混合式步进电机,其内部上下是两个磁铁,中间是线圈,通了直流电以后,就成了电磁铁,被上下的磁铁吸引后就产生了偏转。因为

步进电机正反转实验报告

步进电机正反转实验报告 万萨县电机正反转实验报告 实验名称: 步进电机正反转训练 二、控制要求 要求同时实现电机的正转三圈,反转三圈,电机电机正转和反转的频率可不相同,然后这样循环3次,3周后电机停止转动。 三、PLCI/O地址分配表 PLC的I/O地址Y0电机转向输出点Y1电机的转速输出点连接的外部设备控制转速点CP控制转向点CW四、程序梯形图 五、程序分析: M11、M12、M13的波形图 M21、M22、M23的波形图 电机正转的频率是20赫兹,通过MOV指令送到D5中,在电机新作三圈后,电机反转,反转的频率是40赫兹,通过MOV指令送到D5中。电机正转3次,反转2次,再通过M23得电进入正转,重复上面的循环,即电机正转而后再反转,M23才得电次,所以可以加个M23控制个阵列计数,当计数器计数到3时,再通过计数器电源的常闭开关把M10线圈断电,从而实现电机停止。 扩展阅读:微机实验报告步进电机正反转及调速设计 微机原理与接口设计实验报告 步进电机正反转及调速设计

专业:机械设计制造及其智能化班级:10090112 本人组成员:周先军10901239 张赓10901240胡国08901312 组别:B5 摘要:本系统是基于STM8系列单片机的步进电机转速转向控制器。该系统采用STM8S103F3P6单片机作为主控制器,运用L298全桥驱动 器驱动步进电机,通过摇杆、按键控制电机转速,并且通过1602液晶 显示器显示当前转速。该系统中使用电气的四相步进电机,具有控制 度高,转动扭矩非常大等特点,实际生产中有广泛的运用。中会系统 内中除了传统按键控制外,还增加遥控控制,单片机通过AD读取摇杆 控制信号,实时控制电机转速。整个系统具有结构简单、可靠性高、 成本低和实用性强等特点,蕴含较高的通用性和应用推广价值。 关键词:控制 单片机控制驱动电路正反转摇杆四相步进电机STM8L2、系统方案1.1控制系统方案 方案:采用8086系列单片机。8086是Inter系列的16位微处理器,数据处理能力强。但是8086系列的CPU指令数据中所需要放置在 内存中,需如前所述依赖外部非易失存储器和RAM才可以工作,外部 电路复杂。 方案二:采用STM8系列单片机。STM8是意法半导体生产的8位单片机,哈弗结构。拥有8K字节Flash,1K字节RAM,1KEEPROM,内部 集成5路10位ADC,高级控制定时器可带死区控制PWM、以及SPI、 I2C等接口。整体性能优越,价格便宜,周边电路简单。综上对比,选择方案二。 1.2驱动电路方案

单片机控制步进电机正反转的实际应用程序

单片机控制步进电机正反转的实际应用程序 /*这是一个控制步进电机正反转的实际应用程序*/ /*选用的是三相步进电机驱动器,p14口线用做步进电机的脉冲控制*/ /*p13口线用做步进电机的方向控制。p15,p16,p17是光耦开关量输入*/ /*信号端,p20,p21,p22,p23与x25045看门狗存储器相连*/ /*k7,k8键是设定步进电机转动速度参数的加减键*/ /*k9是启动运行键,按一下k9,步进电机开始运行,直到p17口线有信号输入才停止*/ /*k10是停止键,任何时候按下k10都将停止步进电机当前的运行*/ /*k11是步进运行键,按一下,步进电机动一下*/ /*k12键是反向运行键,按一下,步进电机开始反向运行,知道p15口线有信号才停止*/ /*如果p16口线有信号输入,则只有k12键才起作用,其它键都没反应。*/ START:do; $INCLUDE(REG51.DCL) DECLARE (addrl,n,I,j,ok,ds) byte; /*定义变量*/ declare l(5) byte; declare (dat,data) byte at (30h); declare delay word; DECLARE ACO(11) BYTE CONSTANT (05h,9fh,23h,0bh,99h,49h,/*定义LED段码表*/ 41h,1fh,01h,09h,00h); declare si literally 'p21',sck literally 'p20'; /*X25045囗线定义*/ declare so literally 'p22',cs literally 'p23'; dog:procedure; /* 初始化看门狗x25045 */ cs=1; call time(1); cs=0; call time(1); cs=1; end dog; run:procedure; /*步进电机运行脉冲输出程序*/ if ok=1 then call dog; do; p14=0; call time(1); p14=1; call time(1); end; end run; DISPLAY:PROCEDURE(L0,L10); /*显示子程序*/ DECLARE (L0,L10) BYTE; /*定义显示二位*/ n=L10;

步进电机、直流电机正反转程序

步进电机 #include #define uchar unsigned char #define uint unsigned int uchar code FFW[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; uchar code REV[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; sbit K1=P3^0; sbit K2=P3^1; sbit K3=P3^2; //延时 void delay_ms(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } //正转 void step_motor_ffw(uchar n) { uchar i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(K3==0) break; P1=FFW[j]; delay_ms(25); } } } //反转 void step_motor_rev(uchar n) { uchar i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(K3==0) break; P1=REV[j]; delay_ms(25); }

} } //主函数 void main() { uchar N=3; while(1) { if(K1==0) { P0=0xfe; step_motor_ffw(N); if(K3==0) break; } else if(K2==0) { P0=0xfd; step_motor_rev(N); if(K3==0) break; } else { P0=0xfb; P1=0x03; } } } 正反转 #include #include #define INT8U unsigned char #define INT16U unsigned int #define S1_ON() (P3&(1<<5))==0X00 #define S2_ON() (P3&(1<<6))==0X00 #define S3_ON() (P3&(1<<7))==0X00 #define Forward 0 #define Stop 1 #define Backward 2 sbit M_DIR=P1^0; sbit M_PWM=P1^1; sbit Key_INC=P3^0; sbit Key_DEC=P3^1;

相关文档
最新文档