标签:编码器 48 电机 28BYJ arduino stepper 步进 define
最近的一个想法是用编码器的旋转来控制步进电机,旋转编码器的转一圈发出的脉冲和小步进电机28BYJ-48转一圈所需的脉冲不一样,不能做到手转一圈编码器,步进电机也同步转一圈。而且手转的速度,这个64减速比的小电机也跟不上。但是能实现电机转动和编码器转动的方向一致。电机转动很顺滑。
实现方法是:编码器A相产生中断,就在中断里面给步进电机发一个脉冲。
#include <AccelStepper.h>
#define encoder0PinA 2
#define encoder0PinB 4
#define motorPin1 8 // Blue - 28BYJ-48 pin 1
#define motorPin2 9 // Pink - 28BYJ-48 pin 2
#define motorPin3 10 // Yellow - 28BYJ-48 pin 3
#define motorPin4 11 // Orange - 28BYJ-48 pin 4
AccelStepper stepper(8,motorPin1,motorPin3,motorPin2,motorPin4);
volatile unsigned int encoder0Pos = 0;
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // 管脚配置
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // 管脚配置
stepper.setMaxSpeed(1000);
attachInterrupt(0, doEncoder, CHANGE); // 中断配置
}
void loop()
{
// 啥也不做
}
void doEncoder()
{
if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB))
{
encoder0Pos++;
stepper.setSpeed(-800);
stepper.runSpeed();
}
else
{
encoder0Pos--;
stepper.setSpeed(800);
stepper.runSpeed();
}
}
这里用到了 <AccelStepper.h>库,可以在这个链接下载
旋转编码器的使用请看我之前发布的文章
stepper.setSpeed(800);通过改变速度的正负值就可以设定旋转的方向。
attachInterrupt(0, doEncoder, CHANGE);这里选用CHANGE脉冲改变就进入中断,目的是在编码器旋转产生一个周期的时候,能过产生4次变化,这样电机就能得到更多的脉冲信号。
stepper(8,motorPin1,motorPin3,motorPin2,motorPin4);这里的8表示半步运行,旋转一圈需要4096的脉冲,如果是4就是全部运行,但是速度就不能设置成示例中的800了,否则电机会丟步。
标签:编码器,48,电机,28BYJ,arduino,stepper,步进,define 来源: https://blog.csdn.net/tulesheng/article/details/112347245
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。