Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema servocomando

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto UtenteBrunoValente, Foto UtenteDirtyDeeds, Foto Utentecarloc, Foto UtenteIsidoroKZ, Foto Utenteg.schgor

0
voti

[11] Re: Problema servocomando

Messaggioda Foto Utentefantamed » 10 nov 2013, 16:59

ho caricato il tuo hex,di conseguenza ho dovuto collegare anche l'altro servo visto che nel kit ce ne sono 2 e mi sono accorto che solo uno dei due funzionava ovvero facevo tutte le prove con il servo non funzionante,nel momento in cui ho allacciato il servo funzionante funziona tutto sia il tuo hex che i miei #-o #-o
facendo alcune prove ho notato che il servo:

gira a dx con 2ms
posiz. centrale 1ms
gira a sx con 0.25ms
è abbastanza coerente la cosa?

volevo chiederti:avrei bisogno che il servo avesse un movimento più fluido e più veloce potresti darmi una dritta questo e il programma
Codice: Seleziona tutto
#include <PIC.h> // contiene i nomi mnemonici di registri e porte
__CONFIG (XT & WDTDIS & PWRTEN & UNPROTECT);
#include "settaggioservo.h" // file che contiene il settaggio delle porte
#include "delay.c"
void main(void)
{
   settaggio();
   
  while(1)
   {
   
      if(PL1==0)   //se premo pulsante 1
          {
           DelayMs(30);  //antirimbalzo
           if(PL1==0)    //se premo pulsante 1
             {             
                LED=1;           // accendo led
                SER=1;           // segnale livello alto 1
             for(i=0;i<8;i++)
                 {             
                DelayUs(250);      //attesa 2 millisec. (per rotazione a destra)
                 }
                SER=0;         // segnale livello basso 0
             for (i=0;i<72;i++)
                 {
                DelayUs(250);  // attesa 18 millisec.
                 }               
             }               
          }
                           
      if(PL2==0)
        {
           DelayMs(30);  //antirimbalzo
           if(PL2==0)    //se premo pulsante 1
             {             
                LED=1;           // accendo led
                SER=1;           // segnale livello alto 1             
             for(i=0;i<4;i++)
                 {             
                DelayUs(250);      //attesa 1 millisec. (per posiz.centrale)
                 }
               SER=0;         // segnale livello basso 0
             for (i=0;i<76;i++)
                 {
                DelayUs(250);  // attesa 19 millisec.
                 }                           
              }             
           
        }
      if(PL3==0)
        {
           DelayMs(30);  //antirimbalzo
           if(PL3==0)    //se premo pulsante 1
             {             
                LED=1;           // accendo led
                SER=1;           // segnale livello alto 1                           
                DelayUs(250);      //attesa  0.25 millisec. (per rotazione a sinistra)
                SER=0;         // segnale livello basso 0
             for (i=0;i<79;i++)
                 {
                DelayUs(250);  // attesa 18,75 millisec.
                 }                           
              }                       
        } 
     LED=0; 
   }

}



grazie Fabio O_/
O_/ a tutti
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[12] Re: Problema servocomando

Messaggioda Foto Utentefantamed » 10 nov 2013, 17:15

grazie lelettronico (Lele?) O_/ :ok:
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[13] Re: Problema servocomando

Messaggioda Foto Utentefantamed » 10 nov 2013, 17:57

ho fatto la prova con 1550 ogni 20ms,e forzando a mano il servo tutto a dx,ottengo che il servo si posiziona a trequarti tutto sx
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[14] Re: Problema servocomando

Messaggioda Foto Utentec1b8 » 10 nov 2013, 17:59

fantamed ha scritto:gira a dx con 2ms
posiz. centrale 1ms
gira a sx con 0.25ms
è abbastanza coerente la cosa?

Direi di no!
Il mio hex invia ai servo che si spostano continuamente impulsi con durata da 1ms a 2ms. Questo dovrebbe provocare un angolo di rotazione di 90° (+-45° rispetto il centro). E' così?

fantamed ha scritto:avrei bisogno che il servo avesse un movimento più fluido e più veloce

Puoi spiegarti meglio?
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[15] Re: Problema servocomando

Messaggioda Foto Utentefantamed » 10 nov 2013, 18:36

provando con il tuo hex funziona tutto,si spostano in continuazione con i tempi che descrivi,
poi ho fatto la prova consigliatami da lelettrico:
Lelettrico ha scritto:
Questo è decisamente indicativo, vedo due possibilità, o l'impulso non arriva o l'impulso non ha la durata e/o la ripetizione corretta. Terza ma non pertinente è che il servo sia guasto ?%
Con impulso fisso 1550 ogni 20 mS se spegni l'alimentazione (del solo servo) e poi sposti a mano il servo quando riacceso esso deve riportarsi sullo 0.

ma ottengo che il servo si sposta per trquarti a sx. mentre come dice l'elettrico si dovrebbe riposizionare in centro.

questo
fantamed ha scritto:avrei bisogno che il servo avesse un movimento più fluido e più veloce


per fluidita intendo che il servo si muove a scatti se pur veloci fino a raggiungere la posizione,per velocita intendo che compie il movimento ad una certa velocita, lenta per l'utilizzo che mi occorre,mentre provando il tuo hex alcuni dei 4 servi si spostano velocemente.
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[16] Re: Problema servocomando

Messaggioda Foto Utentec1b8 » 10 nov 2013, 18:47

Stai realizzando il programma in C, i vari impulsi li generi con cicli for e delay, questo in C si traduce sicuramente in tempi effettivi diversi da quelli da te attesi, ma la differenza che ci stai indicando è troppo alta.

Proviamo a fare un passo alla volta.
Prima cosa il quarzo. Nel primo codice che ci hai fatto vedere avevi scritto:
Codice: Seleziona tutto
#define  XTAL_FREQ 20MHZ
che indica l'impigo di un quarzo a 20MHz.
Se usi un quarzo da 4MHz devi scrivere:
Codice: Seleziona tutto
#define  XTAL_FREQ 4MHZ

Questo riga di codice è allineato con l'hardware? (scusa la domanda stupida ma giusto per togliere ogni dubbio).

Con il mio codice, il servo collegato a RB0 ha la minore velocità di spostamento, ti serve una velocità di spostamento ancora inferiore?
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[17] Re: Problema servocomando

Messaggioda Foto Utentefantamed » 10 nov 2013, 21:16

scusami fabio ,ricomicio da capo visto che ho fatto un po di confusione generale :oops: #-o
il quarzo dell'hardware e ora 4MHZ
con il tuo hex funziona cosi:
RBO= spostamento di 90° da 45- a 45+ ,velocita bassa
RB1= spostamento di 90° da 45-a 45+, piu veloce
RB2=spostamento tutto a dx veloce
RB3=spostamento tutto a sx veloce

provando con il mio programma che ora e questo e che dovrebbe fare :
pulsante 1 gira il servo a dx
pulsante 2 gira il servo a sx
pulsante 3 centro
confermi :?:

Codice: Seleziona tutto
#include <PIC.h> // contiene i nomi mnemonici di registri e porte
__CONFIG (XT & WDTDIS & PWRTEN & UNPROTECT);
#include "settaggioservo.h" // file che contiene il settaggio delle porte
#include "delay.c"
void main(void)
{
   settaggio();
   
  while(1)
   {   
      if(PL1==0)                  //se premo pulsante 1
          {
           DelayMs(30);         //antirimbalzo
           if(PL1==0)            //se premo pulsante 1
             {             
              LED=1;              //accendo led   
              SER=1;             // segnale livello alto 1               
              DelayMs(2);      //attesa 2 millisec. (per rotazione a sinistra)
              SER=0;             // segnale livello basso 0                   
              DelayMs(18);    //attesa 18 millisec.
             }
         }
      if(PL2==0)                          //se premo pulsante 2
         {
          DelayMs(30);                //antirimbalzo
          if(PL2==0)                   //se premo pulsante 2
            {         
             LED=1;                   //accendo led
             SER=1;                    // segnale livello alto 1               
             DelayMs(1);            //attesa 1 millisec. (per rotazione a destra)
             SER=0;                 // segnale livello basso 0                   
             DelayMs(19);         //attesa 19 millisec.
            }
         }
     if(PL3==0)                //se premo pulsante 3
        {
          DelayMs(30);       //antirimbalzo
          if(PL3==0)          //se premo pulsante 1
            {             
             LED=1;           // accendo led
             SER=1;           //segnale livello alto 1
          for (i=0;i<6;i++)
             {                                 
              DelayUs(250);      //attesa  1.5millisec. (per posizione centrale)
              }             
             SER=0;                  // segnale livello basso 0
          for (i=0;i<74;i++)
              {
               DelayUs(250);      // attesa 18,5 millisec.
              }                           
             }                       
        } 
}
}


il servo Invece si comporta cosi:
pulsante 1 gira il servo a sx a scatti
pulsante 2 gira il servo a sx a scatti
pulsante 3 gira il servo a sx a scatti
praticamente fanno la stessa cosa e si muovono a scatti :-|
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[18] Re: Problema servocomando

Messaggioda Foto Utentefantamed » 10 nov 2013, 21:17

dimenticavo anche nel settaggio ho sostituito 20MHZ con 4MHZ come mii hai detto
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[19] Re: Problema servocomando

Messaggioda Foto Utentec1b8 » 10 nov 2013, 21:36

Andiamo per gradi e vediamo di volta in volta cosa si risolve.

Come già ti dicevo un servo deve avere continuamente il segnale PWM di controllo. Questo segnale deve avere una frequenza di 50Hz (periodo di 20ms) e la durata del Ton determina la poszione del braccio del servo.
I tuoi servo prevedono un Ton che va da 1ms a 2ms. Quale sia la destra o la sinistra non lo so, poco importa.

Vediamo ora il tuo programma.
Primo problema: se non premo pulsanti il segnale PWM è asssente: cosa farà il servo? boh!
Secondo problema: quando premo un pulsante invio la sequenza Ton+Toff corretta (supponiamo i tempi siano giusti) ma ogni sequenza è come minimo preceduta da una pausa di 30ms (l'antirimbalzo) quindi non secondo specifiche. Anche in questo caso cosa farà il servo?
Bisogna prima risolvere questi problemi, poi vediamo come andrà.
Vuoi provare a correggerli?
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[20] Re: Problema servocomando

Messaggioda Foto Utentefantamed » 11 nov 2013, 0:17

iOi si vorrei provare a correggerli,sperando che non sia troppo complicato di software considerando che sono agli inizi. :oops:
per il primo problema sarebbe meglio che quando non premo niente il servo stia fermo al centro,quindi se il segnale va da 1ms a 2 ms sx/dx per la posizione centrale il codice dovrebbe essere questo:
Codice: Seleziona tutto
          SER=1;            // segnale livello alto 1
          for (i=0;i<6;i++)
             {                                           
              DelayUs(250);      //attesa  1.5 millisec. (per posizione centrale)
              }               
          SER=0;              // segnale livello basso 0
          for (i=0;i<74;i++)
              {
               DelayUs(250);     // attesa 18,5 millisec.
              }     

ovvero: ton=1.5millisec. - toff=18.5 millisec. che insieme formano il periodo 20ms per i 50HZ
Giusto :?:
ma cosi il servo gira tutto a sx ?^!
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

PrecedenteProssimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 39 ospiti