概述

在本课中我们将介绍如何用树莓派控制SG90舵机。

所需器件

1 * Raspberry Pi

1 * Breadboard

1 * SG90舵机

1 * PCA9685

1 * 面包板电源

Jumper wires

1 * T-Extension Board

1 * 40-Pin Cable

工作原理

SG90是一款180度舵机,因此SG90舵机轴可以在0-180度范围内旋转。舵机内部直流电机和定位器组成,外部有3条线,红色线是电源正极,棕色线是电源负极,SG90舵机要求电压在4.8V-6V之间电压,黄色线是信号线。信号线引脚需要一个PWM信号控制,舵机旋转角度是由PWM信号的占空比(DutyCycle)决定的。

占空比(DutyCycle)=脉冲宽度(PulseWidth)/周期(Period)

其中

周期(Period)=1/频率(Frequency)

所以

占空比=脉冲宽度/(1/频率)=脉冲宽度*频率

在本课中我们利用PCA9685 16路舵机驱动模块产生控制舵机需要的占空比,从而达到对舵机的精确控制。其中,PCA9685 16路舵机驱动模块以PCA9685作为主控IC,这个芯片能产生16路12位精度的PWM信号,因此能控制同时控制16路伺服电机。这个模块是IIC接口,只需要2个GPIO与控制器相连即可,而且这个模块还支持级联,做多能级联62个相同的模块,也就是说只需用2个GPIO口就能同时控制992个伺服电机。PCA9685 16路舵机驱动模块工作频率可以从24Hz到1526Hz ,占空比在0%-100%范围内可调。更多关于PCA9685的特性请查看datasheet

软件

在进行编程之前,需要对pi进行如下配置和。

1) 打开IIC接口(若已打开请跳过)

sudo  nano  /boot/config.txt

找到”dtparam=i2c_arm”处,按照图示修改

2) 加载IIC(如已加载请跳过)

sudo nano /etc/modules

在modules末尾添加如下两行

i2c-bcm2708
i2c-dev

3) 重启Pi

reboot


for C language users

1 ) 下载源代码并解压

cd  ~

wget  https://osoyoo.com/driver/pi3_start_learning_kit_lesson_12/pca9685-servo.tar.gz

sudo  tar  xzvf  pca9685-servo.tar.gz

2) 改变工作目录

cd  /home/pi/pca9685-servo

3) 编译程序

gcc  -o servo servo.c  pca9685.c  -lwiringPi

4) 运行程序

sudo  ./servo

5) 最终结果

程序会产生一个随机角度(0-180范围内),并转到这个位置。


for python user

1) 安装pythonsmbus及i2ctools(如已安装请跳过)

 sudo  apt-get   install  -y   python-smbus   i2c-tools

2) 测试上面的软件是否安装成功

sudo  i2cdetect  -y  1

or

sudo  i2cdetect  -y  0

上面的命令如果一条执行失败请换另一条

执行完上面的命令,终端会打印出如下信息,说明已安装成功,其中的40(0x40)即为PCA9685的地址

3) 安装PCA9685 python 库

cd  ~

git    clone  https://github.com/adafruit/Adafruit_python_PCA9685.git

cd  Adafruit_python_PCA9685

sudo  python  setup.py   install

4) 测试舵机

cd  examples

sudo  python  ./simpletest.py

5) 最终结果

运行上面的示例脚本程序,PCA9685模块通道上的舵机将在两个角度之间来回旋转。