下面上一些代码,是没有用任何库的.
仅仅是将步进点击链接到arduino不同的8, 9, 10 , 11口上的
Arduino 控制步进电机-06-11 12:44:44原帖:/uid-23686726-id-3238613.html代码让我给改了改, 还是推荐装个motor shield吧.不然这样折腾 单片机肯定是不撑的.看样子是4步8相的.具体4步8相是啥,请看我上篇博客:/spaceship9/archive//04/10/3012552.html
分类: 嵌入式
int Pin0 = 8;int Pin1 = 9;int Pin2 = 10;int Pin3 = 11;int _step = 0;boolean dir = true;//正反转的 flagint 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-/forum.php?mod=viewthread&tid=101
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的 方向转动一个固定的角度(及步进角)。你可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时你也可以通过控制脉冲频率来控制电机转动的速 度和加速度,从而达到调速的目的。
下面这个就是本次实验使用的步进电机
工业使用的步进电机与本次实验使用的不同,下面图式两种不同款式的工业用步进电机
使用步进电机前一定要仔细查看说明书,确认是四相还是两相,各个线怎样连接,本次实验使用的步进电机是四相的,不同颜色的线定义如下图:
下面是电机的端口结构图,1,3为一组,2,4为一组,5号是共用的VCC。
因本次使用的步进电机功率很小,所以可以直接使用一个ULN芯片进行驱动,如果是大功率的步进电机,是需要对应的驱动板的。
ULN 是高耐压、大电流复合晶体管阵列,由七个硅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;}
电流芯片文档下载地址:
/lit/ds/symlink/ulna.pdf
如果觉得《Arduino 各种模块篇 步进电机 step motor( 不用库 不用shield 纯)》对你有帮助,请点赞、收藏,并留下你的观点哦!