DIY 机器人 | Arduino 电子积木 |
面包板 | 面包线/杜邦线 | 接线座/卡座 |
高级语言编程控制模块 | Arduino | mbed | Raspberry Pi | PCduino |
功放系列 | 功放aptX系列 | 配件 | 模块 |
433M 无线开发套件 | 2.4G 无线开发套件 | zigbee 开发套件 | 无线定位开发套件 | tinyos 开发套件 | RFID 开发套件 |
超声波传感器 | 红外传感器 | 视觉传感器 | 加速度/陀螺仪 | 电子罗盘指南针 | 压力传感器 | 激光传感器 | 声音传感器 | 温度湿度传感器 | 光线传感器 | 应变传感器 | 颜色传感器 | 弯曲传感器 | 脉冲计数编码器 | 惯性导航/无人机平台 | 气压传感器 | 气体传感器 | 其它传感器 |
USB-TTL 模块 | RS232-TTL 模块 | zigbee/xbee 无线模块 | 433M无线模块 | GPS模块 | 蓝牙模块 | WiFi 无线模块 |
胶套天线 | 陶瓷天线 | 天线联接器 |
步进电机 | 直流电机 | 伺服电机(舵机) |
太阳能电池 | 电池盒 | 充电电池 | DC电源 |
排母 | 排针 | 线缆 |
包装材料 | 焊接工具 |
步进电机是一个很酷的东西,在自动化系统中普遍应用,它可以精确的转到某个你指定的角度,这篇文章我们介绍一下我们的EasyDriver 步进电机驱动板的使用方法及程序代码。
步进电机通常定义有步距角或者步数参数,一般的电机一转都是分为200步,也就是步距角为1.8度,EasyDriver 具有步距细分功能,这款驱动板的细分为8细分,也就是将电机的每一步再细分为8小步,这样能够能够得到更精确的控制,也就是说EasyDriver 需要1600步来完成一个完整的360度旋转。接下来,让我们来进行一个测试实验。
实验硬件:
实验硬件:
EasyDriver 步进电机驱动板 X1;
arduino UNO控制板 X1;
DC12V电源(取决于电机工作电压) X1;
杜邦线若干;
实验硬件连接图:
1.连接电机与EasyDriver
步进电机有4根线,分为A相和B相,其内部为两个线圈,用万用表的通断档可以测出,确定好之后分别接到EasyDriver 的电机脚。
2.连接arduino 控制板与EasyDriver
3.下载测试代码
打开arduino IDE,将以下代码复制进去,编译下载到UNO板中
代码:
#define DIR_PIN 2
#define STEP_PIN 3
void setup() {
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
}
void loop(){
//rotate a specific number of degrees
rotateDeg(360, 1);
delay(1000);
rotateDeg(-360, .1); //reverse
delay(1000);
//rotate a specific number of microsteps (8 microsteps per step)
//a 200 step stepper would take 1600 micro steps for one full revolution
rotate(1600, .5);
delay(1000);
rotate(-1600, .25); //reverse
delay(1000);
}
void rotate(int steps, float speed){
//rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (steps > 0)? HIGH:LOW;
steps = abs(steps);
digitalWrite(DIR_PIN,dir);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}
void rotateDeg(float deg, float speed){
//rotate a specific number of degrees (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(DIR_PIN,dir);
int steps = abs(deg)*(1/0.225);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}
4.接上DC12V电源
5.电机正常动作,下图可以看到小旗子在快速的旋转
至此,整个测试完毕,详细的有关EasyDriver的资料,请进我们的产品页面下载。