标题: stm32f103驱动pca9685 舵机不动 求帮助 [打印本页]

作者: wzl-mcu    时间: 2019-8-19 14:51
标题: stm32f103驱动pca9685 舵机不动 求帮助
为什么我的这个程序无法让舵机动起来,请大佬指教
#include "./EEPROM/EEPROMH.H"
#include "./I2C/I2CH.H"
#include <stdio.h>
#include <math.h>

void delayms(u32 z)
{
  u32 x,y;
  for(x=z;x>0;x--)
      for(y=148;y>0;y--);
}

void PCA9685_write(u8 address,u8 date)
{
   I2C_START();            
   I2C_WRITE_BYTE(PCA9685_adrr);        //PCA9685的片选地址
   I2C_ACK();                          
   I2C_WRITE_BYTE(address);  //写地址控制字节
   I2C_ACK();
   I2C_WRITE_BYTE(date);          //写数据
   I2C_ACK();
   I2C_STOP();
}

u8 PCA9685_read(u8 address)
{
    u8 date;
    I2C_START();
    I2C_WRITE_BYTE(PCA9685_adrr); //PCA9685的片选地址
    I2C_ACK();
    I2C_WRITE_BYTE(address);
    I2C_ACK();
    I2C_START();
    I2C_WRITE_BYTE(PCA9685_adrr|0x01);   //地址的第八位控制数据流方向,就是写或读
    I2C_ACK();
    date=I2C_READ_BYTE();
    I2C_STOP();
    return date;
}

void reset(void)
{
   PCA9685_write(PCA9685_MODE1,0x0);
}


void begin(void)
{
  reset();
}

void setPWMFreq(float freq)
{
   u16 prescale,oldmode,newmode;
   float prescaleval;
   freq *= 0.92;  
   prescaleval = 25000000;
   prescaleval /= 4096;
   prescaleval /= freq;
   prescaleval -= 1;
   prescale = floor(prescaleval + 0.5f);

   oldmode = PCA9685_read(PCA9685_MODE1);
   newmode = (oldmode&0x7F) | 0x10;
   PCA9685_write(PCA9685_MODE1, newmode);
   PCA9685_write(PCA9685_PRESCALE, prescale);
   PCA9685_write(PCA9685_MODE1, oldmode);
   delayms(2);            
   PCA9685_write(PCA9685_MODE1, oldmode | 0xa1);
}


void setPWM(u16 num, u16 on, u16 off)
{
  PCA9685_write(LED0_ON_L+4*num,on);
  PCA9685_write(LED0_ON_H+4*num,on>>8);
  PCA9685_write(LED0_OFF_L+4*num,off);
  PCA9685_write(LED0_OFF_H+4*num,off>>8);
}


int main(void)
{
    begin();
    setPWMFreq(50);  

   while(1)
    {
      setPWM(12, 0, SERVO000);//第12路舵机转到0角度
      delayms(1500);
    }   
}        

舵机.7z

176.29 KB, 下载次数: 12

这是我的工程


作者: wzl-mcu    时间: 2019-11-14 10:11
大哥解决了吗?我也碰到了同样的问题,有时程序烧进去可以动有时又不能动




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1