Я работаю над проектом, в котором разрабатывается дрон, однако я столкнулся с проблемой, когда я не могу заставить винты вращаться в определенных ситуациях.Мой вопрос будет связан с использованием 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();
}