Post by 邱老师 on Jan 2, 2021 15:36:05 GMT
已更新nano教程,视频链接
无库步进电机代码:
接线:D8到D11口接到开发板上的J42插座a,b,c,d四个接口
a、b、c、d、分别接8、10、9、11
步进电机驱动原理
28BYJ-48电机原理
Arduino 与28BYJ-48步进电机两次握手
步进电机名称的由来
以下代码为四相八步驱动方法
无库步进电机代码:
接线:D8到D11口接到开发板上的J42插座a,b,c,d四个接口
void setup()
{
for(int i=8;i<12;i++) //用一个循环,把8到11四个连接步进电机的数字口的工作方式设置为输出
{
pinMode(i,OUTPUT);
}
}
void loop()
{
for(int i=8;i<12;i++) //利用循环程序,把四根连接步进电机的信号口,依次写高电平,延迟5毫秒,再写低电平,每一次高低电平的变化,都能驱动电机转过一
//定的角度,连续进行,电机就转动起来了。
{
digitalWrite(i,1);
delay(5);
digitalWrite(i,0);
}
}
a、b、c、d、分别接8、10、9、11
#include <Stepper.h>
const int stepsPerRevolution = 200; // 电机旋转一周需要的步数,这个数值在电机生产时就设计好的,是固定的,不同的电机,步数可能不同
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // 设置步进电机与arduino的连接口,
void setup() {
myStepper.setSpeed(60); // 设置步进电机的速度
Serial.begin(9600);
}
void loop() {
// step one revolution in one direction:
Serial.println("clockwise");
myStepper.step(stepsPerRevolution); //驱动电机
delay(500);
// step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution); //反向驱动电机
delay(500);
}
拓展阅读:步进电机驱动原理
28BYJ-48电机原理
Arduino 与28BYJ-48步进电机两次握手
步进电机名称的由来
以下代码为四相八步驱动方法
#define A1 8 //引脚命名
#define B1 9
#define C1 10
#define D1 11
void setup()
{
pinMode(A1,OUTPUT); //设置引脚为输出引脚
pinMode(B1,OUTPUT);
pinMode(C1,OUTPUT);
pinMode(D1,OUTPUT);
digitalWrite(A1,LOW);
digitalWrite(B1,LOW);
digitalWrite(C1,LOW);
digitalWrite(D1,LOW);
}
void loop()
{
for (int i = 0; i< 124; i++) {
shun();
}
delay(1000);
for (int j = 0; j < 124; j++) {
ni();
}
}
void ni()
{
Phase_A(); //设置A相位
delay(5); //改变延时可改变旋转速度
Phase_AB(); //设置AB相位
delay(5); //改变延时可改变旋转速度
Phase_B(); //设置B相位
delay(5);
Phase_BC(); //设置BC相位
delay(5);
Phase_C(); //设置C相位
delay(5);
Phase_CD(); //设置CD相位
delay(5);
Phase_D(); //设置D相位
delay(5);
Phase_DA(); //设置DA相位
delay(5);
}
void shun()
{
Phase_D(); //设置D相位
delay(5); //改变延时可改变旋转速度
Phase_CD(); //设置CD相位
delay(5); //改变延时可改变旋转速度
Phase_C(); //设置c相位
delay(5);
Phase_C(); //设置c相位
delay(5);
Phase_B(); //设置B相位
delay(5);
Phase_AB(); //设置AB相位
delay(5);
Phase_A(); //设置A相位
delay(5);
Phase_DA(); //设置DA相位
delay(5);
}
void Phase_A()
{
digitalWrite(A1,HIGH); //A1引脚高电平
digitalWrite(B1,LOW);
digitalWrite(C1,LOW);
digitalWrite(D1,LOW);
}
void Phase_AB()
{
digitalWrite(A1,HIGH); //A1引脚高电平
digitalWrite(B1,HIGH);
digitalWrite(C1,LOW);
digitalWrite(D1,LOW);
}
void Phase_B()
{
digitalWrite(A1,LOW);
digitalWrite(B1,HIGH); //B1引脚高电平
digitalWrite(C1,LOW);
digitalWrite(D1,LOW);
}
void Phase_BC()
{
digitalWrite(A1,LOW);
digitalWrite(B1,HIGH); //B1引脚高电平
digitalWrite(C1,HIGH);
digitalWrite(D1,LOW);
}
void Phase_C()
{
digitalWrite(A1,LOW);
digitalWrite(B1,LOW);
digitalWrite(C1,HIGH); //C1引脚高电平
digitalWrite(D1,LOW);
}
void Phase_CD()
{
digitalWrite(A1,LOW);
digitalWrite(B1,LOW);
digitalWrite(C1,HIGH); //C1引脚高电平
digitalWrite(D1,HIGH);
}
void Phase_D()
{
digitalWrite(A1,LOW);
digitalWrite(B1,LOW);
digitalWrite(C1,LOW);
digitalWrite(D1,HIGH); //D1引脚高电平
}
void Phase_DA()
{
digitalWrite(B1,LOW);
digitalWrite(C1,LOW);
digitalWrite(D1,HIGH); //D1引脚高电平
digitalWrite(A1,HIGH);
}