タイマーペリフェラルでPWM波形生成
マイコンのタイマーでPWM波形を生成する、ってのは
よくある話なんだけど。
注意しいないといけなのは、このタイマーって2種類あって、
内部に大小比較機(マグニチュードコンパレーター)を持っていて
常時、タイマーカウンターとレジスタの値を比較して
PWM波形を出力するタイプ(stm32のTIMとか)と、
大小比較機を持たず、2つのレジスタのコンペアマッチ
だけで動作して、それぞれが出力の立ち上がりエッジと
立下りエッジ(と、カウンタリセット)
を生成しているタイプのもの
(ATTINYとか)があること
-------
前者はいわゆる、のこぎり波とコンパレータで
動作するタイプの波形生成器のデジタル版で、
特に特別なことをしなくても0~100%の
波形生成ができる
後者は、原理から分かる通り、
立ち上がり、立下りが有ることが動作の
前提なので、デューティ0%や100%とかの
波形の変化が無くなる状態は
特殊な状況になって、
そこだけ特殊な別処理を書く必要がある
動作原理を理解してよくよく考えないと、
難しいバグを内包するんだけど、
これがなかなか難しく、
みんな面倒なことは考えたくないので
いやらしいシステムがよく誕生している....
------
じっくり考えると見えてくるけど、
コンペアマッチで動作する方は
どうしも生成できない波形パターンが
有ったりする。
極端な例だと、1サイクル毎に
0%と100%の波形を交互に出す
なんてのは、出力が難しい、
というか、そうそう出来ないはず
この辺見えてくると、そもそも
どういう風に使うものなのか?
が見えてくる。
------
そりゃまあ、マグニチュードコンパレーター
があれば常に大小比較しているので、
どんなタイミングでレジスタ更新しても
ちゃんと動くし、こっちのほうが便利なんだけど
そもそもマグニチュードコンパレーターは
多ビットになると、ロジックの規模も大きいし
動作スピードもそんなに上げられない
使う側がちゃんとできるんなら、
コンペアマッチで動作するやつのほうが
色々エコシステムだ
-------
そもそも、PWM使う所で、
デューティ0%や100%なんてのが
どうしても必要、なんてことに成るのは
そこまで多くないはず....
それは、対象がサチってるって状況を
示唆するので。
特殊な状況での話、電源OFFとかでなくて、
シームレスに0%とかが必要になる、
ってのは、なんかシステム的に
よく考えてみる、って必要が
あるのかもしれない
-------
と、いうわけで、マイコンのタイマー
ペリフェラルでのPWMは、
0%.100%を使うには、ひと手間かかる
設計のものが普通にありますよ、
って話
マイコンのタイマーって意外と使う人を
選ぶんだよね...
でもまあ、”ちゃんと” 動かせれば
結構、使い出があるように設計されて
いるものなので、各人の研鑽に期待、
という所だろうか
| 固定リンク | 0

コメント