PIC lento?????
7 Anni 6 Mesi fa #1
da CACCIA
PIC lento????? è stato creato da CACCIA
Buongiorno a tutti,
scusate il post magari banale per voi, io che sono neofita sto cercando di imparare...
Sto utilizzando un PIC18F per il controllo di una elettrovalvola proporzionale un motore con encoder e 5 elettrovalvole standard.
Ora sto utilizzando per modulazione PWM il timer2 mentre per il controllo del tempo di ciclo il timer 1 che genera un interrupt quando è passato esattamente un secondo.
Per quanto riguarda la regolazione dell'elettrovalvola proporzionale ho utilizzato un algoritmo PID. Ora il tutto sembra funzionare ma è un po' lento!
Ho paura che usare troppi timer con interrupt generi questa lentezza! Che ne dite?
Grazie per l'attanzione e buona serata.
Saluti
Massimiliano
scusate il post magari banale per voi, io che sono neofita sto cercando di imparare...
Sto utilizzando un PIC18F per il controllo di una elettrovalvola proporzionale un motore con encoder e 5 elettrovalvole standard.
Ora sto utilizzando per modulazione PWM il timer2 mentre per il controllo del tempo di ciclo il timer 1 che genera un interrupt quando è passato esattamente un secondo.
Per quanto riguarda la regolazione dell'elettrovalvola proporzionale ho utilizzato un algoritmo PID. Ora il tutto sembra funzionare ma è un po' lento!
Ho paura che usare troppi timer con interrupt generi questa lentezza! Che ne dite?
Grazie per l'attanzione e buona serata.
Saluti
Massimiliano
Si prega Accedi o Crea un account a partecipare alla conversazione.
- CACCIA
- Autore della discussione
- Visitatori
7 Anni 6 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic PIC lento?????
Salve Caccia,
il modulo PWM una volta impostato con il timer 2 è come se non esista, lavora in maniera indipendente dalla CPU, a meno che tu non abbia impostato qualche interrupt sul timer 2.
Per il timer 1 se metti interrupt troppo rapidi puoi influenzare il calcolo richiesto per l'implementazione del PID.
Il PID può essere complesso e richiedere risorse CPU (tempo) se fai uso di variabili floating point.
Probabilmente ti può tornare utile impostare la frequenza della CPU al massimo e quella del Timer 1 al minimo al fine di avere un numero ridotto di interruzioni.
Saluti,
Mauro
il modulo PWM una volta impostato con il timer 2 è come se non esista, lavora in maniera indipendente dalla CPU, a meno che tu non abbia impostato qualche interrupt sul timer 2.
Per il timer 1 se metti interrupt troppo rapidi puoi influenzare il calcolo richiesto per l'implementazione del PID.
Il PID può essere complesso e richiedere risorse CPU (tempo) se fai uso di variabili floating point.
Probabilmente ti può tornare utile impostare la frequenza della CPU al massimo e quella del Timer 1 al minimo al fine di avere un numero ridotto di interruzioni.
Saluti,
Mauro
Ringraziano per il messaggio: CACCIA
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Mauro Laurenti
- Moderator
Riduci
Di più
7 Anni 6 Mesi fa #3
da CACCIA
Risposta da CACCIA al topic PIC lento?????
Buongiorno Mauro,
grazie per la risposta, come sempre molto disponibile.
In effetti per l'elaborazione dei PID uso delle variabili Float e successivamente utilizzo il casting per passare da float ad integer (per ciclo PWM).
Uso l'oscillatore interno a 16MHz ed il timer 1 mi genera un interrupt ogni secondo preciso per avere un riferimento per un conto alla rovescia!
Senza la routine di interrupt funziona tutto molto fluidamente, ecco che se la inserisco arrivano i problemi di "lentezza".
Ho pensato di non utilizzare l'interrupt per il conteggio dei secondi decrementando una variabile impostata inizialmente come numero di cicli per ottenere un secondo.... Non mi piace tantissimo però...
Che ne pensate?
Grazie ancora e buona giornata.
Saluti.
Massimiliano
grazie per la risposta, come sempre molto disponibile.
In effetti per l'elaborazione dei PID uso delle variabili Float e successivamente utilizzo il casting per passare da float ad integer (per ciclo PWM).
Uso l'oscillatore interno a 16MHz ed il timer 1 mi genera un interrupt ogni secondo preciso per avere un riferimento per un conto alla rovescia!
Senza la routine di interrupt funziona tutto molto fluidamente, ecco che se la inserisco arrivano i problemi di "lentezza".
Ho pensato di non utilizzare l'interrupt per il conteggio dei secondi decrementando una variabile impostata inizialmente come numero di cicli per ottenere un secondo.... Non mi piace tantissimo però...
Che ne pensate?
Grazie ancora e buona giornata.
Saluti.
Massimiliano
Si prega Accedi o Crea un account a partecipare alla conversazione.
- CACCIA
- Autore della discussione
- Visitatori
7 Anni 6 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic PIC lento?????
Se senza interruzioni funziona potresti considerare di generare il tempo di un secondo per mezzo del timer 1 e il cristallo da 32KHz esterno. In questo modo hai due sole interruzioni per secondo.
Con un cristallo da 16MHz hai molte interruzioni che possono essere causa di ritardi.
Non sono certo di quello che implementi nell'ISR, ma cerca di snellire il tutto.
Saluti,
Mauro
Con un cristallo da 16MHz hai molte interruzioni che possono essere causa di ritardi.
Non sono certo di quello che implementi nell'ISR, ma cerca di snellire il tutto.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
7 Anni 6 Mesi fa #5
da Pascolo
Risposta da Pascolo al topic PIC lento?????
I calcoli del PID li fai in interrupt?
Per velocizzare i calcoli potresti aumentare la frequenza del clock.
Saluti
Ivan
Per velocizzare i calcoli potresti aumentare la frequenza del clock.
Saluti
Ivan
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pascolo
- Junior Member
Riduci
Di più
- Messaggi: 22
- Ringraziamenti ricevuti 6
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.