Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
下面上一些代码,是没有用任何库的.
仅仅是将步进点击链接到arduino不同的8, 9, 10 , 11口上的
分类: 嵌入式
int Pin0 = 8; int Pin1 = 9; int Pin2 = 10; int Pin3 = 11; int _step = 0; boolean dir = true;//正反转的 flag int stepperSpeed = 1;//电机转速,1ms一步 void setup() { pinMode(Pin0, OUTPUT); pinMode(Pin1, OUTPUT); pinMode(Pin2, OUTPUT); pinMode(Pin3, OUTPUT); } //用下面的代码仿照PWM输出,看看类不累..哈哈.._step 从0 加到7 再变成0, 就这样一直循环下去. void loop() { switch(_step){ case 0: digitalWrite(Pin0, LOW); digitalWrite(Pin1, LOW); digitalWrite(Pin2, LOW); digitalWrite(Pin3, HIGH); break; case 1: digitalWrite(Pin0, LOW); digitalWrite(Pin1, LOW); digitalWrite(Pin2, HIGH); digitalWrite(Pin3, HIGH); break; case 2: digitalWrite(Pin0, LOW); digitalWrite(Pin1, LOW); digitalWrite(Pin2, HIGH); digitalWrite(Pin3, LOW); break; case 3: digitalWrite(Pin0, LOW); digitalWrite(Pin1, HIGH); digitalWrite(Pin2, HIGH); digitalWrite(Pin3, LOW); break; case 4: digitalWrite(Pin0, LOW); digitalWrite(Pin1, HIGH); digitalWrite(Pin2, LOW); digitalWrite(Pin3, LOW); break; case 5: digitalWrite(Pin0, HIGH); digitalWrite(Pin1, HIGH); digitalWrite(Pin2, LOW); digitalWrite(Pin3, LOW); break; case 6: digitalWrite(Pin0, HIGH); digitalWrite(Pin1, LOW); digitalWrite(Pin2, LOW); digitalWrite(Pin3, LOW); break; case 7: digitalWrite(Pin0, HIGH); digitalWrite(Pin1, LOW); digitalWrite(Pin2, LOW); digitalWrite(Pin3, HIGH); break; default: digitalWrite(Pin0, LOW); digitalWrite(Pin1, LOW); digitalWrite(Pin2, LOW); digitalWrite(Pin3, LOW); break; } if(dir){ _step++; }else{ _step--; } if(_step>7){ //请注意,这边_step> 7的时候,已经是在上面的那个判断里面从7加到8了.但是, 最后一次执行的时候,还是7 !!! _step=0; //所以这里变成0 是必须的. } if(_step<0){ //同理 _step=7; } delay(stepperSpeed); //电机休息一下,用来调速用的. }
这里,还转了一些别人做过的一些实验. 对步进电机介绍的比较详细:
原帖地址:http://www.geek-workshop.com/forum.php?mod=viewthread&tid=101
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的 方向转动一个固定的角度(及步进角)。你可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时你也可以通过控制脉冲频率来控制电机转动的速 度和加速度,从而达到调速的目的。
下面这个就是本次实验使用的步进电机
工业使用的步进电机与本次实验使用的不同,下面图式两种不同款式的工业用步进电机
使用步进电机前一定要仔细查看说明书,确认是四相还是两相,各个线怎样连接,本次实验使用的步进电机是四相的,不同颜色的线定义如下图:
下面是电机的端口结构图,1,3为一组,2,4为一组,5号是共用的VCC。
因本次使用的步进电机功率很小,所以可以直接使用一个ULN2003芯片进行驱动,如果是大功率的步进电机,是需要对应的驱动板的。
ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。可以用来驱动步进电机。
其结构图如下
硬件连接图如下
把代码下载到arduino控制板中看看效果
/* * 步进电机跟随电位器旋转 * (或者其他传感器)使用0号模拟口输入 * 使用arduino IDE自带的Stepper.h库文件 */ #include <Stepper.h> // 这里设置步进电机旋转一圈是多少步 #define STEPS 100 // attached to设置步进电机的步数和引脚 Stepper stepper(STEPS, 8, 9, 10, 11); // 定义变量用来存储历史读数 int previous = 0; void setup() { // 设置电机每分钟的转速为90步 stepper.setSpeed(90); } void loop() { // 获取传感器读数 int val = analogRead(0); // 移动步数为当前读数减去历史读数 stepper.step(val - previous); // 保存历史读数 previous = val; }
电流芯片文档下载地址:
http://www.ti.com/lit/ds/symlink/uln2003a.pdf