Mondo reale

8 Anni 10 Mesi fa #1 da Guido72
Mondo reale è stato creato da Guido72
Salve a tutti,

da poco nel mondo della programmazione dei pic (MBLAB XC8)mi ritrovo a scrivere , per ora sulla carta , un programmino per il quale avrei bisogno di un "aiutino".

In breve.

Ho due segnali analogici convertiti in digitale che definisco A e B.

A è fortemente variabile mentre B lo è molto meno.

Devo eseguire delle operazioni di comparazione tra A e B percui se A==B non succede niente , se A>B dovrò eseguire una operazione matematica A-B e se A<B dovrò eseguire B-A .

In entrambi i casi dovrò generare un treno di impulsi pwm proporzionale al valore risultante dalla sottrazione.

Qui casca l'asino :blush:

Come faccio a tradurre un valore "astratto" in un numero reale di impulsi ?

Se , ad esempio, il treno di impulsi serve a far girare un motore stepper per posizionarlo dovrò necessariamente sapere quanti pulses o step inviare al drive del motore.....


Qualche consiglio ?

Grazie
Guido

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

  • Guido72
  • Senior Member
  • Senior Member
Di più
8 Anni 10 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Mondo reale
Avendo capito il problema per vie traverse, avvero controllare un motore stepper in funzione del valore della tensione assunta da due canali, quello che devi fare per seplificarti la vita è prendere un driver per motori stepper esterno.

In questo link ne trovi vari modelli in base alla corrente e modalità di controllo.

Quella più semplice è certamente ENable, Direction, Step.

In questo modo il driver controlla la corrente dello stepper e il microcontrollore non deve far altro che leggere le due tensioni e inviare un certo numero di Step al motor controller, dopo aver preventivamente selezionata la direzione di rotazione.

Ti consiglio prima di realizzare un setup in cui fai delle letture di una tensione.
Poi prendi un motore stepper e relativo controller e fallo girare con i segnale E, DIR, STP.
...poi unisci i due programmi.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
8 Anni 10 Mesi fa #3 da Guido72
Risposta da Guido72 al topic Mondo reale
Salve Mauro,

grazie per le info.

Essendo veramente nuovo nel mondo pic e relativa programmazione i dubbi sono numerosi.

Credo , di aver individuato il modo in cui muovermi.

In pratica, la risultante delle mie operazioni maatematiche è un valore espresso in bits.
Dalla conversione ADC e relativa risoluzione sò a quanto equivale un bit in termini di tensione.
Conosco quale è il rapporto steps/spostamento lineare prodotto dal motore (stepgiro , passo vite ecc...) percui
scrivo una funzione che rapporti i bit con il numero di step necessari da inviare al drive....


Leggendo il libro XC8 step by step , mi pare di aver compreso che il valore della conversione ADC è memorizzato nei registri ADRESH e ADRESL. Se prelevo il valore in ADRESH e ignoro ADRESL, ottengo una valore come se la conversione fosse a 8 bit e non a 10.

Ora, la domanda chiarificatrice è la seguente.

Se prelevo il valore SOLO in ADRESH ed ho impostato il valore Vref pari a Vdd=5V , otterrò un valore proporzionale a
Vdd/255 ossia, per un segnale analogico in ingresso di 5V avrò 255 , per 2.5V avrò 127 .....e così via ?

Inoltre , perchè le cose vadano come sopra, in fase di impostazione del registro ADC , bisogna giustificare a destra o sinistra ?

Grazie
Guido

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

  • Guido72
  • Senior Member
  • Senior Member
Di più
8 Anni 10 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Mondo reale
Per i ragionamenti logici credo che sia corretto, ma per semplificarti la vita pensa al numero "digitale" come ad un numero semplice 9, 33.... La rappresentazione binaria con 0 e 1 non cambia nessun ragionamento.

a seconda che tu prenda 8 o 10 bit devi dividere 5V per 255 o 1023.
Per prendere 8 bit devi ignorare i due bit meno significativi, quindi selezioni la giustificazione a sinistra e prelevi solo ADRESH.

Prova a fare un esempio sulla carta. 10 bit e due registri da 8 bit.
In base a come giustifichi i due bit più significativi e meno significativi hanno posizioni diversi.

Quella a sinistra è usata per la conversione ad 8 bit, mentre quella a destra per quella a 10 (ma devi unire i due registri ad 8 bit in una variabile intera, come mostrato negli esempi del testo.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
8 Anni 10 Mesi fa - 8 Anni 10 Mesi fa #5 da Guido72
Risposta da Guido72 al topic Mondo reale

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

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

  • Guido72
  • Senior Member
  • Senior Member
Di più
Moderatori: Mauro LaurentiStefA

Registrati al sito

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

Registrati al sito LaurTec.

Login