Calcolatore della risoluzione PWM in bit
Questo calcolatore indica quanti conteggi del timer e quanti bit interi sono disponibili alla frequenza PWM richiesta.
Esegui gratis nel browser
Inserisca il clock del timer in hertz, la frequenza PWM desiderata e un prescaler intero opzionale. Il risultato comprende frequenza dei tick, conteggi ideali e utilizzabili per periodo, valore massimo del contatore, risoluzione teorica e intera, frequenza ottenibile ed errore. È utile per pianificare i timer di un microcontrollore prima di scegliere i registri o scrivere il firmware.
Come clock e frequenza PWM determinano la risoluzione
Un timer hardware avanza a ogni tick e riparte al termine del periodo programmato. Nella PWM allineata al fronte, dividendo il clock di ingresso per il prescaler e per la frequenza richiesta si ottiene il numero ideale di stati del contatore in un periodo. Più stati consentono al registro di confronto di rappresentare più livelli distinti di duty cycle. La risoluzione è quindi il logaritmo in base due del numero di stati. Il calcolatore arrotonda per difetto i conteggi ideali, perché il timer non può eseguire una frazione di tick, e poi arrotonda il logaritmo per indicare i bit interi disponibili. Per esempio, 72 MHz e 20 kHz senza prescaler producono 3,600 conteggi, circa 11.81 bit teorici e 11 bit interi. Il valore massimo del contatore è inferiore di uno, dato che normalmente il conteggio va da zero ad ARR o TOP inclusi. Aumentare la frequenza riduce i tick per ciclo; diminuirla offre passi di duty più fini.
Come leggere i valori calcolati
Imposti timer_clock_hz sul clock che alimenta realmente la periferica prima del suo prescaler. Non usi automaticamente la frequenza della CPU: spesso i microcontrollori derivano il timer da un bus periferico e alcuni alberi di clock applicano un moltiplicatore. pwm_frequency_hz è la frequenza di uscita desiderata nella modalità allineata al fronte. prescaler deve essere un intero positivo e vale uno per impostazione predefinita. timer_tick_hz è il clock diviso per il prescaler. ideal_counts_per_period mantiene il rapporto matematico, mentre available_counts_per_period contiene la parte intera utilizzabile. max_counter_value sottrae uno. resolution_bits indica i bit completi e theoretical_resolution_bits conserva la frazione. actual_pwm_frequency_hz usa il periodo intero e può superare leggermente l’obiettivo; frequency_error_percent misura lo scarto. L’automazione via API costa $0.002 per elemento riuscito. Il calcolo è deterministico e non usa rete o database di dispositivi.
Come applicare il risultato a un timer reale
Consideri il risultato una verifica di fattibilità e lo confronti con il manuale del microcontrollore. Un registro di periodo a 16 bit non può accettare un valore massimo superiore a 65,535, anche se il rapporto tra le frequenze offre più stati; aumenti il prescaler o applichi separatamente il limite hardware. Un risultato di 10 bit non impone un massimo esattamente pari a 1,023: significa che trovano posto almeno 1,024 posizioni. La PWM center-aligned conta spesso in salita e in discesa, introducendo un fattore vicino a due; utilizzi quindi l’equazione specifica del dispositivo. Consideri anche dead time, sincronizzazione, contatori di ripetizione e variazioni del clock nelle modalità a basso consumo. Se conta soprattutto la frequenza esatta, provi combinazioni vicine di prescaler e periodo. Per passi più fini riduca la frequenza PWM o aumenti il clock. La risoluzione matematica descrive livelli selezionabili, non precisione analogica: ritardi, jitter, driver e carico possono ridurre le prestazioni effettive.
Casi d'uso
Dimensionare un timer per LED
Verifichi che una frequenza priva di sfarfallio lasci abbastanza livelli per variazioni uniformi della luminosità.
Pianificare firmware per motori
Confronti la frequenza di commutazione con la risoluzione intera disponibile nel timer di controllo.
Scegliere il prescaler del timer
Valuti come il divisore modifica tick, intervallo del contatore, frequenza ottenibile e granularità.
Domande frequenti
Quale formula usa il calcolatore?
Per PWM allineata al fronte: conteggi = floor(clock / prescaler / frequenza PWM), bit = floor(log2(conteggi)).
Perché la risoluzione teorica è frazionaria?
Il logaritmo può trovarsi fra due potenze di due; i bit interi indicano il maggiore intervallo binario completo disponibile.
Perché la frequenza reale differisce dall’obiettivo?
Il periodo ideale può includere una frazione di tick. La conversione in conteggi interi può aumentare la frequenza ottenibile.
Il calcolo vale per PWM center-aligned?
Il risultato diretto presume l’allineamento al fronte. I modi centrati di solito contano sia in salita sia in discesa.
Viene applicata la larghezza del registro?
No. Confronti max_counter_value con il limite fisico, per esempio 65,535 per un registro di periodo a 16 bit.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/elec/pwm-resolution \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"timer_clock_hz":72000000,"pwm_frequency_hz":20000}'const res = await fetch("https://api.kit.forhosting.com/elec/pwm-resolution", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"timer_clock_hz": 72000000,
"pwm_frequency_hz": 20000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/pwm-resolution",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"timer_clock_hz": 72000000,
"pwm_frequency_hz": 20000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/pwm-resolution", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"timer_clock_hz":72000000,"pwm_frequency_hz":20000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"timer_clock_hz":72000000,"pwm_frequency_hz":20000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/pwm-resolution", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"timer_clock_hz": 72000000,
"pwm_frequency_hz": 20000
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.pwm_resolution",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |