STM32 Синяя пилюля управления двигателем - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю над проектом, в котором разрабатывается дрон, однако я столкнулся с проблемой, когда я не могу заставить винты вращаться в определенных ситуациях.Мой вопрос будет связан с использованием ESC, в то время как связь I2C также присутствует.Для меня совершенно ясно, как использовать запуск двигателей и поддержание постоянной скорости, которая работает правильно в этом случае:

void setup() 
{
  Serial.begin(9600);
  //setupMPU(); //If this piece of line is commented out motors don't spin.

  myservo1.attach(PB1); 
  myservo2.attach(PB0);
  myservo3.attach(PA7); 
  myservo4.attach(PA6);

  for (int pos = 900; pos <= 1200; pos += 20) 
  {
    // in steps of 1 degree
    myservo3.writeMicroseconds(pos);
    myservo4.writeMicroseconds(pos);
    myservo1.writeMicroseconds(pos);
    myservo2.writeMicroseconds(pos);
    delay(200);
  }

Для измерения ускорений и угловых скоростей я использую MPU-6050датчик и, как только функция setupMPU() закомментирована, пропеллеры вообще не хотят вращаться.Упомянутый метод содержит следующее (это просто простая конфигурация датчика IMU с использованием I2C):

void setupMPU(){
  Wire.beginTransmission(0b1101000); //This is the I2C address of the MPU (b1101000/b1101001 for AC0 low/high datasheet sec. 9.2)
  Wire.write(0x6B); //Accessing the register 6B - Power Management (Sec. 4.28)
  Wire.write(0b00000000); //Setting SLEEP register to 0. (Required; see Note on p. 9)
  Wire.endTransmission();  
  Wire.beginTransmission(0b1101000); //I2C address of the MPU
  Wire.write(0x1B); //Accessing the register 1B - Gyroscope Configuration (Sec. 4.4) 
  Wire.write(0x00010000); //Setting the gyro to full scale +/- 250deg./s 
  Wire.endTransmission(); 
  Wire.beginTransmission(0b1101000); //I2C address of the MPU
  Wire.write(0x1C); //Accessing the register 1C - Acccelerometer Configuration (Sec. 4.5) 
  Wire.write(0b00010000); //Setting the accel to +/- 2g
  Wire.endTransmission(); 
}
...