基于单片机汇编语言的步进电机的控制程序

合集下载

基于AT89C51单片机的步进电机控制

基于AT89C51单片机的步进电机控制

基于AT89C51单片机的步进电机控制基于AT89C51单片机的步进电机控制摘要:随着微电子和计算机技术的发展,步进电机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。

研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。

步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件,步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。

采用单片机控制,用软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。

软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。

本设计是采用AT89C51单片机对步进电机的控制,通过I/O口输出的时序方波作为步进电机的控制信号,信号经过芯片ULN2003驱动步进电机。

实践证明,基于单片机控制的步进电机比传统的步进控制器具有更好的性能,更加简单、方便、可靠。

本设计的主要研究对象就是开环伺服系统中最常用的执行器件——步进电机。

关键词:步进电机,单片机,正反转控制,键盘目录摘要 (1)第一章绪论 (2)1.1 步进电机及其发展 (2)1.2 步进电机在我国的发展应用及前景 (2)1.3 设计研究内容 (3)第二章控制系统硬件分析与设计 (4)2.1 步进电机 (4)2.2 单片机的选择 (6)2.3 步进电机控制系统的组成 (7)第三章控制系统软件分析与设计 (14)3.1 程序流程图 (14)3.2 读键盘子程序流程图 (15)3.3 键盘处理子程序流程图 (15)3.4 电机控制中断程序流程图 (16)第四章调试与改进 (18)4.1 调试与改进 (18)4.2 运行结果 (18)第五章总结 (19)致谢 (20)参考文献 (21)附录 (22)附录一源程序清单 (22)附录二控制原理图 (27)第一章绪论1.1 步进电机及其发展步进电机又称为脉冲电动机或阶跃电动机,它是基于最基本的电磁感应作用,将电脉冲信号转变为角位移或线位移的开环控制元件。

(毕业设计)基于单片机的步进电机控制系统(汇编及C语言程序各一个)

(毕业设计)基于单片机的步进电机控制系统(汇编及C语言程序各一个)

基于单片机的步进电机控制系统设计前言步进电机是一种进行精确步进运动的机电执行元件,它广泛应用于工业机械的数字控制,为使系统的可靠性、通用性、可维护性以及性价比最优,根据控制系统功能要求及步进电机应用环境,确定了设计系统硬件和软件的功能划分,从而实现了基于8051单片机的四相步进电机的开环控制系统。

控制系统通过单片机存储器、I/O接口、中断、键盘、LED 显示器的扩展、步进电机的环形分频器、驱动及保护电路、人机接口电路、中断系统及复位电路、单电压驱动电路等的设计,实现了四相步进电机的正反转,急停等功能。

为实现单片机控制步进电机系统在数控机床上的应用,系统设计了两个外部中断,以实现步进电机在某段时间内的反复正反转功能,也即数控机床的刀架自动进给运动,随着单片机技术的不断发展,单片机在日用电子产品中的应用越来越广泛,自六十年代初期以来,步进电机的应用得到很大的提高。

人们用它来驱动时钟和其他采用指针的仪器,打印机、绘图仪,磁盘光盘驱动器、各种自动控制阀、各种工具,还有机器人等机械装置。

此外作为执行元件,步进电机是机电一体化的关键产品之一,被广泛应用在各种自动化控制系统中,随着微电子和计算机技术的发展,它的需要量与日俱增,在各个国民经济领域都有应用。

步进电机是机电数字控制系统中常用的执行元件,由于其精度高、体积小、控制方便灵活,因此在智能仪表和位置控制中得到了广泛的应用,大规模集成电路的发展以及单片机技术的迅速普及,为设计功能强,价格低的步进电机控制驱动器提供了先进的技术和充足的资源。

1.步进电机原理及硬件和软件设计1.1步进电机原理及控制技术由于步进电机是一种将电脉冲信号转换成直线或角位移的执行元件,它不能直接接到交直流电源上,而必须使用专业设备一步进电机控制驱动器,典型步进电机控制系统如图1所示:控制器可以发出脉冲频率从几赫兹到几千赫兹可以连续变化的脉冲信号,它为环形分配器提供脉冲序列,环形分配器的主要功能是把来自控制环节的脉冲序列按一定的规律分配后,经过功率放大器的放大加到步进电机驱动电源的各项输入端,以驱动步进电机的转动,环形分配器主要有两大类:一类是用计算机软件设计的方法实现环形分配器要求的功能,通常称软环形分配器。

51单片机步进电机控制汇编语言程序

51单片机步进电机控制汇编语言程序

51单片机步进电机控制汇编语言程序;本程序是通过秒信号触发中断来实现的,要求中断程序必须在1S内执行完毕;步进电机转速控制是通过8255输入信号在每次执行中断程序内调整控制信号的循环次数来实现的CODE SEGMENTASSUME CS:CODESTART: PUSH CSPOP DS;数据段和代码段共用一个地址JMP MAINNUM DB 08H,04H,02H,01H; 定义循环控制信号DAT1 DB 0H ;定义循环参量DAT2 DB 0H;---------初始化8253计数器-----------MAIN:MOV DX,203H;计数器0初始化,工作在方式3 MOV AL,36HOUT DX,ALMOV DX,200H;给计数器0赋计数初值960H(2400)MOV AL,60H ;低8位OUT DX,ALMOV AL,09H ;高8位OUT DX,ALMOV DX,203H;计数器1初始化,工作在方式3 MOV AL,76HOUT DX,ALMOV DX,201H;给计数器1赋计数处值80H(128) MOV AL,80H ;低8位OUT DX,ALMOV AL,00H ;高8位OUT DX,AL;-----------初始化8255--------------- MOV DX,021BH;A口输入,B口输出MOV AL,90HOUT DX,AL;-----------初始化向量表8号中断-------- MOV AX,0;ES:DIMOV ES,AXMOV DI,20H;4*8=32MOV AX,OFFSET INTP;装载中断函数的偏移地址MOV ES:[DI],AXMOV AX,8100H;MOV ES:[DI+2],AX;-------------初始化8259A--------------MOV DX,210H;ICW1初始化MOV AL,13H;上升沿触发,单片,要ICW4OUT DX,ALMOV DX,211H;ICW2初始化MOV AL,08H;初始化中断类型码范围,08-0F对应INT0-INT7OUT DX,ALMOV DX,211H;ICW4初始化MOV AL,01H;OUT DX,AL;--------------打开中断-------------- MOV DX,211H;打开8259A八号中断IN AL,DXAND AL,0FEH;1111 1110OUT DX,ALSTI;开CPU中断,IF=1MOV BX,OFFSET NUM;取控制信号的偏移地址MOV SI,0 ;将SI循环归零LOP: MOV AX,0JMP LOP;死循环,等待中断到来;------------中断程序开始----------INTP PROC FAR;LTP:MOV DX,219HMOV AL,[BX+SI]OUT DX,ALINC SICMP SI,04HJNZ NEXTMOV SI,0NEXT: MOV CX,03FFFH ;简短延时LOOP $CALL REFRESH;调用按键扫描子程序DEC DAT1 ;循环次数减一JNZ LTP ;循环次数减为零时跳出循环MOV AL,DAT2;重新填装DAT1的值MOV DAT1,ALMOV DX,210H;中断结束命令MOV AL,20HOUT DX,ALIRET;中断返回INTP ENDP;-------按键扫描程序---------- REFRESH PROC FARMOV DX,218HIN AL,DXCMP AL,00HJNZ NEXT1 ;若输入信号为00,则循环参量置为1 MOV DAT2,01HNEXT1: CMP AL,01HJNZ NEXT2 ;若输入信号为01,则循环参量置为2 MOV DAT2,02HNEXT2: CMP AL,03HJNZ NEXT3 ;若输入信号为11,则循环参量置为3 MOV DAT2,03HNEXT3: CMP AL,07HJNZ NEXT4 ;若输入信号为111,则循环参量置为4 MOV DAT2,04HNEXT4 MOV DAT1,0HRETREFRESH ENDP;-------按键扫描结束----------CODE ENDSEND START。

c语言实现单片机控制步进电机加减速源程序

c语言实现单片机控制步进电机加减速源程序

C 语言实现单片机控制步进电机加减速源程序1. 引言在现代工业控制系统中,步进电机作为一种常见的执行元件,广泛应用于各种自动化设备中。

而作为一种常见的嵌入式软件开发语言,C 语言在单片机控制步进电机的加减速过程中具有重要的作用。

本文将从单片机控制步进电机的加减速原理入手,结合 C 语言的编程技巧,介绍如何实现单片机控制步进电机的加减速源程序。

2. 单片机控制步进电机的加减速原理步进电机是一种能够精确控制角度的电机,它通过控制每个步骤的脉冲数来实现旋转。

在单片机控制步进电机的加减速过程中,需要考虑步进电机的加速阶段、匀速阶段和减速阶段。

在加速阶段,需要逐渐增加脉冲的频率,使步进电机的转速逐渐增加;在匀速阶段,需要保持恒定的脉冲频率,使步进电机以匀速旋转;在减速阶段,需要逐渐减小脉冲的频率,使步进电机的转速逐渐减小。

这一过程需要通过单片机的定时器和输出控制来实现。

3. C 语言实现步进电机加减速的源程序在 C 语言中,可以通过操作单片机的 GPIO 来控制步进电机的旋转。

在编写源程序时,需要使用单片机的定时器模块来生成脉冲信号,以控制步进电机的旋转角度和速度。

以下是一个简单的 C 语言源程序,用于实现步进电机的加减速控制:```c#include <reg52.h>void main() {// 初始化定时器// 设置脉冲频率,控制步进电机的加减速过程// 控制步进电机的方向// 控制步进电机的启停}```4. 总结与回顾通过本文的介绍,我们了解了单片机控制步进电机的加减速原理和 C 语言实现步进电机加减速源程序的基本思路。

掌握这些知识之后,我们可以更灵活地应用在实际的嵌入式系统开发中。

在实际项目中,我们还可以根据具体的步进电机型号和控制要求,进一步优化 C 语言源程序,实现更加精准和稳定的步进电机控制。

希望本文能为读者在单片机控制步进电机方面的学习和应用提供一定的帮助。

5. 个人观点与理解在我看来,掌握 C 语言实现单片机控制步进电机加减速源程序的技术是非常重要的。

基于STC89C51单片机步进电机控制系统的设计

基于STC89C51单片机步进电机控制系统的设计

基于STC89C51单片机步进电机控制系统的设计本文基于STC89C51单片机,设计了步进电机控制系统,系统分为STC89C51单片机最小系统、按键模块、显示模块、电机驱动模块以及步进电机等几个部分,通过编程实现了步进电机的正反转,加减速,启停控制以及运行状态LED状态显示功能。

实验结果表明,系统性能优于传统的步进电机控制器。

标签:STC89C51单片机;步进电机;控制系统;设计1 引言步进电机是机电设备中最广泛使用的一种电机,又被称为脉冲电动机或者阶跃电动机,其工作原理是将电脉冲信号转变为角位移或线位移。

每输入一个电脉冲,电机转动一个角度前进一步,其输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。

在控制中,可以利用输入电脉冲的频率、数量和各相绕组的通电顺序来精确控制电机的启停、转速、转向和定位,几乎不受电压和环境温度等影响,误差小。

随着单片机嵌入式系统的发展应用,基于单片机的步进电机控制系统在各个领域得到了广泛应用,比如线切割的工作台运动、ATM机、刻字机、工业控制系统等等,并且特别适合要求性能稳定、误差率低、响应迅速、运行时产生噪音小、具有较长的使用寿命以及能输出较大扭矩的应用场合。

本文设计了基于STC89C51单片机的步进电机控制系统,具备价格低廉、结构简单、移植性好等特点,具有广泛的应用前景。

2 系统总体框架本系统主要由STC89C51单片机最小系统、驱动电路模块、按键电路模块、数码管显示电路模块和步进电机等几个模块组成。

本设计中步进电机功率和额定电流都较小,从经济性方面考虑,驱动芯片选用ULN2003芯片,ULN2003芯片是一种高耐压、大电流、内部包含七个硅PNP达林顿管的驱动芯片。

步进电机的控制主要通过按键来实现,分别负责控制加减速、换向、转速。

STC89C51单片机向ULN2003输出脉冲信号,驱动芯片将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组,使步进电机随着不同的脉冲信号分别作相应的动作。

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

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

#include "reg52.h"#include "INTRINS.H"#include <absacc.h>#include <math.h>#define uint unsigned int#define uchar unsigned charvoid check_addr(void); /* 地址核对*/uchar code slave_addr[4]={00, 01, 02, 255}; /* 从机地址*/uchar idata T0low, T0high,common_count,input_order,cmd_in_permit,interval; ucharsent_ok,speed_change,start_up,start_end,address_true,i;uint y1;uint codeadd[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=P2A0; sbit P2_2=P2A2; sbit P1_0=P1A0; sbit WD=P1A7; /* 作输入步进电机的脉冲信号发送口*//* 作输入步进电机的旋转方向信号发送口*//*作串口输出信号的使能口,P1_0=0时接通串口,输出信号*/ /* 看门狗*/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;start_end=0;sent_ok=0; // 允许发送EA=1; /* 开放总中断*/ TMOD=0x21;TH1 = 0xFD; TL1 = 0xFD; SCON = 0xd0; PCON &= 0x00; SM2=1;TR1 = 1;ES=1; // 波特率9600// 设定串行口工作方式// 波特率不倍增// 启动定时器1T2MOD=00;T2CON=0x00;RCAP2H =0xEE; //赋T2 的预置值0xA600,25MS ,0xB800 ,20MS,0xCA00 ,15MS,0xDC00 ,10MS,0xEE00 ,5MSRCAP2L =0x00;TR2=1; //启动定时器ET2=1; //打开定时器2 中断do{if(address_true==1){ address_true=0; check_addr();} if(start_up==1&&start_end==0) //第一次启动{y1=add[common_count];T0high = (uchar)(y1>>8) ; /* 取y1 的高8 位*/T0low = (uchar)(y1&0x00ff); /*取y1的低8位*/TR0 = 1;ET0=1; /* 允许T/C0 中断*/start_end=1;}if(speed_change==1){ if(interval>=0&&interval<=0x63) {if(interval>common_count){common_count=common_count+1; }if(interval<common_count){common_count=common_count-1; }speed_change=0;} if(sent_ok==1){ sent_ok=0; P1_0=0; for(i=0;i<=20;i++) {_nop_();}TI=0; SBUF=T0high; while(TI==0);TI=0; TI=0; SBUF=T0low; while(TI==0);TI=0;P1_0=1; for(i=0;i<=20;i++) {_nop_();}SM2=1;}} while(1);}void timer0(void) interrupt 1 using 3{ P2_0=~P2_0; y1=add[common_count];T0high = (uchar)(y1>>8) ; /* 取y1 的高8 位*/ T0low = (uchar)(y1&0x00ff); /* 取y1 的低8 位*/ THO=TOhigh; /*高8 位TOhigh 送定时器0 的TH0*/ TL0=T0low; /*低8 位T0low 送定时器0 的TL0*/}void timer2(void) interrupt 5 using 2{TF2=0; /*T2 溢出中断需软件清0*/ speed_change=1; //速度可以改变标示,以便主程序处理WD=!WD; /*MAX813 喂狗*/}void inte_SERIAL() interrupt 4 using 1 /*串口0 中断服务子程序*/{uchar key_in ; key_in=0;if(RI){key_in=SBUF;RI=0;if (SM2==1){ if(key_in==slave_addr[2]){SM2=0; address_true=1;}}if ((SM2==0)&& (RB8==0)){ if(key_in==0xff){SM2=1;}if(key_in==0xfe){ /* 接收主机命令引导字节,准备接收主机命令*/ cmd_in_permit=1;} if(cmd_in_permit==1){ input_order=input_order+1;}if (input_order==2){ /* 接收主机命令,使从机开始调节电机*/ cmd_in_permit=0; input_order=0;/*interval 代表控制器发给电机的转速期望值*/ interval= key_in;sent_ok=1; if(start_up==0){start_up=1;}}}}}void check_addr(void){ /* 地址核对成功,发送从机地址给主机*/TB8=1;RB8=0;P1_0=0;for(i=0;i<=25;i++) {_nop_();}SBUF=slave_addr[2]; /* 发送地址核对成功,发送从机地址给主机*/ do{} while(TI==0); TI=0;P1_0=1;for(i=0;i<=25;i++) {_nop_();}TB8=0;。

单片机的步进电机(带汇编程序)

单片机的步进电机(带汇编程序)

摘要步进电机是一种纯粹的数字控制电机,是将电脉冲信号转变为角位移或线位移的开环控制元件。

本文应用单片机AT89C51和脉冲分配器PMM8713,步进电机驱动器,光电隔离器4N25等,构建了步进电机控制器和驱动器为一体的步进电机控制系统。

通过AT89C51和脉冲分配器PMM8713完成步进电机的各种运行控制方式,实现步进电机在3相6拍的工作方式下的正反转控制和加减速控制。

并通过步进电机丝杠连动,带动XY工作台的直线运动,实现从起点A点到预定点B点的位移控制。

整个系统采用模块化设计,结构简单,可靠,通过人机交互换接口可实现各功能设置,操作简单,易于掌握。

该系统可应用于步进电机在机电一体化控制等大多数场合。

实践证明,基于单片机控制的步进电机比传统的步进控制器具有更好的性能,更加简单、方便、可靠。

本设计的主要研究对象就是开环伺服系统中最常用的执行器件——步进电机。

关键词:步进电机单片机正反转控制加减速控制 XY工作台Control of Stepping MotorsAbstractStepper motor is a pure digital control motor, is the electric pulse signal into angular displacement or linear displacement of the open-loop control components.In this paper, SCM AT89C51 and pulse distributor PMM8713, stepper motor drives, optical isolator 4N25 so constructed stepper motor controller and driver as one of the stepping motor control system. AT89C51 and pulse distributor PMM8713 through the completion of the various stepper motor control methods, to achieve 3-phase stepper motor 6 shooting in the way of working and processing under the control Reversible deceleration control. Screw by stepper motor linked to drive XY table linear motion, from a starting point A to point B booking point displacement control.The system adopts modular design, simple structure, reliable interface for human-computer interaction through the realization of the feature set, simple, easy to master. The system can be applied to stepping motor control in mechatronics most occasions.Practice shows that the control of stepper motor based on single chip than the traditional step controller has better performance, more simple, convenient and reliable. The main object of study of this design is the open-loop servo system, the most commonly used implementation of the device - stepper motor.Keywords:stepper motor control MCU Reversible acceleration and deceleration control XY table目录1 绪论 (1)1.1 步进电机及其发展 (1)1.2 步进电机在我国的发展应用及前景 (1)1.3 本文研究内容 (2)2 步进电机的分类、结构、工作原理及特性 (2)2.1 步进电机的概念 (2)2.2 步进电机的特点 (3)2.3 步进电机的分类 (3)2.4 步进电机的结构及工作原理 (4)2.4.1 结构 (4)2.4.2 对齿和错齿 (4)2.4.3 工作原理 (5)2.4.4 工作方式(三相) (6)2.5 步进电机的常用术语 (6)2.6 步进电机的振荡和失步 (7)2.6.1 振荡 (7)2.6.2 失步 (8)2.7 阻尼方法 (8)2.8 步进电机的矩频特性 (8)3 步进电机的驱动 (9)3.1 单电压功率驱动接口 (9)3.2 双电压功率驱动接口 (10)3.3 高低压功率驱动接口 (10)4 步进电机的单片机控制 (11)4.1 步进电机控制系统组成 (11)4.2 步进电机控制系统原理 (11)4.2.1 脉冲序列的生成 (12)4.2.2 方向控制 (12)4.3 脉冲分配 (12)4.3.1 通过软件实现脉冲分配 (12)4.3.2 通过硬件实现脉冲分配 (13)4.4 步进电机与微型机的接口电路 (14)5 步进电机的运行控制 (15)5.1 步进电机的速度控制 (15)5.2 步进电机的位置控制 (15)5.3 步进电机的加减速控制 (16)6 步进电机的XY工作台 (17)6.1 设计目标 (17)6.2 X、Y工作台的传动方式 (18)6.3 程序框图 (21)6.4 汇编程序 (23)设计总结 (26)参考文献 (27)1、绪论步进电机又称为脉冲电动机或阶跃电动机,它是基于最基本的电磁感应作用,将电脉冲信号转变为角位移或线位移的开环控制元件。

步进电机控制程序(c语言51单片机)

步进电机控制程序(c语言51单片机)

// pri_dj = Pme );
if( i == set_pwm_width ) { P1 = 0xff; i = 0; one _round_flg = 0; while ( !one_round_flg & key_puse );}
if(!key_puse) { delay(4ms); if(!key_puse) break; }
while ( key_puse & key_clear ); delay ( 8ms );
if ( !key_clear ) { round_num = 0; display(); }
if ( !key_puse ) break; }
while( !key_puse ); delay(8ms);
while( !key_puse ); }
set_display_num(); for(i = 0; i < LEDLen ; i ++){
P0 = 0xf0; P0 = P0 | LEDBuf[i] ; if(i==0) led_1000 = 0; //P0^4 if(i==1) led_100 = 0; //P0^5 if(i==2) led_10 = 0; //P0^6 if(i==3) led_1 = 0; //P0^7
delay ( 1ms ); tmp = (~(P2 | 0xF0)); P2 = 0x7F; // 0111 1111
delay ( 1ms ); tmp = (~(P2 | 0xF0)) * 10 + tmp; set_round_num = set_round_num + tmp * 100; set_round_num = set_round_num * Chilun_Num;

单片机课程设计单片机控制步进电机

单片机课程设计单片机控制步进电机

单片机课程设计单片机控制步进电机单片机课程设计:单片机控制步进电机单片机(Microcontroller)是一种集成了中央处理器、存储器和输入/输出接口的微型计算机。

而步进电机(Stepper Motor)是一种将电脉冲信号转换为机械角位移的电磁设备。

在单片机课程设计中,控制步进电机是一项常见的任务。

本文将介绍如何使用单片机来控制步进电机,并展示一个基于单片机的课程设计实例。

一、步进电机的原理及特点步进电机是一种将电脉冲信号转换为机械位移的设备,其主要特点包括精密定位、易控制、低成本、没有超额负荷等。

步进电机通常由定子和转子组成,定子上的绕组通电产生磁场,而通过改变绕组通电的顺序和时序,可以实现步进电机的运动控制。

二、单片机控制步进电机的原理为了实现对步进电机的控制,我们需要使用单片机来产生相应的控制信号。

步进电机通常由一个驱动器和若干相继续组成。

单片机通过发出适当的信号给驱动器,进而控制电机的运动。

具体而言,单片机需要控制步进电机的相序、步数和速度。

1. 步进电机的相序控制步进电机的相序控制是通过依次激活不同相继的绕组,实现转子的转动。

单片机通过输出对应的高低电平信号给驱动器,从而控制绕组的激活顺序。

常见的步进电机驱动方式包括全步进和半步进。

2. 步进电机的步数控制步进电机的步数控制是通过控制单片机输出的脉冲数,来实现电机的旋转角度。

根据电机的分辨率和精度需求,我们可以设定单片机输出的脉冲数,从而控制电机的步进角度。

3. 步进电机的速度控制步进电机的速度控制是通过调节单片机输出脉冲信号的频率来实现的。

频率越高,电机转动的速度越快;频率越低,则电机转动的速度越慢。

单片机可以通过定时器等方式产生相应的脉冲频率来控制步进电机的转速。

三、基于单片机的步进电机控制课程设计实例下面将展示一个基于单片机的步进电机控制课程设计实例,该设计基于C语言编程,使用Keil软件进行开发。

设计要求:设计一个步进电机控制系统,使步进电机以设定的转速顺时针旋转一定圈数,并能逆时针旋转一定圈数。

单片机控制步进电机程序

单片机控制步进电机程序

StartEnd bit 01H ;起动及停止标志MinSpd EQU 25 ;起始转动速度MaxSpd EQU 100 ;最高转动速度Speed DATA 23H ;流动速度计数DjCount DATA 24H ;控制电机输出的一个值,初始为11110 111Hidden EQU 10H ;消隐码Counter DATA 57H ;显示计数器DISPBUF DATA 58H ;显示缓冲区ORG 0000HAJMP MAINORG 000BHJMP DISPORG 001BHJMP DJZDORG 30HMAIN:MOV SP,#5FHMOV P1,#0FFHMOV A,#HiddenMOV DispBuf,AMOV DispBuf+1,AMOV DispBuf+2,AMOV DjCount,#11110111BMOV SPEED,#MinSpd ;起始转动速度送入计数器CLR StartEnd ;停转状态MOV TMOD,#00010001B ;MOV TH0,#HIGH(65536-3000)MOV TL0,#LOW(65536-3000)MOV TH1,#0FFH;MOV TL1,#0FFHSETB TR0SETB EASETB ET0SETB ET1LOOP: ACALL KEY ;键盘程序JNB F0,m_NEXT1 ;无键继续ACALL KEYPROC ;否则调用键盘处理程序m_NEXT1:MOV A,SpeedMOV B,#10DIV ABMOV DispBuf+5,B ;最低位MOV B,#10DIV ABMOV DispBuf+4,BMOV DispBuf+3,AJB StartEnd,m_Next2CLR TR1 ;关闭电机JMP LOOPORL P1,#11110000Bm_Next2:SETB TR1 ;启动电机AJMP LOOP ;主程序结束;---------------------------------------D10ms:……;---------延时程序,键盘处理中调用KEYPROC:MOV A,B ;获取键值JB ACC.2,StartStop ;分析键的代码,某位被按下,则该位为1JB ACC.3,KeyStyJB ACC.4,UpSpdJB ACC.5,DowSpdAJMP KEY_RETStartStop:SETB StartEnd ;启动AJMP KEY_RETKeySty:CLR StartEnd; ;停止AJMP KEY_RETUpSpd:INC SPEED;MOV A,SPEEDCJNE A,#MaxSpd,K1 ;到了最多的次数?DEC SPEED ;是则减去1,保证下次仍为该值K1:AJMP KEY_RETDowSpd:DEC SPEEDMOV A,SPEEDCJNE A,#MAXSPD,KEY_RET ;不等(未到最大值),返回MOV SPEED,#MinSpd;KEY_RET:RETKEY:……获取键值的程序RETDjZd: ;定时器T1用于电机转速控制PUSH ACCPUSH PSWMOV A,SpeedSUBB A,#MinSpd ;减基准数MOV DPTR,#DjHMOVC A,@A+DPTRMOV TH1,AMOV A,SpeedSUBB A,#MinSpdMOV DPTR,#DjLMOVC A,@A+DPTRMOV TL1,AMOV A,DjCountCPL AORL P1,AMOV A,DjCountJNB ACC.7,d_Next1JMP d_Next2d_Next1:MOV DjCount,#11110111Bd_Next2:MOV A,DjCountRL AMOV DjCount,A ;回存ANL P1,APOP PSWPOP ACCRETIDjH: DB76,82,89,95,100,106,110,115,119,123,12……DjL: DB 0,236,86,73,212,0,214,96,163,165 ……DISP: ;显示程序POP PSWPOP ACC……RETIBitTab: DB7Fh,0BFH,0DFH,0EFH,0F7H,0FBH DISPTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0F FHEND。

51单片机控制的步进电机C语言程序

51单片机控制的步进电机C语言程序

51单片机控制的步进电机C语言程序用的是L298驱动的和ULN2003一样,你把它换成2003就行拉#include <AT89X51.H>unsigned char codetable[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0x00,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0x f3,0x00};unsigned char temp,temp_old;unsigned char key;unsigned char i,j,k,m,s;void delay(int i){for(m=i;m>0;m--)for(j=250;j>0;j--)for(k=10;k>0;k--);}void saomiao(){P3=0xff;P3_4=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case 0x0e:key=1;break;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=4;break;}temp=P3;temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}P3=0xff;P3_5=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=7;break;}temp=P3;temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}}void main(void){while(1){saomiao();if(key==1){ P1=0;P2=0;saomiao();}if(key==2){temp_old=key;for(s=0;s<8;s++){ P2=table[s];P1_4=0;delay(13);saomiao();if(key!=temp_old){P1_4=1;break;}}}if(key==3){temp_old=key;for(s=0;s<8;s++){ P2=table[s];P1_5=0;delay(5);saomiao();if(key!=temp_old){P1_5=1;break;}}}if(key==4){temp_old=key; for(s=0;s<8;s++){ P2=table[s];P1_6=0;delay(20);saomiao();if(key!=temp_old){P1_6=1;break;}}}if(key==5){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_7=0;delay(13);saomiao();if(key!=temp_old){P1_7=1;break;}}}if(key==6){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_5=0;delay(5);saomiao();if(key!=temp_old){P1_5=1;break;}}}if(key==7){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_6=0;delay(20);saomiao();if(key!=temp_old){P1_6=1;break;}}}}}C语言程序源代码#include <REGX51.H> // 51寄存器定义#include "intrins.h"#define control P1 //P1_0:A相,P1_1:B相,P1_2:C相,P1_3:D相#define discode P0 //显示代码控制端口#define uchar unsigned char //定义无符号型变量#define uint unsigned intsbit en_dm=P3^0; //显示代码锁存控制sbit en_wk=P3^1; //位控锁存控制uchar code corotation[4]= {0x03,0x06,0x0c,0x09};//电机正转uchar code rollback[4]={0x0c,0x06,0x03,0x09}; //电机反转uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示字段uint code Levspeed[5]={500,400,300,200,100};//电机速度等级uchar Hscan,speedcount;//Hscan行扫描,speedcount 速度等级计数uint uu; //频率计数uint step,setstep; //step:电机步伐计数,setstep:手动设置电机步伐uint speed=500; //电机初始速度uchar count;uchar flag[5];uchar butcount; //按键次数//****************************************//flag[0] 正转标志//flag[1] 反转标志//flag[2] 加速标志//flag[3] 减速标志//flag[4] 设置标志//****************************************Delay1mS(unsigned int tt) //延时1ms “Delay1mS”延时子程序,用循环语句延时。

步进电机控制实验c语言程序,用AT89C51单片机控制步进电机的汇编源程序

步进电机控制实验c语言程序,用AT89C51单片机控制步进电机的汇编源程序

步进电机控制实验c语⾔程序,⽤AT89C51单⽚机控制步进电机的汇编源程序:单⽚机(2540)源程序(50)步进电机(282)汇编语⾔(64)下⾯程序完成的主要功能:实现的正反转,加速、减速;显⽰电机转速(转速级别)和⼯作状态(正转、反转、不转)。

源程序SPEED EQU 10H ;SPEED为转速等级标志,共7级,即1~7FX EQU 11H ;FX 为⽅向标志COUNT EQU 12H ;COUNT次数标志ORG 0000HAJMP MAINORG 0003H ;外部中断0⼊⼝地址,加速⼦程序AJMP UPORG 0013H ;外部中断1⼊⼝地址,减速⼦程序AJMP DOWNORG 000BH ;定时器0中断⼊⼝地址,控制中断次数来达到控制转速 AJMP ZDT0ORG 0030HMAIN: MOV SP,#60HMOV TMOD,#01H ;⼯作于定时、软件置位启动,模式1(16 位计时器)MOV TH0,#0CFHMOV TL0,#2CHMOV COUNT,#01HSETB ET0 ;定时/计数器允许中断CLR IT0 ;外部中断为电平触发⽅式,低电平有效CLR IT1SETB EX0 ;外部允许中断SETB EX1SETB EA ;开总中断MOV R1,#11H ;四相单四拍运⾏,共阳数码管⽅向显⽰8,速度值显⽰0MOV SPEED,#00HMOV FX,#00HXIANS: MOV A,SPEEDMOV DPTR,#LEDMOVC A,@A+DPTR ;查表获取等级对应数码管代码MOV P2,A ;第⼆个数码管显⽰转速等级MOV A,FX ;准备判断转向CJNE A,#11H,ELSMOV P0, #0F9H ;第⼀个数码管显⽰ 1,表⽰正转AJMP QDELS: CJNE A,#00H,ZHENGMOV P0,#0C0H ;第⼀个数码管显⽰ 0,表⽰不转AJMP QDZHENG: MOV P0,#0BFH ;第⼀个数码管显⽰-,表⽰反转QD: JB P3.4,DD ;P3.4 接启动开关 K1,P3.4=1 时启动CLR TR0 ;停⽌定时/计数器MOV P0,#0C0H ;第⼀个数码管显⽰ 0,表⽰不转MOV P2,#0C0H ;第⼆个数码管显⽰ 0,表⽰转速为 0 MOV SPEED,#00H ;重新赋初值MOV FX,#00HAJMP QDDD: MOV A,SPEEDJNZ GO ;A 不等于 0,即初始速度不为零,则转移到 GO CLR TR0 ;停⽌定时/计数器AJMP QDGO: SETB TR0 ;开启定时/计数器ACALL DELAYAJMP XIANSDELAY: MOV R6,#10 ;延时⼦程序DEL1: MOV R7,#250HERE1: DJNZ R7, HERE1DJNZ R6,DEL1RET。

基于51单片机的步进电机控制-设计报告(说明书)及源程序

基于51单片机的步进电机控制-设计报告(说明书)及源程序

南京XX大学指导老师:张X课程设计基于51单片机的步进电机控制机械电子工程学院测控技术与仪器XXXXXXxx2012年1年4日步进电机控制系统[摘要]本课程设计的内容是利用51单片机,达到控制步进电机的启动、停止、正转、反转、两档速度和状态显示的目的,使步进电机控制更加灵活。

步进电机驱动芯片采用ULN2803,ULN2803具有大电流、高电压,外电路简单等优点.利用四位数码管增设电机状态显示功能,各项数据更直观。

实测结果表明,该控制系统达到了设计的要求。

关键字:步进电机、数码管、51单片机、ULN2803一步进电机与驱动电路1.1 什么是步进电机步进电机是一种将电脉冲转化为角位移的执行机构。

通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。

可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的.步进电机分永磁式(PM)、反应式(VR)、和混合式(HB)三种。

永磁式步进一般为两相,转矩和体积较小,步进角一般为7。

5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1。

5度,但噪声和振动都很大.在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。

它又分为两相和五相:两相步进角一般为1。

8度而五相步进角一般为0。

72度。

这种步进电机的应用最为广泛。

1。

3 步进电机的特点1.精度高一般的步进电机的精度为步进角的3—5%,且不累积。

可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点2.过载性好其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合;3.控制方便步进电机是以“步”为单位旋转的,数字特征比较明显,这样就给计算机控制带来了很大的方便,反过来,计算机的出现也为步进电机开辟了更为广阔的使用市场;4.整机结构简单传统的机械速度和位置控制结构比较复杂,调整困难,使用步进电机后,使得整机的结构变得简单和紧凑。

基于单片机控制的步进电机控制器

基于单片机控制的步进电机控制器

基于单片机控制的步进电机控制器一.设计要求(一)基本功能1.实现步进电机的正反转控制2.实现步进电机的加速控制3.实现步进电机的减速控制如过载保护、欠压保护、短路保护和防飞车等功能。

(二)扩展功能任意设定一点为圆心,实现一个直径为10cm的圆形轨迹运动。

二.计划完成时间三周1.第一周完成软件和硬件的整体设计,同时按要求上交设计报告一份。

2.第二周完成软件的具体设计和硬件的制作。

3.第三周完成软件和硬件的联合调试目录1 引言 (1)2 总体设计方案 (1)2.1 设计思路 (1)2.1.1 方案1 (1)2.1.2 方案2 (1)2.2 设计方框图 (1)3 设计原理分析 (2)3.1 步进电机 (2)3.2 步进电机驱动电路以及状态显示电路设计 (2)3.3 键盘电路设计 (3)3.4 时钟振荡电路和复位电路设计 (3)3.5 正反转、加速、减速标志电路设计 (4)3.6 步进电机时序表和时序图 (4)4 结束语 (5)参考文献 (5)附录 (6)基于单片机控制的步进电机控制器班级:应教053班姓名:董保全摘要:本设计采用AT89S51单片机实现对步进电机的控制。

通过单片机的I/O来实现对步进电机的控制,用uln2003来驱动步进电机,并且使用了发光二极管LED来显示步进电机的转速,在单片机的P1口使用四个LED来作为正反转,加速减速控制的标志。

用独立连接式非编码键盘来对电机的状态进行控制。

关键词:步进电机单片机A T89S51 发光二极管引言步进电机是一种将电脉冲信号变换成相应的角位移或直线位移的机电执行元件。

控制步进电机的输入脉冲数量、频率及电机各项绕组的接通顺序,可以得到各种需要的运行特性。

尤其与数字设备配套时,体现了更大的优越性,因此广泛应用于数字控制系统中。

本文介绍已实现的单片机对步进电机的数字控制系统。

该控制系统中,控制器担负着产生脉冲以及发送、接受控制命令的任务。

本设计对步进电机的驱动电路,显示电路以及键盘控制电路做了详细的介绍。

基于单片机ULN2003的步进电机控制系统(汇编及C语言程序各一个)

基于单片机ULN2003的步进电机控制系统(汇编及C语言程序各一个)

图8 总体电路图1.3.4软件设计通过分析可以看出,实现系统功能可以采用多种方法,由于随时有可能输入加速、加速信号和方向信号,因而采用中断方式效率最高,这样总共要完成4个部分的工作才能满足课题要求,即主程序部分、定时器中断部分、外部中断0和外部中断1部分,其中主程序的主要功能是系统初始参数的设置及启动开关的检测,若启动开关合上则系统开始工作,反之系统停止工作;定时器部分控制脉冲频率,它决定了步进电机转速的快慢;两个外部中断程序要做的工作都是为了完成改变速度这一功能。

下面分析主程序与定时器中断程序及外部中断程序。

(1)主程序设计主程序中要完成的工作主要有系统初始值的设置、系统状态的显示以及各种开关状态的检测判断等。

其中系统初始状态的设置内容较多,该系统中,需要初始化定时器、外部中断;对P1口送初值以决定脉冲分配方式,速度值存储区送初值决定步进电机的启动速度,对方向值存储区送初值决定步进电机旋转方向等内容。

若初始化P1=11H、速度和方向初始值均设为0,就意味着步进电机按四相单四拍运行,系统上电后在没有操作的情况下,步进电机不旋转,方向值显示“0”,速度值显示“0”,主程序流程图如图9所示。

(2)定时中断设计步进电机的转动主要是给电机各绕组按一定的时间间隔连续不断地按规律通入电流,步进电机才会旋转,时间间隔越短,速度就越快。

在这个系统中,这个时间间隔是用定时器重复中断一定次数产生的,即调节时间间隔就是调节定时器的中断次数,因而在定时器中断程序中,要做的工作主要是判断电机的运行方向、发下一个脉冲,以及保存当前的各种状态。

程序流程图如图10所示。

(3)外部中断设计外部中断所要完成的工作是根据按键次数,改变速度值存储区中的数据(该数据为定时器的中断次数),这样就改变了步进电机的输出脉冲频率,也就是改变了电机的转速。

速度增加按钮S2为INT0中断,其程序流程为原数据,当值等于7时,不改变原数值返回,小于7时,数据加1后返回;速度减少按钮S3,当原数据不为0,减1保存数据,原数据为0则保持不变。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档