概述
在本课中我们将介绍如何用树莓派控制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 http://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) 安装python–smbus及i2c–tools(如已安装请跳过)
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模块通道上的舵机将在两个角度之间来回旋转。
DownLoad Url osoyoo.com