Nya och förbättrade borstlös Electric Scooter Power System Guide (7 / 19 steg)
Steg 7: R/C Controller kommunikation och signalering
Bly-bilden är en bild av en typisk "servo kommando" pulse bredd puls: 1500 mikrosekunder är en neutral eller noll Hastighetssignal, 1000 mikrosekunder vanligtvis full power ett sätt och 2000 full power den andra. Medan servon och robot Controller bemöta puls varaktigheter som anges, är en typisk flygplan controller enkelriktad. Den vanligaste "default" är 1000uS som noll hastighet och 2000uS som full fart, eller något som liknar detta intervall. Naturligtvis, kan de ekonomiska och sociala råden kalibreras för att acceptera olika slutpunkter på ska, så att denna distinktion är mest oviktiga.
En enkel "Servo testare" är din vän
Strypventilinsats fordon är i grunden en knopp som du vänder dig till generera en signal till något som styr hur snabbt fordonet går. I gasdrivna motorer med fordon, detta reglage kan bokstavligen har dragit på motorns Spjällhus, men allmänt dessa dagar är det en elektronisk signal till datorn som motor.
Det finns en liten enhet som säljs kommersiellt som gör just uppgiften att konvertera en knopp rörelse till "servo" pulser i hobby världen, och det kallas en servo testare . Ett exempel visas i bild 2. detta ett särskilt . De används i stället för att inrätta en hela radio och mottagare bara för att se till att din servon fungerar. Märker att en (och mest billiga sådana säljs idag) har tre utgångar - här kan du testa alla 3 servon i en helikopter huvudrotorns samtidigt. Du behöver bara använda en.
Den coola delen om de flesta servo testare är att du direkt kan släppa en 0-5v källa, till exempel ett 3-tråds potentiometer eller kommersiella fordon gasreglage, i förlägga av vredet (vilket i sig är en potentiometer). 3. bilden visar en konvertering jag har gjort att som särskild servo testare modell - den 3 stift går till ett kommersiellt hand gasreglage (mer på de delarna i en bit). Efter detta stadium är klar har du en direkt analog spänning till servo puls omvandlare som kan installeras i ett fordon.
Observera att dessa kommer med olika lägen tillgängliga såsom "neutral", användbara för att hålla din servo centrerad när du justera kopplingar och "sweep", som automatiskt en full 1000-2000uS sopa. Dessa lägen är inte användbara och om oavsiktligt markerat under drift, kan resultera i dålig . Det rekommenderas att ta bort knappen som väljer lägena.
Fullständig hårdvara metod
Om du älskar tortera dig själv, kan du bygga en 100% hårdvara (dvs motstånd, linjär integrerade kretsar, caps) timing krets som kommer att konvertera en 0-5v hänvisning till lämpligt servo pulsen. Jag länkar till några i den äldre utgåvan, men dessa dagar, har du ingen ursäkt att använda en full maskin servo testare med tanke på att de kostar som 5 cent. Hårdvara komponent värdena ändras med temperatur- och även, och det finns fler delar, lämnar dem mer benägna att misslyckas.
Throttle rampning
Eftersom Sensorlös R/C styrenheter verkligen inte kan styra hur mycket ström de skickar till motorn (och nuvarande är direkt proportionell mot vridmoment), och låg hastighet börjar kan vara ojämn och svårt att styra, det är bra att ha en "ramp" någonstans i kedjan spjäll. Utan ramp eller någon annan typ av kontroll input dämpning, kan plötsliga ryck rörelser av handen eller foten resultera i fordonet svarar oväntat som en plötslig tillämpning av makt. Detta är inte bara svårt att fungera, men det kan vara direkt farligt om du är i trafik eller runt andra människor.
Ramp kan ske antingen i maskinvara eller programvara.
Hårdvara-motstånd-kondensator filter
I fjärde är bilden en "RC filter" typ krets, där RC är resistor-kondensator , som jämnar ut skarpa transienter i kontroll indata. Den allmänna formen av kretsen är känt som ett lågpassfilter, och dess tekniska detaljer kommer inte att diskuteras (Wikipedia kan ge bättre behandling än jag någonsin kan). Värdena för ditt val av R och C bestämma dämpningen "tidskonstanten", och som bara ges av Trise = R * C .
Nej, verkligen, det var allt. Så i exempel en 100K resistor och en 10uF kondensatorn tillsammans bildar ett filter som har en stigtiden 1 sekund - vilket betyder att om du våningen från stillastående (som du inte bör göra ändå, eller hur? ) styrsignalen tar 1 sekund till 63% (definierad standard tröskeln för denna krets). Sanna lösa tid definieras som den tid det tar för utdata till över 90% av slutvärdet och är allmänt accepterat för att vara 3 tid konstanter (3 * T). Du kan justera R och C värden att uppnå snabb men ett filter som du vill.
Det är viktigt att motståndet är av betydligt högre (minst 10 gånger) värde än potentiometer spjäll, och bör vara minst 10 K ohm. Anledningen är att om motståndet är alltför nära den potten totala motstånd, potentiometern påverkar filtrets tidskonstant starkt. Jag satte 100K som ett exempel, men med de flesta fordon gasspjäll är 5K ohm motstånd, försök att använda minst en 47K motstånd. Kondensatorn kan vara någon polariserade eller Opolariserad typ, men om det är polariserat, Lägg det i rak. Hela kretsen kan vara lödde inline med ett gasreglage sele.
Den andra varianten av denna krets lägger till en enkelriktad bypass systemet så att strypa ner är unramped - vilket betyder att om du släpper från full gas, det inte tar en full andra för spjäll signalen att sakta komma tillbaka ner, det kommer att göra det nästan omedelbart . Diod bedriver om spänningen på potentiometer sida är lägre än kondensatorn spänningen (som är utdata), så att det effektivt sorterar indata till utgång för dessa positioner.
I program som använder en mikrokontroller
Ramp finns också i programvara kan uppnås om du gör din egen servo testare-liknande anordning ändå. Exempelvis följande Arduino kod implementerar rampning genom att en R/C puls i på en digital pin och spotta det tillbaka ut på en annan. Detta skrevs av Arduino och motorisk kontroll master Shane Colton .
#include < Servo.h >
#define THR_MIN 178
#define THR_MAX 870
#define PWM_MIN 1000
#define PWM_MAX 2000
#define SPEED_LIMIT 0,33 / / bråkdel av full fart
#define RAMP_LIMIT 0,13 / / bråkdel av full hastighet per sekund
Servo tgypwm;
flyta pwm_f = (float) PWM_MIN;
void setup()
{
pinMode (9, OUTPUT);
tgypwm.attach(9);
/ * tgypwm.writeMicroseconds(PWM_MAX);
Delay(5000);
*/
tgypwm.writeMicroseconds(PWM_MIN);
Delay(5000);
Serial.BEGIN(9600);
}
void loop()
{
undertecknat int thr = THR_MIN;
flyta thr_f = (float) thr;
flyta pwm_target = (float) PWM_MIN;
unsigned int pwm_i = PWM_MIN;
THR = analogRead(7);
thr_f = (float)(thr-THR_MIN) / (float) (THR_MAX - THR_MIN);
pwm_target = thr_f * SPEED_LIMIT * (float)(PWM_MAX-PWM_MIN) + (float) PWM_MIN;
IF(pwm_target > pwm_f)
{
pwm_f += RAMP_LIMIT * (float)(PWM_MAX-PWM_MIN) * 0,05;
}
annat
{
pwm_f = pwm_target;
}
pwm_i = (unsigned int) pwm_f;
tgypwm.writeMicroseconds(pwm_i);
Serial.println(pwm_f);
Delay(50);
}