Software PWM sull'algoritmo del microcontrollore. Software ricco di canali PWM AVR. Software PWM di nuova necessità

Golovna / Funzionalità principale

Allegati digitali, ad esempio, un microcontrollore può funzionare con due segnali uguali a quello. zero e uno, o omesso e omesso. In questo grado, puoi facilmente attivare lo yoga per controllare lo stato di vanità, ad esempio spegnerlo o spegnere la luce. Quindi puoi vikoristovuvat yoga per keruvannya, sia esso un accessorio elettrico, driver vikoristovuyuchi indpovidni (transistor, triac, relè, ecc.). Perché vuoi controllare la luminosità della sorgente luminosa (o della lampada) o la velocità del motore strum veloce, poi segnali digitali Non riesco proprio a risolverlo. Questa situazione è spesso discussa nella tecnologia digitale e viene chiamata Modulazione dell'ampiezza di impulso (PWM).

Possano tutti i moderni microcontrollori avere un hardware speciale per abbinare il segnale PWM. A questo livello, dobbiamo imparare le basi della tecnica SHIM ed è meglio implementare lo SHIM per l'aiuto dei microcontrollori AVR.

I componenti aggiuntivi digitali, come un microcontrollore, possono generare più di due livelli sulle linee di uscita, alto = 5V e basso = 0V. Ale sho, yakscho mi vuoi prendere 2,5 chi 3,1 chi se si tratta di una tensione nell'intervallo 0-5 V? Allo scopo di creare una tensione costante di un flusso costante in uscita, genereremo un meandro, che è alto = 5V e basso = 0V uguale (div. baby 1).

Fig. 1

Dal piccolo si può vedere che il segnale per una certa ora è sopraffatto sul livello basso e alto. T0 - basso, T1 - alto. Periodo del segnale T = T0+T1. Periodo di impulsi- tse intervallo tra due punti caratteristici di due susidnіh іpulsіv. Suona il periodo tra due fronti, o due con recessioni di impulsi vascolari e significa la grande lettera latina T.

Il periodo di passaggio degli impulsi senza intermediari si sovrappone alla frequenza della sequenza di impulsi e può essere calcolato utilizzando la formula: T = 1/F

Finché l'impulso T1 è esattamente uguale alla metà del periodo T, tale segnale è spesso chiamato "meandro".

La stabilità degli impulsi è chiamata il periodo di passaggio degli impulsi alla loro banalità ed è indicata dalla lettera S: S=T/T1

La gentilezza è un valore insondabile e non può essere sola al mondo, ma può esprimersi anche in centinaia di donne. Il termine è spesso usato nei testi inglesi ciclo di lavoro, Tse classifica così il coefficiente di completamento o il valore del ciclo di lavoro del PWM. Il coefficiente di riempimento D è il valore del risparmio di scottatura.

Coefficiente di riempimento il cinguettio appare al vіdsotkah e viene calcolato secondo la seguente formula: D=1/S o giù di lì D = T1/T * 100%

Sul piccolo (Fig. 1) puoi sputare, T1 \u003d T0, per mezz'ora. Quindi il valore del ciclo di lavoro PWM diventa 50%. Poiché la frequenza di tali impulsi è alta (diciamo, 5000 Hz), impiegheremo la metà di 5V tobto. 2,5 V. In tale grado, di conseguenza, la rimozione del controller dal motore (con l'aiuto di driver aggiuntivi) è dovuta al 50% della velocità totale. Tecnica ShІM vikoristovuє tsey fatto per la creazione di se la tensione tra due è uguale o meno (ad esempio tra 0-12V). L'intero focus è sul fatto che quando si modifica il valore del ciclo di lavoro tra 0-100%, si toglie la stessa tensione di ingresso all'uscita. Di seguito viene indicato, applicare il segnale PWM a un diverso segnale di risparmio.

Se metti un filtro R / C sull'uscita, puoi prendere una CC pura uguale al segnale e non un'onda quadra. Ma non è necessario per i motori dei collettori, ma per il controllo dei diodi emettitori di luce. Per cui è possibile applicare un segnale PWM direttamente al driver (ad esempio un transistor bipolare, anche MOSFET).


Sotto la modalità robotica 16-rozr. il timer viene appreso dall'algoritmo dell'operazione e dal comportamento ad esso associato all'uscita del generatore di impulsi, che è determinato dalla combinazione di bit, che imposta la modalità di funzionamento del timer (WGMn3-0) e la modalità di generazione del segnale di uscita (COMnx1:0). Per specificare la modalità di formazione del segnale di uscita, aggiungi l'algoritmo rahunka, perché L'algoritmo del rahunka per sdraiarsi in futuro sarà impostato sulla modalità del timer robotico. Nelle modalità con bit PWM COMnx1:0, è possibile abilitare/disabilitare l'inversione sull'uscita PWM generata (per selezionare PWM con inversione o PWM senza inversione). Per le modalità senza bit PWM viene assegnato COMnx1:0, che è necessario disabilitare in caso di uscita guasta: scartare, inserire o invertire l'uscita (div. anche “Blocco di modellazione del segnale di uscita” e “Diagrammi di clock del timer a 16 dimensioni -fermate").

Modalità di funzionamento normale

Lui stesso modalità semplice Il robot è in modalità normale (WGMn3-0 = 0b0000). A questa modalità il lichnik funziona come una somma (incrementale), con la quale il lichnik non viene scontato. La commutazione del lichnik è necessaria per un'ora quando si passa al massimo a 16 bit. valore (0xFFFF) nell'intervallo inferiore (0x0000). Nel normale funzionamento, il flag di reset del timer TOVn sarà impostato sullo stesso ciclo di clock se TCNTn assume un valore zero.

In effetti, il flag di riordino TOVn è il 17° bit della lista dei timer per una strizzatina d'occhio, che i vins vengono solo ripristinati e non eliminati. Tuttavia, a livello di programmazione, la potenza può essere modificata per aumentare la distribuzione del timer, in modo che possa essere modificata in base al riordino del timer, momento in cui il guardiamarina TOVn viene eliminato automaticamente. Per la normale modalità di lavoro, non ci sono situazioni speciali, quindi l'ingresso di un nuovo lichilnik può essere vickonano essere un tale mit.

In modalità normale, è possibile ignorare il blocco di acquisizione. Tuttavia, se si segue la traccia, in modo che l'intervallo massimo tra le vinificazioni dei baccelli uguali non superi il periodo di reiscrizione del lichnik. Se una tale mente non viene raggiunta, è necessario vincere il ripristino del lichilnik o del timer.

Il blocco di interruzione può essere violato per generare interruzioni. Non è consigliabile disattivare OCnx per la generazione del segnale durante il normale funzionamento, perché a questo punto verrà tracciata una parte significativa dell'ora del processore.

Modalità salto timer pіd h zbіgu (STS)

In modalità STS (WGM01, WGM00 = 0b10), il registro OCR0 viene controllato per impostare l'affitto dell'affittuario. Ogni volta che viene impostata la modalità CTC e il valore del qualificatore (TCNT0) viene impostato sul valore del registro OCR0, il qualificatore viene azzerato (TCNT0=0). In questo ordine, OCR0 imposta la parte superiore della rahunka del lichnik e, inoltre, la seconda divisione dell'edificio. In questa modalità è assicurato un più ampio range di regolazione della frequenza degli impulsi rettilinei che vengono generati. Questo rende anche più facile il lavoro del lichnik dell'ovnishnіh podіy.

Nella modalità di ripristino del timer all'avvio (WGMn3-0 = 0b0100 o 0b1100), l'impostazione del timer viene impostata dai registri OCRnA o ICRn. Nella modalità CTC, è richiesto un ripristino del segnale acustico (TCNTn), il che significa che uno dei due valori cadrà nel registro OCRnA (WGMn3-0 = 0b0100) o ICRn (WGMn3-0 = 0b1100). Il valore del registro OCRnA o ICRn determina il limite superiore della finestra e, inoltre, l'altra impostazione del timer. In questa modalità è assicurato un più ampio range di regolazione della frequenza degli impulsi rettilinei che vengono generati. Questo rende anche più facile il lavoro del lichnik dell'ovnishnіh podіy. Il diagramma orario del funzionamento del timer in modalità CTC è mostrato in piccolo 1. L'orologio (TCNTn) incrementa le sue statistiche, l'orologio non aumenta oltre i valori di OCRnA o ICRn, quindi l'orologio (TCNTn) viene scartato .

Figura 1 - Diagramma dei tempi per la modalità STS

Se si raggiunge il limite superiore della camera, è possibile generare un cambio per ulteriori guardiamarina OCFnA o ICFn, quest'ultimo registro vittorioso per la somministrazione del limite superiore della camera. Anche se è consentito un resurfacing, è possibile eseguire una procedura di resurfacing per aggiornare il bordo superiore del torace. Tuttavia, il valore della parte superiore del rahunka è vicino al valore di quello inferiore tra i rahunka, se il lichnik funziona senza differenza o con un piccolo valore della differenza, è necessario vincere con particolare attenzione, ad es. La modalità STS non ha buffering della metropolitana. Se il valore scritto in OCRnA o ICRn è inferiore al valore corrente di TCNTn, allora viene impostato lo sconto del lichilika per la somma mentale, se il valore raggiunge il valore massimo (0xFFFF), quindi vai a campo estivo 0x0000 e raggiungere il nuovo valore di OCRnA o ICRn. In situazioni ricche, una situazione del genere non può essere biasimata. In alternativa, è possibile accedere alla modalità PWM, annullare la registrazione OCRnA imposta l'intervallo superiore (WGMn3-0 = 0b1111), perché questo tipo di OCRnA potrebbe avere un buffering sottocorrente.

Per generare un segnale in modalità CTC, l'uscita OCnA può essere commutata per modificare il livello logico della tonalità della pelle, per cui è necessario impostare la modalità di muting (COMnA1, COMnA0 = 0b01). Il valore OCnA sarà presente sulla porta visualizzata, solo per questo modo i lavori vengono emessi direttamente. La frequenza massima del segnale da generare è fOC0 = fclk_I/O/2, quindi OCRnA = 0x0000. Per altri valori di OCRn, la frequenza del segnale da generare può essere determinata dalla formula:

de change N imposta il coefficiente di suddivisione del predivisore (1, 8, 32, 64, 128, 256 o 1024).

Quindi, proprio come per la modalità di funzionamento normale, il TOV0 ensign è impostato sullo stesso ciclo del timer, se il suo valore cambia da 0xFFFF a 0x0000.

Modalità PWM veloce (PWM VELOCE)

Modalità di modulazione manuale della larghezza di impulso (PWM) (WGMn3-0 = 0b0101, 0b0110, 0b0111, 0b1110, 0b1111) per la generazione di impulsi PWM nella frequenza pilotata. Sulla base di altre modalità di lavoro, quale si vince, il lavoro del lichnik è unidirezionale. Rakhunok vykonuєtsya in linea retta dal limite inferiore a quello superiore del rakhunka.

Anche se la modalità di uscita è impostata, se non è invertita, quando vengono attivati ​​TCNTn e OCRnx, il segnale OCnx viene ripristinato e viene eliminato al limite superiore. Se la modalità lavoro è invertita, l'output di OCnx viene eliminato quando viene eseguito e viene installato sul limite superiore della finestra. Per il rahunka unidirezionale, la frequenza operativa per questa modalità a doppia larghezza è più uguale alla modalità PWM e alla correzione di fase, deviando il rahunok a doppio rettilineo. La possibilità di generazione di segnali PWM ad alta frequenza per derubare questo regime è simile ai compiti di stabilizzazione della vita, rettifica e conversione digitale-analogica. Alta frequenza, alla quale è possibile battere elementi estranei fisicamente piccole espansioni (induttanze, condensatori), sim abbassando il varst complessivo del sistema.

Razdіlnі zdatnіst SHІM può essere fissato a 8, 9 o 10 cifre o impostato dal registro ICRn o OCRnA, ma non meno di 2 cifre (ICRn o OCRnA = 0x0003) e non più di 16 cifre (ICRn o OCRnA = 0x0FFFF). Razdіlna zdatnіst ShІM a un dato valore del limite superiore (VP) viene calcolato come segue:

Il regime ha uno shiM likilnik izhmneta alla conoscenza di zbiga yogo io -io -ogs di 0x00ff, 0x01FF Abo 0x03FF (Yakshcho WGMN3: 0B0101, 0B0110 Abo 0b0111, icrn (0: 0: 0: 0: 0: 0: 0: 0 : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0 : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0:0 , e Potim viene lanciato dal tatto del timer di sincronizzazione. Timchasov DIARAMA MINIMS SHIVIM SHIM è presentato a Malyunka 2. Le letture di Malyuka dello Schvidko Sim, se l'OCRNA è il tCNTN del TCNTN al gesso Il diagramma mostra le uscite PWM sia invertite che non invertite.Una breve linea orizzontale mostra un punto sul grafico TCNTn, deviando i valori OCRnx e TCNTnx.

Figura 2 - Diagramma temporale per la modalità PWM

Il flag di ripristino del timer (TOVn) viene ripristinato non appena il timer raggiunge il limite superiore. Inoltre, con lo stesso impulso di clock contemporaneamente al flag TOVn, è possibile installare i flag OCnA o ICFn, quindi per impostare il limite superiore, il registro OCRnA o ICRn è ovvio. Se uno degli attraversamenti è consentito, le procedure di elaborazione dell'attraversamento possono essere eseguite anche aggiornando il limite superiore e le soglie di attraversamento.

Se il valore del limite superiore viene modificato, è necessario riflettere attentamente in modo che il nuovo valore del limite superiore sia maggiore o più importante in tutti i registri della soglia. In un altro caso, TCNTn e OCRnx non hanno ammiccato in alcun modo. Da prestare attenzione, che quando il valore del limite superiore è fisso, l'ingresso nel registro OCRnx viene mascherato fino a 0 scarichi, che non vengono vicorati.

Il meccanismo per modificare il registro ICRn è modificato nel caso di OCRnA in quel caso, poiché è scritto per impostare il limite superiore. Il registro ICRn non può essere memorizzato nel buffer. Ciò significa che se ICRn viene scritto su un valore piccolo per l'ora di lavoro del lichnik con un valore piccolo, o senza di esso, non è sicuro scrivere un valore nel registro ICRn, poiché sembra essere inferiore al valore attuale di TCNTn. Di conseguenza, in una situazione del genere, mancherà uno zbіg nella parte superiore del rahunka. In questo caso, il lichnik salirà al valore massimo (0xFFFF), riavvierà con il valore 0x0000 e quindi winkne zbig. Registra OCRnA per sostituire lo schema di buffering slave, quindi può essere modificato in qualsiasi momento.

class="eliadunit">

Non appena il record viene firmato per l'indirizzo OCRnA, il valore viene effettivamente inserito nel registro del buffer OCRnA. Come risultato di zbіg mizh TCNTn e della parte superiore del rahunka, il prossimo ciclo di sincronizzazione del timer copierà il registro del buffer nel registro di soglia OCRnA. L'aggiornamento del registro avviene nello stesso modo in cui si elimina TCNTn e si imposta il flag TOVn.

Si consiglia di utilizzare il registro ICRn per impostare il limite superiore, poiché il limite superiore del rahunka è una costante. In questo caso, il registro OCRnA è impostato per generare un segnale PWM all'uscita OCnA. Tuttavia, poiché la frequenza PWM sta cambiando dinamicamente (a causa della modifica del limite superiore), nel qual caso è necessario modificare il registro OCRnA per impostare il limite superiore, perché Con pіdtrimuє subvіynu buffering.

In modalità PWM, i blocchi PWM consentono di generare segnali PWM sugli interruttori OCnx. Se COMnx1:0 = 0b10, allora PWM è impostato senza inversione di uscita, e se COMnx1:0 = 0b11, allora la modalità PWM è impostata con inversione di uscita (tabella div. 59). Il valore effettivo di OCnx può essere monitorato sulla porta specificata, poiché è impostato su outbound direct (DDR_OCnx). Il segnale PWM è generato dal modo di impostare (impostare) il registro OCnx quando si verifica il guasto tra OCRnx e TCNTn, nonché dal modo di far cadere (impostare) il registro OCnx contemporaneamente al reset del lichnik ( passaggio dal limite superiore al limite inferiore).

La frequenza del segnale di uscita PWM per un dato valore del limite superiore (VP) è determinata dalla scala:

de N - cambia, impostando il valore del coefficiente di distribuzione (1, 8, 32, 64, 128, 256 o 1024).

L'immissione dei valori limite del registro OCRnx è associata a particolari fluttuazioni nella generazione di impulsi PWM. Se OCRnx è impostato su un limite inferiore (0x0000), viene utilizzato come uscita un breve ciclo di impulsi cutanei (VP + 1) della sincronizzazione del timer. Registrando a OCRnx il valore di uguale al limite superiore della trave prima dell'installazione di una costante uguale alla trave. 1 o 0 sull'uscita (deposito sotto forma di un bit aggiuntivo COMnx1:0 della polarità del segnale di uscita).

Come al solito, è richiesta la generazione del meandro (impulsi diretti per risparmiare 2 o 50% di ricariche) alta frequenza, quindi è necessario sovrascrivere la modalità SHIM di swidkoy con l'impostazione del bit COMnA1: 0 = 0b01, in modo che il livello logico venga commutato (invertito) sull'uscita OCnA durante lo skin zbіgu. Questo dovrebbe essere fermato, è meno probabile che OCRnA vinca per aver impostato il limite superiore (WGMn3-0 = 0b1111). La frequenza massima dell'onda quadra generata per questa forma d'onda fOCnA = fclk_I/O/2, ovvero OCRnA =0x0000. Cosa è speciale simile alla commutazione di OCnA in modalità STS con un po' di buffering mobile, come in modalità PWM.

Modalità di modulazione dell'ampiezza dell'impulso con correzione di fase (Phase Correct)

Modalità di modulazione dell'ampiezza dell'impulso con correzione di fase (PWM FC) (WGMn3-0 = 0b0001, 0b010, 0b0011, 0b1010 o 0b1011) per la generazione di un segnale PWM con correzione di fase e larghezza di banda elevata. Modalità PWM per la configurazione di un timer-lichilnik robotico bidirezionale. Il lichnik strizza l'occhio ciclicamente alla linea retta dal limite inferiore (0x0000) al limite superiore, e poi di nuovo dal limite superiore al limite inferiore. Oltre a impostare la modalità di uscita della macchina per la formazione di impulsi, che non è invertita, l'uscita di OCnx viene ripristinata/ripristinata quando il valore di TCNTn e OCRnx viene regolato per la forma d'onda diretta/inversa. Non appena viene impostata la modalità di uscita, invece, l'installazione viene installata nell'ora diretta del giorno e l'uscita da OCnx viene annullata nell'ora del ritorno. Con robot bidirezionali frequenza massima Il segnale PWM è più piccolo, più basso con i robot a direzione singola, tuttavia, a causa di tale caratteristica, come la simmetria nelle modalità PWM con robot bidirezionale, le modalità qi sono importanti per una migliore rotazione quando il controllo dell'unità è invertito.

Razdіlna zdatnіst ShІM in questa modalità può essere riparato (8, 9 o 10 scarichi) o richiedere un registro aggiuntivo ICRn o OCRnA. La capacità minima è superiore a 2 cifre (ICRn o OCRnA = 0x0003) e la massima è 16 cifre (ICRn o OCRnA = 0xFFFF). Se viene impostato il limite superiore, la separazione dell'edificio dello SHIM in questa modalità è determinata dal grado successivo:

In modalità PWM, il lichil viene incrementato fino a raggiungere uno dei valori fissi 0x00FF, 0x01FF o 0x03FF (valido per WGMn3-0 = 0b0001, 0b0010 o 0b0011), nonché uguale valore ICRn (00b:01). Più lontano, all'altezza del confine superiore, il lichnik cambia direttamente il rahunka. Il valore di TCNTn è sovrascritto dall'uguale intervallo superiore di un ciclo della sincronizzazione del timer. Il diagramma temporale per la modalità PWM FC è mostrato nel piccolo 3. Nelle piccole indicazioni, la modalità PWM FC con un registro aggiuntivo OCRnA e ICRn per l'impostazione del bordo superiore. Il mulino TCNTn è presentato come un grafico funzionale per illustrare la bidirezionalità del rahunka. Su piccola scala, ci sono sia uscite PWM non invertenti che invertenti. Brevi linee orizzontali indicano i punti sul grafico per la modifica di TCNTn, deviando dai valori di OCRnx. La bandiera OCnx è in fase di ripristino al momento del lancio.

Figura 3 - Diagramma temporale per la modalità PWM FC

Il flag di ripristino del timer (TOVn) viene ripristinato ogni volta che il timer raggiunge il limite inferiore. Per quanto riguarda l'impostazione del limite superiore, viene impostato il registro OCRnA o ICRn, il flag OCnA o ICFn è solitamente impostato con lo stesso impulso di clock, a cui viene aggiornato il registro OCRnx dal registro buffer (nella parte superiore del frame). Prapori pererivannya può vikoristovuvatisya per la generazione pererivannia dopo aver raggiunto il confine inferiore o superiore dal lichnik.

Quando si cambia il valore dell'inter-registrazione superiore, è necessario mantenere un controllo, in modo che sia maggiore o più uguale ai valori di tutti i registri. In un altro caso, TCNTn e OCRnx non hanno ammiccato in alcun modo. Da prestare attenzione, che quando il fix vittorioso viene registrato nel registro OCRnx il valore dell'intervallo interstiziale superiore, se non viene vicorato, verrà azzerato. Il terzo periodo del piccolo è di 53 fluttuazioni illustrative, se il cambiamento dinamico dell'interfluve superiore è portato alla generazione di un impulso asimmetrico. Questa particolarità si basa sull'ora di aggiornamento del registro OCRnx. Frammenti del rinnovo OCRnx appaiono nella parte superiore del rahunka, quindi il periodo PWM inizia e termina nella parte superiore del rahunka. Tse potrebbe essere sull'orlo del fatto che la banalità del rahunka invertito sia assegnata ai valori in avanti del limite superiore e quella diretta ai nuovi valori del limite superiore. Per quanto riguarda il significato della differenza, verrà poi rivisitata anche la banalità del diretto e il ritorno del rahunka. Trevalosity vidminnista per produrre asimmetria degli impulsi di uscita.

Poiché è necessario modificare il limite superiore con un idler funzionante, si consiglia di cambiare la modalità per passare alla modalità PWM PFC (correzione di fase e frequenza). Sebbene il valore statico del limite superiore sia vittorioso, non ci sono praticamente differenze tra queste modalità.

In modalità PWM FC, i blocchi di accoppiamento consentono di generare segnali PWM sui circuiti OCnx. Se si imposta COMnx1:0 = 0b10, l'uscita PWM sarà senza inversione e se COMnx1:0=0b11, quindi con inversione. In effetti, il valore OCnx può essere monitorato sulla porta di output, come nel registro direttamente i dati per l'output sui lavori di output diretto della porta (DDR_OCnx). Il segnale PWM è generato dal percorso di impostazione (impostazione) del registro OCnx quando il valore di OCRnx e TCNTn viene modificato per l'ora della scia diretta, nonché dal modo della discesa (impostazione) al registro OCnx quando l'insieme di OCRnx e TCNTn è impostato sull'ora del turndown. La frequenza risultante del segnale PWM nella modalità PWM FC con un limite superiore (VP) specificato può essere calcolata utilizzando il metodo seguente:

La scrittura dei valori limite nel registro OCRnx è associata a particolari fluttuazioni nella generazione dei segnali PWM nella modalità PWM FK. Se si imposta la modalità PWM senza inversione e OCRnx imposta il limite inferiore uguale, il registro verrà impostato in modo permanente sull'uscita. 0, e uguale al limite superiore, emerge un raggio permanentemente presente. 1. Per PWM con inversione, la designazione degli uguali deve essere sostituita dalle lunghezze.

Se si imposta OCnA come limite superiore (WGMn3:0 = 0b1011) e si imposta COMnA1:0 =0b01, verrà generata un'onda quadra all'uscita di OCnA.

Modalità di modulazione dell'ampiezza dell'impulso con correzione di fase e frequenza (correzione di fase e frequenza)

Modalità di modulazione di larghezza di impulso con correzione di fase e frequenza (WGMn3-0 = 0b1000 o 0b1001) di assegnazioni per la generazione di impulsi PWM ad alta potenza con correzione di fase e frequenza. Yak i mode PWM FK mode PWM FChK di fondazioni su un accendino robotico bidirezionale. Il numero si sposta ciclicamente dal limite inferiore (0x0000) al limite superiore, quindi torna dal limite superiore al limite inferiore. Se le attività non invertono la modalità PWM, l'uscita OCnx verrà eliminata, il che farà diminuire TCNTn e OCRnx tra TCNTn e OCRnx per un'ora dell'onda diretta e verrà ripristinato, il che comporterà la diminuzione di l'ora dell'onda di ritorno. In modalità invertita, il robot è invertito. Il robot è a doppio rettilineo, in coppia con un singolo rettilineo, è connesso alla generazione di più basse frequenze. Tuttavia, i problemi di simmetria nelle modalità PWM con un raggio bidirezionale, il loro blocco è più importante nelle attività di controllo dell'azionamento.

La principale differenza tra le modalità PWM e PFC riguarda il registro OCRnx dal registro buffer OCRnx al momento dell'aggiornamento (div. fig. 3 e fig. 4).

Razdіlna zdatnіst SHІM in questa modalità può essere richiesto un registro aggiuntivo ICRn o OCRnA. La capacità minima è di 2 livelli (ICRn o OCRnA = 0x0003) e la capacità massima è di 16 cifre (ICRn o OCRnA = 0xFFFF). Razdіlna zdatnіst ShІM nei ranghi può essere addebitato per un tale viraz:

Nella modalità PWM FCH, il lichnik viene incrementato fino al valore ICRn più grande (WGMn3:0 = 0b1000) o in OCRnA (WGMn3:0 = 0b1001). Tse significa raggiungere la cima del rahunka, dopo di che il rahunka cambia direttamente. Il valore di TCNTn viene riempito con la parte superiore uguale del grafico di un ciclo di clock della sincronizzazione del timer. Il diagramma temporale per la modalità PWM PFC è mostrato sulla miniatura 54. La modalità PWM PFC è mostrata sulla miniatura delle letture, se il vertice del grafico è impostato dal registro OCRnA o ICRn. Il valore di TCNTn viene visualizzato come grafico funzionale per illustrare la bidirezionalità del display. Sul diagramma delle indicazioni compaiono sia PWM non invertente che invertente. Brevi linee orizzontali puntano ai punti del grafico TCNTn, deviando tra OCRnx e TCNTn. Il flag di ripristino di OCnx verrà ripristinato dopo l'errore.

Figura 4 - Diagramma temporale per la modalità PWM con correzione di fase e frequenza

Il flag di ripristino dell'elenco dei timer (TOVn) viene impostato dallo stesso ciclo, se il registro è stato aggiornato con i valori del registro buffer (sulla riga inferiore). Se il registro OCRnA o ICRn è registrato per il limite superiore, dopo aver raggiunto il limite superiore, viene stabilito il guardiamarina OCnA o ICFn. Prapori pererivannya può essere vittorioso per generazione di pererivannia quando il confine superiore o inferiore è raggiunto dal lichnik.

Quando si cambia il limite superiore, è necessario fare un passo, in modo che il nuovo valore sia maggiore o più uguale ai valori in tutti i registri della soglia. In un altro caso, se il valore del limite superiore è inferiore al valore della soglia di registro, la differenza tra TCNTn e OCRnx non verrà mai.

Sul piccolo 4 viene mostrato che nella modalità PWM FC il segnale di uscita che viene generato è simmetrico per tutti i periodi. Oskіlki registra OCRnx novlyuyutsya sul mezhі rachunka inferiore, quindi il trevalosity del diretto e svorotnogo rachunkіv zavzhdi uguale. Di conseguenza, gli impulsi di uscita hanno una forma simmetrica e anche una frequenza variabile.

Si consiglia di utilizzare il registro ICRn per impostare il limite superiore, poiché il valore del limite superiore è una costante. In questo caso, il registro OCRnA è impostato per la modulazione della larghezza di impulso degli impulsi sull'OCnA visualizzato. Tuttavia, poiché è necessario modificare dinamicamente la frequenza SHIM per la modifica del limite superiore, per impostare il limite superiore si consiglia di vincere il registro OCRnA per la visibilità del buffering della nuova sottofinestra.

Nella modalità PWM FCH, i blocchi PFC consentono di generare impulsi PWM sull'uscita OCnx. Se COMnx1:0 = 0b10, viene visualizzata un'uscita PWM non invertente e se COMnx1:0=0b11, allora è invertente (tabella div. 60). Il valore OCnx sarà presente sulla porta in uscita solo nella direzione opposta, poiché è impostato su uscita diretta. Il segnale PWM viene generato dal modo per impostare (skid) il registro OCnx quando zbіgu mіzh OCRnx e TCNTn pіd ora dell'onda diretta e la caduta (installazione) nel registro OCnx quando zbіgu mіzh OCRnx e TCNTn pіd l'ora del ritorno onda. La frequenza del PWM in questa modalità, quando è impostato il limite superiore (VP), è indicata dal grado offensivo:

de N - Coefficiente di divisione del predeterminatore (1, 8, 32, 64, 128, 256 o 1024).

La scrittura dei valori limite del registro OCRnx è associata a fluttuazioni speciali nella generazione di segnali PWM in questa modalità. Se si imposta OCRnx uguale al limite inferiore (0x0000), in modalità non invertente, l'uscita avrà sempre un livello logico basso e quando si registra il valore del limite superiore uguale, l'uscita avrà sempre un livello logico alto livello. Nella modalità di inversione, le linee saranno invertite.

Se viene eseguito un ciclo di OCRnA per impostare il limite superiore (WGMn3:0 = 0b1001) e COMnA1:0 = 0b01, verrà generata un'onda quadra all'uscita di OCnA.


L'implementazione hardware di PWM offre vantaggi folli rispetto al software, ai frammenti di rozvantazhu del processore, poiché lo caricheremo con un codice ingombrante, quindi ci vuole un'ora per ripararlo e offre anche maggiori opportunità di lavorare con PWM. Достатньо провести ініціалізацію таймер/лічильника (занести необхідні значення в регістри використовувані таймер/лічильником) як таймер/лічильник може працювати незалежно від процесора, відповідно процесор може займатися іншими завданнями, тільки іноді звертаючись в необхідний момент для коригування або зміни режиму або отримання результатів від таймер /persona.

Descrizione dei diritti

T1 può generare un respawn quando colpisce:

  1. riscrittura del registro rachunk TCNT1;
  2. se i registri dei farmaci LCNT1 e OCR1A e OCR1B sono uguali (okremo per il registro cutaneo);
  3. per il salvataggio del registro rachunk nel registro di seppellimento ICR1.

T2 può generare un respawn quando colpisce:

  1. riscrittura del registro rachunk TCNT2;
  2. con l'uniformità del registro medico TCNT2 e del registro OCR2.

I flag di tutte le modifiche sono elencati nel registro TIFR e i permessi/recinzioni sono elencati nel registro TIMSK.

Registro di scarico TIMSK
Registro7 6 5 4 3 2 1 0
TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0* TOIE0
  • OCIE2- Diritto a consentire una sospensione per il timer/timer T2 "zbіg".
  • TOIE2- Diritto all'azzeramento del timer/timer T2
  • TICIE1- Diritto a consentire un reset dopo l'"intasamento" del timer/accendisigari T1
  • OCIE1A- Diritto a consentire una pausa per il sub "zbіg A" del timer/timer T1
  • OCIE1B- Legittimazione alla ripartenza dopo lo "start B" del timer/timer T1
  • TOIE1- Autorizzazione al guardiamarina per azzerare il timer/timer T1
  • OCIE0*- Diritto alla ripartenza dopo lo "start" del timer/chiamante T0 (* - tutti i giorni in ATmega8)
  • TOIE0- Diritto all'azzeramento del timer/timer T0
  • OCF2- Prapor tregua per il timer/chiamante "zbіg" T2
  • TOV2- Flag di azzeramento del timer/timer T2
  • ICF1- Bandiera della resurrezione per "inghiottimento" del timer/timer T1
  • OCF1A- Flag della sospensione per il sub "zbіg A" del timer/timer T1
  • OCF1B- Flag della sospensione per la "partenza B" del timer/timer T1
  • TOV1- Flag per azzerare il timer/timer T1
  • OCF0- Flag della sospensione per il timer/timer "zbіg" T0
  • TOV0- Flag per azzerare il timer/timer T0

Descrizione del robot tayter/accendino T1 per controller ATmega8/16

Un timer/timer T1 a sedici cifre può essere utilizzato per formare intervalli orari, contare il numero di segnali di chiamata e per generare segnali con risparmio e trivalità WIM diversi sugli avvolgimenti OC1A e OC1B. Inoltre, per un segnale di chiamata proveniente dall'ICP1 o da un comparatore analogico, T1 può salvare il proprio mulino a flusso nel registro di memorizzazione ICR1.

Registri di scarico TCCR1A:TCC1B:TCNT1:OCR1A:OCR1B:ICR1
Registro7 6 5 4 3 2 1 0
TCCR1A COM1A1 COM1A0 COM1B1 COM1BO FOC1A FOC1B WGM11 WGM10
TCCR1B ICNC1 CIEM1 * WGM13 WGM12 CS12 CS11 CS10
TCNT1:H R/W R/W R/W R/W R/W R/W R/W R/W
TCNT1:L R/W R/W R/W R/W R/W R/W R/W R/W
OCR1A:H R/W R/W R/W R/W R/W R/W R/W R/W
OCR1A:L R/W R/W R/W R/W R/W R/W R/W R/W
OCR1B:H R/W R/W R/W R/W R/W R/W R/W R/W
OCR1B: L R/W R/W R/W R/W R/W R/W R/W R/W
ICR1:H R/W R/W R/W R/W R/W R/W R/W R/W
ICR1: L R/W R/W R/W R/W R/W R/W R/W R/W

Il registro Leather a 16 bit è fisicamente distanziato in due registri a 8 bit a quell'ora di lettura del record in cui è necessario effettuare due operazioni. Quando si scrive per primo, viene letto prima il byte più vecchio, poi quello più giovane, se letto all'indietro, viene letto il byte più giovane e poi quello più vecchio.

TCCR1A:TCCR1B- Registri a 8 bit per il monitoraggio da parte del timer/timer T1

TCNT1- Registro personale a 16 bit del timer/timer T1. Nella modalità a riposo, il robot nel registro locale viene azzerato, incrementato (il valore aumenta di 1) o decrementato (il valore cambia di 1) in base all'impulso cutaneo del segnale dell'orologio del timer/corna.

OCR1A:OCR1B- Registri di porta a 16 cifre

ICR1- Registro di mantenimento a 16 bit, che salva il valore di TCNT1 quando viene applicato un fronte attivo al segnale di uscita ICP1 o al segnale di uscita del comparatore.

Appuntamento di battaglie

COM1A1:COM1A0:COM1B1:COM1B0- Le scariche Qi determinano il comportamento del display OC1A:OC1B al variare del valore del registro rachunk TCNT1 e del registro d'ordine OCR1A:OCR1B

FOC1A:FOC1B- Congedo Qi per servire per il cambio primus vedrò OC1A:OC1B

ICNC1- L'ordine dello schema di controllo viene spostato, in modo che un po' più di "0" venga seppellito sul primo fronte attivo, quindi "1" venga sepolto dopo la quarta identica selezione del segnale dell'affondamento.

CIEM1- Scaricando la scelta del fronte attivo del segnale, purché il valore sia "0", il salvataggio del registro rachunk TCNT1 nel registro di affondamento OCR1 sarà sul fronte del segnale, che cade, come "1" sul in aumento.

WGM13:WGM12:WGM11:WGM10- Cicli di scarica per selezionare la modalità di funzionamento timer/accendisigari T1

CS22:CS21:C20- Scarico, che è assegnato al segnale dell'orologio del timer / orologio T1.

Selezionare la modalità di funzionamento del timer/chiller T1
WGM13WGM12WGM11WGM10Modalità robotModulo Rahunku (TOP)
0 0 0 0 Normale $FFFF
0 0 0 1 PWM corretto di fase

8 bit

$ 00FF
0 0 1 0 PWM corretto di fase

9 bit

$ 01FF
0 0 1 1 PWM corretto di fase

10 bit

$03FF
0 1 0 0 CTC OCR1A
0 1 0 1 PWM veloce

8 bit

$ 00FF
0 1 1 0 PWM veloce

9 bit

$ 01FF
0 1 1 1 PWM veloce

10 bit

$03FF
1 0 0 0 ICR1
1 0 0 1 PWM corretto di fase e frequenza OCR1A
1 0 1 0 PWM corretto di fase ICR1
1 0 1 1 PWM corretto di fase OCR1A
1 1 0 0 CTC ICR1
1 1 0 1 riservato *
1 1 1 0 PWM veloce ICR1
1 1 1 1 PWM veloce OCR1A

Segnale dell'orologio Vibir dzherela

Modalità normale

La modalità di funzionamento più semplice è T1. In base all'impulso cutaneo del segnale di clock, viene inserito l'incremento del registro personale TCNT1 (il valore più alto è 1). Quando si attraversa il valore $FFFF del modulo TIFR, si provoca un reflow e il ciclo di clock in arrivo inizia con il valore di $0000, contemporaneamente viene impostato il flag TOV1=1 nel registro TIFR, e può essere generato un riordino , oltre a impostare i flag TOIE1=1 nel registro . Per generare segnali di una data frequenza in questa modalità, è necessario scrivere nella scarica COM1A1=0:COM1A0=1 per vedere OC1A oppure COM1B1=0:COM1B0=1 per vedere il regolatore OC1B.

Inoltre, in base allo skin tact, vengono registrati l'ordine del registro TCNT1 rachunka e l'ordine OCR1A:OCR1B, quando l'ordine viene modificato, viene impostato l'ordine dell'ordine OCF1A=1:OCF1B=1 e l'ordine OCIE1A= Viene generato anche 1:OCIE1B=1. In quel preciso momento, lo stato di OC1A:OC1B potrebbe essere modificato a seconda delle impostazioni delle battaglie COM1A1:COM1A0:COM1B1:COM1B0.

Modalità STS (slittamento durante la corsa)

In questa modalità, T1 segue lo stesso principio della modalità Normale. La differenza sta nel fatto che il valore massimo possibile del timer TCNT1 è mescolato con il valore del registro timer OCR1A o ICR1 (vedi tabella di selezione modalità timer/timer). Quando TCNT1 raggiunge il valore di OCR1A o ICR1, il valore di TCNT1 viene resettato a TCNT1=$0000 In questo momento viene impostato il flag TOV1=1.

Modalità PWM veloce (Swedcode PWM)

Per una modalità aggiuntiva, puoi generare un segnale PWM ad alta frequenza. Il principio e l'ordine di funzionamento non è considerato nella modalità Normale, fatta eccezione per la presenza del registro di buffering slave OCR1A:OCR1B, la comparsa di impulsi asimmetrici nel segnale è disattivata, ed è considerato anche dal comportamento dell'OS1A :OC1B (tabella div.).


Modalità PWM a correzione di fase

L'applicazione di questo regime è simile a quella del primo in quanto il registro lichilny funziona come un lichilnik inverso. Poiché questa modalità è consigliata da Atmel come la più adatta per la regolazione dei motori, esamineremo il rapporto. Quando il valore del valore del valore del valore del valore del valore del valore del valore del valore del registro ICR1 o il valore del registro OCR1A è raggiunto dal registro TCNT1 TCNT1 (o il valore di il registro ICR1 o il valore del registro OCR1A, guarda la tabella per la selezione della modalità timer/chil), il valore del valore del valore del valore del valore del valore del valore del valore del valore del registro ICR1 viene modificato direttamente. Quando il valore minimo ($0000) viene raggiunto dal registro personale TCNT1, è anche possibile modificare direttamente l'account, e proprio in quell'ora viene impostato il flag del trasferimento di TOV1 al registro TIFR. Inoltre, se si è uguali al posto del registro di controllo TCNT1 e del registro di controllo OCR1A:OCR1B, il flag OCF1A:OCF1B verrà impostato sul registro TIFR e verrà modificato lo stato di visualizzazione OC1A:OC1B, valido per la tabella.

Per nascondere i wiki non simmetrici nell'ora in cui scrivi il valore del registro OCR1A:OCR1B, questa modalità ha un buffering del record mobile. Il motivo della modifica del valore del registro viene modificato nel momento in cui il registro rachunk TCNT1 raggiunge il valore del modulo rahunku (TOR) (o il valore del registro ICR1 o il valore del registro OCR1A è guardare la tabella per selezionare la modalità timer/timer). Per questo, sulla pannocchia stessa, durante l'inizializzazione del timer/contatore di baffi OS1A: OC1B, non cambierò la mia posizione quando il doti viene aumentato, il registro di dock non è raggiungibile (TOR).


Gestore: Possiamo espandere il programma per controllare l'illuminazione della lampada riscaldante a 12 Volt con l'aiuto di PWM. Quando si preme il pulsante "Altro", la luminosità della lampada aumenta, quando si preme il pulsante "Meno", la luminosità cambia. Lo schema della nostra futura dependance è mostrato come un piccolo. Come suona il microcontrollore Atmega8, che ha il clock come un generatore interno con una frequenza di 4MHz. Vlasne, abbiamo un interruttore dimmer e questi accessori sono progettati per regolare la luminosità degli apparecchi di illuminazione. I dimmer di luce sono stati posizionati sulla larghezza più ampia.

Per semplicità, prima del nostro schema, puoi anche collegare una luce, ma con una lampadina sarà meglio. Pulsanti collegati a visnovkiv PD0, PD1. Navatage è collegato alla visnovka PB1(OC1A) attraverso un resistore e un transistor a polo MOSFET, che è il più pratico per noi come chiave (in modalità chiave). Un transistor polare è migliore del fatto che il suo gate di isolamento si trova nel circuito di alimentazione e il controllo è vibrato da un campo elettrico e il flusso di controllo raggiunge i microampere. Tse consente, vikoristovuyuchi uno o due transistor, intensità maestose cheruvati (fino a decine di ampere e decine di centinaia di volt), non microcontrollore navantazhyuchi. Vrahovyuchi anche il fatto che transistori di campoè possibile collegarsi in parallelo (all'ingresso dei bipolari), è possibile prelevare una cascata di scarichi maggiore per centinaia di ampere.

Ora scopriamo come il microcontrollore implementa WIM e scriviamo un programma. Come già accennato in precedenza, il nostro MK ha 3 timer e tutte le puzze possono funzionare in modalità PWM. Useremo un timer / segnale acustico a sedici cifre. Bitami WGM13-10 abbiamo regolato il nostro timer per il robot FastPWM con il limite superiore del rahunka ICR1. Il principio del programma è questo, il nostro timer rahuє ha da 0 a 65535 (0xFFFF), nel registro ICR1 inserire il numero 255, se è impostato l'intervallo timer superiore (TOP), la frequenza del segnale PWM sarà costante. Inoltre, il nostro timer è regolato su quelli che, quando viene creato il registro dell'account, il controller passerà al registro (TCNT1 = OCR1A) OC1A. È possibile modificare il coefficiente PWM scrivendo nel registro di offset OCR1A più alto è il numero da 0 a 255, maggiore è il numero, maggiore è il coefficiente di riempimento, più luminosa è la lampada. Allo stesso modo, il pulsante viene modificato io, e poi sarà registrato nel registro OCR1A.

Di seguito il nuovo testo del programma. I commenti del rapporto descrivono il programma del robot.

/*** Attività #8. Modellazione dei segnali PWM ***/ #include #includere int main(void) ( unsigned int i=0; //signed to change i /***Porta di input fissa***/ PORTB = 0x00; DDRB |= (1<< PB1); PORTD |= (1 << PD1)|(1 << PD0); // подключаем внутренние нагрузочные резисторы DDRD = 0x00; /***Настройка таймера***/ TCCR1A |= (1 << COM1A1)|(0 << COM1A0) // Установим биты COM1A1-COM1A0:0b10, означает сброс вывода канала A при сравнении |(1 << WGM11)|(0 << WGM10); // Установим биты WGM13-10:0b1110, согласно таблице это TCCR1B |= (1 << WGM13)|(1 << WGM12) // будет режим - FAST PWM, где верхний предел счета задается битом ICR1 |(0 << CS12)|(0 << CS11)|(1 << CS10); // Битами CS12-10:0b001 задаем источник тактового сигнала для таймера МК, включен без делителя TCNT1 = 0x00; // начальная установка счетчика ICR1 = 0xFF; // задаем период ШИМ, здесь у нас число 255, // по формуле fPWM=fclk_I/O/N*(1+ICR1)// вычисляем частоту ШИМ, она будет равна 15625 Hz OCR1A = 0x00; // начальный коэффициент заполнения ШИМ /***Основной цикл программы***/ while(1) { if((PIND&(1 << PD0)) == 0) //если кнопка "больше" нажата { if (i < 254) { // коэффициент заполнения ШИМ изменяется от 0 до 255 i=i+1; // увеличиваем i на единицу OCR1A = i; // записываем переменную в регистр сравнения _delay_ms(30); // задержка 30ms } } if((PIND&(1 << PD1)) == 0) //если кнопка "меньше" нажата { if (i >0) // il coefficiente di ritardo SHIM è cambiato da 255 a 0 ( i--; // cambia i di uno (quindi puoi scriverlo) OCR1A = i; // scrivi la modifica nel registro di ritardo _delay_ms(30); // ritardo 30 ms) ) ) )

Rispetto! Per prima cosa, do il cibo al microcontrollore, quindi dobbiamo accenderlo, in modo che il transistor arrivi all'MK, quindi non abbiamo bisogno di alimentarlo alla lancetta con una lampada e mezzo transistor. Altrimenti, puoi bruciare il transistor. A destra, nel fatto che i "bassi" dell'MK "restano alla finestra" nel campo chiuso - il fetore non è collegato a nulla e la mira è attribuita a loro. Tsikh debole induce abbastanza, schob spesso vіdkriti transistor polovy già sensibile. Todi yogo opir tra lo scarico e la svolta della confluenza nel vіd kіlkoh MOhm al kіlkoh Om o al baratro Om і attraverso il nuovo flusso un grande strimpellare alla lampada. Ma il transistor non funziona correttamente, quindi è necessario applicare non 1-3 guida all'otturatore, ma stabile 5, e questa operazione sarà più ricca del minimo. Tse ha portato alla vista del nuovo grande caldo caldo, e per soffocare, o forse bruciare.

Ci siamo imbattuti in quegli interruttori accendisigari/timer ATtiny13 nella modalità normale e nel controllo degli impulsi (CTC). In questo articolo, continuo il tema del timer, ma ora diamo un'occhiata per l'implementazione della modulazione di larghezza di impulso (PWM).

Tutti i microprocessori funzionano con segnali digitali, tobto. con uno zero logico (0 V) e uno logico (5 V o 3,3 V). Ale, che lavoro, come vogliamo assumere l'uscita come valore intermedio? Tali vipadka si bloccano Modulazione dell'ampiezza di impulso(PWM, eng. modulazione di larghezza di impulso (PWM)) - il processo di controllo della tensione, che viene portata al punto di fuga, modificando la spaziatura degli impulsi, a una frequenza costante.
Modulazione dell'ampiezza dell'impulso - segnale di impulso periodico. Utilizzare PWM digitale e analogico, unipolare e bipolare, ecc. Ale, il principio del loro lavoro rimane lo stesso indipendentemente in presenza di viconnance e campo nei due tipi di segnali accoppiati: riferimento (impulsi pilk-like o tri-corrente) e input (permanente, o modificato dall'ordine necessario, maggese nei compiti specifici del PWM). I segnali Qi vengono equalizzati e quando cambiano, il valore del segnale all'uscita PWM viene modificato. La tensione di uscita del PWM può sembrare impulsi dritti, cambiando la loro banalità, possiamo regolare il valore medio della tensione all'uscita del PWM.

* Se si desidera integrare la lancia RC all'uscita del PWM, è possibile sostituire la tensione impulsiva e prendere la tensione costante del valore richiesto. Ma nel nostro culo con diodi luminosi, puoi farne a meno, perché l'occhio umano non riesce ancora a vedere la misura della luce a una frequenza di clock.

parametri PWM

  • T è il periodo di temporizzazione (del segnale di riferimento);
  • t - titività all'impulso;
  • S - risparmio;
  • D - coefficiente di riempimento.

La bontà dipende dall'impostazione del periodo fino a quando lo slancio non viene strappato. Il coefficiente di riempimento è il valore del ritorno di scheggiatura (può variare in larghezza):

S=T/t=1/D

Diamo un'occhiata al rapporto, come viene utilizzato PWM nei microcontrollori AVR, sul calcio ATtiny13.
Come già suggerito nel calciolo anteriore, ATtiny13 implementa due diversi tipi di PWM: il cosiddetto "Shvidka PWM" (Fast PWM) e il "PWM con correzione di fase" (Phase correct PWM). Obidva variante della fondazione su vikoristan vbudovannoy MK a otto bit lichilnik/timer T0. Il timer esclude il segnale di riferimento. La velocità di clock del timer è impostata dal front-end di clock del processore o dal generatore di clock esterno. La modalità di sincronizzazione è impostata a bit CS02 (2), CS01 (1), CS00(0) registrarsi TCCR0B:

  • 000 - timer/timer T0 zupineno
  • 001 - generatore di clock CLK
  • 010-CLK/8
  • 011-CLK/64
  • 100-CLK/256
  • 101-CLK/1024
  • 110 - vista dell'ovnishny dzherel sul T0 visualizzato (7 inferiore, PB2) al declino del segnale
  • 111 - vista di ovnishny dzherel a vista T0 (inferiore 7, PB2) secondo la crescita del segnale

Impostazione del timer per PWM

La modalità di funzionamento del timer è impostata a bit WGM01(1) quello WGM00(0) registrarsi TCCR0A:

  • 00 - modalità normale
  • 01 - Modalità di correzione di fase PWM
  • 10 - modalità booster
  • 11 - Modalità PWM

Qui siamo spuntati dalle opzioni "01" e "11".

Beato COM0A1(7) quello COM0A0(6) registrarsi TCCR0A impostare quale segnale deve apparire sul display OC0A (5 in basso, PB0) quando è selezionato il lichnik (registro TCNT0) con registro A ( OCR0A).

Per la modalità "Shvidka ShIM":

  • 10 - impostazione 0 su puntamento OC0A quando si parte da A, impostazione 1 su puntamento OC0A quando si azzera il contatore (modalità non inversa)
  • 11 - impostazione 1 sulla vista di OC0A quando si parte da A, impostazione 0 sulla vista di OC0A quando il contatore viene azzerato (modalità inversa)
  • 00 - OC0A non funzionante
  • 01 - se il bit WGM02 del registro TCCR0B è impostato a 0, lo switch OC0A non funziona
  • 01 - anche il bit WGM02 del registro TCCR0B è impostato a 1, OC0A verrà visualizzato sulla lunghezza quando si inserisce A
  • 10 - impostazione 0 sulla vista di OC0A quando si aumenta da A l'ora di aumento del valore dell'orologio, impostazione 1 sulla vista di OC0A quando l'aumento di A è l'ora di variazione del valore dell'orologio (modalità non inversa)
  • 11 - impostazione 1 sulla vista di OC0A quando si aumenta da A l'ora di aumento del valore dell'orologio, impostazione 0 sulla vista di OC0A quando l'aumento di A è l'ora di variazione del valore dell'orologio (modalità inversa)

Beato COM0B1(5) quello COM0B0(4) registrarsi TCCR0A impostare quale segnale deve apparire sull'OC0B (6 in basso, PB1) quando è selezionato il lichnik (registro TCNT0) con registro B ( OCR0B).

Per la modalità "Shvidka ShIM":

  • 01 - riserva
  • 10 - impostazione 0 sull'uscita OC0B quando B è in funzione, impostazione 1 sull'uscita OC0B quando il contatore viene azzerato (modalità non inversa)
  • 11 - impostazione 1 sull'uscita OC0B quando B è in funzione, impostazione 0 sull'uscita OC0B quando il contatore viene azzerato (modalità inversa)

Per la modalità "Correzione fuori fase PWM":

  • 00 - OC0B non funzionante
  • 01 - riserva
  • 10 - impostato a 0 nella vista OC0B quando l'ora della modifica dell'ora della modifica del valore dell'ora è impostata a 1;
  • 11 - impostazione 1 sull'uscita OC0B quando il valore B è in aumento, l'impostazione è 0 sull'uscita OC0B quando il valore del tempo è in diminuzione (modalità inversa)

Shvidka PWM (PWM veloce)

In questa modalità, il lichilnik oscilla da zero al massimo. Quando è impostato il valore zero del lichnik, viene visualizzato un impulso sull'uscita (è impostata un'unità logica). Quando zbіgu z pіvnyannya si registra - l'impulso viene espulso (viene impostato lo zero logico). Nel modo inverso, al contrario, al contrario.

PWM da correzione di fase (PWM di fase corretta)

In questa modalità, il lichilnik vvazhє ha zero al massimo, e poi direttamente nel cancello, a zero. Quando zbіgu z registra pіvnyannja pid ora dell'aumento del valore del lichnik - l'impulso viene espulso (viene impostato uno zero logico). Quando zbіgu pіd h cade, appare un impulso (viene ripristinata un'unità logica). Nel modo inverso, al contrario, al contrario. In mancanza di questa modalità, la doppia frequenza di clock è stata modificata rispetto alla modalità Fast PWM. Quindi, cambiando il risparmio, i centri degli impulsi non si muovono. La caratteristica principale di questa modalità è il funzionamento di segnali PWM a fase ricca, ad esempio una sinusoide trifase, in modo che quando si modifica la spaziatura, la transizione di fase tra due segnali PWM non venga persa.

Sobachit di persona, come pracciuє SHІM, scriveremo un piccolo programma (tutto il resto lo spenderò per il pagamento delle tasse, è necessario inserire il codice centocinquanta volte):

/* * tiny13_board_pwm * Firmware demo personalizzato della scheda di giocoleria ATtiny13. * Dimostrazione del lavoro PWM su due canali: * segnale non inverso all'uscita OC0A, inverso - all'uscita OC0B. */ #define F_CPU 1200000UL #includi #includere #define LED0 PB0 // OC0A #define LED1 PB1 // OC0B int main(void) ( // Luce: DDRB |= (1<< LED0)|(1 << LED1); // выходы = 1 PORTB &= ~((1 << LED0)|(1 << LED1)); // по умолчанию отключены = 0 // Таймер для ШИМ: TCCR0A = 0xB3; // режим ШИМ, неинверсный сигнал на выходе OC0A, инверсный - на выходе OC0B TCCR0B = 0x02; // предделитель тактовой частоты CLK/8 TCNT0=0; // начальное значение счётчика OCR0A=0; // регистр совпадения A OCR0B=0; // регистр совпадения B while(1) { do // Нарастание яркости { OCR0A++; OCR0B = OCR0A; _delay_ms(5); } while(OCR0A!=255); _delay_ms(1000); // Пауза 1 сек. do // Затухание { OCR0A--; OCR0B = OCR0A; _delay_ms(5); } while(OCR0A!=0); _delay_ms(1000); // Пауза 1 сек. } }

Qui Bachimo, che dall'inizio del MK nei registri A e B viene posto a 0, e il contatore viene avviato come Fast PWM, generando un segnale PWM non inverso all'uscita OC0A e inverso - all'uscita OC0B. Nel ciclo principale, i valori dei registri cambiano gradualmente da 0 al massimo e viceversa. Di conseguenza, la luce, collegata al visnovk OC0A e OC0B, si accenderà gradualmente e si spegnerà, come in antifase.
Eppure, se sei più rispettoso, è meglio che una delle luci non si spenga fino alla fine, ma continui a brillare al buio. Cosa rende speciale la modalità PWM veloce. A destra, in questa modalità, dovresti annotarlo come un record nel registro 0 quando il lichnik viene azzerato all'uscita, lo stesso viene ripristinata un'unità logica, come se fosse espulsa nel tatto offensivo (aumento con il registro della differenza). In questo modo, nel periodo della pelle, salta un breve impulso di trivalità 1 ciclo, un po' quanto basta per illuminare la luce. Questo effetto non è possibile nel modo inverso di formare gli impulsi esterni, perché a volte, quando la luce viene azzerata, non si verifica un breve impulso, ma invece - un breve calo per l'ora del massimo carico PWM. Questo fallimento può essere rintracciato su un oscilloscopio, ma un tale merekhtinnya della luce dell'alba umana semplicemente non può essere ricordato. Per questo, un'altra luce era spalah e si spegneva più e più volte. Nella modalità PWM con correzione di fase, l'effetto è indipendente durante il giorno, all'uscita si forma il segnale inverso. Ricorda il valore del bit WGM01(1) registrarsi TCCR0A da 1 a 0.

PWM (PWM) - modulazione di larghezza di impulso. Non è necessario calunniare quel termine. Questo è l'unico modo per regolare la tensione. È consentito che il monitor si illumini intensamente su di esso e tu modifichi la luminosità. E che aspetto ha davvero?

Va notato che il monitoraggio del monitor è un po' di luce. Per vivere bene alla luce dello stress costante. Ma dovevamo cambiare la luminosità del monitor. È logico dire che è possibile lavorare con un resistore di cambio. Su piccoli ruscelli è possibile. Ale su quelle grandi, la resistenza diventa molto calda. Notevole aumento delle dimensioni, dei rifiuti, dell'approvvigionamento energetico.

Ecco perché le persone hanno inventato un circuito su transistor, come rubare da una tensione costante che pulsa. Appare, tensione pulsante, maggese durante il periodo, sarà equivalente alla tensione costante. Totò. Se per un lungo periodo la tensione è accesa al 50%, viene spenta al 50%, allora la tensione costante equivalente è pari al 50% della tensione nominale.

I numeri sono semplici: hanno guidato 5 V di tensione costante attraverso il PWM - hanno preso 2,5 V. Se l'impulso è pari al 75%, la tensione costante sarà equivalente a 3,75V. Penso che l'idea avesse un senso.

Passiamo ora all'attuazione pratica. Con l'aiuto del microcontrollore, cambieremo il livello da 0 a 100%, quindi da 100% a zero. Il risultato finale potrebbe assomigliare a questo:

Singhiozzo era sul posto, accendi la luce. Di conseguenza, accenderemo e accenderemo la luce senza problemi.

Lanciamo il nostro CodeVision preferito. Creiamo un progetto per l'assistenza del maestro. Alla distribuzione del timer (Timer), scegli Timer 2 e installalo come un bambino.

Se provi a generare un progetto, il programma può essere saldato. Aspettiamo, anche se abbiamo una gamba 3 porti A maggio, il buti è cucito come un vento.

Dirigiamo il codice alla forma offensiva:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #includere void main (void) (PORTB = 0x00; DDRB = 0x08; // Inizializzazione timer/contatore 2 ASSR = 0x00; TCCR2 = 0x6C; TCNT2 = 0x00; OCR2 = 0x00; TIMSK = 0x00; mentre(1)(); )

#includere void main(void) ( PORTB=0x00; DDRB=0x08; // Inizializzazione timer/contatore 2 ASSR=0x00; TCCR2=0x6C; TCNT2=0x00; OCR2=0x00; TIMSK=0x00; while (1) ( );

Rispettiamo la riga OCR2 = 0x00; Qia zminna dipende ancora dall'entità del riempimento dell'impulso. Il valore viene modificato da 0 a 255(0хFF), quindi. 255 prova di ripopolamento al 100% (pennata permanente). Inoltre, necessita di un rifornimento del 30% (255/100)*30=77. Dalі 77 è tradotto nel sistema esadecimale OCR2 = 0x4D;

TCCR2=0x6C; Modificando il valore, possiamo regolare la frequenza PWM. Il valore della frequenza del robot PWM è un multiplo della frequenza, sullo stesso microcontrollore funzionante. Nel progetto la frequenza del microcontrollore era 8 MHz, la frequenza PWM era 125 kHz, inoltre il driver è 8/125 = 64
0x6C nel sistema numerico binario 1101100, scheda tecnica su Atmega8 e descrizione Bachimo per registrare TCCR2, quindi asse 1101 100 le restanti cifre 100 e sono date per la scelta della frequenza PWM

Andiamo subito al programma:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #includere #includere void main(void ) ( PORTB = 0x00 ; DDRB = 0x08 ; ASSR = 0x00 ; TCCR2 = 0x6C ; TCNT2 = 0x00 ; OCR2 = 0x00 ; TIMSK = 0x00 ; mentre (1) ( wh< 0xff ) { OCR2= OCR2+ 0x01 ; delay_ms(5 ) ; } while (OCR2>0x00) (OCR2 = OCR2-0x01; ritardo_ms(5);)); )

#includere #includere void main(void) ( PORTB=0x00; DDRB=0x08; ASSR=0x00; TCCR2=0x6C; TCNT2=0x00; OCR2=0x00; TIMSK=0x00; while (1) ( mentre(OCR2<0xff) { OCR2=OCR2+0x01; delay_ms(5); } while(OCR2>0x00) ( OCR2=OCR2-0x01; ritardo_ms(5); ) ); )

Il codice è semplice fino al punto di dissomiglianza: l'ordine del ciclo viene aumentato da 0 a 255(ff), quindi si passa da 255 a 0.
I nasamkinets vidosik, poiché tutto può essere praticato. Buona fortuna con i vivchenni)

Aggiornato il 16/12/15. Ciao a tutti. Dopo aver risolto il record passato dalla memoria EEPROM, oggi parleremo di quelli che sono PWM (PWM)? Viene decifrato come modulazione dell'ampiezza dell'impulso, il valore medio della tensione, poiché cambia il risparmio dell'impulso. Nel tuo inferno sverdlovskij ce banalità dell'impulso con una certa frequenza di ripetizione. Totò. In parole povere, tutti cambiano l'ampiezza dell'impulso a un valore costante. Cos'altro ci serve?

ШІМ (PWM) funziona in un circuito a transistor per la regolazione della tensione senza meccanica, con il proprio controllo di potenza. Ad esempio, controllo della luminosità dei diodi emettitori di luce, controllo della luminosità della luce su monitor LCD, controllo dei motori, ecc. Se guardi il piccolo, l'uscita dal microcontrollore sarà approssimativamente calpestando, come se il piccolo fosse più basso. Si può vedere che lo sparing è lo stesso dell'impulso, poiché l'intera larghezza dell'impulso è 5, quindi al 30% dell'impulso l'uscita media è di circa 1,5 V. Per microcontrollori AVR Il controllo PWM è impostato per timer / clock a otto bit T0 / (T2) e T1 a sedici bit (T3 per alcuni modelli). E anche nei modelli є Інші, è possibile impostare il numero di addebito di SHІMU, ad esempio ATmega 128. Diamo un'occhiata all'impostazione del timer / orologio T1 a sedici cifre. I dati sono presi secondo la tabella o dal documento, o dalla scheda tecnica (letteratura - Articolo n. 1).

Per un tale accendino in MK, puoi selezionare tre modalità: Fast PWM, Phase Correct PWM, Phase e Frequency Correct PWM ( deposito in modello)

Diamo un'occhiata a un'altra modalità - PWM con fase precisa. Qui il registro personale funziona come una licenza inversa, cambiarlo cambierà da $ 0000 al valore massimo e poi di nuovo a $ 0000. Ci sono tre registri TCCR1A, TCCR1B, TCCR1C per il cinguettio di un timer/chirker. Per selezionare la modalità timer/chiller è necessario impostare i bit WGMn1: WGMn0 e WGMn1: WGMn0 . E' necessario impostare il valore massimo del chime (Regolazione del segnale PWM) oa valori fissi, oppure viene visualizzato al posto dei primi registri del timer/chiller. Razdіlna zdatnіst indicato da viraz :

g = log (TOP + 1) / log2, de TOP - modulo rahunku, selezionato dalla tabella in base alla distribuzione degli alloggi.

Successivamente, essendo stata scelta la modalità di funzionamento del timer, è necessario selezionare la modalità di funzionamento per il blocco sincrono COMnA1: COMnA0, COMnB1: COMnB0, COMnC1: COMnC0, che determina il comportamento dell'uscita OCnx quando “Zbіg” è attivato.

Bene, il resto dell'ictus è significativo dalla frequenza. È necessario impostare il bit CSn2…CSn0 sul registro TCCR1B, in modo che il segnale di clock sia assegnato al segnale di clock. L'asse in questo modo del programma assomiglia all'impostazione della curva PWM sull'uscita OC1A. Per esempio:

/*Fisso PWM */
TCCR1A=(1</* OC1A viene visualizzato uno, se OCR1A==TCNT1, scende a 0 quando OCR1A==TCNT1 e si ripristina a 1 quando viene raggiunto il valore massimo PWM a correzione di fase a otto bit PWM, modalità numero 1 . Modulo Rahunku TOR $00FF*/
TCCR1B=(1<OCR1A = 50; /* con un modulo di 255 e con una tensione di 5 viene prelevato circa 1 V all'uscita OC1A */

Dal programma si evince che per la selezione del WIM è possibile utilizzare il registro OCR1A. Quando il lichnik raggiunge il valore massimo, in questo periodo di 255, il cambiamento viene modificato direttamente, ma il lichnik viene lasciato nello stesso periodo con un segnale per un periodo. In questo caso, la frequenza di lavoro è più corretta nella modalità opposta. Ale, in questo modo, viene intaccata la simmetria del cambio del lichnik. Qual è il più adatto per keruvannya con un dvigun. In tal senso, c'è un aggiornamento al posto del registro degli ordini. Quando il valore minimo viene raggiunto dal lichnik, è anche necessario modificare direttamente l'account e viene immediatamente installato il flag di trasferimento di TOV1 al registro TIFR. In caso di parità, al posto del registro rachunk, lo stesso registro sarà sostituito dal nuovo guardiamarina OCF1A/OCF1B/OCF1C al registro TIFR. Il blocco OCnx cambierà durante la notte. H frequenza del segnale da generare fOCn \u003d f / (2 * N * TOP), de N - coefficiente della suddivisione rappresentativa, f - frequenza del quarzo. Inoltre, puoi ammirare il calcio della frusta e vikoristannya ShІM, ad esempio.

Tutto va bene per cosa. Al prossimo post, possiamo vedere Controller di layout amatoriale CNC. Cercherò di evidenziare il post in primo piano di questo blog per l'insieme di programmi come un costruttore. Quindi sarebbe più sensato, se una volta scrivessero e yogo vikoristali nel prossimo progetto. Tutto all'inferno.

Negli allegati dei microcontrollori, a volte è necessario generare un segnale analogico. A seconda della frequenza del segnale analogico, dell'autorizzazione necessaria e del tipo di microcontrollore, che è vittorioso, può essere vikonato in modi dekilkom. E per se stesso: per un'ulteriore modulazione dell'ampiezza dell'impulso, funzionalità vicorista di timer hardware o implementazione software, per l'aiuto di un convertitore da digitale ad analogico (DAC) integrato, per l'aiuto di circuiti esterni di digitale-analogico convertitori su elementi discreti o per circuiti digitali/microcircuiti aggiuntivi.

1. Il principio di generazione di un segnale analogico per PWM ausiliario (PWM)

Il segnale PWM è un segnale digitale, in cui il periodo di ripetizione è costante e la durata viene modificata. L'aumento della trivalenza del segnale PWM fino al 1° periodo è chiamato coefficiente di saturazione. Dopo aver fatto passare tale segnale attraverso un filtro a bassa frequenza, che, di fatto, è ugualmente integrabile, prendiamo all'uscita del filtro una tensione pari al fattore di carico.


In questo modo, un coefficiente più piccolo può generare segnali analogici di forma sufficiente. Inoltre, come un cambiamento, ad esempio, una sinusoide, un file come un linguaggio umano, quindi è costante (una buona quantità di pressione).

1.1 Caratteristiche del segnale

Ampiezza massima del segnale analogico in uscita essere determinato dall'ampiezza dell'unità logica del segnale digitale PWM. Se il microcontrollore funziona a +5, all'incirca l'ampiezza del segnale analogico in uscita sarà compresa tra 0 e 5 V.

Termine minimo per la modifica del segnale analogico(dozvіl) indicato da viraz:


dUa = Umax/2^n,


de Umax è l'ampiezza massima del segnale analogico (V) e n è la dimensione del dispositivo che implementa il PWM.

Ad esempio, un segnale PWM si forma dietro l'aiuto di un software lichnik a 8 bit. Il numero di gradazioni del segnale PWM, che può essere preso come indicatore aggiuntivo, è buono 2^8 = 256.


dUa = 5/256 = 0,0195 p.


Frequenza del segnale PWM definiamola così:


Fpwm = Fcpu/(K*2^n),


de Fcpu – frequenza di clock del microcontrollore (Hz), K – coefficiente del prescaler del lichnik, n – capacità delle cifre del lichnik.

Ad esempio, la frequenza di clock del microcontrollore è 8 MHz. Quindi la frequenza del segnale PWM di uscita è aggiuntiva:

Fpwm = 8000000/(8*256) = ~3906 Hz


Frequenza di uscita analogica essere indicato con viraz:

Fa = Fpwm/Ns = Fcpu/(K*2^n*Ns),


de Fpwm è la frequenza del segnale PWM e Ns è la frequenza del segnale analogico.

Ad esempio, un segnale PWM è implementato su un lichnik a 8 bit con un coefficiente di prescaler pari a 8 e una frequenza di clock del microcontrollore di 8 MHz. La memoria del microcontrollore ha 32 campioni di un segnale sinusoidale, ovvero un decimo periodo. Quindi la frequenza delle sinusoidi di uscita è più avanzata:

Fa = 8000000 / (8 * 2^8 * 32) = ~ 122 Hz

La capacità di scarica del DAC'a frantumato sulla base del WIM è equivalente alla capacità di scarica dell'accendino vicoroso.

1.2 Implementazione hardware di PWM

Tutti gli attuali microcontrollori hanno timer/refrigeratori nel loro magazzino. Una o più modalità di questi timer sono assegnate per generare un segnale PWM. Di norma, l'intero segnale viene generato su avvolgimenti speciali. Ad esempio, il timer/allarme T0 a 8 bit del microcontrollore mega16 di Atmel ha due modalità di generazione di un segnale PWM (PWM commutato e PWM con fase precisa) e per il segnale da generare vengono utilizzati i pin della porta B - OC0 (PINB3) .

L'efficienza dell'implementazione hardware del segnale PWM: il costo del microcontrollore è basso (chiamate di interruzione una volta per periodo del segnale PWM), semplicità e precisione (vi sono poche interruzioni nel sistema). Si possono vedere tre piccoli spazi: il numero di lichnik è recintato, la frequenza è bassa, il numero di canali è recintato, su cui è possibile generare segnali PWM. Voglio sviluppare microcontrollori speciali appositamente "affilati" per generare un gran numero di segnali PWM.

1.3 Implementazione software di PWM

È anche possibile generare un segnale PWM in modo programmatico. Per questo è sufficiente creare un timer di programma e, dopo il segnale del timer hardware, incrementarne il valore e raggiungere il valore estremo del timer, nel qual caso il segnale cambia l'impostazione.

Il vantaggio dell'implementazione del software è la semplicità, il numero di canali non è recintato e gli edifici non sono recintati. Zvichayno, mentalmente illimitato, con una migliore memoria disponibile.Carenze nell'implementazione del software: l'alto livello di interesse per il microcontrollore. Invertire la colpa di invocare l'incremento cutaneo del lichilnik ed è necessario riconsiderare, se uno dei valori estremi non viene raggiunto. Inoltre, l'implementazione del software potrebbe avere una minore precisione (più di tre fronti nel segnale) e anche una minore frequenza (dopo la prima metà).

Tuttavia, indipendentemente dal prezzo, l'implementazione software dello SHIMu può essere utilizzata anche per generare un segnale analogico costante, o un cambio, ma con una bassa frequenza.

Di seguito è riportato un esempio di codice, che viconizza la funzione di generare un segnale analogico per la modulazione della larghezza di impulso hardware e software aggiuntiva. Scrittura codice per microcontrollore atmega16, frequenza di clock 8 MHz, compilatore IAR. Alle uscite PB2 e PB3 vengono generate due sinusoidi (frequenze diverse) da 32 due segnali.


#includere
#includere
#includere

#define SPWM_PIN 2

//tabella seno
__flash uint8_t tableSin =
{
152,176,198,218,234,245,253,255,
253,245,234,218,198,176,152,128,
103, 79, 57, 37, 21, 10, 2, 0,
2, 10, 21, 37, 57, 79,103,128
};

uint8_t softCount = 0;
uint8_t softComp = 0;

int principale (vuoto)
{
//configurazione delle porte
PORTAB=0;
DDRB=0xff;

// Consentito un respawn per il guadagno T0
TIMSK = (1<//Modalità FastPWM, non inv. Segnale PWM, prescaler 8
TCCR0 = (1< (0<

//reimposta il registro personale
TCNT0 = 0;
OCR0 = 0;

enable_interrupt();
mentre(1);
restituire 0;
}

// azzera il timer T0
#pragma vettore = TIMER0_COMP_vect
__interrupt void Timer0CompVect(void)
{
statico uint8_t i = 0;
statico uint8_t j = 0;

OCR0 = tableSin[i];
io = (io + 1) & 31;

// software PWM
softcount++;
if (softCount == 0)(
PORTAB |= (1<softComp=tableSin[j];
j = (j + 1) & 31;
}

Se (softCount == softComp)(
PORTAB &= ~(1< }
}

1.4 Filtro per PWM

La colpa è della frequenza del filtro, ma tra la frequenza massima dei segnali analogici che vengono generati e la frequenza del segnale PWM. In questo caso, la frequenza del filtro verrà selezionata vicino all'intervallo del segnale analogico, il che risulterà in una certa attenuazione. E se la frequenza del filtro sarà vicina alla frequenza del segnale PWM, il segnale analogico semplicemente non verrà "visto". Maggiore è la frequenza del segnale PWM, più facile sarà implementare il filtro esterno.

Diamo un'occhiata a un esempio. Il segnale PWM è generato da un clock hardware a 8 bit con un coefficiente di prescaler pari a 8, la frequenza di clock del microcontrollore è 8 MHz, il numero di segnali analogici è 32.

La frequenza del segnale PWM è aggiuntiva:

Fpwm = Fcpu/(K*2^n) = 8000000/(8*256) = ~3906 Hz

La frequenza del segnale analogico viene regolata:

Fa = Fpwm/Ns = 3906/32 = 122 Hz

Selezioniamo la frequenza pari a 200 Hz e il rating del filtro RC passivo a bassa frequenza. La frequenza di un tale filtro è determinata dalla frequenza:

Fc = 1/(2*Pi*R*C),

de R è il valore del resistore (Ohm) e C è la capacità del condensatore (F).

Data la denominazione di uno dei componenti, si può calcolare la denominazione dell'altro. Per un resistore con un valore nominale di 1 kOhm, la capacità del condensatore è maggiore:


C = 1/(2*Pi*Fc*R) = 1/(6,28*1000*200) = ~0,8uF


Scegliamo il valore più vicino dalla serie E12 - 0,82 uF. Per tali valutazioni del filtro, prendiamo un segnale analogico simile.

Tuttavia, di norma, sarà sufficiente un lato del filtro passivo. Per questo motivo, il segnale analogico è ancora degno del gran numero di armoniche.

© 2022 androidas.ru - Tutto su Android