Ich verwende einen Arduino Uno, um einen Regler für meinen (laufenden) Quadrocopter zu steuern. Ich benutze derzeit die Servobibliothek, um den Regler zu steuern, was großartig funktioniert.
Außer..
Eine Zählung von 100 ist die Höchstgeschwindigkeit, was bedeutet, dass ich nur 10 Geschwindigkeiten zwischen 90 (gestoppt) und 100 (Motor bei voller Leistung) habe, um meinen Quadrocopter korrekt zu betreiben. Ich hätte gerne viel mehr Geschwindigkeitsoptionen. Irgendwelche Ideen? Es fällt mir schwer, ein PWM-Signal zu verwenden, aber ich mache es möglicherweise nicht richtig.
Mein aktueller Code ist hier :
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(8); // attaches the servo on pin 8 to the servo object
}
void loop()
{
int maxspeed=100;
int minspeed=0;
int delaytime=5;
int count;
for(count=0; count <1; count+=1) {
for(pos = minspeed; pos < maxspeed; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delaytime); // waits 15ms for the servo to reach the position
}
for(pos = maxspeed; pos>=minspeed; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delaytime); // waits 15ms for the servo to reach the position
}
if(count>1){
break;
}
}
myservo.write(92);
delay(100000);
myservo.write(90);
delay(10000000);
}
quelle
Ihr Code verwendet das typische Verfahren,
servo.attach(pin)
bei dem Sie die Überlast von verwenden könnenservo.attach(pin, min, max)
, um die minimalen und maximalen Mikrosekunden der Impulsbreite so einzustellen, dass sie den gewünschten Bereichen für Ihren Regler entsprechen. Um noch deutlicher zu machen, womyservo.write(90);
der Winkel eingestellt wird, können Siemyservo.writeMicroseconds(1500);
die Dauer des Impulses direkt in Mikrosekunden einstellen.quelle