[求助]用Arduino 控制DC马达速度的问题,请高手指点!-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5971|回复: 6

[已解决] [求助]用Arduino 控制DC马达速度的问题,请高手指点!

[复制链接]
发表于 2013-7-31 23:21 | 显示全部楼层 |阅读模式
小弟最近在做一个arduino的报告 内容是模拟汽车的牵引力控制系统 之前没接触过arduino 有些疑问 还请大哥些指教

我的设计是用arduino控制4个DC马达以模拟汽车轮胎 先把马达随意设定成150-255不等的速度 然后用编程把这些速自动度降到一个最低速度的那个马达上面去 但是我试过跑这个程序 速度没有变化 还是我之前设定的那些速度(比如180 180 255 255,理想的是全部变成180)

具体编程如下:
int motorPin1 = 3;
int motorPin2 = 6;
int motorPin3 = 9;
int motorPin4 = 11;

void setup()
{
pinMode (motorPin1, OUTPUT);
pinMode (motorPin2, OUTPUT);
pinMode (motorPin3, OUTPUT);
pinMode (motorPin4, OUTPUT);
}

void loop()
{
analogWrite(motorPin1, 180);//effective of slipping wheel
analogWrite(motorPin2, 180);
analogWrite(motorPin3, 255);
analogWrite(motorPin4, 255);

//delay(5000);

if (motorPin1 >
motorPin2);
analogWrite(motorPin1, motorPin2);
if (motorPin1 > motorPin3);
analogWrite(motorPin1, motorPin3);
if (motorPin1 > motorPin4);
analogWrite(motorPin1, motorPin4);
if (motorPin2 > motorPin1);
analogWrite(motorPin2, motorPin1);
if (motorPin2 > motorPin3);
analogWrite(motorPin2, motorPin3);
if (motorPin2 > motorPin4);
analogWrite(motorPin2, motorPin4);
if (motorPin3 > motorPin1);
analogWrite(motorPin3, motorPin1);
if (motorPin3 > motorPin2);
analogWrite(motorPin3, motorPin2);
if (motorPin3 > motorPin4);
analogWrite(motorPin3, motorPin4);
if (motorPin4 > motorPin1);
analogWrite(motorPin4, motorPin1);
if (motorPin4 > motorPin2);
analogWrite(motorPin4, motorPin2);
if (motorPin4 > motorPin3);
analogWrite(motorPin4, motorPin3);

}

 楼主| 发表于 2013-7-31 23:26 | 显示全部楼层
请大哥指点下小弟
发表于 2013-8-1 13:35 | 显示全部楼层
本帖最后由 qptimus 于 2013-8-1 13:37 编辑

以前没写过代码吧,motorPin*到底是引脚呢还是引脚的值,你根本没有分开
if (motorPin1 > motorPin2)
这句永恒为假,下面的也一样,要不恒真要不恒假。你已经声明了
int motorPin1 = 3;
int motorPin2 = 6;
int motorPin3 = 9;
int motorPin4 = 11;
3>6这种判断还会变吗?以后的if类似。

analogWrite(motorPin1, motorPin2);
括号里面的参数,第一个是引脚,第二个是值,motorPin*都是引脚,motorPin*已经被设置成OUTPUT了,你无法获得它的值,即便是在INPUT下要获得值也应该用analogRead()方法。而不是简单地使用引脚名

应该为每一个motor的转速分配变量

char TheMostSlow = 255;
char m0,m1,m2,m3;
int motorPin1 = 3;
int motorPin2 = 6;
int motorPin3 = 9;
int motorPin4 = 11;

void setup()
{
m0 = 180;
m1= 180;
m2 = 255;
m3 = 255;
pinMode (motorPin1, OUTPUT);
pinMode (motorPin2, OUTPUT);
pinMode (motorPin3, OUTPUT);
pinMode (motorPin4, OUTPUT);
}

void loop()
{
if(TheMostSlow > m0)
    TheMostSlow = m0;
if(TheMostSlow > m1)
    TheMostSlow = m1;
if(TheMostSlow > m2)
    TheMostSlow = m2;
if(TheMostSlow > m3)
    TheMostSlow = m3;
analogWrite(motorPin1,TheMostSlow);
analogWrite(motorPin2,TheMostSlow);
analogWrite(motorPin3,TheMostSlow);
analogWrite(motorPin4,TheMostSlow);
}
 楼主| 发表于 2013-8-5 20:38 | 显示全部楼层
本帖最后由 Sin 于 2013-8-5 20:57 编辑
qptimus 发表于 2013-8-1 13:35
以前没写过代码吧,motorPin*到底是引脚呢还是引脚的值,你根本没有分开
if (motorPin1 > motorPin2)
这句 ...

大神朋友 十分感谢你的帮助 我已经有一些眉目了
现在有个新问题想请教你 我这个项目要求设计成人为施加外力给其中一个轮胎使这个轮胎的速度降低 然后其他轮胎的速度也相应的也降低到这个轮胎的速度
但是我作为门外汉没基础不懂这些代码 还有就是arduino板上应该怎样连接 请指点一二 毕业就靠你了 叩谢!
发表于 2013-8-6 10:00 | 显示全部楼层
Sin 发表于 2013-8-5 20:38
大神朋友 十分感谢你的帮助 我已经有一些眉目了
现在有个新问题想请教你 我这个项目要求设计成人为施加外 ...

要想主动获得马达的转速光用dc马达是不够的,必须要有专门的测速装置,比如编码器,建议你直接使用带编码器的马达,价格比普通马达贵不了多少,这样就可以精确地知道每个马达的转速了,关于编码器的使用你可以看这里  http://www.geek-workshop.com/thread-595-1-1.html  
 楼主| 发表于 2013-8-8 12:04 | 显示全部楼层
qptimus 发表于 2013-8-6 10:00
要想主动获得马达的转速光用dc马达是不够的,必须要有专门的测速装置,比如编码器,建议你直接使用带编码 ...

谢谢!我还想问个简单的问题 你第一个program里面 为什么是TheMostSlow = 255?255是最快的速度应该是TheFastest或者是TheMostFast?
发表于 2013-8-9 17:12 | 显示全部楼层
Sin 发表于 2013-8-8 12:04
谢谢!我还想问个简单的问题 你第一个program里面 为什么是TheMostSlow = 255?255是最快的速度应该是TheFa ...

这只是一个初始值,后面和每个轮子的速度逐个比较得到最低的速度,因此刚开始时需要一个足够大的初值,然后一步步降低到最低那个值
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-3 07:53 , Processed in 0.071963 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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