chakokuのブログ(rev4)

日々のごった煮ブログです

LPC810のSCT(PWM)を理解する

モータ制御とか、任意の波形を作るには、PWMが使える必要がある。が!LPC810のPWMはNXP社が凝りすぎたせいか、ステートマシンが入っていて複雑すぎてまったく分からない。どこから勉強したらいいのか?すら分からないぐらいに分からない。Red State Designとか、簡易ツールがあるのだけど、やっぱり根本を理解せずにツールだけ使ってもロクなものにしかならないと思っている。SCT(State Configurable Timer)というぐらいだから、ステートマシンをまず勉強するかと思っていた。。と、そんな中、非常にわかりやすい解説記事を見つけた(シンセアンプラグド様)。この記事によると、PWMとして使うだけなら状態遷移は不要とある。ステートマシンを実装しないのであれば使うレジスタも減って理解も早まると期待できる。アンプラグド様の記事を参考になんとか最少構成からステップアップしながら、自分でPWMを使いこなせるようになりたい。

■追記
アンプラグド様の記事で大まかにSCTでPWMを稼働させる方法を理解できて、NXPのCookBookを読み直すと、Section 5. SCT_pwm(Page 16)をベースにカスタマイズすれば良いのが分かった。アンプラグド様の記事の通り、NXPのPWMサンプルもステート0のみ使っていて、実質ステートマシンとしては動作していないので、たぶんこれがミニマムの使い方と思われる。このコードを読み解けば、最低限の使い方が分かるはず。。(サンプルソースのコメントにはレジスタ設定の目的が書かれているので、LPC810のUser's Manualと突き合わせれば使いこなしが分かるはず)
というわけで、LPC810で音を出すという課題もすこしずつ光が見えてきた。。

■追記(141109)
いろいろ調べているうちに、、SCTを楽に実装できるツールであるRed Stateでは、カウンターが上下するbi-directionalな使い方のコードは生成できないように思えてきた。。どこを探しても、BIDIRを設定する方法が分からない。。

■ご参考URL

分かりやすい解説記事
シンセアンプラグド様;LPC810M021FN8 (6) -- SCT を PWM として使う (3)〜(6)
NXPのチュートリアルよりはるかにわかりやすいです。光明を見た気がするぐらいに。
http://d.hatena.ne.jp/pcm1723/20131225/1387941763
http://d.hatena.ne.jp/pcm1723/20131227/1388126037
http://d.hatena.ne.jp/pcm1723/20131229/1388302224
http://d.hatena.ne.jp/pcm1723/20140103/1388715370

NXPのSCT(PWM)チュートリアル(Cookbook)。。ステップアップしながら説明があるけど、やっぱり分からん
SCTimer-PWM 解説ページ
http://www.lpcware.com/content/project/SCTimer-PWM
SCTimer/PWM cookbook(AN11538.pdf)
http://www.nxp.com/documents/application_note/AN11538.zip (DL URL)

Getting Started with Red State(PDF)
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4?action=AttachFile&do=get&target=Red_State.pdf

電子ブロック工房 様
http://www.recfor.net/jeans/index.php?itemid=891
http://www.recfor.net/blog/mycom/?itemid=889