关于Arduino uno控制两个42步进电机,使用的是DRV8825驱动芯片。

#include <Arduino.h>
#include <MsTimer2.h>
//#include <DRV8825.h>
//#include “A4988.h”
//#define MODE0 0
//#define MODE1 0
//#define MODE2 0
//#define MOTOR_STEPS 0
#define DIR1 A1
#define STEP1 2
#define EN1 A0
#define DIR2 A2
#define STEP2 4
#define EN2 A3
//DRV8825 stepper1(0, DIR1, STEP1, EN1, 0, 0, 0);
//DRV8825 stepper2(0, DIR2, STEP2, EN2, 0, 0, 0);
int Distance = 0;
int tick = 0; //计数值
void pwm();
//中断服务程序
void onTimer()
{
Serial.print("timer ");
Serial.println(tick++);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(A0, OUTPUT);//EN1使能口
pinMode(A1, OUTPUT);//DIR1正反转
pinMode(A2, OUTPUT);//DIR2正反转
pinMode(A3, OUTPUT);//EN2使能口
pinMode(2, OUTPUT);//PWM1口
pinMode(4, OUTPUT);//PWM2口
digitalWrite(A0, LOW);//电机使能
digitalWrite(A1, LOW);//正转
digitalWrite(A2, LOW);//电机使能
digitalWrite(A3, LOW);//正转

MsTimer2::set(1000, onTimer); //设置中断,每1000ms进入一次中断服务程序 onTimer()
MsTimer2::start(); //开始计时_开启定时器中断
//MsTimer2::stop(); //关闭定时器中断
}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
delayMicroseconds(200);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
delayMicroseconds(200);

if(tick == 5)
{
digitalWrite(A1, HIGH);//正转
digitalWrite(A2, HIGH);
}
else if(tick == 10)
{
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
tick = 0;
}
}

void pwm()
{
digitalWrite(2, HIGH);
delayMicroseconds(200);
digitalWrite(2, LOW);
delayMicroseconds(200);

}

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值