打印
[51单片机]

关于单片机控制多个舵机,跪求高手指导

[复制链接]
4638|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
暮色苍苍|  楼主 | 2015-12-23 00:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
暮色苍苍|  楼主 | 2015-12-23 00:44 | 只看该作者
这是先尝试用一个定时器控制2个舵机的,成功了再加

使用特权

评论回复
板凳
沉思的牛| | 2015-12-23 01:02 | 只看该作者
第一.pwm发生的原理你搞清楚了吗?
第二.你的单片机是什么?
第三.如果搞清楚了我告诉你怎么弄多路控制

使用特权

评论回复
地板
暮色苍苍|  楼主 | 2015-12-23 10:43 | 只看该作者
沉思的牛 发表于 2015-12-23 01:02
第一.pwm发生的原理你搞清楚了吗?
第二.你的单片机是什么?
第三.如果搞清楚了我告诉你怎么弄多路控制 ...

AT89C51系列的,PWM原理知道啊,因为单片机没有直接输出PWM波形的串口,所以我们要在单片机I/O口的输出模拟PWM波,例如用定时器在某个时间产生中断,产生中断前令I/O口输出1,产生中断后改变I/O口的输出。

使用特权

评论回复
5
ywlzh| | 2015-12-24 09:54 | 只看该作者
51单片机模拟PWM的话,你得搞清楚时间概念,什么时候动这个舵机,什么时候动那个舵机

使用特权

评论回复
6
沉思的牛| | 2015-12-25 01:20 | 只看该作者
暮色苍苍 发表于 2015-12-23 10:43
AT89C51系列的,PWM原理知道啊,因为单片机没有直接输出PWM波形的串口,所以我们要在单片机I/O口的输出模 ...

先给你看看我以前做的8路舵机控制器,配合一个上位机调整脉宽:


优酷地址:http://v.youku.com/v_show/id_XODM0MTIyODIw.html?from=y1.7-1.2

第一:我们需要使用一个16位定时器,但是我们可以不用中断,你把定时器配置成1us加1,至于怎么配置不用我说了吧

第二:我们先让输出PWM的IO口输出高电平

第三:控制舵机我们需要产生50HZ的PWM信号,所以周期就是0.02s = 20ms,舵机控制原理详见如下:
                                                                                      http://blog.csdn.net/a2009374138/article/details/8772432
第四:怎么控制PWM信号的周期?
        定时器当前值加到20000的时候就,代表时间到了20000us=20ms,定时器当前值>20000时,把当前值清零,重新计数即可,然后把PWM的IO口拉高。
        (前提是要在主循环里面一直判断,不能有其他的程序干扰,更不能有死等的delay)

第五:怎么控制PWM信号的脉宽?
         创建一个变量,叫脉宽,不停的和定时器当前值比较,当定时器当前值大于脉宽值的时候,把PWM的IO口拉低。这样就控制了脉宽

这样产生的PWM信号就可以控制舵机了。

使用特权

评论回复
7
fsgm388| | 2016-5-14 17:19 | 只看该作者
沉思的牛 发表于 2015-12-25 01:20
先给你看看我以前做的8路舵机控制器,配合一个上位机调整脉宽:

跟我之前用89C2051做的8路控制思路一样,控制8个舵机

使用特权

评论回复
8
雨过天晴天| | 2017-4-30 22:37 | 只看该作者
沉思的牛 发表于 2015-12-25 01:20
先给你看看我以前做的8路舵机控制器,配合一个上位机调整脉宽:

主程序一直循环不能有其他干扰和延时,那脉宽变量怎么改变,所有程序中还能不能加其他功能,比如屏幕显示,电机控制,或者按钮什么的?希望哪位大神能指导下,一直比较困惑。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝