毕业设计90西华大学课程设计说明书

发布时间:2015-02-24 15:39:37   来源:文档文库   
字号:

·摘要

本文主要介绍了步进电机的工作原理、工作特点以及在实际控制电路中的应用。还介绍了基于AT89C51单片机完成对步进电机的控制,由于考虑到步进电机的功率较大,也为了防止步进电机工作时对电路的干扰,由此采用了光电耦合电路进行单片机与步进电机的隔离,本设计还可以完成对步进电机的步进角的数目进行输入与显示和步进电机工作状况的显示,使控制更加直观,更加方便控制。

关键字 AT89C51单片机、步进电机、光电耦合电路、步进角

·Abstract

This article mainly introduces the stepping motor’s working principle, working property and the application in the real control circuit. Yet introduces the control of stepping motor is based on the AT89C51 microcontroller .Be consider the needing power of stepping motor is a little higher and prevent the interference while stepping motor working .so I adopt photoelectrical couple circuits to isolate the microcontroller and stepping motor .this design can input the number of steps and display it, also display the working state of stepping motor, so these abilities not only let the control is more audiovisual, but also let the control is more convenience.

Keywords: AT89C51 microcontroller, stepping motor, Photoelectrical coupled circuits, Steps.

1.前言 2

2.整体方案讨论与设计 3

2.1方案一 3

2.2方案二 5

2.3方案选择 5

3.器件选择 6

3.1AT89C51单片机的介绍: 6

3.2光电耦合器介绍: 11

4.方案的设计 12

4.1步进电机的驱动电路 12

4.2步进电机的控制方式 14

4.3电路图 17

4.4进行步进电机控制的C语言源程序 17

5.系统功能、指标测试 17

6.设计体会 18

7.致谢词 18

7.参考文献 19

附录一:电路图 20

附录二:C语言源程序 21

1.前言

步进电机是数字控制系统中的一种执行元件,其功能是将脉冲信号变换为相应的角位移或直线位移,即给一个脉冲信号,电动机就转动一个角度或前进一步,并且没有积累误差,因此它广泛运用于工业、航天、国防等领域。而对步进电机的控制又是一门重要的学科,常常用微控制器对它进行控制。这次的设计采用的是用单片机控制步进电机,单片机采用的是ATEML公司生产的MCS51系列的单片机,AT89C51单片机。它完全兼容INTER生产的51系列单片机,无论是硬件还是指令系统,它都INTER51系列单片机的继承。因为MCS51系列的单片机的集成度高、处理功能强、可靠性高、系统结构简单、、价格低廉、易于使用等优点,在世界范围内得到了广泛的普及和应用,特别是在中国,MCS51系列的单片机占了中国8位单片机的绝大多数的市场。

用单片机控制步进电机就是在单片机的一个I/O端口产生可控制步进电机工作的脉冲信号,如果所控制的步进电机为四项步进电机就需要四个脉冲信号输出线分别接步进电机的四项输入端,而用单片机控制有控制方便、扩展性强等优点,可以实现对步进电机的正转、反转、还可以通过一些手段使步进电机精确的转的角度。由于步进电机的功率较大,直接用单片机进行驱动不合实际,因此就要专门的设计一个驱动电路,简单的就是用光电耦合进行隔离,将单片机输出的控制脉冲用光电耦合器进行隔离,再在光电耦合器的另一端设计一个电流放大电路,这样不仅可以驱动较大功率的步进电机,还可以防止步进电机工作时对单片机等控制电路的干扰。

2.整体方案讨论与设计

2.1方案一

由于步进电机受脉冲信号控制,并且脉冲信号要按照一定的时序,此设计要求采用四项步进电机,并且采用的转子齿数是50,所以齿距角为360°/50=7.2°采用四项步进电机就要求有四个脉冲源对步进电机进行控制,而这四项控制脉冲都是按照一定的顺序进行工作的,即他们的相位角相差90°。对此可以采用移位寄存器可以实现对步进电机的控制,此方案采用74LS194,当从移位寄存器的串行口输入一个脉冲信号,其输出端就把这个脉冲信号分别在不同的CP脉冲之下输出,由此可以完成对步进电机进行一个周期的控制。并且74LS194芯片可以完成双向移位,由此可以完成对步进电机的正转、反转两种控制。

74LS194芯片介绍:

21 74LS194移位寄存器

集成移位寄存器741944RS触发器及他们的输入控制电路组成。21为它的引脚图,其中Q0Q1Q2Q3分别为移位寄存器的输出端口,SR.SL分别为右移、左移的输入端,CLK为时钟脉冲信号输入端,S0.S1为两个输入控制端,如下21D0.D1.D2.D3为置数端。

21 74194双向移位寄存器控制端的逻辑功能

控制信号

完成的功能

S1

S0

0

0

保持

0

1

右移

1

0

左移

1

1

并行输入

设计一个可产生可以控制步进电机的脉冲信号的简单电路,如图2-2, 当电路图中的按键被按下,将在74194的输出端产生一个时序脉冲信号,如图23所示。

22 74194产生可控制步进电机的脉冲信号的简单电路

23 逻辑分析仪的测量结果

此方案的优点

1. 结构简单,实现容易

2. 如果把它制成实物,成本将会比较便宜

此方案的缺点:

1. 对于步进电机来说,控制信号一次就输入4个,不能用于对于精度要求较高的领域。

2. 当在按按键是,不好控制好脉冲的宽度,因此对步进电机来说,时而为A-B-C-D输入,时而为AB-BC-CD-DAABC-BCD-CDA-DAB的输入,因此步进电机的输出转矩不等,由此也不适合对精度要求较高的领域。

3. 此方案的扩展性能较差。

4. 对于更复杂的步进电机的控制,实现较为困难。

2.2方案二

本方案是基于AT89C51单片机完成对步进电机的控制,由于考虑到步进电机的功率较大,也为了防止步进电机工作时对电路的干扰,由此采用了光电耦合电路进行单片机与步进电机的隔离,本方案还可以完成对步进电机的步进角的数目进行输入。具体流程21如下:

21 单片机控制流程图

此方案的优点有:

1. 对步进电机转动多少个步进角的输入较方便,较直观。

2. 可控制大功率的步进电机,并且减少了步进电机工作时对控制电路的干扰。

3. 可扩展性强,如果还要增加其他功能,可以直接基于此单片机进行扩展。从而省去了新增加其他芯片。

4. 控制的模式修改方便,如:正转到反转的改变,可以直接在程序里修改,从而省去了对电路的物理修改。

2.3方案论证选择

综上所诉,由于用单片机控制步进电机工作较用移位寄存器控制步进电机工作有较大的优势,所以本次设计采用的是基于单片机的步进电机的控制。这样方便系统的扩展和实现更多的功能。

3.电路各单元模块设计

本方案选用的单片机型号为ateml公司生产的AT89C51型单片机,而为了实现设计要求,驱动大功率的步进电机,并且减少步进电机工作时对控制电路的干扰,所以采用了光电耦合器件进行电压隔离。下面对AT89C51单片机及光电耦合器件进行介绍。

3.1AT89C51单片机的介绍

单片机自20世纪70年代问世以来,已对人类社会产生了巨大的影响。尤其是美国Intel公司生产的MCS-51系列单片机,由于其具有集成度高、处理功能强、可靠性高、系统结构简单、价格低廉、易于使用等优点,在世界范围内已经得到了广泛的普及和应用。此外,世界各大公司以MCS—51单片机基本内核为核心的各种扩展型、增强型的新型单片机不断推出,所以在今后若干年内,MCS51系列以及世界各大公司生产的与其兼容的各种增强型、扩展型的单片机,仍是我国单片机应用领域的主流机型。而本次设计采用的是ATEML公司生产的AT89C51单片机,该单片机完全与INTEL公司生产的8051单片机兼容。

MCS—5l系列单片微型计算机包括8031805l8751等型号,其代表型号是80518051内部组成方框图如31所示.内部总体结构框图如3—2所示。33AT89C51单片机的电路图。

3—1 MCS51单片机内部组成方框图

32 MCS-51单片机内部总体结构框图

33 AT89C51单片机

8051土要包括算术/逻辑部件ALU、累加器A(有时也称ACC)、只读存储器ROM、随机存储器RAM、指今寄存器1R、程序计数器PC、定时器/计数器、IO接口电路、程序状态寄存器PSW、寄存器组此外,还有堆栈寄存器SP、数据指针寄存器DPTR等部件。这些部件集成在一块芯片上通过内部总线连接,构成完整的微型计算机。下面按其部件功能分类予以介绍。

3.1.1寄存器

微处理器中的寄存器是使用者应该十分重视的部分。寄存器是由触发器组成的,8位寄存器由8个触发器组成,16位寄存器由16个触发器组成。MCS—51中的寄存器较多.大体可分为通用寄存器和专用寄存器两类。

1.通用寄存器

MCS—51共有32个通用寄存器.均为8位寄存器,分为4个区.分别称为0区、l区、2区和3区,每个区内有8个寄存器,分别为R0R1R2R3、尺4R 5R6R7MCS—单片机每次只能选择一个寄存器区工作,围此尽管各寄存器区内的寄存器名称对应相同,也不会发生混乱。4个寄存器区的选择是由程序状态字个RS1RS0来控制的.其对应关系如下31

RS0

RS1

寄存器区

0

0

0(内部RAM地址00H~07H)

0

1

1(内部RAM地址07H~0FH)

1

0

2(内部RAM地址10H~17H)

1

1

3(内部RAM地址18H~1FH)

31 寄存器工作

2.专用寄存器

MCS—51系列有20个专用寄存器.其中4l 6位寄存器。

(1) 程序计数器PC

程序计数器PC用于存放下一条要执行的指今地址(程序存储器地址).是一个l6位专用寄存器,它有自动加1的功能.微处理器用它来指出应该轮到执行的指今。地址。当一条指令按照Pc所指的地址从存储器中取出之后.PC就会自动加1。这意味着加l以后的Pc的内容是下条将要轮到执行的指令地址。所以、PC是维持一个机器有秩序地执行程序的关键性奇存器。应该注意,有些指令代码并不只占一个存储器单元(2字节、3字节).这时PCCPU每次去存储器取一个数(可以是指令第一字节,也可以是该指令的第二宁节、第三字节)时就自动加1。当需要改变程序的执行顺序时.要使用转移指令,由转移指令给出转移后指令的起始地址,将此地址送到程序计数器PC.即从新的转移后起始地址执行,然后程序计数器PC的内容自动加l

(2) 累加器A

累加器A是一个8位寄存器.是CPU中工作最频繁的寄存器。因为在进行算术逻辑类操作时,大部分单操作数指令的操作数取自累加器A,很多双操作数指令的个操作数

取自累加器A。加、减、乘、除算术运算结果都存累加器AAB寄存器对中。

(3) B寄存器

B寄存器是一个8位奇存器.用于存取乘除指令个的操作数。乘法指令的两个操作数分别取自AB,其结果存放干AB寄存器对中。除法指今中.被除数取自A,除数取白B,商数存于A中,余数存于B中。在其它指令中,B寄存器可作为RAM中的一个单元来使用。

(4) 程序状态字

程序状态字〔PSW)是一个8位寄存器,它包含了程序状态信息。此寄存器各位的含

义见图13,其中PSWl是保留恢.未用。

34 程序状态字

1. CY(FSW7):进位标志。在执行某些算术和逻辑指令时,可以被硬件或软件置位或清除。在行尔处理机中,它被认为是位累加器。例如进行二进制加法运算(8位)运算继果超出8位.产生进位.此时置位CY( CY1).以表示二进制加法运算产生了进位。

2. ACPSW 6):辅助进位标志。当进行加法或减法操作时,如果产生低4位数向高4位数进位或借位时,Ac被硬件置1,否则被清0Ac被用于十进制调整。

3. F0(PSW5):标志0。是用户定义的一个状态标记。可以用软件来使它置位或清除,也可以取软件测试F0以控制程序的流向。

4. JRS1RS0(PSW4PSW3):寄存器区选择控制位10。可以靠软件来置位或清除,以确定工作寄存器区。

5. OV(PSW2):溢出标志。当执行算术指令时,内硬件置位或清除.以指示溢出状态。溢出勺进位的概念不间。进位用于表示8位二进制加减法是否产生进位与借位而溢出则主要用于表示有符号二进制数加减法的正确性,OV1表示加减法运算的结果超出了目的寄存器A所能表示的带符号数(128~+127)。例如二进制加法运算+10ll011与+011101相加;

可以看出,该运算第6位向第7位进位.第7位又向进位位进位.但结果正确(1024=-34)

运算中,第6位没有向第7位进位.而第7位向进位位进位,运算结果为正数,显然是错误的(96—123=-219超出-l28)

综上所述.当第6位与第7位同时本向前进位或同时向前进位时,没有溢出,OV0;当第6位与第7位只有一个发生进位,结果溢出,OVl 若以Ci表示放ii1行进位,则:

OVCiC7

MCS5l中,无符号数乘法指令MUL的执行结果也会影响溢出标志。当累加器A和寄存器B的两个乘数的积超过255时,OV1,否则OV0。由于此积的高8位放在B中,低8位放在A中,因此OV0意味著只要从A个取得乘积即可.否则要从AB寄存器对中取得乘积。

除法指令DIV也会影响溢出标志。当除数为0时,OV1,否则OV0

(5)钱指针寄存器5P

它是一个8依的专用寄存器。所谓堆栈是在CPU外部存储器中一个按先进后出原则组织的存储区域。堆栈指针寄存器中的8位二进制数始终等于堆钱的顶部地址值。MCS—5l提供了一个向上升的堆栈,即每向堆栈中推入(可用 Push指令)一个数据(8),堆栈指针的内容加1,指向刚推入数据存放的地址(最后推入的数据存于栈顶),即栈顶地址,再推入(PUSH个数据,堆栈指针的内容再加1、指向新的栈顶地址。同样可用弹出 (POP)指今从堆栈中弹出一个数据.堆栈指针相应减1.指向下数据(钱顶)地址。利用压入和弹出指令,可以把CPU内部寄存器的内容推入堆栈或把堆栈中某单元的内容弹到内部寄存器中。利用堆栈指今可以简化寄存器与存储器之间数据传送的程序。 系统复仿后,SP韧始化为07H,使得堆栈事实上由08H单元开始。MCS—51中栈指针寄存器的值可以由软件改变.因此堆栈在存储器中的位置比较灵活。

(6)其它专用寄存器

除上述的5个专用寄存器外,MCS5l还有数据指针寄存器DPTR,端口寄存器〔P0P1P2P3),串行数据缓冲器(SBUF),定时/汁数器(T0T1).及IPIETMOD/TCONSCONPCON控制奇存器.

3.1.2运算器

运算器包括算术/逻辑部件(ALU)、累加器A、暂存寄存器、程序状态寄存器(PSW),运算器主要用来实现对操作数的算术/逻辑运算和位操作、其功能如下:

带进位和不带进位的加法、减法运算;

逻辑与、逻辑或和逻辑异或;

1、减1和仿操作;

左移位、右移位和半字节移位;

BCD码调整等。

3.1.3控制器

控制器包括定时控制逻辑电路、指令寄存器IR、指令译码器ID等,是微处理器CPU的大脑中枢。

CPU从存储器中取来的指令,首先被送入指令寄存器寄存,使整个分析执行过程一直在该指今控制下。然后.指令寄存器中的指令代码被译码分析成一种或几种电平信号,这些电平信号与外部时钟脉冲在CPU定时与控制电路中组合,形成各种按一定时间节拍变化的电平和脉冲,即是控制信息,在CPU内部协调像寄存器之间的数据传送、数据运算等操作,对外部发出像对存储器读写、输入输出等控制信息。这部分电路的定时由外部振荡器的脉冲所控制.脉冲周期称为时钟周期。每执行某一个指令需要的时间常常是几个甚至几十个时钟周期时间。

3.2光电耦合器介绍

光电耦合器具有体积小、使用寿命长、工作温度范围宽、抗干扰性能强.无触点且输入与输出在电气上完全隔离等特点,因而在各种电子设备上得到广泛的应用.光电耦合器可用于隔离电路、负载接口及各种家用电器等电路中.

电耦合器原理及应用

光电耦合器是以光为媒介传输电信号的一种电一光一电转换器件。它由发光源和受光器两部分组成。把发光源和受光器组装在同一密闭的壳体内,彼此间用透明绝缘体隔离。发光源的引脚为输入端,受光器的引脚为输出端,常见的发光源为发光二极管,受光器为光敏二极管、光敏三极管等等。光电耦合器的种类较多,常见有光电二极管型、光电三极管型、光敏电阻型、光控晶闸管型、光电达林顿型、集成电路型等。

光电耦合器原理及应用

光电耦合器是以光为媒介传输电信号的一种电一光一电转换器件。它由发光源和受光器两部分组成。把发光源和受光器组装在同一密闭的壳体内,彼此间用透明绝缘体隔离。发光源的引脚为输入端,受光器的引脚为输出端,常见的发光源为发光二极管,受光器为光敏二极管、光敏三极管等等。光电耦合器的种类较多,常见有光电二极管型、光电三极管型、光敏电阻型、光控晶闸管型、光电达林顿型、集成电路型等。

工作原理

在光电耦合器输入端加电信号使发光源发光,光的强度取决于激励电流的大小,此光照射到封装在一起的受光器上后,因光电效应而产生了光电流,由受光器输出端引出,这样就实现了电一光一电的转换。 35为光电耦合器件的电路原理图.



35 光电耦合器电路原理图

4硬件电路设计

4.1步进电机的驱动电路

步进电机又称为脉冲电动机,是数字控制系统中的一种执行元件。其功能是将脉冲电信号转变为相应的角位移或直线位移,即给一个脉冲电信号,电动机就转动一个角度或前进一步。近几十年来,数字技术和电子计算机的迅速发展为步进电机的应用开辟了广阔的前景。目前,我国已较多地将步进电机用于机械加工的数控机床中。在以往的转速表测试中,常用直流电机和锁相环组成电机调速系统。直流电机仿真发动机涡轮轴的转动,通过测量直流电机的转速来测试转速表工作是否正常。由于锁相环在调速过程中存在转速漂移和累积误差等因素,故在转速表测试的全量程范围内,其测试精度不高,测试的结果可信度差。

使用步进电机的运动系统由步进电机驱动器和步进电机构成。当系统接受一个电脉冲信号时,步进电机的转轴将转过一定的角度或移动一定的直线距离。电脉冲输入越多,电机转轴转过的角度或直线位移就越多;同时,输入电脉冲的频率越高,电机转轴的转速或位移速度就越快。步进电机控制的最大特点是没有积累误差(精度为100%)。因此,将步进电机应用于精确的转角控制是非常有用的。

4—1 电压隔离接口

单片机输出的信号通过TTL门电路或直接送到一个晶体管的基极.再由晶体管驱动光电耦合器件的发光二极管。发光二极管的光照到光电耦合器件的内部光敏管上.又转换成电信号。再去驱动步进电机的功率放大电路。

典型的电压隔离接口4—1所示。其中晶体管T1是光电耦合器中发光二极管的驱动管,晶体管T2是光电耦合器中光敏二极管的电流放大管。当单片机输出一个正脉冲信号时,则由I/O线Pl送入7404中,由7404反相之后成为低电平脉冲。因此晶体管T1截止。+5v电源通过R2对光电耦合器OT中的发光二极管供电,则二极管发光.OT中的光敏三极管导通.从而使晶体管T2导通、V输出高电平.并送到步进电机的电流放大极。

42 电流放大接口

42 为步进电机输入口的电流放大接口电流放大接口是步进电机功放电路的前置放大电路。它的作用是为了把光电耦合器的输出信号进行电流放大.以便向功放电路提供足够大的驱动电流。

4.2显示电路

5软件电路设计

5.1步进电机的控制方式

步进电机采用的是四项步进电机,转子齿数为50,实行四项单四拍运行,即四项步进电机有ABCD四项。

有三种节拍方式:

1:ABCDA;

2:ABBCCDDAAB;

3:ABCBCDCDADABABC;

四项步进电机采用的转子齿数是50,所以齿距角为360°/50=7.2°。三种方式的步进角都相同.当输入步进电机工作一个周期的脉冲信号时,步进电机的步进角为:7.2°/4=1.8°。因此说此步进电机可以做转角为1.8°及1.8°整数倍的动作,所以此步进电机控制有较高的精度。而步进电机的四项输入控制信号有AT89C51单片机的P1.0P1.3引脚输出。

对于步进电机而言,用方式3可以提高步进电机的转矩,因此可以提高步进电机的带负载能力,并且矩角特性形状相同,这对步进电机运行的稳定性是非常有利的。

三种方式的C语言子程序分别为:

方式1

void run()

{

switch(cnt)

{

case 0:P2=0xf1; break; //11110001

case 1:P2=0xf2; break; //11110010

case 2:P2=0xf4; break; //11110100

case 3:P2=0xf8; break; //11111000

default: break;

}

++cnt;

if(cnt==4)cnt=0;

}

当采用方式1是,在proteus软件上模拟,用逻辑分析仪显示分别为A_B_C_D四项的结果43

43

方式2

void run()

{

switch(cnt)

{

case 0:P2=0xf3; break; //11110011

case 1:P2=0xf6; break; //11110110

case 2:P2=0xfc; break; //11111100

case 3:P2=0xf9; break; //11111001

default: break;

}

++cnt;

if(cnt==4)cnt=0;

}

当采用方式2是,在proteus软件上模拟,用逻辑分析仪显示分别为A_B_C_D四项的结果44

44

方式3

void run()

{

switch(cnt)

{

case 0:P2=0xf3; break; //11110111

case 1:P2=0xf6; break; //11111110

case 2:P2=0xfc; break; //11111101

case 3:P2=0xf9; break; //11111011

default: break;

}

++cnt;

if(cnt==4)cnt=0;

}

当采用方式3是,在proteus软件上模拟,用逻辑分析仪显示分别为A_B_C_D四项的结果45

45

结论:

对于步进电机而言,用方式3可以提高步进电机的转矩,因此可以提高步进电机的带负载能力,并且矩角特性形状相同,这对步进电机运行的稳定性是非常有利的。所以本次设计采用的是方式3进行对单片机的控制。

5.2进行步进电机控制的C语言源程序

编写C语言源程序的工具为Keil C编译软件:

程序结构图如下:

45 步进电机控制流程图

6.系统功能、指标测试

此系统的设计达到了最初的系统设计要求,此系统可以完成对大功率步进电机的精确控制,不仅可以精确的输入要求步进电机需要完成的步进角的数目,此数目可以通过单片机的外部中断0,当有按键按下时,单片机扫描按键的值,从而确定数目的增一还是减一,而且这些过程都在由单片机P0引脚控制的LED所显示出来,这样增加控制时的直观感,且不易出错。当步进电机工作时,美完成一个步进角,LED所显示的十进制数将减一,这样可以直观的感受到步进电机任务完成状况,这种方式特别适用与不能直接观测到步进电机的工作场合。系统的这些功能在PROTEUS仿真软件中模拟成功。此系统的另一个功能就时用光电耦合电路进行电压隔离,这样不仅防止了步进电机工作时所产生的磁场对控制电路的干扰,也可以在光电耦合器的另一端设计一个电流放大电路,这种方式特别适用于对于大功率步进电机的驱动控制,系统的这种功能也在PROTEUS仿真软件中模拟成功。总而言之,本次设计是成功的,完全达到了最初的设计要求。

7设计总结

课程设计是课程教学的最后一个环节,是对学生进行全面的系统的训练。进行课程设计可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深一步学习的热情,因此课程设计是必不少的,是非常必要的。

一个好的设计不仅要用到所学的知识,应该在所学的知识中进行扩展,这就需要我们拥有一定的自学能力,对于不懂的,不清楚的,可以及时的请教老师、同学,或者网上查找资料、或者到图书馆翻阅书籍。因为大学就是需要培养一个人的自学能力,在以后的生活道路中,或许你从事本专业的工作或者不从事本专业的工作,都需要你有较强的自学能力,不断的更新自己的知识,跟上时代的步伐,这样才能在以后的事业、生活中才不会被淘汰。

8.致谢词

首先感谢靳斌老师给我的指导。在设计和论文写作过程中,我始终得到老师的悉心教导和认真指点,使得我的理论知识和动手操作能力都有了提高。在他身上,时刻体现着作为科研工作者所特有的严谨求实的教学风范,勇于探索的工作态度和求同思变、不断创新的治学理念。他不知疲倦的敬业精神和精益求精的治学要求,端正了我的学习态度,使我受益匪浅。

最后,感谢所有给予我关心和支持的老师和同学。

9参考文献

[1] 张毅刚,单片机原理及应用[M],高等教育出版社,2003.12

[2] 谢自美,电子线路设计、实验、测试[M],华中科技大学出版社,2002.07

[3] 康华光,电子技术基础(模拟部分)[M],高等教育出版社,2003.03

[4] 康华光,电子技术基础(数字部分)[M],高等教育出版社,2003.03

[5]林红, 数字电路与逻辑设计[M],清华大学出版社,2004.07

附录一:电路原理图

附录二:C语言源程序

//==================================

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

//基于AT89C51单片机的步进电机的控制-----C语言程序

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

//==================================

#define uchar unsigned char

#define uint unsigned int

#include

uchar cnt=0,a=0;

//cnt为当前步进电机处于什么样的脉冲之下,a表示此时LED显示的数据,

uchar duanma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,

0x88,0x83,0xC6,0xA1,0x86,0x8E};

//LED显示的09A~F

char keyscan();

void run(char);

void delay(char);

char key; //表示返回按键的值,向上键按下为1,向下键按下值为2

//==================================

//主函数

//==================================

void main(void)

{

TMOD=0x21;

EA=1;

EX0=1;

//开外部中断X0,X1

EX1=1;

IT0=1;

//外部中断都是负跳沿触发

IT1=1;

TR0=1;

while(1)

{

P0=duanma[a];

//P0口输出LED显示的内容,为十进制

}

}

//==================================

//调用此函数一次,步进电机转动一个角度

//==================================

void run()

{

switch(cnt)

{

case 0:P2=0xf3; break; //00000111

case 1:P2=0xf6; break; //00001110

case 2:P2=0xfc; break; //00001101

case 3:P2=0xf9; break; //00001011

default: break;

}

++cnt;

if(cnt==4)cnt=0;

}

//==================================

//外部中断0,用于设置LED的值,用LED的值来控制步进电机转多少个步进角

//==================================

void int_0() interrupt 0

{

key=keyscan();

if(key==1)

{

a++;

if(a==10) a=0;

}

if(key==2)

{

a--;

if(a==0xff) a=9;

}

}

//==================================

//外部中断1,当输入完需要步进电机转多少个步进角时,当按键按下,步进电机工作

//==================================

void int_1() interrupt 2

{

for(;a>0;a--)

{

P0=duanma[a];

delay(50);

run();

}

}

//==================================

//键盘扫描子程序

//==================================

char keyscan()

{

char key_value;

key_value=0;

if(P1^1==0)

{

delay(10);

if(P1^1==0)

key_value=2;

}

if(P1^0==0)

{

delay(10);

if(P1^0==0)

key_value=1;

}

else key_value=0;

return key_value;

}

//==================================

//延时子程序

//==================================

void delay(char i)

{

unsigned char j;

for (;i>0;i--)

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

}

本文来源:https://www.2haoxitong.net/k/doc/af146a6d964bcf84b9d57bca.html

《毕业设计90西华大学课程设计说明书.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式