【Proteus仿真】Arduino UNO+ uln2003驱动步进电机+按键启保停控制

【Proteus仿真】Arduino UNO+ uln2003驱动步进电机+按键启保停控制


  • Proteus演示
    在这里插入图片描述
  • 功能说明

加减速采用外部中断引脚2和3实现调速控制,调速方位,110-250,也就是代码中的delay(Speed)中的参数,IO4控制启动和停止。

程序源码

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93

#define LED ( 13 )
#define MOTOR\_PIN0 ( 8 )
#define MOTOR\_PIN1 ( 9 )
#define MOTOR\_PIN2 ( 10 )
#define MOTOR\_PIN3 ( 11 )
#define KEY ( 4 )
static unsigned char Speed = 110;//初始速度值
unsigned char keyFlag = 0 ;//按键状态
void Add()
{
Speed +=10;
if(Speed > 250) Speed =250;//最大值
}
void Sub()
{
Speed -=10;
if(Speed < 100) Speed =110;//最小值
}

void setup()
{
pinMode( LED, OUTPUT );
pinMode( MOTOR_PIN0, OUTPUT );
pinMode( MOTOR_PIN1, OUTPUT );
pinMode( MOTOR_PIN2, OUTPUT );
pinMode( MOTOR_PIN3, OUTPUT );
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(KEY, INPUT_PULLUP);
attachInterrupt(0, Add, FALLING); //外部中断号 0,接引脚IO 2,触发方式:高电平变为低电平触发(下降沿触发)
attachInterrupt(1, Sub, FALLING); //外部中断号 1,接引脚I0 3,触发方式:高电平变为低电平触发(下降沿触发)
}

void loop()
{
static unsigned char i = 0;
unsigned char ButtonState = digitalRead(KEY);
if(ButtonState == 0){//检测到有按键按下
delay(10);//消抖处理
if(ButtonState == 0){//确认按键被按下
keyFlag = 1 - keyFlag ;
while(!digitalRead(KEY));//等待按键被释放抬起
}
}
if(keyFlag){ //这里可以填写控制代码

switch( i++ )//这里改成i--就是反转
{
case 0:
digitalWrite( MOTOR_PIN0, HIGH );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, HIGH );
break;
case 1:
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, HIGH );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, LOW );
break;
case 2:
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, HIGH );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, HIGH );
break;
case 3:
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, HIGH );
digitalWrite( LED, LOW );
break;
default:
break;
}
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
i %=4;

}else{
//这里可以填写其他控制代码
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, HIGH );
}
}

程序源码和仿真资源

1
2
3
链接:https://pan.baidu.com/s/1XFfhjHvZedBD5S\_0J6-G4g 
提取码:vgy5


做人也要像蜡烛一样, 在有限的一生中有一分热发一分光, 给人以 光明, 给人以温暖。 —— 萧楚女