我想使用PIC和PCA9685来控制各种电机的速度
以下代码允许我开始旋转,但不会降低速度
void pca9685_Set_rate(int address, int rate)
{
i2c_start();
i2c_write(address);
i2c_write(MODE1);
i2c_write(Sleep);
i2c_stop();
i2c_start();
i2c_write(address);
i2c_write(PreScale);
i2c_write(rate);
i2c_stop();
i2c_start();
i2c_write(address);
i2c_write(MODE1);
i2c_write(PCA9685AI); // Set MODE1 back to INT_CLK, AutoIncrement, Normal
i2c_stop();
__delay_us(500); // required for PCA oscillator startup
}
void pca9685_Set_speed(int address, int line, int speed)
{
unsigned int on_count = 0;
unsigned int off_count = speed;
i2c_start();
i2c_write(address);
i2c_write((line*4)+6);
i2c_write(on_count); //Writing 8 LSB bits of ON count
i2c_write(on_count>>8); //Writing 4 MSB bits of ON count
i2c_write(off_count); //Writing 8 LSB bits of OFF count
i2c_write(off_count>>8); //Writing 4 MSB bits of ON count
i2c_stop();
}
在main()中
enter code here
pca9685_Set_rate(0x80, 0x03); // 1600
ledn = 1;
pca9685_Set_speed(0x80, ledn, 4095);
DelayMs(500);
DelayMs(500);
DelayMs(500);
DelayMs(500);
pca9685_Set_speed(0x80, ledn, 3500);
DelayMs(500);
DelayMs(500);
DelayMs(500);
DelayMs(500);
pca9685_Set_speed(0x80, ledn, 3000);
DelayMs(500);
DelayMs(500);
DelayMs(500);
DelayMs(500);
pca9685_Set_speed(0x80, ledn, 2500);
DelayMs(500);
DelayMs(500);
DelayMs(500);
DelayMs(500);
pca9685_Set_speed(0x80, ledn, 2000);
我在 PCA9685 输出上使用单个 MOSFET 将电平转换为 12V
这可能是问题所在吗?我必须使用 tb6612 或 DRV8833 吗?
已解决,在任何输出上添加 2k2 + TIP120,以便为每个 12v 直流风扇
代码没问题