5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 1877|回复: 15
打印 上一主题 下一主题

两个电调速度不一样

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-19 09:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
arduino 单片机控制电调
两个电调 两个无刷电机  一个电池,线路并联连接
代码如下
#include <Servo.h>
Servo myservo_A;  
Servo myservo_C;
int val,xp;
void setup()
{
      pinMode(9,OUTPUT);
      pinMode(10,OUTPUT);
      myservo_A.attach(9,1000,2000);
      myservo_C.attach(10,1000,2000);
      delay(2500);
      myservo_A.writeMicroseconds(1000);
      myservo_C.writeMicroseconds(1000);
      delay(2000);
      Serial.begin(9600);
     // delay(4000);
      //myservo_A.write(180);  
      //Serial.println("shangdian");
      //delay(4000);
      myservo_A.write(0);
      myservo_C.write(0);
      delay(4000);
}

void loop()
{
      val = analogRead(A0);  
      val = map(val, 0, 1023, 0, 180);   
      myservo_A.write(val);
      Serial.println(val);  
      myservo_C.write(val);

}

两个电机速度总是不一样非常明显!这是为什么啊?电压电流的事?还是代码控制的事啊?
两个电机单独运行都非常正常!


欢迎继续阅读楼主其他信息

主题

  • 没有相关信息
  • 没有相关信息
  • 没有相关信息
沙发
 楼主| 发表于 2013-7-19 10:39 | 只看该作者
大神们!!!求救啊!!!
3
 楼主| 发表于 2013-7-19 10:54 | 只看该作者
这个是电路图

4
发表于 2013-7-19 11:30 | 只看该作者
单片机和电调电源分开,共地就行了。
5
发表于 2013-7-19 11:58 | 只看该作者
还有电调电机最好一样的,电调恢复默认设置。
6
发表于 2013-7-19 20:43 | 只看该作者
综上所述 楼上的答复都是扯蛋   真正的原因是你延时参数用错了  你地明白?
7
发表于 2013-7-19 20:56 | 只看该作者
#include <Servo.h>  //声明库
Servo myservo_A;  //定义伺服函数A
Servo myservo_C;//定义伺服函数C
int val,xp; //声明变量
void setup() //初始化
{
      pinMode(9,OUTPUT);//定义端口9为输出
       pinMode(10,OUTPUT);//定义端口10为输出
       myservo_A.attach(9,1000,2000); //定义伺服端口9 PWM范围
      myservo_C.attach(10,1000,2000);//定义伺服端口10 PWM范围
       delay(2500);//延时2500毫秒
       myservo_A.writeMicroseconds(1000);//写入伺服端口A 延时1000微秒
       myservo_C.writeMicroseconds(1000);//写入伺服端口C 延时1000微秒
       delay(2000);//延时2000毫秒
       Serial.begin(9600);//设置串口波特率9600
      // delay(4000);
       //myservo_A.write(180);  
       //Serial.println("shangdian");
       //delay(4000);
      myservo_A.write(0); //伺服端口A 写入角度0
      myservo_C.write(0); //伺服端口C 写入角度0
      delay(4000); 延时4000毫秒
}

void loop() //主循环
{
      val = analogRead(A0); // 获得模拟端口A0值 并赋值为VAL
       val = map(val, 0, 1023, 0, 180);   //这句我不懂怎么用专业术语 我只知道意思是 将VAL获得的值从0-1023 量化为0-180的角度值
       myservo_A.write(val);//写入伺服端口A 写入值为角度值
       Serial.println(val);  //串口输出字符 val 并换行
       myservo_C.write(val);//写入伺服端口C 写入值为角度值
}
  

职业高中不毕业的我  可能以上代码注释有误 请指正
但我想说的是 为什么TM要这么多的延时啊  而且代码太不精炼了 您知道Arduino这么用代码效率巨低   而且不能干别的事  你懂了?
8
发表于 2013-7-19 20:59 | 只看该作者
看到您这么幸苦贴代码的份上 我也给贴一份 供您参考
#include "Servo.h"
Servo servo;
void setup()
{
  servo.attach(9,1000,2000);
}
void loop()
{
   int V1 = analogRead(5);
   int val = map(V1, 0, 1023, 0, 179);
   servo.write(val);
   delay(15);
}

以上代码我用来测试电调非常好用  您可以看看
9
 楼主| 发表于 2013-7-20 11:36 | 只看该作者
“缪飞虎” 非常感谢您的指导!我是个新手不太懂!写的代码让您见笑了!但是您的代码我运行了还是速度不一样!
10
 楼主| 发表于 2013-7-20 11:37 | 只看该作者
我电机电调牌子都是一样的我单片机供电是USB电脑 , 电调供电是电池!
11
 楼主| 发表于 2013-7-20 11:38 | 只看该作者
“缪飞虎” 您这代码运行一个电调电机是没问题的!但是两个您试过么?
12
发表于 2013-7-21 00:09 | 只看该作者
我本来就没运行两个   首先加入延时参数后 两个IO必然会导致不一样   您可以参考下MWC或者APM代码里驱动电调的部分  这个必须要硬中断吧
13
发表于 2013-7-21 14:02 | 只看该作者
写固件的难道不懂得用示波器看一下输出波形?
14
发表于 2013-7-22 09:16 | 只看该作者
用硬中断吧,最简单的51单片机用硬中断也能输出很稳定的pwm波!
15
发表于 2013-7-24 14:45 | 只看该作者
路过帮顶!
16
发表于 2013-8-3 20:16 | 只看该作者
学习!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

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