Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema servocomando

Elettronica lineare e digitale: didattica ed applicazioni

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

0
voti

[1] Problema servocomando

Messaggioda Foto Utentefantamed » 8 nov 2013, 20:14

salve a tutti,come autodidatta da non molto mi sto avvicinando al modo dell'elettronica,e linguaggio C,ho iniziato con il led ,ho poi provato a muovere un motore passo passo con esito positivo,adesso volevo provare a muovere il servocomando poiche mi e stato regalato un kit comprendente 2 servi ( http://goteckrc.com/Download/GS-9018.pdf con pan e tilt)
Ho realizza to questo programma che dovrebbe muovere il servo in un verso,giusto per iniziare e capire meglio:

"settaggio"
Codice: Seleziona tutto
#define N1    RB0     
#define PL1    RB1    // puls1
#define PL2    RB2    // puls2
#define SER    RB3    //segnale servo
#define LED    RA0    //led rete
#define N3    RB5
#define N4    RB6
#define N5    RB7   
#define N6    RA1
#define N7    RA2
#define PL3   RA4     //puls3 
#define N2    RB4
#define N8    RA3
#define  XTAL_FREQ 20MHZ 
int i;

void settaggio(void)
{
    OPTION=0b10000000;
   TRISA=0b00010000;           
   TRISB=0b00000110;
    N1=0;
    N2=0;     
    LED=0;
    SER=0; 
    N3=0;     
    N4=0;     
    N5=0;   
    N6=0;     
    N7=0;     
    N8=0;         
     
}

"Programma in c"

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
             {
             for(i=0;i<50;i++)
               {
                LED=1;           // accendo led
                SER=1;           // segnale livello alto 1             
                DelayMs(2);      //attesa 2 millisec. (per rotazione a destra)
                SER=0;         // segnale livello basso 0   
                DelayMs(18);  // attesa 18 millisec.               
               }             
            LED=0;   // spengo led
              }
          } 
   }
}


sto utilizzando un quarzo da 4Mhz (è un modello basso con scritto 4.000w6)il servo rimane sempre fermo
da quanto ho capito dalle varie letture questo dovrebbe essere il pilotaggio di questo servo:1ms. per rotazione a sinistra ,1,5ms. per posizione centrale, 2ms. per rotazione a destra.
Forse sbaglio qualcosa nel programma o nel settaggio :?:
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[2] Re: problema servocomando

Messaggioda Foto UtenteLelettrico » 8 nov 2013, 20:50

Non esattamente, mi sembra tutto in regola ma se ben ricordo ... l'impulso che regola la posizione deve essere ripetuto fino a che intendi mantenerla. Es 1550 uS ogni 20 ms per lo zero fino a che il servo deve mantenere la posizione
Quel for a 50 :?:
O_/
Avatar utente
Foto UtenteLelettrico
2.458 1 4 6
Master
Master
 
Messaggi: 1108
Iscritto il: 13 set 2010, 12:24

0
voti

[3] Re: problema servocomando

Messaggioda Foto Utentefantamed » 9 nov 2013, 16:56

for 50 mi dovrebbe ciclare il segnale per 50 volte ovvero 50x20ms =1 secondo (il servo si dovrebbe muovere per un secondo)ma cosi non fa,con il segnale a 2ms dovrebbe girare a dx giusto?
ho sostituito servo con un led per provare se appunto i 20ms ripetuti 50 volte mi tengono acceso il led per 1 secondo,ma invece me lo tiene acceso per 4 secondi eppure il quarzo e da 4mhz.
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

1
voti

[4] Re: problema servocomando

Messaggioda Foto Utentec1b8 » 9 nov 2013, 17:39

fantamed ha scritto:ho sostituito servo con un led per provare se appunto i 20ms ripetuti 50 volte mi tengono acceso il led per 1 secondo,ma invece me lo tiene acceso per 4 secondi eppure il quarzo e da 4mhz.

4 secondi, avrei supposto che rimanesse acceso per 5 secondi.
Questo define
Codice: Seleziona tutto
#define XTAL_FREQ 20MHZ
che hai nel programma indica al compilatore che il quarzo è a 20Mhz e non da 4MHz, di conseguenza il compilatore calcola male le delay.

Tieni presente una cosa nel controllo dei servocomandi RC analogici: quando sospendi il segnale di controllo il servo perde totalmente la coppia e se caricato il braccio si muove sotto effetto del peso. perché il servo mantenga la posizione con una buona coppia devi fornire il segnale di controllo sempre...
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

[5] Re: problema servocomando

Messaggioda Foto UtenteLelettrico » 9 nov 2013, 19:18

c1b8 ha scritto:Tieni presente una cosa nel controllo dei servocomandi RC analogici: quando sospendi il segnale di controllo il servo perde totalmente la coppia e se caricato il braccio si muove sotto effetto del peso. perché il servo mantenga la posizione con una buona coppia devi fornire il segnale di controllo sempre...

Esatto :!:
Un esempio reale potrebbe essere il "fail safe" delle radio modellistiche che monitora la presenza di impulsi dal ricevitore e se questi mancano per un tempo t e per un qualsiasi motivo q forza lui (il segmento di programma) ... forza la presenza di un impulso di larghezza opportuna per "bloccare" i servi in una ben determinata posizione. La posizione fail safe viene regolata "a terra" con metodi opportuni.

Io partirei da 1550 uS 20 ms fisso, programma facile da fare, poi provo a forzare il servo delicatamente verso antiorario o orario, deve resistere sullo 0 se tutto è a posto. Si potrebbe anche provare: spegni il servo, spostalo forzando a dx o sx, dai alimentazione e deve tornare allo 0. Una roba gia debaggata di suo nel senso che deve fare quell impulso e niente altro.
My2cent
O_/
Avatar utente
Foto UtenteLelettrico
2.458 1 4 6
Master
Master
 
Messaggi: 1108
Iscritto il: 13 set 2010, 12:24

0
voti

[6] Re: problema servocomando

Messaggioda Foto Utentefantamed » 9 nov 2013, 21:24

abbiate pazienza se sono un po cocciuto,ho sostituito il quarzo con uno da 20mhz come da settaggio
per 1550Us e 20ms fisso intendi questo ?:
Codice: Seleziona tutto

while(1)
   {
   
     
      SER=1;     // segnale livello alto 1                             
      for(i=0;i<6;i++)
       {
      DelayUs(250);      //attesa 1.5 millisec. (per rotazione a destra)       
       }
      SER=0;    // segnale livello basso 0                 
      DelayMs(20);   //attesa 20ms
     
    }

poi ho forzato il servo tutto da un lato,ma quando alimento il servo non va in posizione centrale

se scrivo delayUs(1550)il compilatore non dovrebbe capirlo poiche il delayUs/Ms non accettano un valore superiore al 255 potreste confermarmelo se e cosi?
grazieO_/
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[7] Re: problema servocomando

Messaggioda Foto Utentec1b8 » 9 nov 2013, 23:51

Forse non ho letto bene tutto, ma non ho capito:
- quale PIC utilizzi
- quale compilatore utilizzi
- come sono collegati i servo
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

[8] Re: Problema servocomando

Messaggioda Foto Utentefantamed » 10 nov 2013, 11:56

ciao,utilizzo un pic16f84A con quarzo da 20mhz
il compilatore e Mplab +hitech compiler

collegamento servocomando:
filo rosso: positivo fisso 5v
filo nero:negativo fisso v
filo arancione: direttamente al pin RB3 del PIC per il segnale
grazie
O_/ Buona domenica a tutti !
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[9] Re: Problema servocomando

Messaggioda Foto Utentec1b8 » 10 nov 2013, 12:30

A me sembra tutto corretto.
Al limite cambiere quel DelayMs(20); in DelayMs(18);
Credo non risolva però il problema.

fantamed ha scritto:se scrivo delayUs(1550)il compilatore non dovrebbe capirlo poiche il delayUs/Ms non accettano un valore superiore al 255 potreste confermarmelo se e cosi?
si, è così.

Ti allego l'hex di un mio programmino che controlla 4 servo collegati alla porta B del pic16f84A, da RB0 a RB3.
i servo collegati a RB0 e RB1 si muovono contemporaneamente da destra a sinistra a diverse velocità.

Prova a vedere se questo funziona, così escludiamo problemi hardware.

EDIT: Dimenticavo scusa: Quarzo 4MHz

Servo.zip
(831 Byte) Scaricato 67 volte
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

[10] Re: Problema servocomando

Messaggioda Foto UtenteLelettrico » 10 nov 2013, 15:16

poi ho forzato il servo tutto da un lato,ma quando alimento il servo non va in posizione centrale

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.
Avatar utente
Foto UtenteLelettrico
2.458 1 4 6
Master
Master
 
Messaggi: 1108
Iscritto il: 13 set 2010, 12:24

Prossimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Google [Bot], MSN [Bot] e 73 ospiti