“Servo Driver Board”的版本间的差异

来自丢石头百科
 
(未显示同一用户的34个中间版本)
第33行: 第33行:
 
**VCC:电源正极,电路板工作电压(主要是给驱动芯片供电)
 
**VCC:电源正极,电路板工作电压(主要是给驱动芯片供电)
 
**V+:舵机工作电压。当接入舵机数量较少时,可从此处供电
 
**V+:舵机工作电压。当接入舵机数量较少时,可从此处供电
*舵机供电端:舵机工作电压,当接入舵机数量较多时,必须从此处供电
+
*舵机供电端:舵机工作电压,与VCC相通
 
*主控芯片:PCA9685,具备IIC通信,同时内置了PWM驱动器和一个时钟,最大支持16路舵机控制
 
*主控芯片:PCA9685,具备IIC通信,同时内置了PWM驱动器和一个时钟,最大支持16路舵机控制
*IIC地址选择:级联时可通过A5-A0更改模块IIC地址,初始I2C地址是0x40
+
*IIC地址选择:7位I2C地址为:0x80 + A5:A0+R/W,A5到A0如果不做任何处理的话是0,想要把哪一位置1就把那个引脚焊到一起。初始I2C地址是0x80(写入)
 
*级联控制端;当多个驱动板级联时可通过该引脚扩展
 
*级联控制端;当多个驱动板级联时可通过该引脚扩展
 
*舵机控制端/PWM输出端:16路舵机控制端,黄色为PWM控制线,红色为舵机电源线,黑色为地线。舵机编号从左开始,最左侧为一号舵机,以此类推共十六个舵机
 
*舵机控制端/PWM输出端:16路舵机控制端,黄色为PWM控制线,红色为舵机电源线,黑色为地线。舵机编号从左开始,最左侧为一号舵机,以此类推共十六个舵机
  
=树莓派使用=
+
== 使用说明 ==
提供python控制,功能包括简单的PCA9685库测试程序,wifi遥控程序以及蓝牙遥控程序。<br />
+
=== 精度说明 ===
{{RPI_open_i2c}}
+
*PCA9685的分辨率是12位,即占空比控制时,0-4096对应的占空比为0-100,在控制舵机的时候,控制信号是0.5ms-2.5ms,周期20ms,所以控制舵机角度不会有太高的分辨率,对舵机控制精度较高的地方不建议使用。
 +
*以舵机SG90为例,舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。那么对应的控制关系是这样的:
 +
**180度伺服
 +
**[[File:Micro Servo_控制原理.png|400px]]
 +
*则对该舵机而言:
 +
**舵机控制的PWM周期为20ms
 +
*旋转x度是对应的高电平时间t1=0.5ms+(x/180)*(2.5ms-0.5ms)
 +
*旋转x度是对应的计数值t2=(4096*t1)/20ms
  
==安装库==
+
=== 地址分配 ===
<pre>
+
*PCA9685的器件地址是由引脚A0,A1,A2,A3,A4,A5共同决定。由于有6个引脚共同决定器件地址,因此,可以有64个器件地址,但由于该IC上电便保留LED All Call address (0xE0,0111 0000)以及Software Reset address(0x06,0000 0110),实际仅有62个可用器件地址,因此,理论上,1个I2C接口可控制16*62=992路PWM。
sudo apt-get updata
+
*根据芯片手册,地址位的寄存器一共8位,其中最高位固定是1,A0-A5这六位是用户可更改的,而其中最关键的一位是R/W位,这一位主要是决定了读还是写,置1时为读,置0时为写。所以在写程序的时候,PCA9685的地址应把R/W位加上。在写的时候,发送地址位是0x80,在读的时候,发送的地址位是0x81。
sudo apt-get install python-pip
+
**[[File:Servo Driver Board_使用说明0.png|600px]]
sudo pip install RPi.GPIO
+
*模块级联时每个驱动板都需要有一个唯一的访问地址。可以通过A5-A0的跳线修改I2C地址。用焊锡将一个跳线连上就表示一个二进制数字“1”,断开则表示二进制数字“0”。如下图所示,该驱动板的IIC地址应为0x82(写)/0x83(读)
sudo apt-get install python-smbus
+
**[[File:Servo Driver Board_使用说明1.png|500px]]
</pre>
 
  
==下载示例程序,并解压到指定目录==
+
=== 接线说明 ===
<pre>
+
==== 单个驱动板 ====
sudo apt-get install p7zip-full
+
*VCC引脚只是为芯片供电,如果要连接舵机或者LED灯,就使用V+引脚供电,V+引脚支持3.3-6V的电源
wget http://wiki.diustou.com/w/upload/6/6c/Servo_Driver_HAT.7z
+
*此驱动板采用IIC接线方式,实际使用时将驱动板的SCL、SDA引脚与MCU对应的IIC引脚相连即可
7zr x Servo_Driver_HAT.7z -r -o./Servo_Driver_HAT
+
*大多数舵机都是使用标准3线母插头连接,只要按照对应的引脚插入驱动板就可以了。(地线一般为黑色或棕色、信号线一般为黄色或白色)
sudo chmod 777 -R Servo_Driver_HAT
+
*[[File:Servo Driver Board_使用说明2.png|600px]]
cd Servo_Driver_HAT/Raspberry\ Pi/
 
</pre>
 
  
==运行测试例程==
+
==== 驱动板级联(以Arduino UNO为例) ====
==python例程==
+
*多驱动板级联:最多可级联62个
<pre>
+
*[[File:Servo Driver Board_使用说明3.png|600px]]
#如果你是python2,树莓派默认是python2.7
 
cd python/
 
sudo python PCA9685.py
 
#如果你是python3
 
cd python3/
 
sudo python3 PCA9685.py
 
</pre>
 
实验现象:将舵机接到0号通道,0号通道的舵机从0度转到180度,然后又从180度转动到0度,不断重复循环。<br />
 
  
===wifi遥控程序===
+
== 参考例程 ==
<pre>
+
*[[:File:Servo Driver Board_参考资料.zip|参考资料(STC89C51、STM32F103ZET6、Arduino)]]
cd Wifi-Control/
 
sudo python main.py
 
</pre>
 
操作与现象:发送端(手机或者电脑)和接收端(树莓派),需要连接到同一个局域网。程序是通过TCP协议传输数据,程序运行后会显示树莓派IP,服务器端口号是8000.<br />
 
手机打开APP,选择Wifi遥控,输入对应的IP地址和端口号,点击连接.<br />
 
[[file:servo_driver_hat_wifi.png|900px]]<br />
 
连接成功进入控制界面,点击按键可以控制0~4号通道的舵机正反转。<br />
 
[[file:servo_driver_hat_wifi1.png|900px]]<br />
 
也可在电脑上运行Qt软件控制,如下图<br />
 
[[file:servo_driver_hat_wifi2.png|900px]]<br />
 
  
===蓝牙遥控程序===
+
== 数据手册 ==
执行:<br />
 
<pre>
 
sudo apt-get update
 
sudo apt-get upgrade -y
 
sudo apt-get dist-upgrade -y
 
sudo apt-get install pi-bluetooth bluez bluez-firmware blueman
 
sudo usermod -G bluetooth -a pi
 
sudo vi /etc/systemd/system/dbus-org.bluez.service
 
sudo reboot
 
</pre>
 
启动/增加SPP,开启蓝牙设备<br />
 
<pre>
 
sudo vi /etc/systemd/system/dbus-org.bluez.service
 
</pre>
 
[[file:servo_driver_hat_bt.png|900px]]<br />
 
重启树莓派后,输入hciconfig命令(类似ifconfig命令)查看蓝牙服务<br />
 
[[file:servo_driver_hat_bt2.png|900px]]<br />
 
如果有看到hci0设备则蓝牙已经开启工作。如果没有则没有识别到蓝牙设备<br />
 
运行如下命令启动程序<br />
 
<pre>
 
cd Servo_Driver_HAT/python/Bluetooth-Control
 
sudo ./Bluetooth.sh
 
</pre>
 
操作与现象:程序运行后会提示等待蓝牙连接,手机App选择蓝牙遥控,点击扫描,发现raspberrypi设备并连接。<br />
 
[[file:servo_driver_hat_bt3.png|900px]]<br />
 
连接程序后进入控制界面,点击按键可以遥控0~4通道的舵机正反转了。<br />
 
[[file:servo_driver_hat_bt4.png|900px]]<br />
 
注意:如果接收到的命令不对,可能需要在APP中config一下对应按键按下和松开时发送的命令。<br />
 
[[file:servo_driver_hat_bt5.png|900px]]<br />
 
注意:树莓派默认是只有180s的发现时间,如果想一直可以发现和配对,如果通过修改下面的文件配置。<br />
 
<pre>
 
sudo vi /etc/bluetooth/main.conf
 
</pre>
 
找到下面两个语句并去掉注释。<br />
 
[[file:servo_driver_hat_bt6.png|900px]]<br />
 
程序兼容python3 ,运行的时候将python替换成python3即可。<br />
 
更多关于树莓派wifi和蓝牙遥控可以参考AlphaBot2:<br />
 
[[AlphaBot2]]
 
 
 
=Jetson nano=
 
提供python控制<br />
 
==安装库==
 
{{JetsonNano python lib}}
 
 
 
==下载示例程序,并解压到指定目录==
 
<pre>
 
sudo apt-get install p7zip
 
wget http://wiki.diustou.com/w/upload/6/6c/Servo_Driver_HAT.7z
 
7zr x Servo_Driver_HAT.7z -r -o./Servo_Driver_HAT
 
sudo chmod 777 -R Servo_Driver_HAT
 
cd Servo_Driver_HAT/Jetson\ Nano/
 
</pre>
 
 
 
==运行测试例程==
 
*python2
 
<pre>
 
cd python2/
 
sudo python test.py
 
</pre>
 
 
 
*python3
 
<pre>
 
cd python3/
 
sudo python3 test.py
 
</pre>
 
 
 
</div>
 
 
 
<div class="tabbertab" title="资料">
 
===文档===
 
*[https://{{SERVERNAME}}/w/upload/a/a2/Servo_Driver_HAT_Schematic_.pdf 原理图]
 
 
 
===程序===
 
*[https://{{SERVERNAME}}/w/upload/6/6c/Servo_Driver_HAT.7z 示例程序]
 
 
 
===软件===
 
*[https://{{SERVERNAME}}/w/upload/a/a9/AlphaBot_Qt.7z Windows Qt 客户端]
 
*[https://{{SERVERNAME}}/w/upload/8/8f/AlphaBot_LITE.apk  安卓App控制客户端]
 
*[https://{{SERVERNAME}}/w/upload/3/39/AlphaBot_LITE_Code.7z  安卓App控制客户端源码]
 
 
 
===数据手册===
 
 
*[https://{{SERVERNAME}}/w/upload/6/68/PCA96_datasheet.pdf PCA9685]
 
*[https://{{SERVERNAME}}/w/upload/6/68/PCA96_datasheet.pdf PCA9685]
*[https://{{SERVERNAME}}/w/upload/d/d3/MP1584.pdf MP1584]
 
*[https://{{SERVERNAME}}/w/upload/f/f6/RT9193.pdf RT9193]
 

2024年4月26日 (五) 09:55的最新版本

Servo Driver Board
Servo Driver Board 示意图.png
基本信息

分类: 舵机

品牌: 丢石头

功能简介
特性
  • 舵机控制/PWM输出

接口

I2C接口

相关产品

{{{related}}}

前言

本产品是通过PCA9685芯片扩展16路舵机控制或者PWM输出,每个通道12位分辨率。通过I2C接口控制,无需占用额外的引脚。不仅如此,还可以通过级联的方式最多级联62个驱动板,总共可以驱动992个舵机。适用于控制机械手臂,以及各种舵机机器人。

产品特性

  • 输入电压VCC:2.3V-5.5V,最大耐压值5.5V
  • 逻辑电压:3.3V
  • 舵机电压:≤6V,一般为5V
  • 驱动芯片:PCA9685(内置25MHz晶振,可不连接外部晶振,也可以连接外部晶振,最大50MHz)
  • 控制接口:I2C(支持高达16路PWM输出,每路12位分辨率(4096级))
  • 固定孔通径:3.0mm

硬件说明

  • Servo Driver Board 模块说明.png
  • 控制引脚:
    • GND:电源负极
    • OE:使能端,一般不接
    • SCL:IIC时钟线
    • SDA:IIC数据线
    • VCC:电源正极,电路板工作电压(主要是给驱动芯片供电)
    • V+:舵机工作电压。当接入舵机数量较少时,可从此处供电
  • 舵机供电端:舵机工作电压,与VCC相通
  • 主控芯片:PCA9685,具备IIC通信,同时内置了PWM驱动器和一个时钟,最大支持16路舵机控制
  • IIC地址选择:7位I2C地址为:0x80 + A5:A0+R/W,A5到A0如果不做任何处理的话是0,想要把哪一位置1就把那个引脚焊到一起。初始I2C地址是0x80(写入)
  • 级联控制端;当多个驱动板级联时可通过该引脚扩展
  • 舵机控制端/PWM输出端:16路舵机控制端,黄色为PWM控制线,红色为舵机电源线,黑色为地线。舵机编号从左开始,最左侧为一号舵机,以此类推共十六个舵机

使用说明

精度说明

  • PCA9685的分辨率是12位,即占空比控制时,0-4096对应的占空比为0-100,在控制舵机的时候,控制信号是0.5ms-2.5ms,周期20ms,所以控制舵机角度不会有太高的分辨率,对舵机控制精度较高的地方不建议使用。
  • 以舵机SG90为例,舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。那么对应的控制关系是这样的:
    • 180度伺服
    • Micro Servo 控制原理.png
  • 则对该舵机而言:
    • 舵机控制的PWM周期为20ms
  • 旋转x度是对应的高电平时间t1=0.5ms+(x/180)*(2.5ms-0.5ms)
  • 旋转x度是对应的计数值t2=(4096*t1)/20ms

地址分配

  • PCA9685的器件地址是由引脚A0,A1,A2,A3,A4,A5共同决定。由于有6个引脚共同决定器件地址,因此,可以有64个器件地址,但由于该IC上电便保留LED All Call address (0xE0,0111 0000)以及Software Reset address(0x06,0000 0110),实际仅有62个可用器件地址,因此,理论上,1个I2C接口可控制16*62=992路PWM。
  • 根据芯片手册,地址位的寄存器一共8位,其中最高位固定是1,A0-A5这六位是用户可更改的,而其中最关键的一位是R/W位,这一位主要是决定了读还是写,置1时为读,置0时为写。所以在写程序的时候,PCA9685的地址应把R/W位加上。在写的时候,发送地址位是0x80,在读的时候,发送的地址位是0x81。
    • Servo Driver Board 使用说明0.png
  • 模块级联时每个驱动板都需要有一个唯一的访问地址。可以通过A5-A0的跳线修改I2C地址。用焊锡将一个跳线连上就表示一个二进制数字“1”,断开则表示二进制数字“0”。如下图所示,该驱动板的IIC地址应为0x82(写)/0x83(读)
    • Servo Driver Board 使用说明1.png

接线说明

单个驱动板

  • VCC引脚只是为芯片供电,如果要连接舵机或者LED灯,就使用V+引脚供电,V+引脚支持3.3-6V的电源
  • 此驱动板采用IIC接线方式,实际使用时将驱动板的SCL、SDA引脚与MCU对应的IIC引脚相连即可
  • 大多数舵机都是使用标准3线母插头连接,只要按照对应的引脚插入驱动板就可以了。(地线一般为黑色或棕色、信号线一般为黄色或白色)
  • Servo Driver Board 使用说明2.png

驱动板级联(以Arduino UNO为例)

  • 多驱动板级联:最多可级联62个
  • Servo Driver Board 使用说明3.png

参考例程

数据手册