单片机课程设计---步进电机正反转设计

单片机课程设计---步进电机正反转设计
单片机课程设计---步进电机正反转设计

单片机课程设计课题:步进电机正反转设计

系别:电气与电子工程系

专业:

姓名:

学号

指导老师:

2013年01月09日

一设计目的

1、增进对单片机的感性认识,加深对单片机理论方面的理解;

2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、A/D、

3;

4、掌握控制步进电机转动的编程方法。

二设计要求

1、具有速度和转向设定功能;

2、设置开始、停止以及正反转健;

3、转速以及转向有数码管显示(本设计使用的为LCD12864)。

三、总体设计

步进电机是一种将电脉冲转化为角位移的数字控制执行机构。它将电脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。

步进电机具有控制简便、定位准确等特点。随着科学技术的发展,在许多领域将得到广泛的应用。鉴于传统的脉冲系统移植性不好,本文提出微机控制系统代替脉冲发生器和脉冲分配器,用软件的方法产生控制脉冲,通过软件编程可以任意设定步进电机的转速、旋转角度、转动次数和控制步进电机的运行状态。以简化控制电路,降低生产成本,提高系统的运行效率和灵活性。

步进电机的角位移与输入脉冲数严格成正比,因此,当它转动一周后,没有累计误差,具有良好的跟随性。由步进电机与驱动电路组成的开环数控系统,既非常简单、廉价,又非常可靠。同时,它也可以与角度反馈环节组成高性能的闭环数控系统。步进电机的动态响应快,易于起停、正反转及变速。速度可在相当宽的范围内平滑调节,低速下仍能保证获得大转矩。步进电机只能通过脉冲电源供电才能运行,它不能直接使用交流电源和直流电源。步进电机存在振荡和失步现象,必须对控制系统和机械负载采取相应的措施。步进电机自身的噪声和振动较大,带惯性负载的能力较差。

步进电机是自动控制系统中常用的执行部件。步进电机的输入信号为脉冲电流,它能将输入的脉冲信号转换为阶跃型的角位移或直线位移,因而步进电机可看作是一个串行的数/模转换器。由于步进电机能够直接接受数字信号,而不需数/模转换,所以使用微机控制步进电机显得非常方便。

步进电机有以下优点:

(1)通常不需要反馈就能对位置和速度进行控制;

(2)位置误差不会积累;

(3)与数组设备兼容,能够直接接收数字信号;

(4)可以快速启停。

步进电机的品种规格很多,按照它们的结构和工作原理可以划分为磁阻式(也称反应式或变磁阻式)电机、混合式电机、永磁式电机和特种电机等四种主要型式。步进电机不需位移传感器就可精确定位,所以在精确定位系统中应用广泛。目前打字机、计算机外部设备、数控机床、传真机等设备中都使用了步进电机。

随着电子计算机技术的发展,步进电机必将发挥它的控制方便、控制准确的特点,在工业控制等领域取得更为广泛的应用。

本设计采用16 位单片机AT89C51对步进电机进行控制,通过I/O口输出的具有时序的方波作为步进电机的控制信号,信号经过驱动芯片驱动步进电机;同时,用触发按键来对电机的状态进行控制,并用128X64LCD显示电机的状态及转速。

因为步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。所以怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。

用软件控制单片机产生脉冲信号,通过单片机的P1口输出脉冲信号,因为所选电机是两相的,所以只需要P0口的低四位P0.0-P0.3分别通过ULN2003A接到电机的五根电线上。可以通过调整输出脉冲的频率来调整电机的转速,通过改变输入脉冲的顺序来改变转动方向,P2口和P3口接128X64LCD,可以显示当前的电机转速和转向,设置复位键可使正在转动的电机停止转动,大概可分为如下图所示的几部分。

注:由于此设计程序较复杂,在此没有列出程序的框图,程序框图详见软件设计。

四、主要器件介绍及电路设计

4.1、步进电机

4.1.1 步进电机概述

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定

的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。由于脉冲信号数与步距角的线性关系,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器

虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。

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

4.1.2 步进电机的工作原理

通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。当定子的矢量磁场旋转一个角度。转子也随着该磁场转一个角度。每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相

反应式步进电机工作原理图。

图2 四相反应式步进电机工作原理图

开始时,开关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八拍

图3.步进电机工作时序波形图

4.2 ULN2003

ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流

=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K 的电阻较为合适,同时,COM引脚应该悬空或接电源。

ULN2003是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.资料的最后有引用电路,9脚可以悬空。比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。

ULN2003的作用:ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。输入5VTTL电平,输出可达500mA/50V。

ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。该电路的特点如是: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器。

ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。

ULN2003A引脚图及功能如下:

图4 ULN2003A引脚图

ULN2003 是高耐压、大电流、内部由七个硅NPN达林顿管组成的驱动芯片。

经常在以下电路中使用,作为:

1、显示驱动

2、继电器驱动

3、照明灯驱动

4、电磁阀驱动

5、伺服电机、步进电机驱动等电路中。

ULN2003的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。ULN2003 的封装采用DIP—16 或SOP—16

ULN2003A在各种控制电路中常用它作为驱动继电器的芯片,其芯片内部做了一个消线圈反电动势的二极管。ULN2003的输出端允许通过IC 电流200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。输出电流大,故可以直接驱动继电器或固体继电器(SSR)等外接控制器件,也可直接驱动低压灯泡。

ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力。ULN2003A中每对达林顿管的基极都串联有一个2.7kΩ的电阻,可直接与TTL或5V CMOS器件连接。

4.3 12864LCD

12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵,16*8=128,16*4=64,一行只能写8个汉字,4行;)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

4.3.1 主要技术参数和显示特性如下:

电源:VDD 3.3V-5V(内置升压电路,无需负压);

显示内容:128列× 64行(128表示点数)

显示颜色:黄绿

显示角度:6:00钟直视

LCD类型:STN

与MCU接口:8位或4位并行/3位串行

配置LED背光

多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等4.3.2 外形尺寸图:

图5 12864LCD外形尺寸

4.3.3 主要外形尺寸

4.3.4 模块引脚说明

逻辑工作电压(VDD):4.5~5.5V

电源地(GND):0V

工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)4.3.5 接口时序

模块有并行和串行两种连接方法(时序如下):4.3.5.1 8位并行连接时序图

图6 MPU写资料到模块

图7 MPU从模块读出资料4.3.5.2 串行连接时序图

图8 串行连接时序

串行数据传送共分三个字节完成:

第一字节:串口控制—格式 11111ABC。A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD。B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令。 C固定为0

第二字节:(并行)8位数据的高4位—格式 DDDD0000

第三字节:(并行)8位数据的低4位—格式 0000DDDD

串行接口时序参数:(测试条件:T=25℃ VDD=4.5V)

4.4 系统的时钟电路

时钟电路是用于产生单片机工作时所必需的时钟信号。时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准的,有条不紊地一拍一拍地工作。时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。在本系统中采用外部时钟方式的电路,如图所示:

图9 系统的时钟电路

在本设计中的电容C1、C2典型值为30±10 pF。外接代内容的值虽然没有严格的要求,但是电容的大小会影响振荡器的稳定性和起振的快速性。同时,在系统中采用12MHz的晶体振荡器来产生时钟脉冲。这样可以满足系统在设计时的机器周期的需要。

4.5 步进电机驱动电路

由单片机直接输出的脉冲不足以驱动步进电机正常工作所以需要驱动电路给步进电机提供电源,在本设计中采用型号为ULN2003A的芯片,使步进电机正常工作。驱动信号由P0口的P0.0-P0.3输出,分别与驱动芯片的B1-B4相连,电路如下图所示:

图10 步进电机的驱动电路

五软件设计

1、主程序的设计

主程序需具备的功能,要不断扫描P1口并判断触发按键是否闭合,并能根据其电平高低,输出不同的控制脉冲,并调用显示子程序显示转速及方向。

图11 主程序设计流程

程序如下

#include

//#include

//#include

#include "macro.h"

void iniLCD(void);

void write_hz_str( int x1,int y1, uchar *point ) ;

uchar buf_Direction; //设定步进电机的转向

uint set_speed; //设定步进电机的转速

uchar step_motor_loop[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; uchar step_index;

uchar buf_SpeedString[]=" ";

#define CST_STEP_MOTOR_Z 10 //正转

#define CST_STEP_MOTOR_F 20 //反转

#define CST_STEP_MOTOR_ST 0 //停

#define fosc_12MHz 12

#define fosc_24MHz 24

#define fosc_setting fosc_12MHz //工作方式1 #define CST_TIME_MS 1000

#define CST_TH0 (65536-CST_TIME_MS*fosc_setting/fosc_12MHz)/256 #define ST_TL0 (65536-CST_TIME_MS*fosc_setting/fosc_12MHz)%256 void step_motor_driver(void)

{

static uint speed_delay=0;

speed_delay++;

if( buf_Direction==CST_STEP_MOTOR_Z)

{

P0=step_motor_loop[step_index];

if(speed_delay >=set_speed)

{

speed_delay =0;

step_index++; //大于7,从头再来

if(step_index >7)

step_index =0;

}

}

else if( buf_Direction==CST_STEP_MOTOR_F)

{

P0=step_motor_loop[step_index];

if(speed_delay >=set_speed )

{

speed_delay =0;

step_index--;

if(step_index <=0)

step_index =7;

}

}

else

{

speed_delay =0;

P0=0x00;

}

}

void caluate(void)

{

uchar temp=0;

uint u16Temp=0;

u16Temp=(100-set_speed)*100/85;

buf_SpeedString[0]='0'+(u16Temp/100);

buf_SpeedString[1]='0'+(u16Temp%100/10);

buf_SpeedString[2]='0'+(u16Temp%100%10);

buf_SpeedString[3]='%';

write_hz_str(6,60,&buf_SpeedString);

}

//按键处理程序

void key_Scan (void)

{

static uchar key_loose=0;

uchar temp=0;

P1=0XFF;

temp=P1&0xFF;

if(key_loose >0)

{

if(temp==0xFF)

key_loose=0;

return;

}

else if(temp !=0xFF)

{

key_loose=10;

temp=P1&0xFF;

switch(temp)

{

case 0xFE:

buf_Direction=CST_STEP_MOTOR_Z;

write_hz_str(6,20,"反转");

caluate();

break;

case 0xFD:

buf_Direction=CST_STEP_MOTOR_F;

write_hz_str(6,20,"正转");

caluate();

break;

case 0xFB: write_hz_str(6,50,"100%");

buf_Direction=CST_STEP_MOTOR_ST;

write_hz_str(6,20,"停止");

caluate();

break;

case 0xEF:

if(buf_Direction !=CST_STEP_MOTOR_ST)

{

set_speed+=5;

if(set_speed>=80)

set_speed =80;; //减速

}

caluate();

break;

case 0xF7:

if(buf_Direction !=CST_STEP_MOTOR_ST)

{

set_speed-=5;

if(set_speed <=15)

set_speed =15; //加速

}

caluate();

break;

default:

break; //其它值返回}

}

}

void isr_timer0 (void) interrupt 1 using 1

{

TH0=CST_TH0;

TL0=CST_TL0;

step_motor_driver();

}

void init_timer0(void)

{

TCON=0x00;

TMOD=0x00;

TL0=0x00;

TH0=0x00;

TCON=0x00;

// Timer 0 C/T=0,定时工作方式

//Timer 0 M1,M0=0,1

TMOD=0x01; //GATE=0,以运行控制位TR0 启动定时器0 C/T=0,定时工作

方式

TH0=CST_TH0;

TL0=CST_TL0;

TF0=0;//clear 0. count over flag.

TR0=1;// enable TIMER0 ,start count

ET0=1; //enable accept interrupt

}

// 主控程序

void main(void)

{

P2=0xff;

P1=0xff;

P0=0Xff;

init_timer0();

iniLCD(); //初始化LCD

write_hz_str(0,18,"2013-1-7");

write_hz_str(3,18,"步进电机仿真");

write_hz_str(6,20,"停止");

buf_Direction=CST_STEP_MOTOR_ST;

set_speed=60;

step_index=3;

EA=1; //开中断

caluate();

while(1)

{

key_Scan();

}

}

2、显示子程序的设计

图12 显示程序流程图

程序如下:

#include

//#include

//#include

#include "macro.h"

#include "LCD_HZ.h"

sbit E =P3^5;

sbit RW=P3^4;

sbit RS =P3^2;

sbit L =P3^1; //左半平面

sbit R =P3^0; //右半平面

sbit Busy=P2^7;// //忙判断位

#define LCDPAGE 0xB8 //设置页指令。#define LCDLINE 0x40 //设置列指令。//LCD判断忙的子程序

void chkbusy(void) //测LCD忙状态{

E=1; //使能LCD

RS=0; //读写指令

RW=1; //读

P2=0xff; //读操作前先进行一次空读操作,接下来才能读到数据

while(!Busy); //等待,不忙退出

}

//写指令代码

void wcode(uchar cd) //写指令代码

{

chkbusy(); //写等待

P2=0xff; //使能LCD

RW=0; //读禁止

RS=0; //输出设置

P2=cd; //写数据代码

E=1; //以下两句产生下降沿E=0;

}

//把显示数据写到内存单元中

void wdata(uchar dat) //写显示数据

{

chkbusy(); //写等待

P2=0xff; //使能LCD

RW=0; //读禁止

RS=1; //输出设置

P2=dat ^0xFF; //写数据代码

E=1; //以下两句产生下降沿E=0;

}

//显示LCD程序

//可以更改程序中的64变为32就可以输出数字了

void disrow(uchar page,uchar col,uchar *temp)

{

uchar i;

if(col<64) // 左半平面

{

L=1;R=0;

wcode(LCDPAGE+page); // 写指令页

wcode(LCDLINE+col); //写指令行

if((col+16)<64) //如果字在左半平面显示不了,转到右半平面去

{

for(i=0;i<16;i++) //写字

wdata(*(temp+i));

}

else //右半平面

{

for(i=0;i<64-col;i++) //减去左边数,从右半平面第一位开始显示

wdata(*(temp+i)); //写字显示

L=0;R=1; //右半平面

wcode(LCDPAGE+page); //写指令页

wcode(LCDLINE); //写指令行

for(i=64-col;i<16;i++) //写字右半平面wdata(*(temp+i));

}

}

else

{

L=0;R=1;

wcode(LCDPAGE+page); // 写指令页

wcode(LCDLINE+col-64); //写指令行

for(i=0;i<16;i++) //写字

wdata(*(temp+i));

}

}

//供调用子程序

void display_HZ( int page, int col,uchar *temp)

{

disrow( page, col, temp); //显示上半字

disrow( page+1, col, temp+16); //显示下半字

}

///****************************************************

void disrow_ascii(uchar page,uchar col,uchar *temp)

{

uchar i;

if(col<64) // 左半平面{

L=1;R=0;

wcode(LCDPAGE+page); // 写指令页

wcode(LCDLINE+col); //写指令行

if((col+8)<64) //如果字在左半平面显示不了,转到右半平面去

{

for(i=0;i<8;i++) //写字

wdata(*(temp+i));

}

else //右半平面

{

for(i=0;i<64-col;i++) //减去左边数,从右半平

面第一位开始显示

wdata(*(temp+i)); //写字显示L=0;R=1; //右半平面

wcode(LCDPAGE+page); // 写指令页

wcode(LCDLINE); //写指令行for(i=64-col;i<8;i++) //写字右半平面wdata(*(temp+i));

}

}

else

{

L=0;R=1;

wcode(LCDPAGE+page); // 写指令页

wcode(LCDLINE+col-64); //写指令行

for(i=0;i<8;i++) //写字

wdata(*(temp+i));

}

}

void display_ascII( int page, int col,uchar *temp)

{

disrow_ascii( page, col, temp); //显示上半字

disrow_ascii( page+1, col, temp+8); //显示下半字

}

//LCD初始化

void iniLCD(void) //初始化

{

L=1;

R=1;

wcode(0x38);

wcode(0x0f); //开显示设置

wcode(0xc0); //设置显示启动为第一行wcode(0x01); //清屏

wcode(0x06); //画面不动,光标右移。}

//然后应用下面程序来索引汉字

void write_hz_str( int x1,int y1, uchar *point )

{

signed char temp1, temp2;

int i;

int x,y,hang=0;

int hz_cnt=0;

x=x1;

y=y1;

while (*point != '\0') //判断是否显示完成

{

if (hz_cnt>=8) //应是8,中间有字符ASCII 吗+ 汉字则只有1个字节空间不够写汉字所以换行

{

hz_cnt =0;

hang+=2;

}

temp1 = *point++; //取汉字数据

if (temp1 &0x80) //如果是要显示汉字

{

temp2 = *point ++;

for (i = 0; i < HZ_SIZE ; i++) //字码中共9个汉字

{

if ((temp1 == GB_16[i].Index[0]) && (temp2 == GB_16[i].Index[1])) //查索引

{

x=x1+hang;

y=y1+hz_cnt*16;

display_HZ(x,y, &(GB_16[i].Msk[0])); //找到,字模指针赋值

hz_cnt+=1;

break;

}

}

}

else if (temp1<=127 && temp1>=32)

{

temp1 -=32;

x=x1+hang;

y=y1+hz_cnt*8;

display_ascII(x,y, &(nAsciiDot[16*temp1])); //找到,字模指针赋值

hz_cnt+=1;

}

}

}

3、 H文件

H文件见附录

六、整体电路图

七、电路仿真及调试

7.1Proteus介绍

Proteus是由Labcenter Electronics开发的功能强大的单片机仿真软件

Proteus与其他的仿真软件相比较,在下面的优点:

步进电机正反转启停控制的设计

电机控制课程设计报告书 题 目 步进电机正反转启停控制的设计 院 部 名 称 机电工程学院 专 业 电气工程及其自动化 班 级 组 长 姓 名 学 号 同 组 学 生 设 计 地 点 工科楼C 设 计 学 时 1周 指 导 教 师 金陵科技学院教务处制

目录 一、设计任务和要求 二、设计思路 2.1系统总框图------------------------------------------------------------------------02 2.2设计原理--------------------------------------------------------03 三、系统硬件设置 3.1时钟信号控制电路原理介绍----------------------------------------03 3.1.1 芯片89C51介绍--------------------------------------------03 3.1.2 芯片管脚说明----------------------------------------------03 3.1.3 时钟信号控制电路------------------------------------------05 3.2系统复位电路原理介绍--------------------------------------------06 3.2.1 系统复位电路----------------------------------------------06 3.3驱动电路原理介绍------------------------------------------------06 3.3.1步进电机原理介绍-------------------------------------------06 3.3.2驱动电路---------------------------------------------------08 3.4正反转控制电路原理介绍------------------------------------------08 3. 4.1正反转控制电路---------------------------------------------08 四、系统软件设置 4.1主程序流程图----------------------------------------------------09 4.2源程序----------------------------------------------------------09 五、调试过程与结果----------------------------------------------18 六、总结与体会---------------------------------------------------18 七、参考资料------------------------------------------------------19 八、附录-----------------------------------------------------------20附录一总电路图

西门子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所示。

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)所示,即定子小齿与转子小齿不对齐的位置。 把定子小齿与转子小齿对齐的状态称为对齿,把定子小齿与转子小齿不对齐的状态称为错齿。错齿的存在是步进电机能够旋转的前提条件,所以,在步进电机的结构中必须保证有错齿的存在,也就是说,当某一相处于对齿状态时,其它绕组必须处于错齿状态。 本实验的电机采用两相混合式步进电机,其部上下是两个磁铁,中间是线圈,通了直流电以后,就成了电磁铁,被上下的磁铁吸引后就产生了偏转。因为中间

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

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

片机课程设计步进电机启动停止正反转

单片机课程设计报告 步进电机控制设计 姓名:黄盛海 201030480108 詹志勋 201030480125 郑榕生 201030480128 班级: 10车辆工程1班 指导老师:李震姜晟 日期: 2012.6.18~6.20 华南农业大学工程学院

摘要:步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,它的的驱动电路根据控制信号工作,控制信号由单片机产生。 本次课程设计主要采用AT89S52芯片,用汇编语言编写出电机的正转、反转、加速、减速、停止程序,通过单片机、电机的驱动芯片ULN2003以及相应的按键实现以上功能,并且步进电机的工作状态要用相应的发光二极管显示出来。控制系统主要由硬件设计和软件设计两部分组成。其中,硬件设计包括单片机的最小系统模块、电源模块、控制模块、步进电机ULN2003A驱动模块、彩灯显示模块5个功能模块的设计。并且通过仿真控制系统对硬件、软件进行了调试和改善,实现了上述功能。本系统具有智能性、实用性及可靠性的特点。 关键词:步进电机单片机电脉冲驱动系统汇编语言

目录 1、课程设计目的及要求 (4) 2、整体系统分析 (4) 3、硬件系统分析 (6) 4、软件系统分析 (10) 5、调试结果 (10) 6、结论 (11) 7、参考文献 (12) 附一:源程序 (12)

1. 课程设计目的及要求 1.1 课程设计目的 增进对单片机的感性认识,加深对单片机理论方面的理解; 掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O口、A/D转换等; 了解和掌握单片机应用系统的软硬件设计过程及实现方法。 1.2 课程设计要求 设计一个步进电机控制器,要求用多个按键控制电机的启动/停止、加速、减速、反转等控制功能; 用彩灯显示电机的转动状态,如加速就控制彩灯快速闪烁,减速则控制彩灯慢速闪烁等。 2. 整体系统分析 2.1步进电机控制工作原理 步进电机实际上是一个数字\角度转换器,也是一个串行的数\模转换器。步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4 个方面。从结构上看 ,步进电机分为三相、四相、五相等类型 ,本次设计的是四相电机。四相步进电机的工作方式有单四拍、双四拍和单双八拍 3 种。

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

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

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

最新单片机课设步进电机控制正反转

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

单片机课程设计报告设计题目:步进电机控制系统 学院自动化与信息工程学院 专业电气工程及其自动化 班级 姓名 学号 指导教师王水鱼 2010 年秋季学期 起止时间:2011年1月10日至2011年1月14日 平时 (10%) 任务完成 (30%) 答辩 (30%) 课设报告 (30%) 总评成绩

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

单片机课程设计---步进电机正反转设计

单片机课程设计课题:步进电机正反转设计 系别:电气与电子工程系 专业: 姓名: 学号 指导老师: 2013年01月09日

一设计目的 1、增进对单片机的感性认识,加深对单片机理论方面的理解; 2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、A/D、 3; 4、掌握控制步进电机转动的编程方法。 二设计要求 1、具有速度和转向设定功能; 2、设置开始、停止以及正反转健; 3、转速以及转向有数码管显示(本设计使用的为LCD12864)。 三、总体设计 步进电机是一种将电脉冲转化为角位移的数字控制执行机构。它将电脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。 步进电机具有控制简便、定位准确等特点。随着科学技术的发展,在许多领域将得到广泛的应用。鉴于传统的脉冲系统移植性不好,本文提出微机控制系统代替脉冲发生器和脉冲分配器,用软件的方法产生控制脉冲,通过软件编程可以任意设定步进电机的转速、旋转角度、转动次数和控制步进电机的运行状态。以简化控制电路,降低生产成本,提高系统的运行效率和灵活性。 步进电机的角位移与输入脉冲数严格成正比,因此,当它转动一周后,没有累计误差,具有良好的跟随性。由步进电机与驱动电路组成的开环数控系统,既非常简单、廉价,又非常可靠。同时,它也可以与角度反馈环节组成高性能的闭环数控系统。步进电机的动态响应快,易于起停、正反转及变速。速度可在相当宽的范围内平滑调节,低速下仍能保证获得大转矩。步进电机只能通过脉冲电源供电才能运行,它不能直接使用交流电源和直流电源。步进电机存在振荡和失步现象,必须对控制系统和机械负载采取相应的措施。步进电机自身的噪声和振动较大,带惯性负载的能力较差。 步进电机是自动控制系统中常用的执行部件。步进电机的输入信号为脉冲电流,它能将输入的脉冲信号转换为阶跃型的角位移或直线位移,因而步进电机可看作是一个串行的数/模转换器。由于步进电机能够直接接受数字信号,而不需数/模转换,所以使用微机控制步进电机显得非常方便。 步进电机有以下优点: (1)通常不需要反馈就能对位置和速度进行控制; (2)位置误差不会积累; (3)与数组设备兼容,能够直接接收数字信号; (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) {

基于单片机控制步进电机报告

电子赛培训课作品 设计报告 题目:单片机控制步进电机 : 班别: 学号: 序号:

完成时间:2012-5-17 华南理工大学学院电子信息工程学院 目录 引言 (1) 一、系统方案的选择和论证 (1) 二、总体设计 (2) 三、单元电路设计 (3) 四、整体测试 (4) 五、结论 (5) 六、总结 (6) 七、参考文献 (6)

单片机控制步进电机 摘要:本设计采用一块AT89C52单片机对一个四相步进电机进行控制,使步进电机在安全温度按输入的步数和转动的方向进行运行。控制电机转动的方法采用四相八拍控制法。本设计采用矩阵键盘实现步进电机不同转动步数的输入以及转向的控制,还有对键盘实现锁键和开锁的作用。用DS18B20代替电机的测温系统,实现超温报警和停机的功能。 引言 随着数字化技术发展,数字控制技术得到了广泛而深入的应用。步进电机是一种将数字信号直接转换成角位移或线位移的控制驱动元件, 具有快速起动和停止的特点。因为步进电动机组成的控制系统结构简单,价格低廉,性能上能满足工业控制的基本要求,所以广泛地应用于手工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,投影仪、数码摄像机、大型望远镜、卫星天线定位系统、医疗器件以及各种可控机械工具等等。 设计容:采用单片机控制一个三相单三拍的步进电机工作。 要实现的功能: 一、步进电机的旋转方向由正反转控制信号控制; 二、步进电机的步数由键盘输入,可输入的步数分别为3、6、9、12、15、 18、21、24和27步,且键盘具有键盘锁功能,当键盘上锁时,步进电机不接受输入步数,也不会运转。只有当键盘锁打开并输入步数时,步进电机才开始工作; 三、电机运转的时候有正转和反转指示灯指示; 四、电机在运转过程中,如果过热,则电机停止运转,同时红色指示灯亮,

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

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

51单片机步进电机正反转停止实验

51单片机步进电机正反转停止实验 - C51源代码 #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取反 } BEEP=1; //关闭蜂鸣器 } /********************************************************/ /*

步进电机正反转程序

步进电机正反转程序 #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取反

STC89C52单片机控制28byj-48步进电机正反转变速

STC89C52单片机控制28byj-48型步进电机正反转、加减速 C语言编写。 在网上找了好久,都没找到合适的,无奈之下,只能用自己写写了。写的不好,大家勿喷。。。主要实现功能,正反转,加减速,暂停。 晚上在宿舍用手机拍的,手机不好,光线也不好。拍的更不好。用的是LUN2003驱动板。刚接触电机,也不是很了解。 看到网上好多一样的文章,所以一些原理就不讲了,直接上源码了。因为初学,很多要改进的地方。如果你有更高效率的算法,请联系我QQ394511647,一起讨论,谢谢。 定义的旋转相序为双相八拍。在代码中都标出来了。 我都测试过了,是可以加减速的,就是加减速还不够完善。。。希望大家改改。 源码: /*****************************************************************************/ #include #define uint unsigned int #define uchar unsigned char uchar code ccw[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//逆时针 uchar code cw[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//顺时针 uchar a,temp; sbit K1 = P1^4;//逆时针 sbit K2 = P1^5;//顺时针

sbit K3 = P1^6;//暂停 sbit K4 = P3^2;//加速 sbit K5 = P3^3;//减速 void SETP_MOTOR_cw(uchar n);//顺时针 void SETP_MOTOR_ccw(uchar n);//逆时针 void DelayMS();//延时 void speed();//变速 void fddelay(uchar b);//防抖 uchar N = 192;//外圈数跑3圈(减速比为1:64)uchar num; void main() { while(1) { if(K1 == 0) { SETP_MOTOR_ccw(N); if(K3 == 0) break; } else if(K2 == 0) { SETP_MOTOR_cw(N); if(K3 == 0) break; } else { P0 = 0x00; } } } void DelayMS()//延时 { uchar i; uchar ms; ms = num; while(ms--) { for(i=0;i<115;i++); } } void fddelay(uchar b)//防抖 {

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

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

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

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

步进电机正反转程序 一

步进电机正反转程序一 #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)

相关文档
最新文档