步进电机转动程序

步进电机转动程序
步进电机转动程序

/*-----------------------------------------------

名称:步进电机

内容:本程序用于测试4相步进电机常规驱动使用1相励磁

------------------------------------------------*/

#include

sbit A1=P1^0; //定义步进电机连接端口

sbit B1=P1^1;

sbit C1=P1^2;

sbit D1=P1^3;

#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 Speed;

/*------------------------------------------------

uS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下 T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{

while(--t);

}

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

void DelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

/*------------------------------------------------

主函数

------------------------------------------------*/

main()

{

//unsigned int i=64*16; //转2周停止

Speed=5; //调整速度

while(1)

{

Coil_A1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替 DelayMs(Speed); //改变这个参数可以调整电机转速 , //数字越小,转速越大,力矩越小

Coil_B1

DelayMs(Speed);

Coil_C1

DelayMs(Speed);

Coil_D1

DelayMs(Speed);

}

}

西门子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产品的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城。

步进电机编程

第一讲步进电机驱动器的使用 步进电机控制原理图 项目开发中采用了雷赛科技公司型号为DM542的步进电机驱动器。处理器型号为STC89C52,本项目中选用57系列步进电机,力矩5NM,满足要求。细分数可以通过驱动器上的拨码开关(红圈中就是拨码开关)设定,细分数就是步进电机转一圈需要的脉冲数。

DM542配57电机典型接法如图所示 使用步进电机驱动器大大降低了驱动步进电机工作的难度,只需要用三路信号就可以驱动步进电机运动。他们分别是PUL-、DIR-和ENA-,具体情况看下表。硬件设计时PUL+、DIR+和ENA+需要接直流+5V。

为了能够使步进电机能够正常运转,单片机通过IO口给出的信号要满足上图中的时间顺序。首先需要让使能信号置为高电平。这就相当于告诉驱动器,我要开始控制你了。 然后就是给驱动器一个方向信号,高速驱动器要控制电机顺时针转动还是逆时针转动。而且这个时间是有要求的,要大于5微秒。就是使能信号给出后,大于5微秒后再给一个方向信号。 接下来就是让步进电机转起来,通过单片机输出脉冲信号,送给步进电机驱动器,进而控制步进电机。方向信号给了之后,也是需要至少大于5微秒之后再给脉冲控制信号。

具体操作请看下面的程序 //本程序可以实现蜗轮蜗杆减速器输出轴转动1圈,细分数400,减速比1:10,4000个脉冲转一圈 //------------头文件区------------------------------------------------------------------------------------- //包括:单片机芯片的配置头文件 // 其他编程中需要调用的C语言自带头文件 // 自己编写的专用头文件 //--------------------------------------------------------------------------------------------------------- #include //-----------自定义区-------------------------------------------------------------------------------------- //包括:常量、变量、符号等 //--------------------------------------------------------------------------------------------------------- sbit pul=P0^2; // 脉冲 sbit dir=P0^1;// 方向 sbit ena=P0^0;// 使能 //---------函数声明--------------------------------------

基于单片机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所示。

单片机驱动步进电机程序代码

单片机驱动步进电机程 序代码 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

/******************************************************** 实现功能:正转程序 使用芯片:AT89S52 晶振: 编译环境:Keil 作者: 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!********************************************************/ #include<> //库文件 #define uchar unsigned char //字符型宏定义 #define uint unsigned int //整型宏定义 uchar tcnt; //定时器计数初值定义 uint sec; //速度值定义 uchar buf[11]; uchar bai,shi,ge; /********************控制位定义*************************/ sbit shi_neng=P1^0; // 使能控制位 sbit fang_shi=P1^1; // 工作方式控制位 sbit fang_xiang=P1^2;// 旋转方向控制位 sbit mai_chong=P1^3; // 脉冲控制位 /********************延时函数***************************/ void delay1ms(uchar z) { uchar x,y; for(x=0;x

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

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产品的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城。

步进电机的控制程序

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

步进电机程序编写及说明

步进电机 学习交流群——126500542(验证信息:千寻琥珀心) 在这里介绍一下如何用51单片机驱动步进电机。 本例所使用的步进电机为四项驱动,驱动电压为12V,锯齿角(为什么叫锯齿叫而不叫步进角,我也不知道这样解释是否正确,但是根据步进角计算公式所得的结果将7.5理解为锯齿叫会更好些,也在网上搜了不少资料,说是步进角的较多,但都是直接给出的,而未作出计算,不过也有是将其作为锯齿角的,并且结合书上的内容,在此就将此作为锯齿角理解,那何谓步进角,下面公式将给出)为7.5度。(也就是说锯齿之间的单位角度),不进一圈总共需要360度,故有48个锯齿。 在此对电路图部分不再给出,具体引脚连接接下来给出。本例所使用的电机驱动芯片为达林顿驱动器(ULN2003),通过P1.0~P1.3分别接通步进电机的驱动线圈来控制步进电机的运转。注意如果直接使用单片机通过驱动芯片驱动电机,力矩可能不够大,效果不是很好,因为ULN2003的驱动电压为12V,而单片机系统电压为5V,故请读者注意此点,在设计电路时,另施电压。 步进电机要想正常工作,必须有驱动信号,转动的速度与驱动信号的频率是成正比的。(实例中将会给出并予以说明)接下来我们看看对于电机驱动中的信号的产生。 本例中采用的步进电机为四项,三项驱动和四项驱动原理上

是一样的。假设步进电机的四个项为:A、B、C、D。它的拍数可由读者任意设定(即步进节奏)。再继续下面的内容时,我们现在此给出一个计算步进电机的公式:Qs=360/NZr,其中N=McC 为运行的拍数,McC为控制绕组项数,C为状态系数,当采用单双本项拍数时,C=1,当采用单双本项一倍拍数时,C=2。(此处说的本项拍数,如三项为单三拍,双三拍。本项一倍拍数为单六拍,简言之,三拍为1.六拍为2对于四项则四拍为1,8拍为2(说的有些玄乎,手中板砖还望留情)),Zr为转子齿数,先来看看单四拍,即A→B→C→D→A.因为上述已经给出了锯齿数,此例C=1,所以Qs=360/(4*1*48)=1.875°。故此电机的步进角为1.875°(既步与步之间的角度),因为行进是和脉冲有关的,一个脉冲行进一步,那么行进一圈,所需脉冲数为:360/1.875=192个脉冲。同时我们如果控制这些脉冲的频率就可以直接控制步进电机的运转速度了。继续我们的单四拍,运行方向A→B→C→D →A。(假设为正转)则在程序中对应的操作执行码为:(硬件连接时P1口的高四位不用全置1,此处只需用到低四位) P1.3 P1.2 P1.1 P1.0 D C B A (对应4个线圈) 1 1 1 0 0xfe (根据外部链接电路定,也可以是0001,此处采用低电平导通,导通A项线圈) 1 1 0 1 0xfd (导通B项线圈) 1 0 1 1 0xfb (导通C项线圈)

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

单片机课程设计报告设计题目:步进电机控制系统 学院机械工程学院 专业机械设计制造及其自动化 班级 姓名 学号 指导教师 湖北工业大学 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.题目及要求功能分析 步进电机:步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其精度高等特点,广泛应用于各种工业控制系统中。 三相单、双六拍步进电机的结构和工作原理: 三相单、双六拍步进电机通电方式:这种方式的通电顺

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

步进电机的控制电路和程序 先看一下我们将要使用的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:

步进电机正反转控制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 "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;

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

/***************************************************** 程序调试成功 *********************************************************/ #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++) { } } } /**********************************************************/

单片机驱动步进电机程序代码

单片机驱动步进电机程序 代码 This manuscript was revised by the office on December 10, 2020.

/******************************************************** 实现功能:正转程序 使用芯片:AT89S52 晶振:11.0592MHZ 编译环境:Keil 作者: 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! ********************************************************/ #include //库文件 #define uchar unsigned char //字符型宏定义 #define uint unsigned int //整型宏定义 uchar tcnt; //定时器计数初值定义 uint sec; //速度值定义 uchar buf[11]; uchar bai,shi,ge; /********************控制位定义*************************/ sbit shi_neng=P1^0; // 使能控制位 sbit fang_shi=P1^1; // 工作方式控制位 sbit fang_xiang=P1^2;// 旋转方向控制位 sbit mai_chong=P1^3; // 脉冲控制位 /********************延时函数***************************/ void delay1ms(uchar z) { uchar x,y; for(x=0;x

步进电机正反转

步进电机控制设计 摘要 步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。结合对步进电机的了解,然后对步进电机的控制原理包括步进电机的控制方式和驱动方式作了系统的说明,采用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) {

相关文档
最新文档