完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
作为小白一只,近两天因为项目需要做一个arduino uno通过A4988控制42步进电机正反转一定角度加一个角度微调 然后在面包板上接好电路后发现按钮不给信号时电机也在转动,单独每个接口测试都正常,一起接到板上就有问题,想问下是怎么回事。 做出来的如下: 其中4个按钮作用分别是令步进电机正转90°,正转30°,反转30°,反转90°,旋转电位器步进电机也会转过一个比较小的角度。 arduino的代码如下: int EN=6; //EN int X_DIR=4; //DIR int X_STP=5; //STEP int s1=9; //s1 input int s2=10; //s2 input int s3=11; //s3 input int s4=12; //s4 input int potpin=1; //电位器input int val1=0; int val2=0; int val3=0; int val4=0; int col=0; int x,y; //步进电机step控制函数 void step(boolean dir, byte dirPin, byte stepperPin, int steps) { digitalWrite(dirPin, dir); delay(50); for (int i = 0; i < steps; i++) { digitalWrite(stepperPin, HIGH); delayMicroseconds(800); digitalWrite(stepperPin, LOW); delayMicroseconds(800); }} void setup() { //定义I/O口输入/输出 pinMode(EN,OUTPUT); pinMode(X_STP,OUTPUT); pinMode(X_DIR,OUTPUT); digitalWrite(EN,LOW); pinMode(s1,INPUT); pinMode(s2,INPUT); pinMode(s3,INPUT); pinMode(s4,INPUT); Serial.begin(9600); } void loop() { //开关s1-4控制步进电机转动,3600细分为一圈 val1=digitalRead(s1); delay(10); if (HIGH==val1) step(HIGH, X_DIR, X_STP, 800);//电机正转800细分,就是90° val2=digitalRead(s2); delay(10); if (HIGH==val2) step(HIGH, X_DIR, X_STP, 800/3);//电机正转800/3细分,就是30° val3=digitalRead(s3); delay(10); if (HIGH==val3) step(LOW, X_DIR, X_STP, 800/3);//电机反转800/3细分,就是30° val4=digitalRead(s4); delay(10); if (HIGH==val4) step(LOW, X_DIR, X_STP, 800);//电机反转800细分,就是90° //旋转电位器,步进电机转动,采用模拟输入 y=x; x=analogRead(potpin); delay(10); if (x>y) { int r=(x-y)/5; step(HIGH, X_DIR, X_STP, r); } else { int r=(y-x)/5; step(LOW, X_DIR, X_STP, r); }; //串口控制 col=Serial.read(); delay(10); switch(col) { case 'A':step(HIGH, X_DIR, X_STP, 200); delay(1000); break; case 'B':step(HIGH, X_DIR, X_STP, 400); delay(1000); break; case 'C':step(HIGH, X_DIR, X_STP, 800); delay(1000); break; case 'D':step(HIGH, X_DIR, X_STP, 1600); delay(1000); break; case 'E':step(HIGH, X_DIR, X_STP, 3200); delay(1000); break; } } |
|
相关推荐
4个回答
|
|
A4988 模式选择端MS1、MS2、MS3。。。。。。。。如果全部接地 就是 0 0 0模式。一圈是200个步进值,一个值也就是1.8°。;另外是1/4 1/8 1/16。 最多是3200步进值是一圈,你写的貌似是3600。。。。
|
|
|
|
SCCHAM 发表于 2017-11-3 21:48 手误,手误。。。。。 |
|
|
|
|
|
|
|
先收藏起来,有时间研究一下
|
|
|
|
只有小组成员才能发言,加入小组>>
WIO Terminal +MCP2515 实现车辆OBD的速度监控
10371 浏览 0 评论
60659 浏览 77 评论
5964 浏览 3 评论
一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)
36099 浏览 219 评论
10026 浏览 0 评论
489浏览 1评论
请教:esp32中用u8g2显示shtc3传感器数据到i2c液晶屏,显示不稳定的问题
1250浏览 1评论
1392浏览 1评论
602浏览 0评论
723浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 01:40 , Processed in 0.574845 second(s), Total 56, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号