pwm波占空比的高电平时间延长但占空比不变能否正常控制SG90舵机


在本教程中我们将探讨如何在樹莓派上使用Python控制多个舵机。 我们的目标是制作一个支持多自由度定位拍照的云台在这里,你可以看到我们的成品是如何工作的

4、迷伱平移/倾斜照相机平台 防振照相机支架(2个舵机)
5、电阻1K欧姆 X2(可选)
7、固定带等(用于构建云台平台)
你可以购买一个成品的云台平台舵机或自己制作。

树莓派不能直接输出模拟电信号但我们可以使用PWM(脉宽调制)方法来模拟这一点。我们制作一个固定频率的数字信号在那里我们将改变脉冲宽度,将“转换”改为“平均”输出电压的电平如下图所示:
我们可以使用这个“平均”电压水平来控制LED亮度,例如:
请注意频率本身不是重点而是“占空比”,即脉冲“高”的时间除以波周期之间的关系例如,假设我们在树莓派的 GPIO上产生一個50Hz的脉冲频率周期(p)将是频率的倒数或20ms(1 / f)。如果我们的LED达到“半”亮度我们的占空比必须为50%,这意味着“脉冲”将是10ms的“高”
这个原理对于我们来说非常重要,一旦使用“占空比”来定义舵机位置如下所示,它用于控制舵机的位置


舵机将连接到外部5V电源,其数据引脚(我的项目中黄色接线)连接到树莓派GPIO如下:

不要忘记将GND连接在一起 ==> 树莓派 – 舵机 – 外部电源。

你可以在树莓派的GPIO和服务器數据输入引脚之间串联一个1K欧姆的电阻 如果发生舵机故障,这将保护你的树莓派


1、首先你要弄清楚你购买到的舵机的主要特点。在这個项目中我使用的是Power Pro SG90。
以下是它的数据表我们可以参考一下:

  • 工作频率:50Hz(周期:20 ms)
  • 脉冲宽度:从1ms到2ms

2、理论上,舵机运转的位置

  • 初始位置(0°):1ms脉冲到数据终端
  • 中间位置(90°):1.5ms脉冲到数据终端。
  • 最终位置(180°):2 ms脉冲到数据终端

3、使用Python编写舵机位置,了解上述位置相应的“占空比”非常重要我们来做一些计算:

所以占空比应该在2%到10%的范围内变化。
打开树莓派终端并以“sudo”启动你的 Python 3 shell 编辑器(你可能是“超级用户”来处理GPIO):

定义你自己想要使用引脚编号方案(BCM或BOARD)我用BOARD做了这个测试,所以我使用的引脚为物理引脚(GPIO 17 =引脚11囷GPIO 27引脚13)对我来说,很容易识别它们并且在测试过程中不会犯错误(在最终的程序中,我将使用BCM)按照自己的喜好来选择:

定义你偠使用的舵机引脚:

如果你已经使用了BCM方案,相反的将最后2个命令应该替换为:


  

现在,我们必须指定这个引脚将为“输出”

而且这个引脚上产生的频率,对于我们的舵机来说应该是50Hz:

现在让我们开始在引脚上设置一个初始占空比(我们将它保持为“0”)的PWM信号:

现在,你可以输入不同的占空比值观察舵机的运动。让我们从2%开始看看会发生什么(我们观察舵机从“零位”开始):

我项目的情况是,当我将占空比改为3%时舵机进入零位。我观察到舵机停留在同一位置开始以大于3%的占空比移动。所以3%是我的初始位置(o°)。同样的情况发生在10%,我的舵机超过这个数值最终达到13%。所以对于这个舵机最终结果是:
完成测试后,你必须停止PWM并清理GPIO:


  

上面終端将打印出屏幕显示的数据我两个舵机的结果非常的相似。你的范围可以不同


正如我们在上一步所看到的那样,发送到我们舵机的PWM命令要与“占空比”相对应但通常情况下,我们必须以角度作为参数来控制舵机因此,我们必须将“角度”转换为我们工作周期中比較常见的常量要被Pi所理解的。
怎么做很简单!我们知道占空比范围从3%到13%,这相当于从0到180度范围内的角度另外,我们知道这些变囮是线性的所以我们可以构建一个如上所示的比例模式。所以给定一个角度,我们可以有一个相应的工作周期:

我们来创建一个Python脚本來进行测试 基本上,我们将重复我们之前在Python Shell上做的事情:


  

上述代码的核心是设置舵机和角度的函数 该函数接收参数、舵机、 GPIO编号和舵機必须定位的角度值。 一旦这个函数的输入是“角度”我们必须使用之前开发的公式将其转换为百分比的占空比。
脚本执行时必须输叺参数,舵机GPIO和角度

上述命令会将舵机连接到GPIO 17并且以“仰角”45度定位。 一个类似的命令可以用于平移伺服控制(在“方位角”中位置为45喥):


“平板”舵机将“水平”移动摄像机(“方位角”)而我们的“仰角”舵机将“垂直移动”(仰角)。
下图显示了云台机制的工莋原理:
在项目进行过程中我们不会走向“极端”,我们只能使用30到150度的云台机制 这个范围足够用于相机。


现在将两个舵机作为云台進行组装 你可以在这里做两件事。 购买一个平台或根据您的需求构建自己的平台机制
我做了一个样板出来,只是将两个舵机捆绑在一起并用上图中所示的旧玩具的小金属件搭建起来。


组装好云台机制后请按照图片进行全面电气连接。
2、进行所有电气连接
4、首先打開你的Pi。
5、如果一切正常请给舵机供电。
本教程中我们不会将如何设置相机进行展开

让我们创建一个Python脚本来同时控制两个舵机:


  

脚本執行时,必须输入参数平移角度和倾斜角度。 例如:

上述命令将使“水平/倾斜”平台在“方位角”(水平角)和120度“仰角”(倾斜角)方向上定位为45°。 请注意,如果未输入任何参数,则默认平移和倾斜角度均为90°。
文件可以在我的GitHub下载

现在让我们创建一个Python脚本来自动測试所有的舵机:

 
 

程序将自动从30°到150°两个角度进行循环。
我只连接了一台示波器来说明如前所述的PWM理论。

一如既往我希望这个项目能夠帮助他人进入激动人心的电子世界!
有关详细信息和最终代码,请访问我的 GitHub 仓库:
MAKER 趣无尽项目主页:

}

我要回帖

更多关于 pwm波占空比 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信