概要
阿凱在本文中講解了如何使用MicroPython-ESP32通過PCA9685模塊控制舵機旋轉角度。同時也涉及到了MicroPython-ESP32的I2C資源與API講解。
出品:1Z實驗室 (1ZLAB: Make Things Easy)
目錄
PCA9685模塊簡介
問題1:為什么我們要用到舵機驅動模塊?
-
工作電壓
首先ESP32的工作電壓是3.3v,不能直接驅動額定電壓在5v-7.4v的數字舵機,需要外接電源。 -
工作電流
舵機工作電流在100MA~1.5A,運動越快電流越大,可能會損傷USB口. -
IO資源
一般的開發板IO資源有限,例如控制一個6DOF的機械臂,需要占用六個IO口,如果是蛛形機器人的話需要用的也就更多,所以使用舵機驅動板是一種節省IO資源的方式。
問題2:什么是PCA9685?
PCA9685是一款基于IIC總線通信的12位精度16通道PWM波輸出的芯片,該芯片最初由NXP推出時主要面向LED開關調光,但就目前國內的形式來看,好像在被Arduino在舵機控制領域使用的更廣泛。 stm32+pca9685控制舵機機械臂
問題3:單片機與PCA9685如何通信?
PCA9685模塊與單片機通過I2C總線的方式進行通信。
I2C總線是由Philips公司開發的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間傳送信息。
每個PCA9685都可以分配一個地址位,通過I2C接口,一個單片機可以控制最多64個PCA9685舵機控制板。每個舵機控制板上可以搭載16個舵機。
詳細的使用說明見奇果派工坊的這篇文章,寫的很詳細。
16路PWM舵機驅動板(PCA9685)的使用說明-奇果派工坊
MicroPython驅動PCA9685
Adafruit公司開源了MicroPython控制PCA9685模塊的工程:
micropython-adafruit-pca9685
這里我們需要用到這個工程里面的兩個文件:
同時還有對應的開發文檔:
micropython-adafruit-pca9685開發文檔
其中關于舵機驅動的API看這里:Servo Driver
MicroPython-ESP32驅動PCA9685
上傳庫文件
接下來講MicroPython-ESP32與PCA9685。
首先將micropython-adafruit-pca9685
中的pca9685.py
與servo.py
保存到本地,并通過ampy
上傳到ESP32的文件系統中。
創建一個I2C對象
在ESP32里面可以自定義引腳為I2C接口,支持I2C的管腳編號為:
0, 2, 4, 5, 9, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27
0號管腳還有2號管腳比較特殊,不推薦使用。
這里我們使用25號引腳作為SCL引腳(串行時鐘線),26號引腳為SDA(串行數據線)引腳。
連接方式
GND -> ESP32的GND (外接電源與ESP32共地)
SCL -> ESP32 D25
SDA -> ESP32 D26
VCC -> ESP32 3.3V
V+ -> 5v外接電源
代碼片段
from machine import I2C,Pin
gpio_scl = 25
gpio_sda = 26
# 初始化I2C
scl_pin = Pin(gpio_scl)
sda_pin = Pin(gpio_sda)
i2c = I2C(scl=scl_pin, sda = sda_pin, freq=10000) # 創建I2C實例
其中SCL時鐘頻率支持范圍 0 < freq ≤ 500000(Hz)
創建Servos對象
從之前的servo.py
引入Servos
對象,注意不是MicroPython自帶的Servo.
實例化的時候,傳入我們上面創建的I2C對象,同時指定當前PCA9685模塊的地址,默認是0x40
, 你也可以通過焊接PCA9685模塊上面的焊點修改地址編號。
from servo import Servos
servos = Servos(i2c, address=0x40)
控制舵機的角度
設定舵機控制板上的舵機編號servo_idx
, 有效范圍為1-16
另外設置舵機舵機的角度degree
。
TODO 查看源碼 確認degree的范圍
servos.position(servo_idx, degrees=degree)
項目實戰
項目實戰請看二自由度云臺人臉追蹤-MicroPython-ESP32+OpenCV
參考文章
- 16路PWM舵機驅動板(PCA9685)的使用說明-奇果派工坊
- micropython-adafruit-pca9685開發文檔
- stm32+pca9685控制舵機機械臂
- PCA9685模塊在51單片機的簡單應用(舵機)
1ZLAB推廣
出品:1Z實驗室 (1ZLAB: Make Things Easy)
1Z實驗室 Make Things Easy . 致力于在機器人+計算機視覺+人工智能的重疊區域, 制作小白友好的教程.