BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   servo (https://www.baronerosso.it/forum/circuiti-elettronici/6337-servo.html)

chip_ 24 marzo 05 19:23

Ho scritto queste line di codice con PicbasicPro:

start:

pulsout 0,150
pause 18
pulsout 0,120
pause 18
goto start

In sostanza voglio che il mio servo,hs311 hitec, collegato a RB0 del Pic 16f84A vada avanti e indietro o a qualsiasi posizione specificata nel codice,invece va solo in una direzione e per farlo ritornare al punto di partenza devo riprogrammare il Piccon un nuovo data ad esempio pulsout 0,300.

grazie
chip_
Soluzione?

CantZ506 24 marzo 05 19:39

Citazione:

Originally posted by chip_@24 marzo 2005, 18:23
Ho scritto queste line di codice con PicbasicPro:

start:

pulsout 0,150
pause 18
pulsout 0,120
pause 18
goto start

In sostanza voglio che il mio servo,hs311 hitec, collegato a RB0 del Pic 16f84A vada avanti e indietro o a qualsiasi posizione specificata nel codice,invece va solo in una direzione e per farlo ritornare al punto di partenza devo riprogrammare il Piccon un nuovo data ad esempio pulsout 0,300.

grazie
chip_
Soluzione?


Se la coppia di istruzioni pulsout-pause rappresenta tutto l'impulso(semionda positiva e negativa), la durata totale deve essere sempre uguale.
Vado a memoria: la durata di un canale è di 2msec, lo zero corrisponde ad 1msec e la larghezza dell'impulso va da 0,5 a 1,5 msec; quando l'imp. è 0,5, la pausa deve essere 1,5 e viceversa.

chip_ 25 marzo 05 00:33

Citazione:

Originally posted by CantZ506@24 marzo 2005, 18:39
Se la coppia di istruzioni pulsout-pause rappresenta tutto l'impulso(semionda positiva e negativa), la durata totale deve essere sempre uguale.
Vado a memoria: la durata di un canale è di 2msec, lo zero corrisponde ad 1msec e la larghezza dell'impulso va da 0,5 a 1,5 msec; quando l'imp. è 0,5, la pausa deve essere 1,5 e viceversa.


Non ho capito molto bene.. cmq, grazie.
chip_

CantZ506 25 marzo 05 00:47

Citazione:

Originally posted by chip_@24 marzo 2005, 23:33
Non ho capito molto bene.. cmq, grazie.
chip_

Hai presente com'è fatta un'onda quadra? Ha una semionda positiva ed una negativa.
Quando al servo arriva un segnale in cui le due semionde hanno la stessa durata rimane fermo al centro; se la semionda positiva diventa più corta o più lunga della negativa, il servo ruota da una parte o dall'altra. La durata totale delle due semionde rimane, però, sempre la stessa.
Se le istruzioni pulseout e pause rappresentano le due semionde, la somma dei valori ad esse associati deve essere sempre uguale: 150 e 50, 120 e 80 etc...
E' più chiaro?

estense 25 marzo 05 00:55

Citazione:

Vado a memoria: la durata di un canale è di 2msec, lo zero corrisponde ad 1msec e la larghezza dell'impulso va da 0,5 a 1,5 msec; quando l'imp. è 0,5, la pausa deve essere 1,5 e viceversa
perfetto

la durata della semionda positiva (impulso) determina la posizione del servo
la somma della semionda positiva e della semionda negativa (durata del canale) deve essere 2 msec
la larghezza della semionda positiva deve essere compresa tra 0.5 e 1.5 msec, pena il superamento dei fondocorsa del servo

CantZ506 25 marzo 05 01:00

Citazione:

Originally posted by estense@24 marzo 2005, 23:55
perfetto

la durata della semionda positiva (impulso) determina la posizione del servo
la somma della semionda positiva e della semionda negativa (durata del canale) deve essere 2 msec
la larghezza della semionda positiva deve essere compresa tra 0.5 e 1.5 msec, pena il superamento dei fondocorsa del servo

Mi rimane il dubbio sul tempo che deve intercorrere tra un impulso e l'altro, se DEVE esistere.
In pratica, il tempo in cui funzionano gli altri canali presenti sulla radio.
In definitiva, se la radio avesse un solo canale, gli impulsi si susseguirebbero immediatamente o ci deve essere una pausa... di riflessione? :)

estense 25 marzo 05 01:06

Se il comando pause 18 si riferisce ai 18 msec di intervallo fra gli impulsi omologhi per quel dato canale all' interno del treno di onde, allora, premesso che pulseout deve essere > 0.5 msec e < 1.5 msec, manca l' informazione relativa alla parte negativa della semionda (2 - x)
e gli impulsi sono distanziati di 20 msec come da manuali vari

estense 25 marzo 05 01:11

Citazione:

ci deve essere una pausa... di riflessione?
sicuro
20 msec é la durata del pacchetto completo: canali, pausa e picco di sincronizzazione del demultiplexer

editato:
Citazione:

se la radio avesse un solo canale, gli impulsi si susseguirebbero immediatamente
no
mettiamo il caso di avere una rx a 6 canali e una tx a 4. e tutto funziona tranquillamente perché ogni canale ha il suo spazio, che sia realmente presente o meno, sia nella tx che nella rx

CantZ506 25 marzo 05 01:14

Citazione:

Originally posted by estense@25 marzo 2005, 00:06
Se il comando pause 18 si riferisce ai 18 msec di intervallo fra gli impulsi omologhi per quel dato canale all' interno del treno di onde, allora, premesso che pulseout deve essere > 0.5 msec e < 1.5 msec, manca l' informazione relativa alla parte negativa della semionda (2 - x)
e gli impulsi sono distanziati di 20 msec come da manuali vari

Infatti dovrebbe essere qualcosa del genere:
pulseout 0,150
pause 0,150
pause 18
etc.
etc.

estense 25 marzo 05 01:33

sto facendo ipotesi, perché non conosco il picbasicpro

secondo me dovrebbe essere

pulsout= 0,7
pause=2-pulsout
pause=18

ma se il pulsout non varia da 0,5 a 1,5 il servo parte, ma poi resta fermo alla posizione 0,7

non so che comandi corrispondano (se esistono) a "per pulsout che va da 0,5 a 1,5 ..... ecc." e se c'é un incremento automatico o no tipo "step" o qualcosa di simile.

Ragazzi sono 15÷20 anni che ho mollato il basic !!!!!

Naraj 25 marzo 05 01:37

Per non confondere le idee forse è meglio non parlare di semionde negative.

L'onda quadra (in realtà rettangolare) è sempre positiva, infatti và dallo zero Volt a + 5 Volt. ( in certi trasmettitori và da + 5 Volt a Zero Volt).

Per ogni canale c'è un'onda quadra e il numero di canali del trasmettitore formano un "treno" di onde.

Questi treni di onde sono separati da un breve intervallo di tempo senza nessuna onda e si ripetono con una certa frequenza costante.

Il segnale completo è composto da un treno di onde quadre (che sono i vari canali del TX) conpreso una pausa tra due serie di onde.

Anche se i tempi delle onde quadre vengono modificati dal comando del TX, la durata dall'inizio della prima onda fino a comprendere la pausa della fine del treno onde, rimane sempre costante. (in alcuni TX è il primo fronte di salita del segnale che dà lo start del nuovo treno di impulsi).

Spero di non aver confuso le idee ai lettori.

Ciao a tutti. Naraj.

CantZ506 25 marzo 05 01:46

Citazione:

Originally posted by estense@25 marzo 2005, 00:33
sto facendo ipotesi, perché non conosco il picbasicpro

secondo me dovrebbe essere

pulsout= 0,7
pause=2-pulsout
pause=18

ma se il pulsout non varia da 0,5 a 1,5 il servo parte, ma poi resta fermo alla posizione 0,7

non so che comandi corrispondano (se esistono) a "per pulsout che va da 0,5 a 1,5 ..... ecc." e se c'é un incremento automatico o no tipo "step" o qualcosa di simile.

Ragazzi sono 15÷20 anni che ho mollato il basic !!!!!

Giusto, ma quello è solo un ciclo che va ripetuto, cambiando ogni volta il valore.
Ora che ci penso è ovvio che non gli funziona: lui fa il loop, ma sempre con lo stesso valore
start:
pulseout 0,150
...
...
goto start

va cambiato in:

L = 0
start:
pulseout 0,150 + L
pause 0,150 - L
pause 18
qui va una funzione che assegna il valore ad L (positivo o negativo)
goto start

estense 25 marzo 05 01:47

Citazione:

Per non confondere le idee forse è meglio non parlare di semionde negative.


si, mi é scappata una ca.. ehem ... inesattezza, ma oggi sto tribolando con la 220.

chip_ 25 marzo 05 19:34

Citazione:

Originally posted by estense@25 marzo 2005, 00:33
sto facendo ipotesi, perché non conosco il picbasicpro

secondo me dovrebbe essere

pulsout= 0,7
pause=2-pulsout
pause=18

ma se il pulsout non varia da 0,5 a 1,5 il servo parte, ma poi resta fermo alla posizione 0,7

non so che comandi corrispondano (se esistono) a "per pulsout che va da 0,5 a 1,5 ..... ecc." e se c'é un incremento automatico o no tipo "step" o qualcosa di simile.

Ragazzi sono 15÷20 anni che ho mollato il basic !!!!!



vediamo se ci riesco,dal manuale del PicBasicPro:

PULSOUT

PULSOUT Pin,Period

Generates a pulse on Pin of specified Period. The pulse is generated by toggling the pin twice, thus the initial state of the pin determines the polarity of the pulse. Pin is automatically made an output. Pin may be a constant, 0 - 15, or a variable that contains a number 0 - 15 (e.g. B0) or a pin name (e.g. PORTA.0).

The resolution of PULSOUT is dependent upon the oscillator frequency. If a 4MHz oscillator is used, the Period of the generated pulse will be in 10us increments. If a 20MHz oscillator is used, Period will have a 2us resolution. Defining an OSC value has no effect on PULSOUT. The resolution always changes with the actual oscillator speed.

' Send a pulse 1mSec long (at 4MHz) to Pin5
PULSOUT PORTB.5,100
PWM

estense 25 marzo 05 20:05

Faticosamente .... qualcosa comincia a schiarirsi
Citazione:

The pulse is generated by toggling the pin twice, thus the initial state of the pin determines the polarity of the pulse
quindi per prima cosa, all' inizio, per avere impulsi positivi, bisogna forzare a 0 questo pin
Citazione:

Send a pulse 1mSec long (at 4MHz) to Pin5

allora, se il clock é a 4 Mhz, Period deve variare tra 50 e 150
Citazione:

Pin is automatically made an output. Pin may be a constant, 0 - 15, or a variable that contains a number 0 - 15 (e.g. B0) or a pin name (e.g. PORTA.0).

non riesco a capirci granché, comunque dovrebbe essere l' assegnazione dell' output

mindstorm 13 aprile 05 10:58

Grazie e voi ho ricavato questo codice *funzionante alla grande*, provato ieri sera su 16F84A@4MHz :D

' su PORTB.5 e' collegato il servo
PORTB.5=0 ' forzo uscita bassa
loop:
POSIZ=150 '<-- 100=0°, 150=center, 200=180°
PULSOUT PORTB.5,POSIZ
PAUSEUS (2000-POSIZ*10)
PAUSE 18
goto loop


Prima di leggervi ho provato a seguire le specifiche *cannate* di qualcun'altro che mi ha fatto bruciare il servo... :angry:
bel lavoro gente !!!!

A proposito del mio servo bruciato. Da alcuni test ho notato che il motore non gira piu' in senso orario,mentre il potenzionetro sembra funzionare. Smontando il servo ci sono giusto quattro componenti in croce: il motorino, 2/3 condensatori, qualche condensatore e resistenza DIL il potenziometro e un paio di integrati (forse i comparatori???). Qualcuno di voi ha mai affrontato il problema?

Bye, Mind

CantZ506 13 aprile 05 12:06

Citazione:

Originally posted by mindstorm@13 aprile 2005, 09:48
Grazie e voi ho ricavato questo codice *funzionante alla grande*, provato ieri sera su 16F84A@4MHz :D

' su PORTB.5 e' collegato il servo
PORTB.5=0 ' forzo uscita bassa
loop:
POSIZ=150 '<-- 100=0°, 150=center, 200=180°
PULSOUT PORTB.5,POSIZ
PAUSEUS (2000-POSIZ*10)
PAUSE 18
goto loop


Ma così posizioni al centro il servo e basta; se vuoi farlo muovere, devi cambiare POSIZ ad ogni loop. O sbaglio?
Citazione:

....
A proposito del mio servo bruciato. Da alcuni test ho notato che il motore non gira piu' in senso orario,......
Qualcuno di voi ha mai affrontato il problema?

Bye, Mind

Che significa? Gira al contrario o non gira proprio?
Non ancora; ho un servo fuori uso(và a fondo corsa), ma non ho ancora cercato di ripararlo.

mindstorm 13 aprile 05 13:06

Citazione:

Originally posted by CantZ506+13 aprile 2005, 09:56--><div class='quotetop'>QUOTE(CantZ506 @ 13 aprile 2005, 09:56)</div><div class='quotemain'>Ma così posizioni al centro il servo e basta; se vuoi farlo muovere, devi cambiare POSIZ ad ogni loop. O sbaglio?
[/b]



Non sbagli. L'intenzione era quella di mettere a disposizione del codice funzionante riguardo ai timing.
Se ricompili con POSIZ=200 vedrai il servo posizionarsi all'estremita'.


<!--QuoteBegin-CantZ506
@13 aprile 2005, 09:56
Che significa? Gira al contrario o non gira proprio?
[/quote]

Significa che quando deve girare in un senso lo fa correttamente (via telecomando o circuito di test che sia), viceversa non c'e' verso di farlo girare dall'altro.
Tant'e' che se giro la levetta a sinistra il servo ci va, ma quando mollo la levetta non torna al centro.


Bye, Mind

mindstorm 13 aprile 05 13:58

Citazione:

Originally posted by mindstorm@13 aprile 2005, 08:48
...un paio di integrati (forse i comparatori???)

Ecco cosa c'e' dentro, casomai a qualcuno potesse servire:
http://www.teamkiss.com/antweight.html

Bye, Mind

CantZ506 13 aprile 05 16:12

Citazione:

Originally posted by mindstorm@13 aprile 2005, 12:48
Ecco cosa c'e' dentro, casomai a qualcuno potesse servire:
http://www.teamkiss.com/antweight.html

Bye, Mind

Ho provato a cercare i data sheet dei due integrati, ma non li ho trovati.
Azzardo l'ipotesi che sia il secondo ad aver problemi; il comparatore sembra che faccia il suo lavoro, comandando la rotazione, ma il ponte sembra non commuti le polarità al motore.
Non credo sia facile trovare dei sostituti pin to pin.

mindstorm 14 aprile 05 13:13

Citazione:

Originally posted by CantZ506+13 aprile 2005, 14:02--><div class='quotetop'>QUOTE(CantZ506 @ 13 aprile 2005, 14:02)</div><div class='quotemain'>Azzardo l'ipotesi che sia il secondo ad aver problemi; il comparatore sembra che faccia il suo lavoro, comandando la rotazione, ma il ponte sembra non commuti le polarità al motore.
[/b]



Credo anch'io: appena riesco controllo col tester se il 6688 effettivamente comanda il ponte.
Anche perche' il tutto e' successo dopo che il motore ha sforzato qualche secondo a fondocorsa.


<!--QuoteBegin-CantZ506
@13 aprile 2005, 14:02
Non credo sia facile trovare dei sostituti pin to pin.
[/quote]

Il mio fornitore di fiducia ha questo: SGS L293D
E' un driver per 2 motori: non e' pin to pin, ma con qualche filo volante ci si riesce a farlo stare.
L'unico dubbio sono i 0.6A massimi.

Bye, Mind

mindstorm 22 aprile 05 14:14

Citazione:

Originally posted by mindstorm@14 aprile 2005, 11:03
Credo anch'io: appena riesco controllo col tester se il 6688 effettivamente comanda il ponte.

Per completezza termino coi test effettuati: verso l'H-bridge arrivano i segnali dai 2 pin di input in maniera corretta.
Se giro il potenziometro a fondo corsa ho rispettivamente 0 e 2.5V
Se giro dall'altra parte, ho 2.5 e 0V

Cio' che non varia e' la tensione sull'uscita di uno dei terminali del motore che rimane fissa a 4.5V circa, mentre sull'altro va da 0 a 4.5 a seconda del potenziometro: questo spiega xche' gira solo in un senso.

Appena lo recupero, trapianto l'L293 al posto del ponte-H.


Bye, Mind


Tutti gli orari sono GMT +2. Adesso sono le 10:53.

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