NXP PCA9685 16通道驅動板模塊的舵機(Servo)編程,由於 NXP PCA9685 內置有 PWM(Pulse Width Modulation)的功能,祇要控制 PWM 的佔空比(Duty Cycle),便可以控制舵機(Servo)的角度。
NXP PCA9685 16通道驅動板模塊 LCD 顯示 |
舵機(Servo)的轉動角度和 PWM 的關係 |
轉 -90° = 0.60ms / 20ms = 3% x 4096 = 129 = 0x0081
轉 -45° = 1.05ms / 20ms = 5.25% x 4096 = 215 = 0x00D7
轉 0° = 1.50ms / 20ms = 7.5% x 4096 = 307 = 0x0133
轉 +45° = 1.95ms / 20ms = 9.75% x 4096 = 400 = 0x0190
轉 +90° = 2.40ms / 20ms = 12% x 4096 = 492 = 0x01EC
NXP
PCA9685 PWM 初始化程式:
// MODE1 Control Byte
PCA9685_WD_BYTE(PCA9685_ADDR+2);
PCA9685_WD_BYTE(PCA9685_MODE1);
PCA9685_WD_BYTE(0xA1);
StopI2C2();
// MODE2 Control Byte
PCA9685_START_BUS();
PCA9685_WD_BYTE(PCA9685_ADDR+2);
PCA9685_WD_BYTE(PCA9685_MODE2);
PCA9685_WD_BYTE(0b00001101);
StopI2C2();
// Set Up Frequency = 50Hz
PCA9685_WD_PRESCALE(i2c_addr, 0x81);
// Mode1 Bit4=0 PWM will
Operate
PCA9685_WD_BYTE(i2c_addr);
PCA9685_WD_BYTE(PCA9685_MODE1);
PCA9685_WD_BYTE(0b00100001); // 0xA1
|
NXP
PCA9685 PWM 主程式:
while( 1 ) {
// ***** AntiClockwise -90
*****//
PCA9685_START_BUS();
PCA9685_WD_BYTE(i2c_addr);
PCA9685_WD_BYTE(0x06);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0xEC);
PCA9685_WD_BYTE(0x01);
StopI2C2();
delayms(2000);
// ***** Stop Servo *****//
PCA9685_START_BUS();
PCA9685_WD_BYTE(i2c_addr);
PCA9685_WD_BYTE(0x06);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
StopI2C2();
delayms(2000);
// ***** Centre 0 *****//
PCA9685_START_BUS();
PCA9685_WD_BYTE(i2c_addr);
PCA9685_WD_BYTE(0x06);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x1C);
PCA9685_WD_BYTE(0x01); // 0x133 Centre 0
StopI2C2();
delayms(2000);
// ***** Stop Servo *****//
PCA9685_START_BUS();
PCA9685_WD_BYTE(i2c_addr);
PCA9685_WD_BYTE(0x06);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
StopI2C2();
delayms(2000);
// ***** Clockwise +90 *****//
PCA9685_START_BUS();
PCA9685_WD_BYTE(i2c_addr);
PCA9685_WD_BYTE(0x06);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x62);
PCA9685_WD_BYTE(0x00); // 0x0062 = Clockwise +90
StopI2C2();
delayms(2000);
// ***** Stop Servo *****//
PCA9685_START_BUS();
PCA9685_WD_BYTE(i2c_addr);
PCA9685_WD_BYTE(0x06);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
PCA9685_WD_BYTE(0x00);
StopI2C2();
delayms(2000);
} // End while
|
NXP PCA9685 16通道驅動板模塊接上舵機(Servo) |
2016年 10月 29日 天氣報告
氣溫:25.3度 @ 21:30
相對濕度:百分之 77%
天氣:微雨