2015年10月17日 星期六

Raspberry - 使用PCA9685控制板,控制伺服馬達

本篇文章說明如何使用樹莓派,連接PCA9685 16路PWM控制板,驅動伺服馬達(步進馬達)


樹莓派本身可直接驅動伺服馬達,可參考伺服馬達 甘苦談丫,但若要控制多個伺服馬達,就需透過PCA9685 PWM控制板來達成。


由於網路上許多介紹PWM控制板的文章,都是使用Arduino來實作。不斷地尋找與實驗後,終於找到可行的方法。


首先需要有PCA9685 控制板,很容易可以買得到



PWM控制板與樹莓派的腳位連接如下

腳位對應如下,SDA及SCL分別連接到樹莓派的第3、5腳位,此2 腳位是樹莓派用來做I2C 用途的腳位。

PCA9685Raspberry PI
VCC3.3 VDC Power
GND0V (Ground)
SDA3. SDA0 (I2C)
SCL5. SCL0 (I2C)



以上PWM控制板的4隻腳,皆連接至樹莓派。而PWM控制板上另有2隻VCC、GND腳(如下圖紅框),需連接至另一個獨立的電源,不可與樹莓派共用。





完整的連接方法如下圖


圖中有三點說明如下:
  1. 樹莓派腳位與PWM控制板的連接處,此處的電源來自樹莓派,供給PWM控制板的電源,接上後控制板的燈便會亮起。
  2. 此處接了2組伺服馬達
  3. 另一組獨立電源,此電源是PWM控制板用來推動馬達用的,若不接此電源,伺服馬達便不會轉動。


接下來說明樹莓派程式的部份
     /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

/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個馬達,此程式執行時,馬達會一直不斷地左右轉。