2020年11月21日土曜日

第35回パワーエレクトロニクス学会主催 専門講習会に参加!

こんにちは、M1飯田です。しばらくブログの更新ができていなくて申し訳ございません。


さて、本日は、第35回パワーエレクトロニクス学会主催の専門講習会に聴講者として参加しました。

講習会のテーマが「モータとその周辺技術の最前線」ということで、内容は、「モータ」、「インバータドライブ」、「パワーデバイス」、「磁性材料」と、幅広い分野における最新技術に関するものでした。

自分の研究分野であるモータに関する多くの最新技術の動向を知ることができ、とても充実した1日になったと思います。

私自身初めての講習会への参加でしたが、オンライン開催ということもあり、1人で気楽に聴講することができました。また、せっかくの機会なので質疑応答にもいくつかチャレンジしてみました。普段、こういった外部の場で質問する機会はほとんどないので、緊張しましたが、これはこれで良い経験になったと思います。また、いきなり対面の講習会で質問するよりは、オンラインで質問する方が気楽にできるので、ちょうど良い練習の場になったと思います。

今後も、個人としても、EPC研究室としてもこういった講習会に積極的に参加して、EPC研究室全体の技術力向上を目指していきたいです。




2020年11月6日金曜日

MSP430マイコン 備忘録3 (MSP430F2619)

こんにちは。D2の小西です。
かなり長い間記事を書いておらず、久々の投稿になります。
とりあえず、この備忘録も今回で一旦キリが良いところまで来ました。 

<プログラム内容>
本プログラムでは、LPM(Low Power Mode)ごとの違い、DACの使い方、IOピンによる割り込み、について触れる。DAC1にはA0~A2(ADC)の平均値が直接出力され(最もシンプルな入出力関係)、DAC0にはTimerBに紐づいた内部カウンタを利用したアナログ三角波電圧が出力されアナログ的にLEDを調光する。
GPIOピン(P2.4の押しボタン)の立ち下がり割り込みによって入るLPMを切り替える。LPM3ではDCOが停止するため、TimerBのクロックソースもLFXT1Sに切り替える。LPMごとにLEDの調光周波数を変化させて、現在のモードを可視化する。
  P5.4 -> MCLK.....; MCLKを出力・監視
  P5.5-> SMCLK....; SMCLKを出力・監視
  P5.6 -> ACLK.....; ACLKを出力・監視

・Low Power Mode:LPMとは、プロセッサの消費電力を抑えるために、不必要なときには高速なクロックシステム自体を停止させる動作モードのことを指す。モードによって停止するクロックシステムの深度が異なり、より多くのクロックを停止させた方が消費電力を抑制できる。 

MSP430F2619のLPMとクロックシステムの可否の対応を下記に示す。 
Mode        Enable / Disable
Active        CPU, MCLK, SMCLK, DCO        Nothing
LPM0        SMCLK, DCO                          CPU, MCLK are disabled
LPM2        ACLK, DC generator              CPU, MCLK, SMCLK, DCO are disabled.
LPM3        ACLK                              CPU, MCLK, SMCLK, DCO are disabled. DC generator disabled.
LPM4        Non active                             CPU and all clocks disabled


MSP430x2xx Family User's Guide.pdfには、“2.4 Principles for Low-Power Applications Often, the most important factor for reducing power consumption is using the MSP430 clock system to maximize the time in LPM3.“、とある。すなわち、制御周期中にいかに長時間LPM3に潜ることができるかが低消費電力システムを構築する要である。 



ピン配置と役割は以下の通り。
P2.4 -> Push Botton...; 割り込みトリガ用プルアップ押しボタン

P4.0 -> Yellow LED....; TimerBを出力する(ここがLPM復帰のトリガとなる)
P4.1 -> Red LED........; LPM3のときだけ点灯する(ステータス表示)
P4.2 -> Blue LED.......; LEDを調光する三角波がUp modeのときだけ点灯する
P4.3 -> Green LED.....; LPM0のときだけ点灯する(ステータス表示)

P5.4 -> MCLK.....; MCLKを出力・監視
P5.5-> SMCLK.....; SMCLKを出力・監視
P5.6 -> ACLK......; ACLKを出力・監視

P6.0 ~ P6.2 -> 可変抵抗を入力..; ADC入力
P6.6 -> DAC0.....; ADCの変換結果を直接出力する
P6.7 -> DAC1.....; TimerBのカウンタを利用して、アナログ三角波電圧を出力する


まずはフローチャート
TimerBのコンペアマッチが発生すると、LPMから脱出してActive Modeに戻ってくる。アップモードかダウンモードかに従ってTimer counterの値をインクリメント/デクリメントして、アナログ的に三角波を生成する。LPM中にボタン(P2.4)が押されて入れれば、フラグを切り替えて次に入るLPMを切り替える。


次に、回路図。
可変抵抗の中間電位をA0~A2に入力してアナログ指令値を得る。DAC0、DAC1、ポート4に各種LEDを接続する。

また、実験風景。
LEDの役割は図に示した通り。

実験の様子を撮影した動画・結果
左上のプルダウンボタンを押すことでLPM0->(0:06)->LPM3->(0:11)-> LPM0->(0:14)-> LPM3と切り替えている。()内の数字は動画のタイムスタンプを表している。


下記はLPM0のときとLPM3のときの測定結果です。LMP0に入ったときは、MCLKは停止しているがSMCLKは動作している。また、LPM3に入ったときは、MCLK, SMCLKともに停止しており、低消費電力に動作しようとしている。
  LPMode_FLAG = 0 (LPM0)              LPMode_FLAG = 1 (LPM3)

サンプルコード
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Blog: DAC, LPM(GitHub Gist)
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

前回の備忘録1,2でも触れた内容については触れず、新しく出てきたところだけ触れていきます。

<52~67行> 
54. DAC12_1CTL |= DAC12SREF_2 + DAC12IR + DAC12AMP_2;
55. DAC12_0CTL |= DAC12SREF_2 + DAC12IR + DAC12AMP_2;
    DA変換器に関する初期設定
 ( U. G. P.588   25. DAC12_xCTL, DAC12 Control Register )
 ・DAC12SREFx : DACに使用する基準電圧を選択する
   00 VREF+    01 VREF+
   10 VeREF+   11 VeREF+

 ・DAC12IR : 許容できる入力電圧の範囲を指定する
   0: DAC12 full-scale output = 3x reference voltage
   1: DAC12 full-scale output = 1x reference voltage

 ・DAC12AMPx : DAC12の入力および出力アンプのセトリング時間と消費電流を選択
                           Input Buffer                Output Buffer
            000         Off DAC12 off,          output high Z
            001         Off DAC12 off,          output 0 V
            010         Low speed/current       Low speed/current
            011         Low speed/current       Medium speed/current
            100         Low speed/current       High speed/current
            101         Medium speed/current    Medium speed/current
            110         Medium speed/current    High speed/current
            111         High  speed/current     High speed/current

66. DAC12_1DAT = 0x000;
 ・DACの出力電圧を決定するレジスタ
  DAC12SREFで指定した基準電圧を4095=2^12-1として、"所望の電圧÷Vref×4095" を指定する。


<71~81行>
73. ADC12CTL0 = SHT1_3 + SHT0_3 + REFON + ADC12ON + MSC;
 ・複数のチャンネルをまとめて変換させるときはMSC(Multiple sample and conversion)ビットを立てる。

80. ADC12MCTL3 = SREF_1 + INCH_10 + EOS;
 ・複数のチャンネルをまとめて変換させるとき、使用する最後のMCTLxに
  EOS(End of Sequence)ビットを立てる。


<91~115行>
103. P5SEL |= MCLK | SMCLK | ACLK;
 ・GPIOのI/Oピン以外の機能を使用する

111. P2IE |= P2LPM; // P2.4 interrupt enabled [JP10]
 ・ポート2の4番ピンの割り込みを許可する

112. P2IES |= P2LPM; // 0: low-to-high edge 1: high-to-low edge
 ・割り込みのトリガ極性を指定する。

113. P2IFG &= ~P2LPM; // P2 IFG cleared
 ・割り込みフラグのクリア


<193行~>
202. __bis_SR_register(GIE); // 汎用割り込み許可
 ・割り込みを使ってLPMから復帰することがほとんどなため必須

206. DAC12_0CTL |= DAC12ENC; // DAC go working
 ・DACを起動・使用可能にする。 停止させれば低消費電力が図れる。


<302~313行>
304. __bis_SR_register(LPMx0_bits + GIE); // Enter LPM0 w/ interrupts 
 ・LPMxに入るときのコマンド。 おそらく、この1行を実行した段階でLPMに入り、
  while文の中ではあるがこのコマンドの行でLPM復帰待ち状態で停止する。


以上。
-------------------------------------------------------

これで、MSP430シリーズの最大の売りである低消費電力/LPMを使えるようになりました。
次回は続くかどうかは分かりませんが、I2Cやシリアル通信なんかを使って周辺素子と接続できればなと思います。