Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 04 maggio 20, 17:38   #91 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
dunque.. rallentare il servo è assurdo perchè si tratta di una controller per un automodello, il servo dello sterzo deve essere reattivo.
ho caricato mobatools ma almeno col mio servo è identica in tutto e per tutto, vibrori compresi
ad ogni modo ho provato la controller con un servo ottimo e le cose forse peggiorano

cambiando la velocità cambia solo la velocità, le vibrazioni sono identiche almeno al mio banco prova.
vabè dai.. ora vedo se riesco a venirne a capo in qualche modo..

il tuo banco prova è molto migliore del mio, a forza di fare prove si è pure annodato tutto

probabilmente la tua radio invia un segnale più pulito della mia
se faccio un video capisci.. sembra un diesel
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 18:11   #92 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
In realta' non si tratta di rallentare, ma di utilizzare una libreria pwm in sostituzione di quella standard che soffre spesso di tartagliamenti.
E' un difetto che sembra conosciuto, anche per questo vi sono tante librerie alternative.
Ultilizzando un automodello sicuramente occorre velocita, ma per un camion potresti riuscie trovare un compromesso accettabile tra velocita' e tartagliamento.
Se vuoi inviami un video, cosi' cerco di capire in che condizioni riscontri il problema e replicarlo al meglio...
Smsteves

E' vero ma che radio utilizzi? Per due gioieliini simili?

Ultima modifica di Smsteves : 04 maggio 20 alle ore 18:17
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 18:54   #93 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
ora ti faccio un video..
uso una spektrum dx3s nulla di speciale.
3 canali giusto perchè i camion hanno il cambio.

stavo appunto guardando le librerie e gli esempi su github per vedere se trovavo qualcosa che potesse riguardare il segnale ppm
https://github.com/willie68/RCReceiver

sto leggendo anche Pulse Position e PPM encoder ma non mi sembra c'entrino nulla.

il punto è che il segnale arriva sporco all'origine..
sulla radio posso settare un parametro che si chiama F Rate e scegliere tra 11ms e 16.5ms
col primo 11ms la vibrazione peggiora
con 16.5 un pò meglio ma non certo ottimo.

ho provato adesso a usare la libreria PWMServo ma si blocca tutto.. non so se ho sbagliato ma scrivere ma non demordo.

Ultima modifica di wrighizilla : 04 maggio 20 alle ore 19:00
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 19:36   #94 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734


a parte 2 escursioni da una parte all'altra, nel video cerco di stare nelle zone dove vibra che sono quelle dove avviene la proporzione dopo Slowlimit..
sotto slowlimit, in neutro o retro vibra un pochino ma funziona tutto molto meglio.
le vibrazioni si hanno da quando inizia la correzione fino al massimo del gas

Ultima modifica di wrighizilla : 04 maggio 20 alle ore 19:40
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 20:10   #95 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
la situazione con la mia radio e' migliore ma non perfetta.

Faro' una prova, suddividerò in n la corsa del impulso in ingresso in modo da squadrettarlo e stabilizzarlo un po'. Vedremo se migliora.
Ps ma non e' che hai l'esponenziale attivo? se cosi' fosse un piccolo movimento corrisponderebbe ad una ampia variazione comunque...
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 20:20   #96 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da Smsteves Visualizza messaggio
la situazione con la mia radio e' migliore ma non perfetta.

Faro' una prova, suddividerò in n la corsa del impulso in ingresso in modo da squadrettarlo e stabilizzarlo un po'. Vedremo se migliora.
Ps ma non e' che hai l'esponenziale attivo? se cosi' fosse un piccolo movimento corrisponderebbe ad una ampia variazione comunque...
no non ho esponenziali, sono su una memoria pulita.
quello che mi formicola in testa è capire se sia possibile equalizzare il segnale in entrata, filtrarlo prima che passi al resto del programma

del tipo che se oscilla tra 1000 e 1005 ruscire a fare in modo (proporzionale) che passi una media tra i 2 valori.. 1003
perchè da monitor seriale questa oscillazione di dati la vedo benissimo ma sembra che serve una specie di controllo PID per fare una sorta di correzione preventiva di questo errore

Ultima modifica di wrighizilla : 04 maggio 20 alle ore 20:24
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 21:51   #97 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Ho cercato i squadrettare il segnale, dividendolo in sezioni di valore definiti.
questo e' il massimo che ottengo, ma non cambia molto provalo te.
hai due scale una per sterzo e una per gas.
piu' piccolo e' il valore maggiore e' la precisione 1-n.

Codice:
#define Neutral 1500 // -- minimum forward signal
#define Maxspeed 2000 // -- maximum forward signal
#define Antsx 1000 // -- in front servo signal sx
#define Antdx 2000 // -- in front servo signal dx
#define Postsx 1000 // out rear servo sx endpoint if inverted with postdx it reverse
#define Postdx 2000 //-- out rear servo dx endpoint if inverted with postsx it reverse
#define Center 0 //-- add or subtract xx value to center steering
#define Tolerance 3 //-- if poor quality servo vibrates try 5
#define Max_gain 950 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1600 //-- slow forward without endpoint correction
#include <MobaTools.h>
MoToServo myservo;
unsigned int Rxpulse;
unsigned int Gaspulse ;
unsigned int Gain;
signed int NewPos, OldPos;
int  Stato;
int Stato_Led=0;
boolean Cmd_Led = false;
int Ledpin=13;
int Led=0;
unsigned int scala_RX=5;
unsigned int scala_GAS=20;

void setup() {
  pinMode(7, INPUT); //-- throttle signal in pin
  pinMode(8, INPUT); //-- front servo signal in pin
  pinMode(Cmd_Led, OUTPUT);
  myservo.attach(10); //-- rear servo signal out pin
   myservo.setSpeed(128);
  Stato = 0;
 }

void loop() {
  if (Stato == 0) {
    //lettura
    Rxpulse = pulseIn(8, HIGH);   
    //Rxpulse = (((Rxpulse-Antsx)/scala)*((Antdx-Antsx)/scala))+Antsx;
    Rxpulse = Rxpulse - Antsx;
    Rxpulse = Rxpulse / scala_RX;
    Rxpulse = Rxpulse * scala_RX ;
    Rxpulse = Rxpulse + Antsx;
    Gaspulse = pulseIn(7, HIGH);
    Gaspulse = Gaspulse - Neutral;
    Gaspulse = Gaspulse / scala_GAS;
    Gaspulse = Gaspulse * scala_GAS;
    Gaspulse = Gaspulse + Neutral; 
  }
  if (Stato == 1) {
    //Calcolo
    if (Gaspulse > Slowlimit) {
      Gain = map(Gaspulse, Slowlimit, Maxspeed, 0, Max_gain );
      NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain));
      Led=1;
    }
    else {
      NewPos = map(Rxpulse, Antsx, Antdx, Postsx, Postdx);
      Led=2;
    }
  }
  if (Stato == 2) {
    //scrittura
    if (abs(NewPos - OldPos) > Tolerance) {
      myservo.write(NewPos + Center);
         OldPos=NewPos;
    }
  }
  // Incrementa stato per il prossimo loop
  ++Stato;
  // Incrementa tempo led per il prossimo loop
  ++Stato_Led;
  if (Stato == 3) {
    // riparte da 0
    Stato = 0;
  }  
  //ritardo esecuzione cicli/stati
  delay(1);
  if (Led == 1) {
    //led veloce
    if (Stato_Led>20) {
    Cmd_Led= !Cmd_Led;
      Stato_Led=0;
    }
    digitalWrite(Ledpin, Cmd_Led);
  }
  if (Led == 2) {
    //led lento
    if (Stato_Led>60) {
    Cmd_Led= !Cmd_Led;
      Stato_Led=0;
    }
    digitalWrite(Ledpin, Cmd_Led);
  } 
}
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 22:15   #98 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Thumbs up

Citazione:
Originalmente inviato da Smsteves Visualizza messaggio
Codice:
    Rxpulse = pulseIn(8, HIGH);   
    //Rxpulse = (((Rxpulse-Antsx)/scala)*((Antdx-Antsx)/scala))+Antsx;
    Rxpulse = Rxpulse - Antsx;
    Rxpulse = Rxpulse / scala_RX;
    Rxpulse = Rxpulse * scala_RX ;
    Rxpulse = Rxpulse + Antsx;
    Gaspulse = pulseIn(7, HIGH);
    Gaspulse = Gaspulse - Neutral;
    Gaspulse = Gaspulse / scala_GAS;
    Gaspulse = Gaspulse * scala_GAS;
    Gaspulse = Gaspulse + Neutral; 
  }
}
Non uso spesso Arduino ed ancora meno le librerie precotte quindi non capisco una cosa del codice qui sopra, assumiamo che:
RxPulse = 1500
Antsx = 1000
scala_RX = 5
ed analizziamo il valore assunto da Rxpulse nei vari step:
Rxpulse = Rxpulse - Antsx; RxPulse = 1500 - 1000 = 500
Rxpulse = Rxpulse / scala_RX; RxPulse = 500 / 5 = 100
Rxpulse = Rxpulse * scala_RX ; RxPulse = 100 * 5 = 500
Rxpulse = Rxpulse + Antsx; RxPulse = 500 + 1000 = 1500

Dove sbaglio ?
Forse con queste operazioni si arrotondano i valori intermedi ? La soluzione mi pare contorta ma, ripeto, di Arduino conosco poco.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)

Ultima modifica di ElNonino : 04 maggio 20 alle ore 22:19
ElNonino non è collegato   Rispondi citando
Vecchio 04 maggio 20, 22:19   #99 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
no non si risolve..
ho sguinzagliato i segugi.. vediamo se fiuteranno qualcosa
ho provato anche a cambiare libreria e usare WriteMicroseconds
ma non cambia nulla.
con tolerance 30 mi sono accorto che funziona eccetto nel tratto della mappatura inversamente proporzionale, ovvero da slowlimit in poi e quando do tutto gas..
boh? mi arrendo, ho chiesto in giro su svariati forums, vediamo se esce qualche soluzione.

comunque lavoro meglio sullo sketch corto senza led perchè lo capisco meglio e non trovo differenze di comportamento tali da giustificarlo.
i led sono didatticamente interessanti ma abbastanza inutili fuori dal banco prova perchè la centralina finisce dentro una scatola chiusa e impermeabile una volta che sarà settata.

i miei camion fanno vitaccia.



Ultima modifica di wrighizilla : 04 maggio 20 alle ore 22:23
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 22:35   #100 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
qui il problema non sembra essere lo sketch, ma qualche inghippo nascosto.
Lo sketch con gli stati permette di regolare tempi e aggiungere facilmente funzioni rispetto ad uno sketch sequenziale, ma siamo fermi alla funzione base purtroppo.
E poi tra i nostri banchi prova con lo stesso software vi e' comunque una differenza.
Ci riprovero' nel we, ma per ora ho dato fondo alla fantasia.
Vediamo se vi sono altre idee...

le operazioni sopra avevano effetto perche' utilizziamo degli interi..
al esempio 1523 /30 = 50 * 30 = 1500...

Ultima modifica di Smsteves : 04 maggio 20 alle ore 22:41
Smsteves non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
buggy da completare BoBoPoP Automodellismo Mot. Scoppio Off-Road 41 18 maggio 16 17:56
monster da completare...! bronto_19 Automodellismo Mot. Elettrico Off-Road 2 22 giugno 10 17:35
Sto costruendo uno schiumino (o tzagi), mi aiutate??? crido96 Aeromodellismo Principianti 72 07 febbraio 10 02:26
Come completare una associated B4? ryan-j Automodellismo Mot. Elettrico On-Road 9 04 maggio 08 11:55



Tutti gli orari sono GMT +2. Adesso sono le 22:49.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002