Volledige gids: PCA9685-controller met Arduino en meer

  • De PCA9685 is een 16-kanaals PWM-controller die communiceert via I2C.
  • Hij kan zowel LED-verlichting als servo's aansturen en de frequentie is instelbaar tot 1600 Hz.
  • Het is mogelijk om maximaal 62 modules op dezelfde I2C-bus aan te sluiten, waardoor 992 bestuurbare PWM-uitgangen worden bereikt.
  • Het gebruik van bibliotheken zoals Adafruit vereenvoudigt het werken met dit onderdeel op platforms zoals Arduino.

pca9685

De module PCA9685-controller voor Arduino en andere platforms is een veelgebruikte oplossing wanneer u meerdere apparaten moet bedienen die met PWM-signalen werken. Hoewel het aanvankelijk was ontworpen om LED's te besturen, heeft zijn veelzijdigheid ervoor gezorgd dat het ook een veel voorkomende optie is voor het besturen van servo's. Deze chip is enorm populair in robotica- en automatiseringsprojecten vanwege zijn vermogen om meerdere apparaten met precisie en eenvoud te besturen.

Dit artikel laat u niet alleen zien hoe u de PCA9685 gebruikt in combinatie met Arduino en andere microcontrollers, maar beschrijft ook alle technische aspecten die u moet weten om het meeste uit dit onderdeel te halen. We gaan alles uitleggen, van hoe u het aansluit tot hoe u codebibliotheken beheert, zodat u uw motoren en servo's met volledig gemak kunt besturen.

Wat is PCA9685 en waarvoor wordt het gebruikt?

PCA9685 pin-out

El PCA9685 is een PWM-controller (Pulse Breedte Modulatie) ontworpen om maximaal 16 uitgangen te beheren, ideaal voor het aansturen van LED-verlichting en servomotoren. Hij communiceert via de I2C-bus, wat betekent dat hij slechts twee pinnen nodig heeft om verbinding te maken met een microcontroller zoals Arduino of Raspberry Pi. Door het gebruik van specifieke adressen kunt u zelfs maximaal 62 van deze modules op dezelfde I2C-bus aansluiten, waardoor ongeveer 992 PWM-uitgangen worden aangestuurd. Dit maakt het een zeer krachtige optie voor projecten waarbij veel apparaten op een gecoördineerde manier moeten worden beheerd.

Het meest voorkomende gebruik van PCA9685 Het is in projecten waar een PWM-signaal nodig is. Een duidelijk voorbeeld is de aansturing van servo's, die worden aangestuurd vanuit PWM-signalen. Bovendien heeft de controller een nauwkeurigheid van 12 beetjes, waardoor hij zeer fijne signalen kan genereren, met een instelbare frequentie tot maximaal 1600 Hz.

Kenmerken en voordelen van de PCA9685

Een van de belangrijkste voordelen van PCA9685 is dat het de microcontroller ontlast in termen van het voortdurend genereren van PWM-signalen. Dit is vooral handig bij projecten waarbij veel apparaten moeten worden bestuurd, omdat de hoofdprocessor zich hierdoor op andere taken kan concentreren.

  • 16 onafhankelijke kanalen: Elk van de 16 kanalen kan een onafhankelijk PWM-signaal uitvoeren, waardoor u apparaten zoals servo's, motoren en LED-verlichting kunt bedienen.
  • I2C-besturing: De PCA9685 gebruikt een I2C-interface om te communiceren met de hoofdcontroller (Arduino, Raspberry Pi, enz.), en heeft slechts twee kabels nodig voor communicatie (SDA en SCL).
  • Meerdere modules op één bus: Er kunnen maximaal 62 PCA9685-modules worden aangesloten op dezelfde I2C-bus, die maximaal 992 PWM-uitgangen aanstuurt.
  • Verstelbare frequentie: Ondersteunt frequenties tot 1600 Hz, hoewel voor typische servobesturing een frequentie van 50-60 Hz wordt gebruikt.

Verbinding tussen Arduino en PCA9685

Arduino-PCA9685

De verbinding tussen PCA9685-module en een Arduino is eenvoudig en wordt gedaan met behulp van de I2C-pinnen (SCL en SDA) en de power-pinnen. De volgende tabel specificeert typische aansluitingen voor verschillende Arduino-modellen:

Pin PCA9685 Arduino Uno/Oudere broer Arduino mega arduino leonardo
GND GND GND GND
5V 5V 5V 5V
SCL A5 21 3
SDA A4 20 2

In deze configuratie zijn de pinnen A4 en A5 of hun equivalenten op het overeenkomstige platform, sluit u aan op de SDA (data) en SCL (klok) pinnen van de PCA9685-module. Daarnaast is het belangrijk om een ​​geschikte externe voeding voor de servomotoren te hebben, vooral als je meerdere servo's aansluit, omdat de Arduino niet genoeg stroom levert om ze goed aan te sturen.

Het wordt aanbevolen om een 5V-voeding om de servo's van stroom te voorzien, en zorg ervoor dat u de stroompinnen correct aansluit. Als je meer dan 16 servo's gebruikt, is het ook aan te raden om een ​​condensator van 1000uF op het bord te solderen om het vermogen te stabiliseren.

Configuratie in code

Om de PWM-uitgangen van de PCA9685Er wordt gebruik gemaakt van een door Adafruit ontwikkelde bibliotheek. Je kunt het downloaden van uw GitHub-pagina. Hier laten we u een basisvoorbeeld zien om de module te configureren en een servo te verplaatsen:

#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); }

Deze eenvoudige code voert een veegbeweging uit op de servo die is aangesloten op kanaal 0, waarbij deze langzaam van 0 graden naar 180 graden gaat. U kunt de functie gebruiken setPWM() om elk van de PCA9685-uitgangen onafhankelijk te bedienen.

Meerdere servo's tegelijkertijd verplaatsen

Een van de grote voordelen van PCA9685 is dat je hiermee meerdere servo's tegelijkertijd kunt besturen. Zo kunt u meerdere servomotoren naar verschillende posities binnen dezelfde codecyclus verplaatsen:

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); }

In dit geval definiëren we een functie genaamd setServo die het servonummer en zijn hoek als parameters ontvangt, de juiste pulsbreedte berekent en deze naar de gewenste positie verplaatst. Zo kun je eenvoudig meerdere kanalen bedienen.

Grenzen instellen voor verschillende servo's

Niet alle servo's hebben hetzelfde waardenbereik voor hoeken van 0° tot 180°. In sommige gevallen moet u deze waarden op maat aanpassen. Zo kunt u deze instellingen voor verschillende servo's maken:

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); }

Met deze code kun je de minimum- en maximumwaarden aanpassen voor elke servo die op de PCA9685 is aangesloten, wat uiterst handig zal zijn als je servo's met verschillende signaalbereiken gebruikt.

Met dit alles in gedachten beschikt u nu over alles wat u nodig heeft om uw eerste project met de PCA9685 in te stellen, aan te sluiten en te coderen. Of u nu werkt aan een robot met meerdere vrijheidsgraden, of veel apparaten parallel moet besturen, met deze module kunt u dit efficiënt en nauwkeurig doen.

Of u nu met servo's of PWM-uitgangen werkt, de PCA9685 maakt het super eenvoudig om tot 16 kanalen te besturen met slechts twee pinnen op uw microcontroller. Met een beetje ervaring en goede code kun je zeer krachtige applicaties maken zonder de hoofdprocessor te overbelasten.


Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.