实验步进电机实验报告.docx

上传人:b****0 文档编号:17301964 上传时间:2023-07-23 格式:DOCX 页数:18 大小:20.98KB
下载 相关 举报
实验步进电机实验报告.docx_第1页
第1页 / 共18页
实验步进电机实验报告.docx_第2页
第2页 / 共18页
实验步进电机实验报告.docx_第3页
第3页 / 共18页
实验步进电机实验报告.docx_第4页
第4页 / 共18页
实验步进电机实验报告.docx_第5页
第5页 / 共18页
实验步进电机实验报告.docx_第6页
第6页 / 共18页
实验步进电机实验报告.docx_第7页
第7页 / 共18页
实验步进电机实验报告.docx_第8页
第8页 / 共18页
实验步进电机实验报告.docx_第9页
第9页 / 共18页
实验步进电机实验报告.docx_第10页
第10页 / 共18页
实验步进电机实验报告.docx_第11页
第11页 / 共18页
实验步进电机实验报告.docx_第12页
第12页 / 共18页
实验步进电机实验报告.docx_第13页
第13页 / 共18页
实验步进电机实验报告.docx_第14页
第14页 / 共18页
实验步进电机实验报告.docx_第15页
第15页 / 共18页
实验步进电机实验报告.docx_第16页
第16页 / 共18页
实验步进电机实验报告.docx_第17页
第17页 / 共18页
实验步进电机实验报告.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验步进电机实验报告.docx

《实验步进电机实验报告.docx》由会员分享,可在线阅读,更多相关《实验步进电机实验报告.docx(18页珍藏版)》请在冰点文库上搜索。

实验步进电机实验报告.docx

实验步进电机实验报告

【关键字】实验

论文题目:

步进电机的控制

课程名称:

计算机控制技术

学院信息工程学院

专业班级应用电子技术

(2)班

学号08

姓名卢广彬

任课教师黄国宏

6日

实验名称:

步进电机的控制

实验目的:

1、复习步进电机的工作原理,进一步加强对步进电机的应用方面的学习;

2、了解芯片ULN2003A的工作原理,并利用单片机或者微机等对芯片加予控制;

3、学会灵活编写单片机的控制及应用程序,进一步熟悉单片机的工作方式;

4、学会用单片机及一外围设备组建具有独特功能的自动控制系统。

实验原理:

ULN是一个具有16个引脚驱动芯片,其作用是将输入的较小电流放大,以便可以驱动一般的I/O无法驱动的较大功率的外围设备。

下面将叙述ULN的内部结构、芯片引脚功能、与单片机的连接方法及简单的应用。

一、ULN2003管脚排列如下图所示:

ULN2003的内部结构和功能

ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。

它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTLCOMS,由达林顿管组成驱动电路。

ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。

用户输出口的外接负载可根据以上参数估算。

采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动高压灯泡。

通常单片机驱动ULN时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。

ULN是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.资料的最后有引用电路,9脚可以悬空。

 比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。

ULN的作用:

ULN是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。

可直接驱动继电器等负载。

 输入5VTTL电平,输出可达500mA/50V。

ULN是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。

该电路的特点如下:

ULN的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器。

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

   

ULN引脚图及功能:

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

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

1、显示驱动

2、继电器驱动

3、照明灯驱动

4、电磁阀驱动

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

ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它

能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来

处理的数据。

ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受

50V的电压,输出还可以在高负载电流并行运行。

ULN2003的封装采用DIP—16或SOP—16

ULN在各种控制电路中常用它作为驱动继电器的芯片,其芯片内部做了一个消线圈反电动势的二极管。

ULN2003的输出端允许通过IC电流200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。

输出电流大,故可以直接驱动继电器或固体继电器(SSR)等外接控制器件,也可直接驱动高压灯泡。

ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。

每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力。

   ULN中每对达林顿管的基极都串联有一个2.7kΩ的电阻,可直接与TTL或5VCMOS器件连接

ULN2003可以并联使用,在相应的OC输出管脚上串联几个欧姆的均流电阻后再并联使用,防止阵列电流不平衡。

2.1步进电机

步进电机是一种将电脉冲转化为角位移的执行机构。

电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

2.2步进电机的控制

1.换相顺序控制:

通电换相这一过程称为脉冲分配。

例如:

混合式步进电机的工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。

2.控制步进电机的转向控制:

如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。

3.控制步进电机的速度控制:

如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。

两个脉冲的间隔越短,步进电机就转得越快。

2.3步进电机的工作过程

开关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方向转动。

  

四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。

单四拍与双四拍的步距角相等,但单四拍的转动力矩小。

八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。

  

单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图3.a、b、c所示:

a.单四拍b.双四拍c.四相八拍 

步进电机工作时序波形图

对步进电机四个绕组依次实现如下方式的循环通电控制:

1、单四拍运行:

正转A-B-C-D;反转D-C-B-A

2、双四拍运行:

正转AB-BC-CD-DA;反转DC-CB-BA-AD

3、八拍运行:

正转A-AB-B-BC-C-CD-D-DA

本实验使用的四相八拍的工作方式

3、实验原理图:

单片机控制步进电机的原理图如下图所示:

单片机STC89C52上电后根据程序在P1.0—P1.3这四个I/O口输出上面步进电机工作时序图中的四相八拍时序方波,方波电流经ULN2003A芯片构成的驱动模块放大到一定的程度,以便提供可以满足步进电机工作所需的功率,即可使步进电机工作。

如图所示的电路图中,步进电机有三种工作方式:

一是仿照自动升降国旗的系统,当SA按下后,就进入自动升国旗的模式,国歌的长度是49秒,电机转过24.5圈时,蜂鸣器就响一下,与此同时,在LCD1602上会计数,并显示电机转过的圈数;当SB按下后,则是降国旗,其他方面的跟升国旗的情况一样。

二是正转方向上的加减速,只有SC这个按键按下后,就进入正转模式;再按SC键,就可以循环加减束。

三是反转方向的加减速,情况和第二种工作方式相类似。

实验步骤及结果:

1、按照实验原理图连接好电路图;

2、根据原理图编写程序;

3、电路上电,调试程序,观察并控制电机使其按照预期的行为工作;

4、当电机可以通过按键控制其仿照自动升降国旗系统、正转加减速、反转加减速时,程序调试结束;

5、优化程序,整理实验结果

实验程序:

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineRS_CLRRS=0

#defineRS_SETRS=1

#defineRW_CLRRW=0

#defineRW_SETRW=1

#defineEN_CLREN=0

#defineEN_SETEN=1

#defineDataPortP0

uintflag,N;

ucharstep=3;

sbitkeyA=P1^4;//正转键

sbitkeyB=P1^5;//反转键

sbitkeyC=P1^6;//加速键

sbitkeyD=P1^7;//减速键

sbitbeep=P3^6;//报警器开关口

sbitRS=P2^0;

sbitRW=P2^1;

sbitEN=P2^2;

ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示

ucharcodeF[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//四相八拍正转TABLE

ucharcodeR[]={0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3};//四相八拍反转TABLE

voiddelay(uintz)//延时子程序

{

uintx,y;

for(x=z;x>0;x--)

for(y=0;y<115;y++);

}

voidDelayUs2x(unsignedchart)

{

while(--t);

}

voidDelayMs(unsignedchart)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

bitLCD_Check_Busy(void)

{

DataPort=0xFF;

RS_CLR;

RW_SET;

EN_CLR;

_nop_();

EN_SET;

return(bit)(DataPort&0x80);

}

voidLCD_Write_Com(unsignedcharcom)

{

while(LCD_Check_Busy());//忙则等待

RS_CLR;

RW_CLR;

EN_SET;

DataPort=com;

_nop_();

EN_CLR;

}

voidLCD_Write_Data(unsignedcharData)

{

while(LCD_Check_Busy());//忙则等待

RS_SET;

RW_CLR;

EN_SET;

DataPort=Data;

_nop_();

EN_CLR;

}

voidLCD_Clear(void)

{

LCD_Write_Com(0x01);

DelayMs(5);

}

voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s)

{

if(y==0)

{

LCD_Write_Com(0x80+x);//表示第一行

}

else

{

LCD_Write_Com(0xC0+x);//表示第二行

}

while(*s)

{

LCD_Write_Data(*s);

s++;

}

}

voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData)

{

if(y==0)

{

LCD_Write_Com(0x80+x);

}

else

{

LCD_Write_Com(0xC0+x);

}

LCD_Write_Data(Data);

}

voidLCD_Init(void)

{

LCD_Write_Com(0x38);/*显示模式设置*/

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

LCD_Write_Com(0x08);/*显示关闭*/

LCD_Write_Com(0x01);/*显示清屏*/

LCD_Write_Com(0x06);/*显示光标移动设置*/

DelayMs(5);

LCD_Write_Com(0x0C);/*显示开及光标设置*/

}

voiddisplay()

{

P0=0xFF;//P1口置1

LCD_Init();

LCD_Clear();//清屏

LCD_Write_String(0,0,"2012-4-14");

LCD_Write_String(10,0,"S:

");

LCD_Write_String(12,0,"F");

LCD_Write_String(0,1,"Round:

");

LCD_Write_Char(7,1,0+0x30);

LCD_Write_Char(9,1,0x7e);

}

voidSTEP_F(ucharn)

{

uinti;

for(i=0;i<8;i++)

{

if(keyC==0)

{

while(!

keyC);

n--;

if(n==0)

{

n=3;

beep=0;

delay(100);

beep=1;

}

}

P1=F[i];

delay(n);

}

}

voidSTEP_R(ucharn)

{

uinti;

for(i=0;i<8;i++)

{

if(keyD==0)

{

while(!

keyD);

n--;

if(n==0)

{

n=3;

beep=0;

delay(100);

beep=1;

}

}

P1=R[i];

delay(n);

}

}

voidkeyboard()

{

if(keyA==0)

{

flag=0;

N=0;

LCD_Write_String(12,0,"F");

}

elseif(keyB==0)

{

flag=1;

N=0;

LCD_Write_String(12,0,"R");

}

elseif(keyC==0)

{

while(!

keyC);

flag=2;

N=0;

LCD_Write_String(12,0,"F");

}

elseif(keyD==0)

{

while(!

keyD);

flag=3;

N=0;

LCD_Write_String(12,0,"R");

}

}

voidmain()//主程序

{

uinti,j;

display();

while

(1)

{

keyboard();

if(flag==0)

{

for(j=0;j<32;j++)

{

for(i=0;i<8;i++)//电机转过45°

{

P1=F[i];

delay

(2);

}

}

N++;

if(N==245)

{

beep=0;

delay(300);

beep=1;

break;

}

LCD_Write_Char(10,1,N/1000+0x30);

LCD_Write_Char(11,1,N%1000/100+0x30);

LCD_Write_Char(12,1,N%1000%100/10+0x30);

LCD_Write_String(13,1,".");

LCD_Write_Char(14,1,N%1000%100%10+0x30);

}

elseif(flag==1)

{

for(j=0;j<32;j++)

{

for(i=0;i<8;i++)//电机转过45°

{

P1=R[i];

delay

(2);

}

}

N++;

if(N==245)

{

beep=0;

delay(300);

beep=1;

break;

}

LCD_Write_Char(10,1,N/1000+0x30);

LCD_Write_Char(11,1,N%1000/100+0x30);

LCD_Write_Char(12,1,N%1000%100/10+0x30);

LCD_Write_String(13,1,".");

LCD_Write_Char(14,1,N%1000%100%10+0x30);

}

elseif(flag==2)

{

while(keyA&keyB&keyD)

{

for(j=0;j<9*step;j++)

{

STEP_F(step);

}

N++;

LCD_Write_Char(10,1,N/1000+0x30);

LCD_Write_Char(11,1,N%1000/100+0x30);

LCD_Write_Char(12,1,N%1000%100/10+0x30);

LCD_Write_String(13,1,".");

LCD_Write_Char(14,1,N%1000%100%10+0x30);

}

}

elseif(flag==3)

{

while(keyA&keyB&keyC)

{

for(j=0;j<9*step;j++)

{

STEP_R(step);

}

N++;

LCD_Write_Char(10,1,N/1000+0x30);

LCD_Write_Char(11,1,N%1000/100+0x30);

LCD_Write_Char(12,1,N%1000%100/10+0x30);

LCD_Write_String(13,1,".");

LCD_Write_Char(14,1,N%1000%100%10+0x30);

}

}

elsebreak;

}

P1=0xf0;

}

心得体会:

俗话说“好的开始是成功的一半”。

说起课程设计,我认为最重要的就是对实验的原理要一丝不苟的去研究,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。

最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。

虽然自己有实验板,但是部分硬件的设计跟焊接都要我们自己动手去焊,软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。

当然,这其中也有很多问题,第一、不够细心比如由于粗心大意焊错了线,由于对课本理论的不熟悉导致编程出现错误。

第二,是在学习态度上,这次课设是对我的学习态度的一次检验。

对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。

我们这次实习所遇到的多半问题多数都是由于我们不够严谨。

第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。

在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。

通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。

在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。

还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。

并且我们熟练掌握了有关器件的性能及测试方法。

再次感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。

课程设计时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。

此文档是由网络收集并进行重新排版整理.word可编辑版本!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2