【Proteus仿真】L297驱动步进电机

【Proteus仿真】L297驱动步进电机


  • Proteus仿真
    在这里插入图片描述

L297引脚功能简介

在这里插入图片描述

  • 1 脚(SYNG)——斩波器输出端。如多个 297 同步控制,所有的 SYNC 端都要连在一起,共用一套振荡元件。如果使用外部时钟源,则时钟信号接到此引脚上。
  • 2 脚(GND)——接地端。
  • 3 脚(HOME)——集电极开路输出端。当 L297 在初始状态(ABCD=0101)时,此端有指示。当此引脚有效时,晶体管开路。
  • 4 脚(A)——A 相驱动信号。
  • 5 脚(

INH1

\overline{\text{INH1}}

INH1)——控制 A 相和 B 相的驱动极。当此引脚为低电平时,A 相、B 相驱动控制被禁止;当线圈级断电时,双极性桥用这个信号使负载电源快速衰减。若 CONTROL 端输入是低电平时,用斩波器调节负载电流。

  • 6 脚(B)——B 相驱动信号。
  • 7 脚©——C 相驱动信号。
  • 8 脚(

INH2

\overline{\text{INH2}}

INH2)——控制 C 相和 D 相的驱动级。作用同 INH1 相同。

  • 9 脚(D)——D 相驱动信号。
  • 10 脚(ENABLE)——L297 的使能输入端。当它为低电平时,INH1,INH2,A,B,C,D 都为低电平。当系统被复位时用来阻止电机驱动。
  • 11 脚(CONTROL)——斩波器功能控制端。低电平时使INH1和INH2起作用,高电平时使 A,B,C,D 起作用。
  • 12 脚(Vcc)——+5V 电源输入端。
  • 13 脚(SENS2)——C 相、D 相绕组电流检测电压反馈输入端。
  • 14 脚(SENS1)——A 相、B 相绕组电流检测电压反馈输入端。
  • 15 脚(Vref )——斩波器基准电压输入端。加到此引脚的电压决定绕组电流的峰值。
  • 16 脚(OSC)——斩波器频率输入端。一个 RC 网络接至此引角以决定斩波器频率,在多个 L297 同步工作时其中一个接到 RC 网络,其余的此引角接地,各个器件的脚 I (SYNC)应连接到一起这样可杂波的引入问题如图 5 所示。
  • 17 脚(CW/

CCW

\overline{\text{CCW}}

CCW)—方向控制端。步进电机实际旋转方向由绕组的连接方法决定。当改变此引脚的电平状态时,步进电机反向旋转。

  • 18 脚(CLOCK)——步进时钟输入端。该引脚输入负脉冲时步进电机向前步进一个增量,该步进是在信号 的上升沿产生。
  • 19 脚(HALF/

FULL

\overline{\text{FULL}}

FULL)——半步、全步方式 选择端。此引脚输入高电平时为半步方式(四相八拍),低电平时为全步方式。如选择全步方式时变换器在奇数状态,会得到单相工作方式(单四拍)。

  • 20 脚(

RESET

\overline{\text{RESET}}

RESET)——复位输入端。此引脚输入负脉冲时,变换器恢复初始状态 (ABCD=0101)。

工作原理

  • L297 驱动相序的产生

L297 能产生单四拍、双四拍和四相八拍工作所需的适当相序。3 种方式的驱动相序都可以很容易地根据变换器输出的格雷码的顺序产生,格雷码的顺序直接与四八拍(半步方式)相符合 ,只要在脚 19 输入一高电平即可得到.

  • 通过交替跳过在八步顺序中的状态就可以得到全步工作方式,此时需在脚 19 接一低电平,前已述及根据变换器的状态可得到四拍或双四拍 2 种工作模式

仿真说明

注意L297的输出引脚接步进电机的相序,与其他的驱动相序有所差异,如果相序不是按照此接法,仿真时,电机是正反一定角度的摆动效果,而不是做圆周运动的效果。

程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
L297驱动步进电机
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
控制位定义
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/

sbit shi_neng=P2^0; // 使能控制位
sbit fang_shi=P2^1; // 工作方式控制位,半步、全步方式 选择端。此引脚输入高电平时为半步方式(四相八拍),
//低电平时为全步方式。如选择全步方式时变换器在奇数状态,会得到单相工作方式(单四拍)。
sbit fang_xiang=P2^2;// 旋转方向控制位
sbit mai_chong=P2^3; // 脉冲控制位

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
延时函数
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
void delay(uint i)//延时函数
{
uchar j,k;
for(j=0;j<i;j++)
for(k=0;k<250;k++);
}

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
延时函数
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/

void main()
{
shi_neng=1; // 使能控制位
fang_shi=0; // 工作方式控制位,高电平时为半步方式(四相八拍),低电平时为全步方式
fang_xiang=1;// 旋转方向控制位
mai_chong=1; // 脉冲控制位

while(1)
{
mai_chong=~mai_chong; //输出时钟脉冲
delay(15); //延时 (括号内数值越小,电机转动速度越快)
}
}


仿真资源和程序源码

本示例基于Proteus8.12平台。

1
2
3
链接:https://pan.baidu.com/s/1-EAthEFP\_O7cM3xziU1MUg 
提取码:mnlm


活在当下,别在怀念过去或者憧憬未来中浪费掉你现在的生活