极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 52299|回复: 9

[新人求助]关于使用360度舵机的程序问题

[复制链接]
发表于 2013-10-23 22:39:16 | 显示全部楼层 |阅读模式
因为各种原因,需要使用360度舵机来实现类似于步进电机的功能。
恩,说白了就是,想写个程序让360度舵机连续旋转。
不罗嗦,代码如下:
  1. #include <Servo.h>

  2. Servo myservo;  // create servo object to control a servo
  3.                

  4. int pos = 0;   

  5. void setup()
  6. {
  7.   myservo.attach(9);
  8. }

  9. void loop()
  10. {
  11.   for(pos = 0; pos < 360; pos += 1)  
  12.   {                                 
  13.     myservo.write(pos);              
  14.     delay(25);                     
  15.   }
  16. }
复制代码

然后就说下问题了:
这个是给360舵机写的代码,烧进arduino后,舵机只是一顿一顿地转,
然后测试我的普通航模用9克舵机,把360换成180,表示正常工作,delay也能正常用。
360舵机是X宝上买的MG995。
arduino uno用的是5V,1A的外置电源,
求大神指点....................急用................
(PS:看过论坛里类似的帖子,表示没弄好..)
回复

使用道具 举报

发表于 2013-10-24 02:12:15 | 显示全部楼层
传说改了360度就不能顺利控制了
回复 支持 反对

使用道具 举报

发表于 2013-10-24 08:06:57 | 显示全部楼层
本帖最后由 绿林网页 于 2013-10-24 08:08 编辑

360°舵机和180舵机是不一样的,和步进电机也不一样,是不能控制舵机角度的,只是控制正反转和转动速度~~
转:
360°舵机亦称伺服电机,他本身就是一个小的伺服系统,对输出的转速转角有着闭环调控作用,控制信号为50HZ的方波信号,当方波输出为1.5ms的方波时,电机不转,当大于1.5ms时,电机正转,反之,相反,而且当给定信号的脉冲宽度与1.5ms之差越大,其转速越大,二者有近似的线性关系
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-24 13:42:20 | 显示全部楼层
绿林网页 发表于 2013-10-24 08:06
360°舵机和180舵机是不一样的,和步进电机也不一样,是不能控制舵机角度的,只是控制正反转和转动速度~~
...

那这个程序应该怎样写呢?新人表示压力山大....
回复 支持 反对

使用道具 举报

发表于 2013-10-24 22:31:57 | 显示全部楼层
舵機型號是??
這個程式不難寫,如下:
  1. #include <Servo.h>
  2. Servo myservo;  // create servo object to control a servo

  3. void setup()
  4. {
  5. myservo.attach(9);
  6. }

  7. void loop()
  8. {                                 
  9.     myservo.write(180);                                   

  10. }
复制代码
360度旋轉的伺服馬達不用累加角度,所以只用給一個定值就好,角度值影響的是轉速快慢與正轉反轉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-26 16:00:24 | 显示全部楼层
TTTTTTT33 发表于 2013-10-24 22:31
舵機型號是??
這個程式不難寫,如下:360度旋轉的伺服馬達不用累加角度,所以只用給一個定值就好,角度值影 ...

表示这个样子还是不行,他也是一顿一顿地转,然后试了下传统的PWM控制
  1. void setup()
  2. {
  3.   pinMode(13, OUTPUT);//设定13号端口为输出
  4. }

  5. void loop()
  6. {
  7.   digitalWrite(13, HIGH);
  8.   delayMicroseconds(100); // 大约10%占空比的1KHz方波
  9.   digitalWrite(13, LOW);
  10.   delayMicroseconds(900);
  11. }
复制代码

这个是可以的 然后就是不明白这样子的缺点 意思是CPU在处理中断的时候无法处理其他事情了  比如我在loop里面写一个超声波测距的程序是不是就工作不了了
回复 支持 反对

使用道具 举报

发表于 2013-10-26 16:45:27 | 显示全部楼层
同求。。。。。如何利用arduino控制360度舵机啊????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-26 19:18:33 | 显示全部楼层
爱的步伐XY 发表于 2013-10-26 16:45
同求。。。。。如何利用arduino控制360度舵机啊????

见楼上  表示这个可以用  但是这样子arduino貌似就只能控制舵机了 我也写超声波程序不能用.............
回复 支持 反对

使用道具 举报

发表于 2015-6-8 00:02:53 | 显示全部楼层
小伙,别忘了, myservo.write(x)函数的x只能是0到180度,所以说360是么没用的,x为180是360度舵机反转速度最快的值,你把 for(pos = 0; pos < 360; pos += 1) 这句去掉,myservo.write(pos); 中pos直接填0到180,注意了,对于360舵机,0到180就不是角度了而是速度。试试吧,小伙
回复 支持 反对

使用道具 举报

发表于 2015-7-14 08:09:05 | 显示全部楼层
不知道楼主是不是还纠结这个问题。我说说我的发现吧,我用跟楼主差不多的程序去驱动360舵机,使用2560的arduino,现象跟楼主一样。换了UNO之后,完全就是连续旋转了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 17:46 , Processed in 0.038563 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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