樹莓派本身可直接驅動伺服馬達,可參考伺服馬達 甘苦談丫,但若要控制多個伺服馬達,就需透過PCA9685 PWM控制板來達成。
由於網路上許多介紹PWM控制板的文章,都是使用Arduino來實作。不斷地尋找與實驗後,終於找到可行的方法。
首先需要有PCA9685 控制板,很容易可以買得到
PWM控制板與樹莓派的腳位連接如下
腳位對應如下,SDA及SCL分別連接到樹莓派的第3、5腳位,此2 腳位是樹莓派用來做I2C 用途的腳位。
PCA9685 | Raspberry PI |
---|---|
VCC | 3.3 VDC Power |
GND | 0V (Ground) |
SDA | 3. SDA0 (I2C) |
SCL | 5. SCL0 (I2C) |
以上PWM控制板的4隻腳,皆連接至樹莓派。而PWM控制板上另有2隻VCC、GND腳(如下圖紅框),需連接至另一個獨立的電源,不可與樹莓派共用。
完整的連接方法如下圖
圖中有三點說明如下:
- 樹莓派腳位與PWM控制板的連接處,此處的電源來自樹莓派,供給PWM控制板的電源,接上後控制板的燈便會亮起。
- 此處接了2組伺服馬達
- 另一組獨立電源,此電源是PWM控制板用來推動馬達用的,若不接此電源,伺服馬達便不會轉動。
接下來說明樹莓派程式的部份
- 根據 I2C Installation for Raspberry Pi 的說明,檢查這個檔案(此檔也有可能不存在)
/etc/modprobe.d/raspi-blacklist.conf
若有 blacklist i2c-bcm2708 這行,在前面加上#號註解掉
- 修改這個檔案
/etc/modules增加這行文字i2c-dev
- 更新 i2c-tools
sudo apt-get install i2c-tools
sudo apt-get install python-smbus
- 將目前的使用帳號加入i2c 群組
sudo adduser pi i2c
- 根據 i2c stop working 這個問題討論中,建議再檢查這個檔案
/boot/config.txt
將這行指令加入
dtparam=i2c1=on
- 重啟樹莓派,然後使用以下指令,檢查安裝是否成功
sudo i2cdetect -y 0 或sudo i2cdetect -y 1
在上一個步驟中,若沒有加入dtparam 這行指令,有可能在執行這個指令時,遇到以下錯誤Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory
若順利跑出以下這張圖的內容,則表示成功驅動伺服馬達的程式,可由Adafruit-Raspberry-Pi-Python-Code 下載其中這2個檔案是驅動程式函式庫Adafruit_I2C.py Adafruit_PWM_Servo_Driver.py
範例程式則是 Servo_Example.py,說明如下pwm.setPWMFreq(60) # Set frequency to 60 Hz while (True): # Change speed of continuous servo on channel O pwm.setPWM(0, 0, servoMin) # 將位置 0 的馬達,轉動至 servoMin time.sleep(1) # 暫停一秒 pwm.setPWM(0, 0, servoMax) # 將位置 0 的馬達,轉動至 servoMax time.sleep(1) # 暫停一秒
記得馬達要接在第 0 個位置,0~15 共可驅動16個馬達,此程式執行時,馬達會一直不斷地左右轉。