1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
最近的一个想法是用编码器的旋转来控制步进电机,旋转编码器的转一圈发出的脉冲和小步进电机28BYJ-48转一圈所需的脉冲不一样,不能做到手转一圈编码器,步进电机也同步转一圈。而且手转的速度,这个64减速比的小电机也跟不上。但是能实现电机转动和编码器转动的方向一致。电机转动很顺滑。
实现方法是:编码器A相产生中断,就在中断里面给步进电机发一个脉冲。 #include #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(); } } 这里用到了 旋转编码器的使用请看我之前发布的文章 stepper.setSpeed(800);通过改变速度的正负值就可以设定旋转的方向。 attachInterrupt(0, doEncoder, CHANGE);这里选用CHANGE脉冲改变就进入中断,目的是在编码器旋转产生一个周期的时候,能过产生4次变化,这样电机就能得到更多的脉冲信号。 stepper(8,motorPin1,motorPin3,motorPin2,motorPin4);这里的8表示半步运行,旋转一圈需要4096的脉冲,如果是4就是全部运行,但是速度就不能设置成示例中的800了,否则电机会丟步。 |
|
|
|
只有小组成员才能发言,加入小组>>
2434 浏览 0 评论
9096 浏览 4 评论
36765 浏览 19 评论
5025 浏览 0 评论
24737 浏览 34 评论
1525浏览 2评论
1740浏览 1评论
2189浏览 1评论
1550浏览 0评论
521浏览 0评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 17:48 , Processed in 1.316007 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号