PWM-Auflösung in Bit berechnen
Dieser Rechner zeigt, wie viele Timer-Schritte und vollständige Bits bei einer gewünschten PWM-Frequenz verfügbar sind.
Im Browser ausführen – kostenlos
Geben Sie den Timer-Takt in Hertz, die gewünschte PWM-Frequenz und optional einen ganzzahligen Vorteiler ein. Das Ergebnis enthält Tickfrequenz, ideale und nutzbare Schritte pro Periode, maximalen Zählerwert, theoretische und ganzzahlige Auflösung, erreichbare Frequenz sowie Frequenzfehler. Damit können Sie Mikrocontroller-Timer planen, bevor Sie Registerwerte festlegen oder Firmware schreiben.
Wie Takt und PWM-Frequenz die Auflösung bestimmen
Ein Hardware-Timer schreitet mit jedem Tick fort und startet nach der programmierten Periode neu. Bei flankenorientierter PWM ergibt die Division des Eingangstakts durch Vorteiler und gewünschte PWM-Frequenz die ideale Zahl der Zählerzustände pro Periode. Mehr Zustände ermöglichen mehr unterschiedliche Tastgradstufen im Vergleichsregister. Die Auflösung entspricht daher dem Logarithmus zur Basis zwei der Zustandszahl. Der Rechner rundet die ideale Schrittzahl ab, weil ein Timer keine Tick-Bruchteile ausführen kann, und rundet anschließend den Logarithmus ab, um vollständige Bits anzugeben. Beispielsweise liefern 72 MHz und 20 kHz ohne Vorteiler 3,600 Schritte, theoretisch etwa 11.81 Bit und praktisch 11 vollständige Bit. Der maximale Zählerwert ist um eins kleiner, da gewöhnlich von null bis ARR oder TOP einschließlich gezählt wird. Eine höhere PWM-Frequenz verringert die Ticks je Zyklus; eine niedrigere Frequenz ermöglicht feinere Tastgradschritte.
So lesen Sie die berechneten Werte
Verwenden Sie für timer_clock_hz den Takt, der das Timer-Peripheriegerät vor dessen Vorteiler tatsächlich speist. Übernehmen Sie nicht ungeprüft den CPU-Takt: Mikrocontroller leiten Timer häufig von Peripheriebussen ab, und manche Taktbäume multiplizieren ihn. pwm_frequency_hz ist die gewünschte flankenorientierte Ausgangsfrequenz. prescaler muss eine positive Ganzzahl sein und ist standardmäßig eins. timer_tick_hz bezeichnet den geteilten Takt. ideal_counts_per_period bewahrt das mathematische Verhältnis, available_counts_per_period enthält die nutzbare Ganzzahl. max_counter_value zieht eins davon ab. resolution_bits nennt vollständige Binärbits; theoretical_resolution_bits behält den Bruchwert. actual_pwm_frequency_hz verwendet die ganzzahlige Periode und kann geringfügig über dem Ziel liegen; frequency_error_percent misst die Abweichung. Die Automatisierung per API kostet $0.002 je erfolgreichem Element. Die Berechnung arbeitet deterministisch, ohne Netzwerk oder Bauteildatenbank.
Das Ergebnis auf reale Mikrocontroller anwenden
Nutzen Sie das Ergebnis als Machbarkeitsprüfung und vergleichen Sie es danach mit dem Referenzhandbuch Ihres Mikrocontrollers. Ein 16-Bit-Periodenregister kann keinen Maximalwert über 65,535 aufnehmen, selbst wenn das Taktverhältnis mehr Zustände erlaubt; erhöhen Sie dann den Vorteiler oder begrenzen Sie die Hardwarebreite separat. Ein Ergebnis von 10 Bit verlangt auch nicht zwingend den Wert 1,023, sondern sagt aus, dass mindestens 1,024 Positionen verfügbar sind. Mittenorientierte PWM zählt meist aufwärts und abwärts und fügt dadurch einen Faktor nahe zwei ein; verwenden Sie hierfür die gerätespezifische Gleichung. Berücksichtigen Sie außerdem Totzeit, Synchronisation, Wiederholungszähler und Taktänderungen im Stromsparmodus. Wenn Frequenzgenauigkeit wichtiger als Granularität ist, prüfen Sie benachbarte Kombinationen aus Vorteiler und Periode. Für feinere Schritte senken Sie die PWM-Frequenz oder erhöhen den Timer-Takt. Mathematische Auflösung ist keine analoge Genauigkeit: Verzögerungen, Jitter, Treiber und Last können die wirksame Leistung mindern.
Anwendungsfälle
LED-Timer dimensionieren
Prüfen Sie, ob eine flimmerfreie Frequenz noch genügend Stufen für sanfte Helligkeitsänderungen bietet.
Motor-Firmware planen
Vergleichen Sie die Schaltfrequenz mit der vollständigen Bitauflösung des Motor-Timers.
Timer-Vorteiler auswählen
Bewerten Sie den Einfluss auf Ticks, Zählerbereich, erreichbare Frequenz und Tastgradfeinheit.
Häufige Fragen
Welche Formel verwendet der Rechner?
Für flankenorientierte PWM gilt: Schritte = floor(Takt / Vorteiler / PWM-Frequenz), Bits = floor(log2(Schritte)).
Warum ist die theoretische Auflösung gebrochen?
Der Logarithmus kann zwischen Zweierpotenzen liegen; vollständige Bits geben den größten passenden Binärbereich an.
Warum weicht die Istfrequenz vom Ziel ab?
Die ideale Periode kann einen Tick-Bruchteil enthalten. Das Abrunden auf ganze Schritte kann die erreichbare Frequenz erhöhen.
Gilt das Ergebnis für mittenorientierte PWM?
Die direkte Berechnung nimmt Flankenausrichtung an. Mittenorientierte Modi zählen gewöhnlich aufwärts und abwärts.
Begrenzt der Rechner die Registerbreite?
Nein. Vergleichen Sie max_counter_value mit dem Hardwarelimit, etwa 65,535 bei einem 16-Bit-Periodenregister.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem 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)Beispiel-Anfrage
{
"timer_clock_hz": 72000000,
"pwm_frequency_hz": 20000
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.pwm_resolution",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |