佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 4936|回复: 69

要如何同时控制5个servo motor?? (全部解决了,谢谢大家的帮忙)

[复制链接]
发表于 23-2-2009 02:20 PM | 显示全部楼层 |阅读模式
我是用5个Variable resistor来控制5个Servo Motor,第一个VR控制第一个SERVO,第二个VR控制第二个SERVO。。。。第5个VR控制第5个SERVO。
我的难题就是要如何同时控制这5个SERVO,就是说5个VR一起转的时候,那5个SERVO也会同一时间一起转,SERVO转的方向是BASED ON那VR。简单来说就是parallel operate.

我想请教这里的高手要如何写那C CODE。
我是用16F877/877A
20MHz crystal
CCS c compiler

[ 本帖最后由 crazybear 于 24-4-2009 04:59 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 24-2-2009 09:22 AM | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 24-2-2009 07:04 PM | 显示全部楼层

回复 2# pic 的帖子

问题不是在写控制SERVO的程式,问题是要如何同一个时间控制5个SERVO。
就是synchronize 5 个SERVO的操作,因为我是在同时用5个不同的INPUT来控制5个SERVO。

通常PIC都是处理第一个INPUT候才处理第二个INPUT,我要的是同个时间处理5个INPUT然后同个时间给予5个OUTPUT。Parallel process..
回复

使用道具 举报

发表于 24-2-2009 09:27 PM | 显示全部楼层
原帖由 crazybear 于 24-2-2009 07:04 PM 发表
通常PIC都是处理第一个INPUT候才处理第二个INPUT,我要的是同个时间处理5个INPUT然后同个时间给予5个OUTPUT。Parallel process..

看你怎么写程序了。。。看你会不会做Multi task了。

不可能同时间, 一般multitask 都也是一个一个input 处理。
就算是我们的PC 电脑, 也是一个一个task 跑, 只是它得很快, 我们感觉好像是一起跑的。

如果你要很快, 可能用PIC24 或18F K series, 可以跑最少到64Mhz。

但如果你要真实的 同个时间处理5个INPUT然后同个时间给予5个OUTPUT,真的Parallel process. 的话, 恐怕你必须用五颗MCU 来实现。
回复

使用道具 举报

 楼主| 发表于 24-2-2009 10:50 PM | 显示全部楼层

回复 4# pic 的帖子

我不会MULTI TASK,没有试过。
哪里有得学MULTI TASK?
如果我用16F877跟20MHz,有可能做到我想要的结果吗?
回复

使用道具 举报

发表于 25-2-2009 08:51 AM | 显示全部楼层
原帖由 crazybear 于 24-2-2009 10:50 PM 发表
我不会MULTI TASK,没有试过。
哪里有得学MULTI TASK?
如果我用16F877跟20MHz,有可能做到我想要的结果吗?

很难。 速度不够快。

我假设功能是你一楼所说的, 没有附加其他的功能的话, 其实, 我上面帖里的Software PWM 源码, 你只要加入 ADC 读你的VR Input, 再加快你的 PIC MCU 的运行速度, 应该勉强可以的。
回复

使用道具 举报

Follow Us
发表于 25-2-2009 08:58 AM | 显示全部楼层
原帖由 crazybear 于 24-2-2009 10:50 PM 发表
我不会MULTI TASK,没有试过。
哪里有得学MULTI TASK?
如果我用16F877跟20MHz,有可能做到我想要的结果吗?


Multi Task 就是多任务的操作系统。像版主说的,它也是不能在同个时间内,处理五个输入与输出。

在严格的角度来分析就是,你需要多快响应一个输入与输出,如果有一些延迟会有什么后果吗?最恶劣的延迟是多少?

假设是使用多任务操作,当某个事件发生后如果不及时处理,后果有多严重这些都要考量。

过后才决定要选择哪类型的处理器,来符合你的要求,假如要求非常严格,就不要先决定使用 PIC16F877。
回复

使用道具 举报

发表于 1-3-2009 01:58 PM | 显示全部楼层
原帖由 crazybear 于 24-2-2009 10:50 PM 发表
我不会MULTI TASK,没有试过。
哪里有得学MULTI TASK?
如果我用16F877跟20MHz,有可能做到我想要的结果吗?


可以。 resolution很低。
回复

使用道具 举报


ADVERTISEMENT

发表于 1-3-2009 04:14 PM | 显示全部楼层
原帖由 fritlizt 于 1-3-2009 01:58 PM 发表


可以。 resolution很低。


它是针对发生的事件来处理。
回复

使用道具 举报

发表于 1-3-2009 06:41 PM | 显示全部楼层
原帖由 fritlizt 于 1-3-2009 01:58 PM 发表


可以。 resolution很低。


但是,Pololu 卖的,只用 16F876A,resolution 可以去到 0.5uS,不懂他们怎样作的。
回复

使用道具 举报

发表于 1-3-2009 06:43 PM | 显示全部楼层
原帖由 waiweng83 于 1-3-2009 06:41 PM 发表


但是,Pololu 卖的,只用 16F876A,resolution 可以去到 0.5uS,不懂他们怎样作的。


单单拿来做servo motor controller是可以的
不过楼主还要拿来做其他东西。 read adc等,就做不到0.5us了
我觉得不能。等下我试试看。

polulu是几个channel的?

[ 本帖最后由 fritlizt 于 1-3-2009 06:49 PM 编辑 ]
回复

使用道具 举报

发表于 1-3-2009 08:34 PM | 显示全部楼层
原帖由 crazybear 于 23-2-2009 02:20 PM 发表
我是用5个Variable resistor来控制5个Servo Motor,第一个VR控制第一个SERVO,第二个VR控制第二个SERVO。。。。第5个VR控制第5个SERVO。
我的难题就是要如何同时控制这5个SERVO,就是说5个VR一起转的时候,那5个SER ...


试过了。
pic16f877a 20mhz 用ccs c。 5个vr控制5个servo是没问题的。之前讲不能是第六感。呵呵。仔细算过后就发觉倒是可以的。
resolution 1us.要更fine也是可以。
不过这样fine你也是看不出的。
你想想看怎样有什么控制servo的 idea.adc我相信对你不会很难。
我过后再告诉你我的solution.
回复

使用道具 举报

 楼主| 发表于 1-3-2009 11:58 PM | 显示全部楼层

回复 12# fritlizt 的帖子

之前还打算用5MCU了,但看到你这样说我决定用1个MCU来做了。
回复

使用道具 举报

发表于 2-3-2009 11:26 AM | 显示全部楼层
原帖由 fritlizt 于 1-3-2009 06:43 PM 发表

polulu是几个channel的?



16 个 channel。这个:http://www.pololu.com/catalog/product/240

pic16f877a 20mhz 用ccs c。 5个vr控制5个servo是没问题的。之前讲不能是第六感。呵呵。仔细算过后就发觉倒是可以的。
resolution 1us.要更fine也是可以。
不过这样fine你也是看不出的。


请问,你的 output 是全部一起变 high,然后各自地变 low?还是 channel 1 先输出,然后才到 channel 2......?
回复

使用道具 举报

发表于 2-3-2009 02:38 PM | 显示全部楼层
原帖由 waiweng83 于 2-3-2009 11:26 AM 发表



16 个 channel。这个:http://www.pololu.com/catalog/product/240



请问,你的 output 是全部一起变 high,然后各自地变 low?还是 channel 1 先输出,然后才到 channel 2......?


不懂他用什么方法。我迟一点在揭晓。 等看crazybear有什么idea。
cytron也不是有16 channels servo motor controller吗?做法应该大同小异把

[ 本帖最后由 fritlizt 于 2-3-2009 02:59 PM 编辑 ]
回复

使用道具 举报

发表于 2-3-2009 06:05 PM | 显示全部楼层
原帖由 fritlizt 于 2-3-2009 02:38 PM 发表


不懂他用什么方法。我迟一点在揭晓。 等看crazybear有什么idea。
cytron也不是有16 channels servo motor controller吗?做法应该大同小异把


Cytron 的是全部 output 一起变 high,然后各自地变 low。Resolution 只有 ~ 1uS

这个方法的挑战在于当 channel 1 和 channel 2 的 output 只相差 1 uS 时,必须要在 1uS 里跳出 channel 1 的 interrupt,然后进回 channel 2 的 interrupt。

(不大会解释,希望能够明白我在讲什么 )
回复

使用道具 举报


ADVERTISEMENT

发表于 3-3-2009 11:50 AM | 显示全部楼层
原帖由 waiweng83 于 2-3-2009 06:05 PM 发表


Cytron 的是全部 output 一起变 high,然后各自地变 low。Resolution 只有 ~ 1uS

这个方法的挑战在于当 channel 1 和 channel 2 的 output 只相差 1 uS 时,必须要在 1uS 里跳出 channel 1 的 interrupt,然 ...


明白。
还有其他人有其他idea吗?
只有我一个人post 我的idea, 和solution就很显了啦。。。。。。
回复

使用道具 举报

 楼主| 发表于 4-3-2009 02:49 PM | 显示全部楼层
原帖由 fritlizt 于 3-3-2009 11:50 AM 发表


明白。
还有其他人有其他idea吗?
只有我一个人post 我的idea, 和solution就很显了啦。。。。。。


我的PROGRAMMING LEVEL是入手级罢了。
这对我来说很难。
回复

使用道具 举报

发表于 4-3-2009 08:02 PM | 显示全部楼层
原帖由 crazybear 于 4-3-2009 02:49 PM 发表


我的PROGRAMMING LEVEL是入手级罢了。
这对我来说很难。


给你了。 我又觉得我很像抢手。。。。。。良心过意不去。哈哈哈
回复

使用道具 举报

发表于 5-3-2009 12:21 AM | 显示全部楼层
原帖由 fritlizt 于 4-3-2009 08:02 PM 发表


给你了。 我又觉得我很像抢手。。。。。。良心过意不去。哈哈哈


讲 concept 就好了。不用整个 source code 都 paste 上来吧。
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 26-4-2024 06:41 PM , Processed in 0.097910 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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