این ماژول یک برد بر پایه چیپ PCA9685 می باشد . PCA9685 یک درایور 16 کاناله LED است ، اما در این ماژول پین های PCA9685 در جهت کنترل سروو موتور گسترش داده شده است . این ماژول به صورت یک درایور PWM با 16 خروجی می باشد که می توان توسط آن 16 عدد سرو موتور را تنها از طریق دو پین کنترل کرد . در میکروکنترلر هایی که تعداد پین های خروجی PWM آن ها کم است ، به راحتی می توان توسط این ماژول خروجی PWM آن را به 16 کانال گسترش داد . در این ماژول برای هر کانال خروجی ، سه پین هدر در نظر گرفته شده است که دو پین آن مربوط به تغذیه سرو موتور و یک پین آن خروجی PWM می باشد . علاوه بر سرو موتور ، می توان از این ماژول جهت داریو کردن LED استفاده کرد ، اما این ماژول به بهترین شکل ممکن برای راه اندازی سروو طراحی شده است . سرو موتور ها ، موتور هایی با قابلیت تنظیم میزان حرکت می باشند که از طریق یک پین ، کنترل می شوند (دو پین تغذیه و یک پین ورودی سیگنال PWM ) . ارتباط این ماژول با MCU به صورت I2C است لذا می توان چندین ماژول را از طریق تنها دو پین ارتباطی کنترل کرد .در راه اندازی سرو موتور ها ، باید از خروجی های PWM واحد MCU استفاده شود . اما در بعضی از میکروکنترلر ها تعداد پین های خروجی PWM کم است ، در این حالت می توان با استفاده از این ماژول پین های PWM واحد MCU را به 16 تا گسترش داد. به طور مثال در ساخت و راه اندازی ربات های عنکبوت نیاز به چندین سروو موتور می باشد که به راحتی توسط این ماژول می توان این سروو ها را از طریق رابط I2C کنترل کرد .

 

مشخصات :

  • ولتاژ تغذیه 2.7 تا 5.5 ولت
  • دارای ارتباط I2C
  • دارای 16 کانال خروجی
  • گسترش خروجی ها به 3 پین برای اتصال به سرو موتور
  • دارای ترمینال اتصال تغذیه موتور ها
  • امکان گسترش ماژول تا 62 ماژول ( راه اندازی 992 سروو موتور )
  • دارای LED نشانگر اتصال تغذیه
  • امکان تغییر آدرس ارتباط I2C (پشتیبانی از 64 آدرس )

 

 

پین های ماژول PCA9685 :

در این ماژول سه سری پین هدر به صورت زیر وجود دارد :

  • 16 عدد پین هدر 3 تایی برای اتصال به سروو موتور ها
  • یک ردیف پین هدر 6 تایی در سمت چپ ماژول برای اتصال به MCU
  • یک ردیف پین هدر 6 تایی در سمت راست ماژول برای گسترش ماژول

 

راه اندازی ماژول PCA9685 توسط آردوینو :

در برنامه زیر از کتابخانه Adafruit_PWMServoDriver استفاده شده است که می توانید از این لینک آن را دانلود کنید .

#include <Wire.h>//https://www.arduino.cc/en/reference/wire
#include <Adafruit_PWMServoDriver.h>//https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library
//Constants
#define nbPCAServo 16
//Parameters
int MIN_IMP [nbPCAServo] ={500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500};
int MAX_IMP [nbPCAServo] ={2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500};
int MIN_ANG [nbPCAServo] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int MAX_ANG [nbPCAServo] ={180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180};
//Objects
Adafruit_PWMServoDriver pca= Adafruit_PWMServoDriver(0x40);
void setup(){
//Init Serial USB
Serial.begin(9600);
Serial.println(F("Initialize System"));
pca.begin();
pca.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
}
void loop(){
pcaScenario();
}
void pcaScenario(){/* function pcaScenario */ 
////Scenario to test servomotors controlled by PCA9685 I2C Module
for (int i=0; i<nbPCAServo; i++) {
Serial.print("Servo");
Serial.println(i);
//int middleVal=((MAX_IMP[i]+MIN_IMP[i])/2)/20000*4096; // conversion µs to pwmval
//pca.setPWM(i,0,middleVal);
for(int pos=(MAX_IMP[i]+MIN_IMP[i])/2;pos<MAX_IMP[i];pos+=10){
pca.writeMicroseconds(i,pos);delay(10);
}
for(int pos=MAX_IMP[i];pos>MIN_IMP[i];pos-=10){
pca.writeMicroseconds(i,pos);delay(10);
}
for(int pos=MIN_IMP[i];pos<(MAX_IMP[i]+MIN_IMP[i])/2;pos+=10){
pca.writeMicroseconds(i,pos);delay(10);
}
pca.setPin(i,0,true); // deactivate pin i
}
}
int jointToImp(double x,int i){/* function jointToImp */ 
////Convert joint angle into pwm command value
int imp=(x - MIN_ANG[i]) * (MAX_IMP[i]-MIN_IMP[i]) / (MAX_ANG[i]-MIN_ANG[i]) + MIN_IMP[i];
imp=max(imp,MIN_IMP[i]);
imp=min(imp,MAX_IMP[i]);
return imp;
}

 

 

 

Tags:
About Author: USER_4