blinker 控制42步进电机-Arduino中文社区 - Powered by Discuz! Archiver

songyx005 发表于 2020-5-19 13:36

blinker 控制42步进电机

本帖最后由 songyx005 于 2020-5-19 13:39 编辑

刚开始学习esp8266,偶尔发现了blinker,感觉就一神器,满足了我能“看”的要求。想控制42步进,但是网上没有找到太靠谱的教程(大多是用ULN2003A控制的小步进),经过几天的踩坑,终于能够控制,当然,程序中还有很多问题,请各位大佬指出首先说一下,我是用的步进驱动器控制的42步进,其实回过头来看控制很简单,只要发送脉冲到步进驱动器,就可以转动。接线如图:
B- B+A-A+ 连接步进;脉冲+连接esp8266D1 引角;脉冲-连接esp8266 GDC电源连接到24v电源
生成脉冲,esp8266 自带了两个特别有用的函数tone(pin, x);pin为引脚   x为脉冲频率notone(pin); 停止生成脉冲大家有兴趣可以查一下手册
App端如何设置我就不写了,这里放一张各组件名称

程序实现功能:按“加速”电机转速增加;按“减速”电机转速减小;拖动滑块“转速”可惊变电机转速;“转速”显示此时转速;
另外面包板上还安装了两个开关,分别接到D2 D3引脚各地,可以实现面包板控制转速


顺便说一下,我调试是在D1上接一个LED灯,通过观察LED灯的闪烁,更容易观察脉冲。tone函数产生的是占空比为50%的方波,所以led灯只能看到闪烁,不能看到呼吸灯效果。
程序如下:
#define BLINKER_WIFI#define DJ 5   //D1   输出脉冲#define DJ_P 4   //D2加速#define DJ_M 0   //D3减速#include <Blinker.h>
int n=0;
char auth[] = "xxx";char ssid[] = "xxxx";char pswd[] = "xxxx";
// 新建组件对象BlinkerButton ButtonP("btn-P");//提速
BlinkerButton ButtonM("btn-M");//减速
BlinkerButton ButtonG("btn-G");//电机停
BlinkerSlider SliderDJ("ran-dj");//滑块组件
BlinkerNumber NumberDJ("num-DJ");//显示转速组件
// 按下按键即会执行该函数void buttonP_callback(const String &state) {   BLINKER_LOG("get button state: ", state);    n=n+1;
    NumberDJ.print(n);;       Serial.print("电机转速: ");   Serial.print(n); //这个地方显示的并不是每分钟多少转,而是一分钟发出多少个脉冲,转速多少要看步进设置,例如每个脉冲3.6度,100个脉冲才转一圈   Serial.print(",");   Serial.println("r/min");       Blinker.vibrate();}void buttonM_callback(const String &state1) {   BLINKER_LOG("get button state: ", state1);   n=n-1;   if(n<0)//转速小于0时,打印error    {   n=0;   Serial.print("Error");   }      NumberDJ.print(n);
Serial.print("电机转速: ");Serial.print(n);Serial.print(",");Serial.println("r/min");   Blinker.vibrate();}
void buttonG_callback(const String &stateG) //电机停止{   BLINKER_LOG("get button state: ", stateG);
   tone(DJ, 0);
   n=0;
   Serial.print("电机停止");      Blinker.vibrate();}
void sliderDJ_callback(int32_t value){ BLINKER_LOG("get slider data: ", value); n=value;
NumberDJ.print(n); Serial.print("电机转速:"); Serial.print(n); Serial.println("r/min");}void setup() {   // 初始化串口,并开启调试信息   Serial.begin(115200);       BLINKER_DEBUG.stream(Serial);   BLINKER_DEBUG.debugAll();   // 初始化有LED的IO   pinMode(DJ, OUTPUT);   digitalWrite(DJ, 0);
   pinMode(DJ_P,INPUT_PULLUP);   pinMode(DJ_M,INPUT_PULLUP);   // 初始化blinker   Blinker.begin(auth, ssid, pswd);ButtonP.attach(buttonP_callback);ButtonM.attach(buttonM_callback);    ButtonG.attach(buttonG_callback);   SliderDJ.attach(sliderDJ_callback);
   NumberDJ.print(0);//开机转速显示0
   tone(DJ, 0);//开机转速0}void loop() {   Blinker.run();
   tone(DJ, n);//面包板加减速控制 if(digitalRead(DJ_M)==0)//是否按下开关{                  delay(100);            //去抖    if(digitalRead(DJ_M)==0)//是否按下开关    {   while(!digitalRead(DJ_M));//抬手检测       n--;   
          if(n<0)    {   Serial.println("Error");   n=0;    } else     {   Serial.print("电机转速: ");   Serial.print(n);   Serial.print(',');   Serial.println("r/min");      }    }   }     if(digitalRead(DJ_P)==0){   delay(100);   if(digitalRead(DJ_P)==0)    {   while(!digitalRead(DJ_P));       n++;   Serial.print("电机转速: ");   Serial.print(n);   Serial.print(',');   Serial.println("r/min");    }   } 遇到的问题:1.    拖动滑块,滑块组件显示的转速不准确,例如拖到100,数字组件显示90,调试窗口也是90,不清楚是什么原因。有时准确,有时不准2.    使用加减速按钮调节转速后,滑块组件显示转速不同步,这应该是滑块组件不能接收数据的原因,希望大佬能更新一下APP,使滑块组件也可以接收数据


howlet 发表于 2020-5-20 14:24

SliderDJ.print(X);就是设置滑块数值的 你同步上返回指定数值就会改变滑块数值

songyx005 发表于 2020-5-20 16:19

howlet 发表于 2020-5-20 14:24
SliderDJ.print(X);就是设置滑块数值的 你同步上返回指定数值就会改变滑块数值 ...

OK,已解决

Karlchampion 发表于 2021-4-21 09:26

请问8266的脉冲 够大吗 ,给驱动器够用吗?

bhc1365 发表于 2021-6-15 20:13

可以控制步数吗?

songyx005 发表于 2021-6-17 16:04

bhc1365 发表于 2021-6-15 20:13
可以控制步数吗?

可以啊,通过脉冲数控制频数

wofa888 发表于 2021-8-17 10:55

可以正反转吗
页: [1]
查看完整版本: blinker 控制42步进电机