Arduino läsa av PWM och invertera den
Arduino läsa av PWM och invertera den
Hej!
Jag tänkte försöka skapa en pryl till min Crawler så att jag kan skoja till det med styrningen på bakre hjulen.
Jag har en Arduino Pro Mini över som jag tänkte använda till detta projektet och koppla in 2 kanaler från min radio till den
Kanal1 är styrningen till framhjulen
Kanal2 är en kanal kopplad till en on/off switch (momentan)
UT blir en kanal till bakre styrningen
Nu tänkte jag loopa igenom 3 lägen efter en impuls från kanal2
MODE 1 Neutral (ingen styrning - håller bara bakre servot centrerat)
MODE 2 Inverterad(bakre styrning går då tvärt emot vad framhjulen gör)
MODE 3 Samma (bakre hjulen svänger åt samma håll som framhjulen)
Det jag funderar på är ett bra sätt att läsa av inkommande PWMsignal och invertera den vid behov.
Tillvägagångssättet kan jag tänka mig blir beroende på hur jag kan vända på PWMsignalen?
//UndCon
Jag tänkte försöka skapa en pryl till min Crawler så att jag kan skoja till det med styrningen på bakre hjulen.
Jag har en Arduino Pro Mini över som jag tänkte använda till detta projektet och koppla in 2 kanaler från min radio till den
Kanal1 är styrningen till framhjulen
Kanal2 är en kanal kopplad till en on/off switch (momentan)
UT blir en kanal till bakre styrningen
Nu tänkte jag loopa igenom 3 lägen efter en impuls från kanal2
MODE 1 Neutral (ingen styrning - håller bara bakre servot centrerat)
MODE 2 Inverterad(bakre styrning går då tvärt emot vad framhjulen gör)
MODE 3 Samma (bakre hjulen svänger åt samma håll som framhjulen)
Det jag funderar på är ett bra sätt att läsa av inkommande PWMsignal och invertera den vid behov.
Tillvägagångssättet kan jag tänka mig blir beroende på hur jag kan vända på PWMsignalen?
//UndCon
Re: Arduino läsa av PWM och invertera den
Kan du inte bara köra PWM signalen genom en NOT-grind? Eller pwm_ut = !pwm_in
Re: Arduino läsa av PWM och invertera den
Tänker du inte fel nu ?.
Servon styrs med pulslängd på 1ms till 2ms (Fullt höger till fullt vänster).
Frekvensen som pulserna kommer med varierar en hel del mellan olika utrustningar.
För att reversera en puls måste altså en 1ms modifieras till 2ms linjärt, och tvärtom.
Att invertera kommer inte ge rätt resultat.
Servon styrs med pulslängd på 1ms till 2ms (Fullt höger till fullt vänster).
Frekvensen som pulserna kommer med varierar en hel del mellan olika utrustningar.
För att reversera en puls måste altså en 1ms modifieras till 2ms linjärt, och tvärtom.
Att invertera kommer inte ge rätt resultat.
Re: Arduino läsa av PWM och invertera den
Ah, jag läste nog inte tråden tillräckligt bra. Inte tänkte jag att det skulle till en servo
Ja tänkte bara att målet var 25% pwm ->75% pwm.

Re: Arduino läsa av PWM och invertera den
med invertera menar jag att 1ms skall bli 2ms (och allt där mellan för alla utslag)
Jag har testat lite med Servo.h och där kan man enkelt begränsa utslagen vilket kan vara användbart.
Jag har testat lite med Servo.h och där kan man enkelt begränsa utslagen vilket kan vara användbart.
Re: Arduino läsa av PWM och invertera den
Det går inte att göra under samma puls som man mäter eftersom man inte
kan veta hur lång ut-pulsen ska vara förrens in-pulsen är slut. Du får läsa
in en puls och mäta den och sedan generera motsvarande "spegelvänd"
puls med valfri RC-servo-kod som du kan hitta. D.v.s att utpulsen kommer
att ligga (minst) 20 ms sent rellativt inpulsen. Spelar kanske ingen roll...
kan veta hur lång ut-pulsen ska vara förrens in-pulsen är slut. Du får läsa
in en puls och mäta den och sedan generera motsvarande "spegelvänd"
puls med valfri RC-servo-kod som du kan hitta. D.v.s att utpulsen kommer
att ligga (minst) 20 ms sent rellativt inpulsen. Spelar kanske ingen roll...
Re: Arduino läsa av PWM och invertera den
Nu pratar vi om styrningen till de bakre hjulparet på en bil med max toppfart om 5km/h.
Då spelar det ingen roll om bakre styrningen ligger efter lite.
Pulsen för neutralt servo är väl oftast 1.5ms?
Då spelar det ingen roll om bakre styrningen ligger efter lite.
Pulsen för neutralt servo är väl oftast 1.5ms?
Re: Arduino läsa av PWM och invertera den
En RC-servo puls är 1.5 ms +/- 0.5 ms.
Så ja, 1.5 ms brukar vara "mitten" vad det nu är.
Så ja, 1.5 ms brukar vara "mitten" vad det nu är.
Re: Arduino läsa av PWM och invertera den
jag läser av inkommande PWM med denna kod:
int pin = 7;
unsigned long duration;
void setup()
{
pinMode(pin, INPUT);
Serial.begin(9600); // debugging serial console
}
void loop()
{
duration = pulseIn(pin, HIGH);
Serial.print("PWM = " );
Serial.println(duration);
}
den ger väden mellan ~970 och ~2000 (beroende på vad jag ställer in radion på)
och någonstans i mitten på spaken hamnar jag runt 1500 så det verkar stämma bra.
Nu till den matematiska delen...att vända på talen
int pin = 7;
unsigned long duration;
void setup()
{
pinMode(pin, INPUT);
Serial.begin(9600); // debugging serial console
}
void loop()
{
duration = pulseIn(pin, HIGH);
Serial.print("PWM = " );
Serial.println(duration);
}
den ger väden mellan ~970 och ~2000 (beroende på vad jag ställer in radion på)
och någonstans i mitten på spaken hamnar jag runt 1500 så det verkar stämma bra.
Nu till den matematiska delen...att vända på talen
Re: Arduino läsa av PWM och invertera den
Spegelpuls=(2000-SampladPuls)+1000
Edit:Kastade om i formeln
Edit:Kastade om i formeln
Re: Arduino läsa av PWM och invertera den
Jag testade lite och det verkade inte ge helt rätt resultat 
Skall testa med den mya formeln och se om det går bättre...
Jag tänkte att allt skulle rymmas i en gammal filmburk - problemet är att hitta dessa när man inte köpt film på flera år...

Skall testa med den mya formeln och se om det går bättre...
Jag tänkte att allt skulle rymmas i en gammal filmburk - problemet är att hitta dessa när man inte köpt film på flera år...
Re: Arduino läsa av PWM och invertera den
sodjan har delvist rätt men inte helt. Pulsen måste först komma i sin helhet innan men vet hur lång den är men sedan kan man skicka ut den önskade pulslängd direkt efter att den är mottagit klart. Då denna "trimmade" puls ju "bara" ska ersätta den inkommande puls behöver man inte att vara känslig med när den skickas ut, PRF blir ändå lika.
- farbrorvattenmelon
- Inlägg: 285
- Blev medlem: 29 januari 2009, 21:38:21
Re: Arduino läsa av PWM och invertera den
Lite svårt då man via en annan kontroll ska kunde välja om den ska vara inverterat, stationär eller vrida med.
Re: Arduino läsa av PWM och invertera den
Det är lite lustigt...
Jag får ett servo att röra sig som det skall beroende på in-signalen
Om jag inverterar signalen och skickar den till ett annat servo blir den helt ryckig och följer inte alls med 1a servots mjuka fina rörelser.
Men de värden jag skriver ut är ok...
Jag får ett servo att röra sig som det skall beroende på in-signalen
Om jag inverterar signalen och skickar den till ett annat servo blir den helt ryckig och följer inte alls med 1a servots mjuka fina rörelser.
Kod: Markera allt
int rc_in_Pin = 8; //front steering in
int rc_out_Pin =10; // front steering out (only for visualisation)
int rc_out2_Pin =11; // rear steering out
unsigned long duration;
void setup()
{
pinMode(rc_in_Pin, INPUT);
pinMode(rc_out_Pin, OUTPUT);
pinMode(rc_out2_Pin, OUTPUT);
Serial.begin(9600); // debugging serial console
}
void loop()
{
duration = pulseIn(rc_in_Pin, HIGH); // read front steering pwm
analogWrite(rc_out_Pin, duration); // output same as above
Serial.print("PWM input= ");
Serial.println(duration);
invertPWM(rc_out2_Pin, duration);
}
void invertPWM(int pin, int invValue)
{
invValue=(2000-invValue)+1000;
analogWrite(pin, invValue);
delay (15);// to allow servo to gain position
Serial.print("PWM inverted out= ");
Serial.println(invValue);
}