1、用到的硬件设备以及最终实验效果
用到一个5V直流步进电机(28BYJ-48),然后一块对应的电机驱动(主芯片是ULN2003A),一个Arduino UNO开发板。我们最终实现的效果是,在Matlab GUI界面上输入想让电机正转(反转)的角度,执行程序之后,电机开始转动。
2、Arduino部分程序
驱动电机利用的是Arduino的库函数,使用起来十分简单。然后利用串口接收Matlab发送的字符,接收到相应字符之后就执行对应的命令。
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//使用arduino IDE自带的Stepper.h库文件
#include <Stepper.h>
// 这里设置步进电机旋转一圈是多少步
#define STEPS 100
int flag=0;//电机正反转标志,默认情况下正转
char key;
//设置步进电机的步数和引脚(就是驱动板上IN1~IN4连接的四个数字口)。
Stepper stepper(STEPS, 8, 9, 10, 11);
void setup()
{
Serial.begin(9600);//设置波特率
// 设置电机的转速:每分钟为90步
stepper.setSpeed(90);
}
void stopmotor()
{
digitalWrite(8,0);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,0);
}
void loop()
{
key=Serial.read();
delay(10);// 加个延时可能会好一点,这样可以保证读完所有数据。
switch(key)
{
case 'Z':flag=1;break;
case 'F':flag=0;break;
case '1':
if(flag==1) //4步模式下旋转一周用2048 步,所以45°是256步
{
stepper.step(256*1);
stopmotor();
}
else if(flag==0)
{
stepper.step(-256*1);
stopmotor();
}
break;
case '2':
if(flag==1)
{
stepper.step(256*2);
stopmotor();
}
else if(flag==0)
{
stepper.step(-256*2);
stopmotor();
}
break;
case '3':
if(flag==1)
{
stepper.step(256*3);
stopmotor();
}
else if(flag==0)
{
stepper.step(-256*3);
stopmotor();
}
break;
case '4':
if(flag==1)
{
stepper.step(256*4);
stopmotor();
}
else if(flag==0)
{
stepper.step(-256*4);
stopmotor();
}
break;
case '5':
if(flag==1)
{
stepper.step(256*5);
stopmotor();
}
else if(flag==0)
{
stepper.step(-256*5);
stopmotor();
}
break;
case '6':
if(flag==1)
{
stepper.step(256*6);
stopmotor();
}
else if(flag==0)
{
stepper.step(-256*6);
stopmotor();
}
break;
case '7':
if(flag==1)
{
stepper.step(256*7);
stopmotor();
}
else if(flag==0)
{
stepper.step(-256*7);
stopmotor();
}
break;
case '8':
if(flag==1)
{
stepper.step(256*8);
stopmotor();
}
else if(flag==0)
{
stepper.step(-256*8);
stopmotor();
}
break;
default:
break;
}
}
3、Matlab的GUI界面
需要注意的是,我们输入的角度必须是45°的整数倍,因为Arduino程序里面电机转360°是2048步,转45°步数不会出现小数的情况,否则不精确。
4、Matlab代码
首先在xx_OpeningFcn()函数里面初始化:
global a;
a=serial(‘COM9’);
set(a,’BaudRate’,9600);
set(a,’DataBits’,8);
set(a,’StopBits’,1);
fopen(a);
然后是正转按钮的回调函数:
global a;
fprintf(a,’Z’);
反转按钮的回调函数:
global a;
fprintf(a,’F’);
开始按钮的回调函数:
global a;
global angle;
if angle==45
fprintf(a,’1’);
else if angle==90
fprintf(a,’2’);
else if angle==135
fprintf(a,’3’);
else if angle==180
fprintf(a,’4’);
else if angle==225
fprintf(a,’5’);
else if angle==270
fprintf(a,’6’);
else if angle==315
fprintf(a,’7’);
else if angle==360
fprintf(a,’8’);
end
end
end
end
end
end
end
end
连接外围电路,运行Matlab代码——实验成功。
最后
以上就是动人白开水最近收集整理的关于Arduino学习笔记(四)Matlab串口控制Arduino转动电机的全部内容,更多相关Arduino学习笔记(四)Matlab串口控制Arduino转动电机内容请搜索靠谱客的其他文章。
发表评论 取消回复