立即加入會員,消費20元送1點紅利!對抗疫情,請大家勤洗手,保護健康!
icon-search
icon-search
  • Arduino 16路 PWM Servo 舵機驅動板1.jpg

Arduino 16路 PWM Servo 舵機驅動板

NT$ 200.00
- +
icon-cart Add to Cart
首頁

你想做一個很酷的機器人,也許想做一個六足的行走機器人,或者只是一件藝術品帶有許多移動部件。你可能還想用精確的PWM輸出驅動許多LED指示燈。

然後你意識到你的單片機的PWM輸出數量有限!接下來將要怎麼做呢?你可以放棄或你能用這個方便的PWM伺服驅動器小板。

簡介: 

這是一個採用i2c通信 ,內置了PWM驅動器和一個時鐘。這意味著,這將和TLC5940系列有很大不同。你不需要不斷發送信號佔用你的單片機!

它是5V的兼容,這意味著你還可以用3.3V單片機控制並且安全地驅動到6V輸出(當你想控制白色或藍色指示燈用3.4+正電壓也是可以的)

6地址選擇引腳使你可以把62個驅動板掛在單個i2c總線上,總共有992路PWM輸出。那將是非常龐大的資源。

約1.6Khz可調頻PWM輸出

為步進電機準備輸出12位分辨率,這意味著在60Hz的更新率能夠達到4us分辨率

可配置的推拉輸出或開路輸出

輸出使能引腳能夠快速禁用所有輸出

特性: 

※ PCA9685芯片被包裹在小板的中央

※ 電源輸入端子

※ 綠色電源指示燈

※ 在4組3針連接器中方便你一次插入16個伺服電機(伺服電機的插頭稍寬於0.1",所以你可以放4對0.1"的接頭)

※ 接線板上輸入的反向極性保護

※ 級聯設計

※ V+線上放置一個大電容(在某些場合你會需要) 外圍輸入最大電壓取決於這個10V1000uf的電容

※ 所有PWM輸出線上都放一個220歐姆系列電阻器來保護他們,並能輕易的驅動LED。

完整範例程式

#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(0, 0, pulselen);    pwm.setPWM(1, 0, pulselen);    pwm.setPWM(2, 0, pulselen);    pwm.setPWM(3, 0, pulselen);    pwm.setPWM(4, 0, pulselen);    pwm.setPWM(5, 0, pulselen);    pwm.setPWM(6, 0, pulselen);    pwm.setPWM(7, 0, pulselen);    pwm.setPWM(8, 0, pulselen);    pwm.setPWM(9, 0, pulselen);    pwm.setPWM(10, 0, pulselen);    pwm.setPWM(11, 0, pulselen);    pwm.setPWM(12, 0, pulselen);    pwm.setPWM(13, 0, pulselen);    pwm.setPWM(14, 0, pulselen);  }  delay(500);  for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {    pwm.setPWM(0, 0, pulselen);    pwm.setPWM(0, 0, pulselen);    pwm.setPWM(1, 0, pulselen);    pwm.setPWM(2, 0, pulselen);    pwm.setPWM(3, 0, pulselen);    pwm.setPWM(4, 0, pulselen);    pwm.setPWM(5, 0, pulselen);    pwm.setPWM(6, 0, pulselen);    pwm.setPWM(7, 0, pulselen);    pwm.setPWM(8, 0, pulselen);    pwm.setPWM(9, 0, pulselen);    pwm.setPWM(10, 0, pulselen);    pwm.setPWM(11, 0, pulselen);    pwm.setPWM(12, 0, pulselen);    pwm.setPWM(13, 0, pulselen);    pwm.setPWM(14, 0, pulselen);  }  delay(500);


Your Cart

Your cart is currently empty.

Continue browsing here.