找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2527|回复: 1
打印 上一主题 下一主题
收起左侧

arduino nano板控制步进电机正反转,用于测试编码器寿命

[复制链接]
跳转到指定楼层
楼主
#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  // I2C / TWI
int t1 = 0 ;
int t2 = 0 ;
int t3 = 0 ;
int m1 = 100 ;
int n1 = 100 ;
void draw(void) {

// graphic commands to redraw the complete screen should be placed here

  u8g.setFont(u8g_font_unifont);

  u8g.setPrintPos(0, 15);
  u8g.print(t1);
  u8g.setPrintPos(65, 15);
  u8g.print(t2);
  u8g.setPrintPos(65, 35);
  u8g.print(t3);
  u8g.setPrintPos(0, 55);
  u8g.print(m1);
  u8g.setPrintPos(65, 55);
  u8g.print(n1);
}

// A4988连接Arduino引脚号
const int dirPin   = 2;   // Direction
const int stepPin  = 3;   // Step
const int sleepPin = 4;   // Sleep
const int resetPin = 5;   // Reset
const int ms2Pin   = 6;   // Ms3
const int ms1Pin   = 7;   // Ms2
const int ms0Pin   = 8;   // Ms1
const int enPin    = 9;   // Enable

// 电机每圈步数
const int STEPS_PER_REV = 982;

void setup() {

   // 设置引脚模式
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
  pinMode(sleepPin,OUTPUT);
  pinMode(resetPin,OUTPUT);  
  pinMode(ms2Pin,OUTPUT);  
  pinMode(ms1Pin,OUTPUT);  
  pinMode(ms0Pin,OUTPUT);
  pinMode(enPin,OUTPUT);   
  pinMode(13,OUTPUT);  
  // 初始化引脚状态
  digitalWrite(sleepPin, HIGH);  
  digitalWrite(resetPin, HIGH);
  digitalWrite(enPin, LOW);

  // 初始化电机步进模式为1/4步进
  digitalWrite(ms0Pin, LOW);
  digitalWrite(ms1Pin, LOW);
  digitalWrite(ms2Pin, LOW);
}
void loop() {

            if (t2 < m1){
                           digitalWrite(sleepPin, HIGH); //开启点击驱动芯片

                            for(int i = 0; i < n1; i++)
                                   {   
                                          u8g.firstPage();
                                          do {
                                                  draw();
                                              } while( u8g.nextPage() );


                                         delay(10);
                                         digitalWrite(dirPin,LOW);     //电机正转,1/4步,执行一圈+延时共2.5秒
                                          for(int x = 0; x < STEPS_PER_REV; x++)
                                                          {
                                                              digitalWrite(stepPin,HIGH);
                                                              delayMicroseconds(1500);
                                                              digitalWrite(stepPin,LOW);
                                                              delayMicroseconds(1500);

                                                           }                                
                                          delay(500);  

                                          digitalWrite(dirPin,HIGH);    //电机反转,1/4步,执行一圈+延时共2.5秒
                                          for(int x = 0; x < STEPS_PER_REV; x++)
                                                           {
                                                               digitalWrite(stepPin,HIGH);
                                                               delayMicroseconds(1500);
                                                               digitalWrite(stepPin,LOW);
                                                               delayMicroseconds(1500);

                                                 }

                                         delay(500);
                                         t1 = t1+1;
                                         t3 = t2 * n1 + t1 ;

                                     }

                            digitalWrite(sleepPin, LOW);
                            t1 = 0 ;//圈数归零
                            t2 = t2+1;
                            t3 = t2 * n1 + t1 ;
                            u8g.firstPage();
                                          do {
                                                  draw();
                                              } while( u8g.nextPage() );
                            delay(10);  

                            for(int j = 0; j < 20; j++)
                                        {
                                            digitalWrite(13, HIGH);//指示灯闪烁
                                            delay(3000);
                                            digitalWrite(13, LOW);
                                            delay(3000);  
                                        }


                        } else {

                                 digitalWrite(13, HIGH);//指示灯闪烁
                                 delay(500);
                                 digitalWrite(13, LOW);
                                 delay(500);

                                 }








}

51hei图片_20210610150511.jpg (141.46 KB, 下载次数: 142)

控制板

控制板

51hei图片_20210610150459.jpg (88.49 KB, 下载次数: 148)

控制板+步进电机

控制板+步进电机

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:138707 发表于 2021-7-3 21:05 | 只看该作者
你好楼主,有接线原理图可否发附件一份,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表