Aufgrund der Coronavirus haben wir bei bestimmten Produkten längere Vorlaufzeiten. Wir ermutigen dazu, nicht vorrätige Artikel so schnell wie möglich nachzubestellen. Wir danken Ihnen für Ihr Verständnis und entschuldigen uns für eventuelle Unannehmlichkeiten.
Keyestudio 16-CHANNEL 12-BIT PWM/SERVO DRIVER - I2C INTERFACE for Arduino

Artikelnummer: KS0065

EAN: 4060137112072

HAN: KS0065

Herkunftsland: CN

TARIC-Code: 8542399000

Kategorie: Shield


6,99 €

inkl. 19% USt.,

Längere Lieferzeit beachten!

Lieferfrist: ca. 51 - 53 Tage

Stk


Beschreibung

Einführung

Sie wollen einen coolen Roboter bauen, vielleicht einen Hexapod-Walker oder vielleicht einfach ein Kunstwerk mit vielen beweglichen Teilen. Oder vielleicht wollen Sie eine Menge LEDs mit präziser PWM-Ausgabe betreiben. Dann stellen Sie fest, dass Ihr Mikrocontroller eine begrenzte Anzahl von PWM-Ausgängen hat! Was nun? Sie könnten aufgeben ODER Sie könnten einfach diesen praktischen PWM- und Servotreiber-Breakout bekommen.

Als wir diesen Chip sahen, wurde uns schnell klar, was für ein hervorragendes Add-on dies sein würde. Mit nur zwei Pins können Sie 16 freilaufende PWM-Ausgänge steuern! Sie können sogar 62 Breakouts verketten, um bis zu 992 PWM-Ausgänge zu steuern (was wir wirklich gerne sehen würden, da es herrlich wäre)

Es handelt sich um einen I2C-gesteuerten PWM-Treiber mit eingebautem Takt. Das bedeutet, dass Sie im Gegensatz zur TLC5940-Familie nicht ständig ein Signal an ihn senden müssen, das Ihren Mikrocontroller bindet, sondern dass er völlig frei läuft! 

Es ist 5V-konform, d.h. Sie können es von einem 3,3V-Mikrocontroller aus steuern und trotzdem sicher bis zu 6V-Ausgänge ansteuern (dies ist gut, wenn Sie weiße oder blaue LEDs mit 3,4+ Vorwärtsspannungen steuern wollen)

Merkmale

  • 6 Adressauswahl-Pins, so dass Sie bis zu 62 davon auf einem einzigen i2c-Bus verdrahten können, insgesamt 992 Ausgänge - das sind eine Menge Servos oder LEDs
  • Einstellbare Frequenz PWM bis zu etwa 1,6 KHz
  • 12-Bit-Auflösung für jeden Ausgang - für Servos bedeutet das etwa 4us-Auflösung bei 60Hz Aktualisierungsrate
  • Konfigurierbarer Gegentakt- oder Open-Drain-Ausgang
  • Ausgangsfreigabe-Pin zur schnellen Deaktivierung aller Ausgänge
  • Terminalblock für die Leistungsaufnahme (oder Sie können die 0,1"-Ausbrüche an der Seite verwenden)
  • Verpolungsschutz am Klemmenblockeingang
  • Grüne Power-Good-LED
  • 3-polige Steckverbinder in 4er-Gruppen, so dass Sie 16 Servos auf einmal einstecken können (Servostecker sind etwas breiter als 0,1", so dass Sie nur 4 nebeneinander auf 0,1"-Steckverbindern stapeln können
  • "kettenfähige" Konstruktion
  • Ein Punkt, um einen großen Kondensator auf der V+ Leitung zu platzieren (falls Sie ihn benötigen)
  • 220 Ohm Reihenwiderstände auf allen Ausgangsleitungen, um sie zu schützen und die Ansteuerungs-LEDs trivial zu machen
  • Lötjumper für die 6 Adressauswahl-Pins
  • Diese Platine/dieser Chip verwendet eine I2C-7-Bit-Adresse zwischen 0x60-0x80, wählbar mit Jumpern

Probencode:

#include <Wire.h>

#include <Adafruit_PWMServoDriver.h>

// called this way, it uses the default address 0x40

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

// you can also call it with a different address you want

//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);

// Depending on your servo make, the pulse width min and max may vary, you

// want these to be as small/large as possible without hitting the hard stop

// for max range. You'll have to tweak them as necessary to match the servos you

// have!

#define SERVOMIN 150 // this is the 'minimum' pulse length count (out of 4096)

#define SERVOMAX 600 // this is the 'maximum' pulse length count (out of 4096)

// our servo # counter

uint8_t servonum = 0;

void setup() {

Serial.begin(9600);

Serial.println("16 channel Servo test!");

pwm.begin();

 

pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates

}

// you can use this function if you'd like to set the pulse length in seconds

// e.g. setServoPulse(0, 0.001) is a ~1 millisecond pulse width. its not precise!

void setServoPulse(uint8_t n, double pulse) {

double pulselength;

 

pulselength = 1000000; // 1,000,000 us per second

pulselength /= 60; // 60 Hz

Serial.print(pulselength); Serial.println(" us per period");

pulselength /= 4096; // 12 bits of resolution

Serial.print(pulselength); Serial.println(" us per bit");

pulse *= 1000;

pulse /= pulselength;

Serial.println(pulse);

pwm.setPWM(n, 0, pulse);

}

void loop() {

// Drive each servo one at a time

Serial.println(servonum);

for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {

pwm.setPWM(servonum, 0, pulselen);

}

delay(500);

for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {

pwm.setPWM(servonum, 0, pulselen);

}

delay(500);

servonum ++;

if (servonum > 15) servonum = 0;

}

Bewertungen (0)

Durchschnittliche Artikelbewertung

Geben Sie die erste Bewertung für diesen Artikel ab und helfen Sie Anderen bei der Kaufenscheidung:

----