PWM分解能ビット計算ツール
このPWM分解能計算ツールは、指定したPWM周波数で利用できるタイマーのカウント数と整数ビット数を求めます。タイマークロックをヘルツ単位で入力し、目標PWM周波数と任意の整数プリスケーラを指定してください。タイマーのティック周波数、周期当たりの理想カウント数と使用可能カウント数、最大カウンター値、理論分解能と整数分解能、実現周波数、周波数誤差を表示します。レジスター値の選定やファームウェア作成前の設計確認に利用できます。
無料で実行
クロックとPWM周波数から分解能が決まる仕組み
ハードウェアタイマーはティックごとに進み、設定された周期の終端でリセットされます。エッジアラインPWMでは、入力クロックをプリスケーラと目標PWM周波数で割ると、1周期内の理想的なカウンター状態数が得られます。状態数が多いほど、比較レジスターで表現できるデューティ比の段階も増えます。そのため分解能は状態数の2を底とする対数です。本ツールは、ハードウェアがティックの端数を実行できないため理想カウント数を切り捨て、さらに対数を切り捨てて完全なビット数を示します。たとえばプリスケーラなしの72 MHzと20 kHzでは3,600カウントとなり、理論値は約11.81ビット、完全な分解能は11ビットです。一般にカウンターはゼロからARRまたはTOPまで数えるため、最大カウンター値はカウント数より1小さくなります。周波数を上げると1周期のティック数が減り、下げるとデューティ調整が細かくなります。
計算結果の読み方
timer_clock_hzには、プリスケーラの前でタイマー周辺回路へ実際に供給されるクロックを指定してください。CPU周波数と同じとは限りません。多くのマイクロコントローラーでは周辺バスからタイマークロックを生成し、バス分周時に逓倍する構成もあります。pwm_frequency_hzはエッジアライン方式の目標出力周波数です。prescalerは正の整数で、省略時は1です。timer_tick_hzはプリスケーラ後のクロックです。ideal_counts_per_periodは数学的な比率を保持し、available_counts_per_periodは使用可能な整数値を示します。max_counter_valueはそこから1を引いた値です。resolution_bitsは完全なビット数、theoretical_resolution_bitsは小数を含む理論値です。actual_pwm_frequency_hzは整数周期から求めるため目標を少し上回る場合があり、frequency_error_percentが差を示します。APIによる自動処理は成功1件につき$0.002です。計算は決定的で、ネットワークや機種データベースを使用しません。
実際のマイクロコントローラーへ適用する際の注意
この結果は実現可能性の確認として使い、その後にマイクロコントローラーのリファレンスマニュアルと照合してください。16ビット周期レジスターでは、クロック比からさらに多くの状態を得られても最大値65,535を超えられません。その場合はプリスケーラを大きくするか、別途ハードウェア幅を制限します。また10ビットという結果は、最大値を必ず1,023にするという意味ではなく、少なくとも1,024個の位置を利用できるという意味です。センターアラインPWMは通常、上りと下りの両方向へ数えるため約2の係数が加わります。機種固有の式を使用してください。デッドタイム、同期、反復カウンター、省電力モードによるクロック変化も考慮が必要です。周波数精度を優先する場合は、近いプリスケーラと周期の組み合わせを比較してください。より細かな段階が必要ならPWM周波数を下げるか、タイマークロックを上げます。数学的分解能はアナログ精度を保証せず、遅延、ジッター、ドライバー、負荷の影響を受けます。
活用例
LED調光タイマーの設計
ちらつかない周波数を保ちながら、滑らかな明るさ調整に十分な段階があるか確認します。
モーター制御ファームウェアの計画
スイッチング周波数とモーター用タイマーで得られる整数ビット分解能を比較します。
タイマープリスケーラの選択
ティック数、カウンター範囲、実現周波数、デューティ粒度への影響を評価します。
よくある質問
どの計算式を使用しますか?
エッジアラインPWMでは、カウント数 = floor(クロック / プリスケーラ / PWM周波数)、ビット数 = floor(log2(カウント数))です。
理論分解能が小数になるのはなぜですか?
対数が2の累乗の間になるためです。整数ビットは収まる最大の完全な2進範囲を示します。
実現周波数が目標と異なるのはなぜですか?
理想周期にティックの端数が含まれる場合、整数カウントへ切り捨てると実現周波数が高くなるためです。
センターアラインPWMにも使えますか?
直接の結果はエッジアライン方式です。センターアライン方式では通常、上りと下りのカウント係数が加わります。
タイマーレジスター幅も検査されますか?
いいえ。max_counter_valueを、16ビット周期レジスターなら65,535などの物理上限と比較してください。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
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)リクエスト例
{
"timer_clock_hz": 72000000,
"pwm_frequency_hz": 20000
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.pwm_resolution",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |