Buona sera, vi scrivo per chiedervi delucidazioni.
Io avrei bisogno di due segnali PWM, preferisco non farli software per non sprecare cicli di clock per la cpu, quello che vi chiedo:
E' possibile generare due segnali PWM con stesso periodo e duty cycle ma che siano sfasati di un Ton?
Grazie in anticipo
PWM con microcontrollore
Moderatore:
Paolino
5 messaggi
• Pagina 1 di 1
0
voti
In linea di massima no, anzi, proprio no. Se oltre a controllare il periodo d'impulso vuoi anche controllarne lo sfasamento tra due uscite, devi gestire tutto via software.
-

CarloCoriolano
1.446 3 4 7 - ---
- Messaggi: 1023
- Iscritto il: 24 mag 2016, 13:08
0
voti
Dipende dal microcontrollore e dalla struttura dei timer che ha a bordo.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Perché no? Imposta due interrupt sui rollover dei timer e fai partire uno dopo un numero di cicli predefinito dall'altro.
Alternativamente fai partire il secondo timer tramite il primo direttamente dall'interrupt:
Nel secondo caso devi calcolare i cicli da sottrarre al secondo timer per avere il tuo ritardo, nel codice ho ipotizzato che il rollover avvenga a 0xFF ma devi dirmi tu che dispositivo stai usando. Inoltre i cicli di ritardo devono tenere conto dell'overhead di scrittura ai registri, di chiamata alle routine di toggle e di accesso all'interrupt (è più difficile a dirsi che a farsi). Se usi PIC potresti avere per certi timer un registro PRx e si può usare quello.
toggle_PWMx() è fatta più o meno così:
Questo è uno pseudo-codice che segue la sintassi XC8 di Microchip.
- Codice: Seleziona tutto
Void main()
{
...
TMR1ON = 1;
__delay_us(TON);
TMR2ON = 1;
...
}
Void interrupt_TMR1()
{
toggle_PWM1();
TMR1IF = 0;
return;
}
Void interrupt_TMR2()
{
toggle_PWM2();
TMR2IF = 0;
return;
}
Alternativamente fai partire il secondo timer tramite il primo direttamente dall'interrupt:
- Codice: Seleziona tutto
Void interrupt_TMR1()
{
toggle_PWM1();
TMR2 = 0xFF - delay_cycles;
TMR2ON = 1;
TMR1IF = 0;
return;
}
Void interrupt_TMR2()
{
toggle_PWM2();
TMR2ON = 0;
TMR2IF = 0;
return;
}
Nel secondo caso devi calcolare i cicli da sottrarre al secondo timer per avere il tuo ritardo, nel codice ho ipotizzato che il rollover avvenga a 0xFF ma devi dirmi tu che dispositivo stai usando. Inoltre i cicli di ritardo devono tenere conto dell'overhead di scrittura ai registri, di chiamata alle routine di toggle e di accesso all'interrupt (è più difficile a dirsi che a farsi). Se usi PIC potresti avere per certi timer un registro PRx e si può usare quello.
toggle_PWMx() è fatta più o meno così:
- Codice: Seleziona tutto
Void toggle_PWMx()
{
Pin_PWMx = !Pin_PWMx;
return;
}
Questo è uno pseudo-codice che segue la sintassi XC8 di Microchip.
-

marioursino
5.687 3 9 13 - G.Master EY

- Messaggi: 1598
- Iscritto il: 5 dic 2009, 4:32
5 messaggi
• Pagina 1 di 1
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 14 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

