使用 PCA9685 和 PIC 控制风扇速度

问题描述 投票:0回答:1

我想使用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 吗?

pic pwm servo motordriver dc
1个回答
0
投票

已解决,在任何输出上添加 2k2 + TIP120,以便为每个 12v 直流风扇

代码没问题

© www.soinside.com 2019 - 2024. All rights reserved.