学习任务:
学会使用步进电机
组件:
- Arduion主板
- 步进电机
- ULN2003达林阵列驱动
- USB数据线
下图是步进电机和ULN2003达林阵列驱动
实验步骤:
1.建立电路
| Arduion | 步进电机 |
|---|---|
| 7 | out |
| GND | GND |
| 5v | vcc |
| Arduion | ULN2003达林阵列驱动 |
|---|---|
| 11 | IN1 |
| 10 | IN2 |
| 9 | IN3 |
| 8 | IN4 |
2.烧录代码
const int IN1=11;
const int IN2=10;
const int IN3=9;
const int IN4=8;
//正转顺序
const char tab1[] =
{
0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08, 0x09
};
//反转的顺序
const char tab2[] =
{
0x01, 0x09, 0x08, 0x0c, 0x04, 0x06, 0x02, 0x03
};
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
ctlStepMotor(360, 1);
StepMotorStop();
delay(1000);
ctlStepMotor(-360, 1);
StepMotorStop();
delay(1000);
}
void ctlStepMotor(int angle, char speeds )
{
for (int j = 0; j < abs(angle) ; j++)
{
if (angle > 0)
{
for (int i = 0; i < 8; i++)
{
digitalWrite(IN1, ((tab1[i] & 0x01) == 0x01 ? true : false));
digitalWrite(IN2, ((tab1[i] & 0x02) == 0x02 ? true : false));
digitalWrite(IN3, ((tab1[i] & 0x04) == 0x04 ? true : false));
digitalWrite(IN4, ((tab1[i] & 0x08) == 0x08 ? true : false));
delay(speeds);
}
}
else
{
for (int i = 0; i < 8 ; i++)
{
digitalWrite(IN1, ((tab2[i] & 0x01) == 0x01 ? true : false));
digitalWrite(IN2, ((tab2[i] & 0x02) == 0x02 ? true : false));
digitalWrite(IN3, ((tab2[i] & 0x04) == 0x04 ? true : false));
digitalWrite(IN4, ((tab2[i] & 0x08) == 0x08 ? true : false));
delay(speeds);
}
}
}
}
void StepMotorStop()
{
digitalWrite(IN1, 0);
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 0);
}
3.实验现象
步进电机转动
版权声明:本文为qq_40247570原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。