Modul ini Pengawal PCA9685 untuk Arduino dan platform lain ialah penyelesaian yang digunakan secara meluas apabila anda perlu mengawal beberapa peranti yang beroperasi dengan isyarat PWM. Walaupun pada mulanya ia direka untuk mengawal LED, kepelbagaiannya telah membolehkan ia juga menjadi pilihan yang kerap untuk mengawal servos. Cip ini sangat popular dalam projek robotik dan automasi kerana keupayaannya mengawal berbilang peranti dengan ketepatan dan kesederhanaan.
Artikel ini bukan sahaja akan menunjukkan kepada anda cara menggunakan PCA9685 dalam kombinasi dengan Arduino dan mikropengawal lain, tetapi juga akan memperincikan setiap aspek teknikal yang perlu anda ketahui untuk memanfaatkan sepenuhnya komponen ini. Kami akan menerangkan segala-galanya daripada cara menyambungkannya kepada cara mengurus perpustakaan kod supaya anda boleh mengawal motor dan servos anda dengan mudah.
Apakah PCA9685 dan untuk apa ia digunakan?

El PCA9685 ialah pengawal PWM (Pulse Width Modulation) yang direka untuk mengurus sehingga 16 output, sesuai untuk mengawal lampu LED dan motor servo. Ia berkomunikasi melalui bas I2C, yang bermaksud ia hanya memerlukan dua pin untuk menyambung ke mikropengawal seperti Arduino atau Raspberry Pi. Melalui penggunaan alamat tertentu, anda juga boleh menyambung sehingga 62 modul ini ke bas I2C yang sama, mengawal sekitar 992 output PWM. Ini menjadikannya pilihan yang sangat berkuasa untuk projek yang memerlukan pengurusan banyak peranti dengan cara yang diselaraskan.
Penggunaan yang paling meluas PCA9685 Ia adalah dalam projek di mana isyarat PWM diperlukan. Contoh yang jelas ialah kawalan servos, yang dikawal daripada isyarat PWM. Selain itu, pengawal mempunyai ketepatan 12 bit, yang membolehkannya menjana isyarat yang sangat halus, dengan frekuensi boleh laras sehingga maksimum 1600 Hz.
[amazon box=”B07RG9ZTMD” saiz_gambar=”besar” description_items=”0″ templat=”widget”]
Ciri dan faedah PCA9685
Salah satu kelebihan utama PCA9685 adalah bahawa ia menghilangkan beban dari mikropengawal dari segi menjana isyarat PWM secara berterusan. Ini amat berguna dalam projek yang melibatkan kawalan banyak peranti, kerana ia membolehkan pemproses utama memfokus pada tugas lain.
- 16 saluran bebas: Setiap satu daripada 16 saluran boleh mengeluarkan isyarat PWM bebas, membolehkan anda mengawal peranti seperti servos, motor dan lampu LED.
- Kawalan I2C: PCA9685 menggunakan antara muka I2C untuk berkomunikasi dengan pengawal utama (Arduino, Raspberry Pi, dll.), dan hanya memerlukan dua kabel untuk komunikasi (SDA dan SCL).
- Berbilang modul pada satu bas: Sehingga 62 modul PCA9685 boleh disambungkan pada bas I2C yang sama, mengawal sehingga 992 output PWM.
- Kekerapan boleh laras: Menyokong frekuensi sehingga 1600 Hz, walaupun frekuensi 50-60 Hz digunakan untuk kawalan servo biasa.
Sambungan antara Arduino dan PCA9685

Perkaitan antara modul PCA9685 dan Arduino adalah mudah, dan dilakukan menggunakan pin I2C (SCL dan SDA) dan pin kuasa. Jadual berikut menentukan sambungan tipikal untuk pelbagai model Arduino:
| Pin PCA9685 | Arduino Uno/ Abang | arduino mega | arduino leonardo |
|---|---|---|---|
| GND | GND | GND | GND |
| 5V | 5V | 5V | 5V |
| SCL | A5 | 21 | 3 |
| sumber semula jadi | A4 | 20 | 2 |
Dalam konfigurasi ini, pin A4 dan A5 atau yang setara pada platform yang sepadan, sambungkan ke pin SDA (data) dan SCL (jam) modul PCA9685. Selain itu, adalah penting untuk mempunyai bekalan kuasa luaran yang sesuai untuk motor servo, terutamanya jika anda menyambungkan berbilang servos, kerana Arduino tidak menyediakan arus yang mencukupi untuk memacunya dengan betul.
Adalah disyorkan untuk menggunakan a bekalan 5V untuk menghidupkan servos, dan pastikan anda menyambungkan pin kuasa dengan betul. Jika anda menggunakan lebih daripada 16 servos, ia juga disyorkan untuk mematerikan kapasitor 1000uF pada papan untuk menstabilkan kuasa.
Konfigurasi dalam kod
Untuk menguruskan output PWM bagi PCA9685, perpustakaan yang dibangunkan oleh Adafruit digunakan. Anda boleh memuat turun dari halaman GitHub anda. Di sini kami menunjukkan kepada anda contoh asas untuk mengkonfigurasi modul dan menggerakkan servo:
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(); void setup() { servos.begin(); servos.setPWMFreq(60); // Configura la frecuencia PWM a 60Hz } void loop() { servos.setPWM(0, 0, 172); // Mueve el servo del canal 0 a la posición 0 grados delay(1000); servos.setPWM(0, 0, 565); // Mueve el servo a la posición 180 grados delay(1000); }
Kod mudah ini melakukan gerakan sapuan pada servo yang disambungkan ke saluran 0, mengambilnya dari 0 darjah kepada 180 darjah secara perlahan. Anda boleh menggunakan fungsi tersebut setPWM() untuk mengawal setiap keluaran PCA9685 secara bebas.
Menggerakkan beberapa servos pada masa yang sama
Salah satu kelebihan hebat dari PCA9685 ialah ia membolehkan anda mengawal berbilang servos secara serentak. Begini cara anda boleh mengalihkan berbilang motor servo ke kedudukan berbeza dalam kitaran kod yang sama:
void loop() { setServo(0, 30); setServo(2, 90); setServo(4, 180); delay(1000); } void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, 172, 565); servos.setPWM(n_servo, 0, duty); }
Dalam kes ini, kami menentukan fungsi yang dipanggil setServo yang menerima nombor servo dan sudutnya sebagai parameter, mengira lebar nadi yang sesuai dan mengalihkannya ke kedudukan yang dikehendaki. Dengan cara ini anda boleh mengawal berbilang saluran dengan mudah.
Bagaimana untuk menetapkan had untuk servos yang berbeza
Tidak semua servos mempunyai julat nilai yang sama untuk sudut dari 0° hingga 180°. Dalam sesetengah kes, anda perlu menyesuaikan nilai ini. Begini cara anda boleh membuat tetapan ini untuk servos yang berbeza:
unsigned int pos0[16]= {172, 256, 246, 246, 246, 172, 246, 200}; unsigned int pos180[16]= {565, 492, 492, 492, 492, 565, 492, 550}; void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, pos0[n_servo], pos180[n_servo]); servos.setPWM(n_servo, 0, duty); }
Kod ini membolehkan anda melaraskan nilai minimum dan maksimum bagi setiap servo yang disambungkan ke PCA9685, yang akan sangat berguna jika anda menggunakan servo dengan julat isyarat yang berbeza.
Dengan semua ini dalam fikiran, anda kini mempunyai semua yang anda perlukan untuk menyediakan, menyambung dan mengekodkan projek pertama anda menggunakan PCA9685. Sama ada anda bekerja pada robot dengan pelbagai darjah kebebasan, atau perlu mengawal banyak peranti secara selari, modul ini akan membolehkan anda melakukannya dengan cekap dan tepat.
Sama ada anda bekerja dengan servos atau output PWM, PCA9685 menjadikannya sangat mudah untuk mengawal sehingga 16 saluran menggunakan hanya dua pin pada mikropengawal anda. Dengan sedikit pengalaman dan kod yang baik, anda boleh mencipta aplikasi yang sangat berkuasa tanpa membebankan pemproses utama.