Pilotare un servomotore con un potenziometro

10 Anni 10 Mesi fa #26 da Pinna
Già letto e riletto, da parecchio tempo: proprio grazie a Giovanni ed al suo articolo, due anni fa, ho progettato un alimentatore che mi legge volt-ampere, utilizzando le stesse routine modificate per i miei scopi. Se guardi il topic aperto da Doc83 riguardo il suo gaussometro, troverai anche il "mio" progetto a riguardo (l'ultimo che gli ho allegato!!!). Però, nel nostro caso, la logica potrebbe essere leggermente diversa... qui si tratta di mandare un impulso costante, ma non contemporaneamente, a due servi per mantenerli in posizione. Non commettere l'errore che ho fatto io un anno fa: i servi si spostavano ma poi bastava la mia mano per farli girare dove volevo. In parole povere, il servo in posizione non significa che si è spostato per esempio di 45° a destra... significa che se provi a muoverlo con una mano non si deve spostare, deve restare inchiodato anche se ci metti tutta la tua forza.

Marcello

Chi vola vale, chi vale vola, chi non vola è un vile

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
Di più
10 Anni 10 Mesi fa #27 da StefA
vedo che la notte ha portato consiglio.. :P
Non mi ricordo se l'hai scritto nel tuo articolo, ma i pwm non andrebbero bene?
La leva è da 10k?

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
10 Anni 10 Mesi fa #28 da mpeino
Risposta da mpeino al topic Pilotare un servomotore con un potenziometro

Pinna ha scritto: i servi si spostavano ma poi bastava la mia mano per farli girare dove volevo. In parole povere, il servo in posizione non significa che si è spostato per esempio di 45° a destra... significa che se provi a muoverlo con una mano non si deve spostare, deve restare inchiodato anche se ci metti tutta la tua forza.

Marcello


in effetti se il joystick è fermo in posizione centrale il servo deve stare al centro senza muoversi e perchè questo avvenga il segnale deve essere sempre presente.

Bisogna anche considerare alle tolleranze del joystick a riposo non è detto che avremo un segnale di 1.5ms ma questo secondo me si puo' ovviare mettendo in serie un trimmer di basso valore.

Massimo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mpeino
  • Elite Member
  • Elite Member
Di più
10 Anni 10 Mesi fa #29 da StefA
non ho mai usato il timer 1, potresti illustrarmi meglio i conti per vedere che valore mettere dentro timer1?
Se faccio alla maniera del timer0 non mi tornano.
E poi c'è questo..
// Imposto il PreScaler Timer1 1:4
T1CONbits.T1CKPS0 = 0;
T1CONbits.T1CKPS0 = 1;
Ho qualche ricordo, mi sa che ti avevo già torro le scatole su questa cosa...


Non riesco a trovare dove hai abilitato l'interrupt del timer1 e la sua priorità, non si deve settare?

Poi usi queste due funzioni..
void WriteTimer0 ( unsigned int timer0); // Prototipo di funzione estrapolato dal timers.h (MCC18\h)
void WriteTimer1 ( unsigned int timer1); // Prototipo di funzione estrapolato dal timers.h (MCC18\h)

ma non includi il file timers.h come mai funziona ugualmente?

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
10 Anni 10 Mesi fa - 10 Anni 10 Mesi fa #30 da Pinna
e non ti torneranno mai, visto che ancora una volta ho usato il file originale del firmware, ovvero quello non corretto (la correzione l'avevo fatta nel main degli otto servi): in reltà il prescaler è impostato 1:2

T1CONbits.T1CKPS0 = 0;
T1CONbits.T1CKPS0 = 1; vedi che per errore ho scritto due volte T1CONbits.T1CKPS0? Prima l'ho impostato a 0 e poi a 1!!! Mentre T1CONbits.T1CKPS1 è già impostato a 0 di default

Per correttezza e per una migliore comprensione del firmware avrei dovuto scrivere:

// Imposto il PreScaler Timer1 1:2
T1CONbits.T1CKPS0 = 1
T1CONbits.T1CKPS1 = 0; che sono le istruzioni corrette

Grazie ancora per avermelo fatto notare nuovamente

Per quanto riguarda l'altra funzione, se guardi il file timers.h vedrai che all'interno della stessa non c'è nulla... una semplice dichiarazione di funzione.


Allego nuovamente il progetto, con la dovuta correzione...


File allegato:

Nome del file: Servoconpo...etro.rar
Dimensione del file:71 KB



Marcello

Chi vola vale, chi vale vola, chi non vola è un vile
Allegati:
Ultima Modifica 10 Anni 10 Mesi fa da Pinna.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
Di più

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login