2011年12月5日月曜日

MTM07展示資料

MTM07では試作版タイマー2機種と節電機能付きLED時計(ソフトウェア開発中)を展示させて頂きました。

初日の12月3日は十分な準備ができないまま公開いたしましたが、単身赴任先から戻ってプリンタが使えた12月3日の晩に作成し、12月4日に使用した資料をGoogleドキュメント上で公開いたします。

オリジナルドキュメントは全てPDF化してあります。

LED時計については、時刻合わせの機能が未実装ですので、今後実装してゆきたいと存じます。

また、12月4日の展示では、12月3日と異なりLED時計の時刻の進み方が異様に速いという奇妙な現象が起きておりますので、こちらについても調査したいと思います。

2011年11月26日土曜日

あまりにも小さい展示物

来週末12/3,12/4に行われる、MTM07に出展することになりましたが、スペースのわりに、展示物が小さいという問題が判明いたしました。

大きい箱に入れて、中がスカスカというのはあまりにも何なのですが、展示机と展示物の色調がマッチして、展示しているように見えない可能性もあります。

で、技術的背景や機能をきちんと説明したチラシを作って置こうかとも思ったのですが、A4両面印刷一枚では足りないという問題もあります。最悪縮小コピーして元のサイズはA4版4ページのものを、A4両面一枚に集約ということもありうるのですが、何とか少ないページ数で簡潔にまとめたいものです。

2011年11月19日土曜日

原始的なシリアル→パラレル変換

シリアル→パラレル変換もしくはパラレル→シリアル変換は、特に通信の世界で頻繁に用いられる信号伝達手段で、近年では100ギガビットイーサという規格もあり、ますます重要な技術になっていますが、速度やプロトコルに依らずに共通する基本事項はシフトレジスタを用いるという点にあります。

シフトレジスタといっても、色々なタイプがありますが、標準ロジックICではシリアル入力→パラレル4bitまたは8bit、パラレル4bitまたは8bit→シリアル出力、あるいはパラレルのプリセット入力を持っているシリアル入力→パラレル出力であったり、シフト方向が可変になっているものもあります。

この辺の事情は、シフト演算で2のべき乗の掛け算や割り算ができたり、フィードバックをかけて演算を行うなどのニーズに合わせて開発されてきたのではないかと思いますが、そういった高度な使い方ではなく、ごく単純な「シリアルデータ転送→パラレルデータに変換」という用途にも便利です。

現在、14ピンのマイコンで4個の7セグメントLEDを制御することを考えていますが、I2CやSPIといったインタフェースを使わずに、ごく低速度でデータをシフトさせ、BCD→7セグメントLED出力をさせる方法を検討しています。

2011年11月12日土曜日

よく考えてみると特殊なフリップフロップ

以前、方向を制御する線がない双方向データラインのレベルシフトについて、TXS0104Eを使った例について触れましたが、入出力の両方に電圧トレラント機能がある、74LCX07を使ったらどうかと考えておりました。

簡単にいえば、2個の非反転のオープンドレイン出力バッファの入力端子と出力端子を接続してループ状にした上で、双方の出力(入力)端子を各系統の電源でプルアップするというものです。

電源投入状態では双方の出力がハイ・インピーダンスなので動きそうに思えたのですが、どちらか片方が1度Lowレベルにドライブされると、双方の入力端子がLowにドライブされてしまうので、出力が永久にLowのままになるという事に、つい最近気づきました。

今度、実験して確認したいと思います。

2011年10月31日月曜日

TeXによる\マークを含むドキュメント作成

このたび、コミックマーケット81 土曜日 東地区“パ”ブロック-59b にて頒布を行う予定となりました。

頒布物の作成に際して、TeXを使っているのですが、Windowsなどのディレクトリの区切りである「\」マークを、生成されるPDFファイルにフォントを埋め込む形式で出力させる方法がなかなか分かりませんでした。

こちらの記事に、非常に参考になることが書かれており、以下のように実施いたしました。

<プリアンブル>
     \usepackage{alltt} %% allttパッケージを使うことを宣言する
     <プリアンブル続き>
     <本文>
     \begin{alltt} %% \マークを使う場所 はじめ
      {\tt \yen}フォルダ名1{\tt \yen}フォルダ名2
     \end{alltt}   %% \マークを使う場所 おわり
     <本文続き>
という形式にすると、PDF生成プログラムのdvipdfmxでうまくフォントを埋め込んでくれました。

TeX自体は効率的なドキュメント作成を支援してくれるツールですが、時々このような裏技的な方法を使わないといけないのが難点です。

2011年10月23日日曜日

LaunchPadに最初から組み込まれているデモプログラムの挙動が変わった件

先のエントリでも、LaunchPadという製品を用いて実験をしている旨記載しておりますが、この製品に添付されてくるMSP430G2231というマイコンに内蔵されている温度センサからの温度測定データを、基板に搭載されたUSB-シリアルインタフェースを介して、PCのCOMポートに送ってくるプログラムが組み込まれています。

以前使っていたマザーボード(ASUS製 P5KPL-CM)のUSBポートに直結していたときには問題なく動作していたのですが、USBハブを経由させたりマザーボード更新後(ASUS製 P5KPL-AM)にUSBポートに直結すると、送られてきたデータを正しく取れなくなってしまいました。

ところが、別のUARTからのエコーバックなどのサンプルプログラムは正常に動いており、わけがわからない状態となっています。

最初から組み込まれているデモプログラムでは、ボーレートの発生のさせ方に問題がある可能性があり、できればオシロスコープなどで波形を確認してみたいものです。


なんて思いながら、改めてソースコードを確認したところ、ボーレートを2400bpsに設定するみたいなコメントを発見し、ターミナルソフトの設定を修正した結果、動作が正常に戻りました。

結果としては単にボーレートを9600bpsと勘違いしていただけでしたが、ボーレートの設定など明記しておかないと分かりにくい部分はコメントやドキュメントで強調しておく必要性を、改めて実感させられた次第です。

2011年10月15日土曜日

LaunchPadにおける技適取得の必要性

先日、ガジェットカフェのイベント「トラ技オフ会|超お手軽ARMマイコン基板「STM32ディスカバリ活用!」~USBに挿すだけで使えるデバッガ付き1000円マイコン基板を使いこなす」に参加しまして、32bitマイコンを搭載しGPIOのON/OFFだけでもLaunchPad以上のスイッチングノイズを出すと思われる、STM32ディスカバリについては技適認証が不要であるというお話を、STマイクロの担当の方から伺いました。

詳しくは調べていなかったのですが、いろいろな実験に使っているLaunchPadについては、説明書に技適取得に関連する断り書きがありましたので、シールドボックスに入れて実験をしていたのですが、TIのサイトで質問を投げた所、RFモジュールを接続する場合だけ技適取得が必要であるという回答が得られました。

マイコンボードそのものは不要輻射を発生し得るものの、技適取得が必要なレベルではないという話で、最初に問い合わせておけば、わざわざシールドボックスを作る必要も無く、いらぬ手間を掛けてしまったなという感じです。

2011年9月22日木曜日

国会図書館の資料、LEDなど

大分、間が空いてしまいましたが、国会図書館でS.M.Sze著作の、半導体工学のテキストを複写できました。

東京本館にあった資料は日本語に翻訳されたもので、原著は関西館にあるとの事でした。

LEDの量子井戸構造についてはあまり詳しく触れられていませんでしたが、ダイオードの特性について興味深い記述がありました。

一つは、ダイオードの電流が小さいときには適用すべき式が異なるという事。

もう一つは材質がシリコンの場合は、一般的に用いられるI=Is{exp(eVF/kbT)-1}の式が適用可能ですが、LEDに用いられる化合物半導体ではこの式をそのまま当てはめると、定量的な一致をさせることが出来ないということです。

複写した資料は、先日引っ越した際に発生した荷物の山に埋もれて、すぐには取り出せる状態ではないので、資料を取り出せたらまたLEDについて書いてみたいと思います。

2011年8月2日火曜日

国会図書館所蔵の資料が古い?

2週間ほど更新できませんでしたが、その間、殺人的な忙しさの日々が過ぎ去るとともに、一方的に解雇を言い渡されてしまいました。

というわけで現在お仕事募集中です。


本題に入りますと、以前のエントリでS.M.Sze氏の半導体工学の本を国会図書館で調べるつもりである旨を述べさせていただきましたが、NDL-OPACで調べたところ、所蔵しているのが1981年に発行された第2版であることが判明しました。

Physics of semiconductor devices 2nd Ed c1981/ S.M.Sze ISBN:0471056618
amazonで調べたところでは、同書の最新版は2006年に発行された以下の書籍であるようです。
Physics of Semiconductor Devices third Edition/ S.M.Sze K.K.Ng ISBN:0471143235

第2版が1981年に発行され、第3版が2006年に発行されたのであれば、院生の頃使っていたのはどの版なのかという疑問が生じてきます。

というのも、HEMTの発明時期から勘案して、1981年発行の本に収録されているのはおかしいですが、院生だったのは1997年から1999年でしたので、1980年代中期から1990年代中期に発行された本でないと、つじつまが合わないわけです。

で、別の書名の本を探したところ、以下のようなタイトルの本が1985年及び1986年に刊行されておりました。

  • Semiconductor Devices 1985年5月 ISBN:0471824828
  • Semiconductor Devices: Physics and Technology 1986年

内容から察するに、1986年刊行の方を輪講で使っていたわけですが、LEDの解説も10ページほど載っています。

NDL-OPACで再度調べたところ、以下のような書籍が見つかりました。

Semiconductor devices, physics and technology 2nd ed. c2002 / S.M. Sze. ISBN:0471333727
というわけで、上記の資料を調べてみたいと思います。

2011年7月17日日曜日

LEDのI-V特性モデルについて

さきに、一般のダイオードのI-V特性の式を元に、パラメータを調整して実際のLEDのI-V特性グラフにフィッティングさせることについての記事を書きましたが、先日のガジェットカフェのイベントでのゲストスピーカーの方が、LEDの構造として多段の量子井戸を持っていると説明されておりました。

量子井戸の詳細についてはお伺いできなかったのですが、ヘテロ接合を用いて1次元方向の量子井戸を作る事が出来ます。

院生時代に、輪講で担当した箇所がちょうどHEMTなどと呼ばれる、ヘテロ接合界面の量子井戸構造を用いて不純物の添加をせずにFETの特性を出すことのできるトランジスタの解説の箇所でありまして、テキストに使っていたS.M.Sze氏の半導体工学の本の当該箇所には、組成の異なるⅢ-Ⅴ族化合物半導体の接合面がFETのゲートにあたる部分になるなどというような事が書かれておりました。

接合型FETや化合物半導体系のMES-FETやHEMTとダイオードは、実は同じ様な構造となっています。

接合面を貫通するように電流を流すものがダイオード。

接合面に沿ってドレイン-ソース間電流を流し、接合面と垂直な方向にゲート電圧をかけることで空乏層厚を制御してドレイン電流を制御するものが接合型FETやMES-FET。

接合型FETやMES-FETと同様ながら、ゲート電圧によって量子井戸の深さ、すなわちエネルギー準位の多寡を制御するものがHEMTとなります。

仮に、LEDがHEMTのような量子井戸を多段構成して作られているとすれば、一般のダイオードを何本か直列接続したような構造になるはずですので、適用するべきI-V特性のモデルの式が変わってきます。

院生のとき使っていたテキストにはLEDのI-V特性の式が書かれていそうなのですが、本自体は研究室の持ち物で、かなり分厚く高価な洋書ですので、休める土曜日に国会図書館で探してみようと思います。


登場した電子デバイスの解説ページへのリンク

  • HEMT(Wikipedeia日本語版)、より詳しい解説は英語版を参照してください。
  • ダイオード(Wikipedeia日本語版)、英語版よりも日本語版の方がバンド理論などについて詳しいです。
  • 接合型FETとショットキー接合を利用したダイオードやMES-FETの図面等は、しばらくお待ちください。

2011年7月11日月曜日

LEDの動作点目算用スプレッドシート

先日、ガジェットカフェで行われたイベントの、トラ技オフ会|LED点灯回路をきちんと考える~「備えあれば憂いなし」の知恵を持ち寄るに参加しました。

実際の製作例やきめ細かな調査の発表や、ゲストの方のLEDについての深い解説があり大変楽しめました。

ちなみに、私は後述するスプレッドシートをお披露目してみました。

現在、個人的に低電圧、低消費電力システムで使用するLEDの駆動回路設計のためにSciLabを使って、DCから商用電源程度の入力周波数でのLEDの簡単な動作解析プログラムを作ってみようと考えていますが、前段階としてまずシンプルなLED駆動回路を使ったときの、LEDの動作点をグラフ上で求めるためのスプレッドシートを製作してみました。

これには、よく使われるLEDのI-V特性の式を用いていますが、IoとnはLEDのI-V特性に応じてフィッティングパラメータとして調整します。

IF=Io{exp(neVF/kT)-1}
  • IF:LEDの順方向電流
  • VF:LEDの順方向電圧
  • T:温度(K)
  • Io:LEDの飽和電流
  • n:フィッティングパラメータ
  • e:電気素量
  • k:ボルツマン係数

なお、ここで用いた例ではスタンレーの白色LEDであるUW3804Xを使用してみました。

ちなみに、発表に用いたスプレッドシートをgoogleドキュメントを用いて公開してみました。実際に発表に用いた形式のグラフを再現する方法が良く分かりませんでしたが、データはそのままの値です。

2011年7月2日土曜日

LED点灯回路の定式化(1)

電力不足の折、にわかに注目を集めているLEDですが、読んで字のごとくLight Emitting Diodeの略ですのでダイオードとしての特性を持っています。

ダイオードとしての特徴は、逆バイアス時の耐電圧が低く、VFが他の種類のダイオードに比べて著しく高い事が挙げられます。

ただ、I-V特性を見る限りでは、一般的なダイオードのI-V特性の式を利用できそうです。

点灯回路として、単純にLEDと固定抵抗を直列接続した場合、ポイントになるのは以下の3点となります。

  • LEDと抵抗に流れる電流が等しい
  • 電流はLEDに引加される電圧が支配的である
  • 抵抗に加わる電圧は電流に支配され、関係はVR=IRとなる

これらを考慮したうえで、非線型方程式を作るのが定式化への第一段階かな、などと思っています。


ダイオードのモデルは色々ありますが、学生時代に集めた資料から拾って見ようなどと考えています。

2011年6月19日日曜日

LaunchPadをICEとして使う(3)

以前にもターゲットシステムとLaunchPadの動作電圧が異なるという条件でSpy-Bi-WireによるICE化の実験を行いましたが、その際に試作した方式では、異電圧間の信号中継を行う回路をターゲットシステム基板上に作っていました。

この場合、ターゲットシステムをユニバーサル基板で作ると、ターゲットシステム側にピッチ変換基板を搭載する必要があるので、サイズが嵩張るという欠点があります。

また、デバッガからコントロールせずにスタンドアロンで動作させる場合は、MSP430のTEST端子をオープンにする必要があり、そのためのスイッチまたはジャンパストラップも必要になります。

そこで、Spy-Bi-Wireのみをターゲットシステム基板上の回路と接続するためだけの中継回路を製作しました。回路そのものは、以前と同様にTIのTXS0104Eを使用して実現しています。

回路図中のJ2は2.54mmピッチ1列×4ピンのソケットです。

ターゲットシステム側の回路は説明書に従って、RSTのプルアップ抵抗を47kΩ,タイミング調整用コンデンサを1000pFとしています。
また、アダプタを外すとTEST端子がオープンになるようにしています。

2011年6月9日木曜日

人力発電についての一考察

ふざけた内容ですので、まじめに読まないようお願いいたします。


人力発電所は可能か?

偶に、「人力発電」という言葉を見かけますが、
電気事業法第二十六条によって、供給電圧と周波数を経済産業省令で定める値に維持するよう努めなければならない、と規定されています。

同じ条文の第二項では、電圧と周波数が維持されない事により電気の使用者の利益を阻害していると判断されるときには電気工作物の修理、改造およびその他、必要な措置をとることを経済産業大臣が命令することができると規定されています。

仮に人力発電が、直接人が発電機を回転させるものであり、送配電系統に直接接続される場合は、上記の電気事業法第二十六条を遵守できるでしょうか?

  • 負荷の変動に対して、発電機の回転数及び出力電圧を一定に維持できる?
  • 交代や休憩はどうする?
以上のような課題が立ちはだかって来ます。

実際の商用電源でも発電所からの供給力に対して系統の負荷が大きいときには周波数が下がり、負荷が小さいときには周波数が上がる傾向があるようですが、それでも中心周波数から10%も変わらないようです。

無論、人力で直流発電機を回して蓄電設備に電力を蓄え、インバータで交流に変換してから送配電系統に接続するという方法であれば、電気事業法第二十六条に抵触する事を回避できるでしょう。

但し、この方法では蓄電とインバータでのエネルギーロスがあり、やや効率が悪いです。

揚水・人力ハイブリッド発電所

人力を発電に活かすにはどうすれば良いか。

考えられる方法の一つは、揚水式発電所の上部貯水池に、何らかの方法で発電所から放流される水を汲み上げることで、一種のパワーアシストとして人力を利用し、揚水式発電所の稼働率を向上させるという方法が考えられます。

実際のところ、定量的な検討をするための材料がありませんので、何人が何時間、どれだけの水を汲み上げればよいかという検討はしていません。

ズバリ、思いつきな訳ですけども、発電設備を新設する必要が無く、また負荷に応じて回転数を一定に保つような高度な技術を必要としない、単純労働で人力発電ができるのかもしれないなどと妄想してしまいました。

2011年6月5日日曜日

節電に配慮したイベントプランと舞台演出

夏になるとロックフェスティバルなどが盛んに行われますが、先日Big Beach Festivalに行って来ました。

このイベントには昨年と今年の2回訪れているのですが、今年は昨年と異なり東日本大震災の影響を受けて会場の幕張海浜公園が被災している事に加え、電力供給の問題があるため昨年とはやや異なる趣向でした。

舞台演出

昨年との違いを特に感じたのは、「BIG BEACH STAGE」と呼ばれるメインステージで使用されている、舞台演出用照明装置の仕様が、昨年の多数の電球を組み合わせた面状のものから、電球の数が少ない棒状のものへの変更です。

電球の数を減らせば当然、消費電力は抑制されるので節電効果が大きいわけですが、それに加えてレーザー発振器の数も減らされていたようです。

レーザーによる演出自体は発振器の数を減らしても、幾何光学的に工夫を加える事で多彩な演出が可能となりますので、これもまた効果的な節電対策といえます。

さらに、照明装置の使用電球の数やレーザー発振器を減らしても、演出効果が見劣りする事がないように、舞台背面のプロジェクション型ディスプレイのスクリーンサイズを舞台の背後全体に拡大して、迫力のあるビジュアルを表示できるようにするための工夫もなされておりました。

イベントプラン

昨年はTwitter社との提携企画で行われていた、ハッシュタグ検索によるタイムライン表示を行うための大型ディスプレイやコンピュータのような、消費電力の大きな電子機器は使用されず、電力を消費しないハンモックなどの設備を用いた南洋風の休憩所が設営されておりました。

また、昨年は様子を良く見ていなかったので何ともいえませんが、会場内の売店などの照明が白熱電球ではなくLED電球が採用されていたようです。


というわけで、今年のイベントは節電のための工夫が色々と行われそうです。

2011年5月28日土曜日

G24i launches Energy Harvesting Products with Texas Instruments

今週に入って、ソフトバンクの孫氏や各地方自治体の間で、太陽電池を用いた発電に関する話題が賑やかになっていますが、他方で英国のG24iという企業が半導体大手のTIと提携して、同社の色素増感型薄膜フィルム太陽電池を用いたエナジーハーベスティングデバイスの開発に乗り出すそうです。

G24i launches Energy Harvesting Products with Texas Instruments

G24i社の太陽電池製品は、孫氏や各地方自治体が導入を検討している大電力を発電するものではなく、TIと共同開発するデバイスを用いて、キーボードやマウスなどの低消費電力の製品の電源として使うことを目的とするもののようです。

以前、M.E.S.M技報: 圧電素子による発電について思うこと、という記事を書きましたが、乾電池に代わるものを目指す製品が色々と出てきており、中々興味深いものです。

現在、筆者はMSP430をエネループ2本で動作させる装置をいくつか検討していますが、エナジーハーベスティングデバイスが入手しやすくなったら、そういったデバイスで動作するマイコンシステムを考えてみたいものです。

2011年5月21日土曜日

Gartner Says Android to Become No. 2 Worldwide Mobile Operating System in 2010 and Challenge Symbian for No. 1 Position by 2014

調査会社のガートナーの予測ではWindows Mobileが2014年には2010年の3倍近いシェアになるとのこと。Gartner Says Android to Become No. 2 Worldwide Mobile Operating System in 2010 and Challenge Symbian for No. 1 Position by 2014

ガートナーの記事は有料なので購入する必要がありますが、とりあえず私が今使っている製品(シャープ HYBRID WZERO3)ではシステムがクラッシュすることが多く、電源を再投入するとユーザーインタフェースが表示されるまでに10分近くかかるという、すさまじい重さと信頼性の低さを兼ね備えたOSであるという印象があるのですが、果たしてWindows Mobile 7シリーズでこれまでの実績で失われつづけてきた信頼を取り戻せるのか?

多分、この予想は外れると思います。少なくとも、私は次期の機種選定からはWindows Mobile搭載製品を排除した上で検討する事に決めていますので。

2011年5月17日火曜日

ハードウェア記述言語 - 回路設計とプログラミングの狭間

私の本業は、ハードウェア記述言語を使用した回路設計なのですが、慣れるまでが大変だったりします。

コンピュータのプログラム言語のように、ハードウェア記述言語と呼ばれる言語を用いて回路を組んで行きます。

現在主に使われている言語はVHDLとVerilog-HDLですが、Verilog-HDLの方は記述の仕方がC言語とよく似ており、噂によるとC言語のプログラマーにも回路設計ができるというセールストークで処理ツールを売り込んでいたようです。

Verilog-HDL自体は原型が1983年から1984年の冬に作られたそうですが、標準規格として最初にまとめられたのが「IEEE Standard. 1364-1995」です。

一方、VHDLは米国国防総省向けのLSI設計に用いるために「IEEE Standard. 1076-1987」として標準規格としてまとめられました。

いずれの言語も規格がアップデートされていますが、旧版との互換性が保たれています。

ハードウェア記述言語は、特別なCADツールを使わずにテキストエディタで回路設計が出来たり、複雑な組み合わせ論理回路を論理式で記述する事で実装できたり、ステートマシンも容易に作れるという利点があります。

また、ハードウェア記述言語はそれぞれの言語に対応したシミュレータを用いて、容易にシミュレーションを行うことが出来ますので、LSIのように莫大な試作コストを必要とする製品の回路設計に最適です。

上述のような利点もありますが、深刻な問題も抱えています。


深刻な問題点とは、ハードウェア設計であるにもかかわらず、設計者自身がソフトウェアの開発をしているような錯覚に陥る。あるいは、周囲の人間がソフトウェア開発だと錯誤してしまうという点です。

特に、ハードウェア記述言語による回路設計を、プログラミング言語によるソフトウェア設計であると意識して設計された回路は正常に動きません。

恥の上塗りではないですが、そのように設計された回路を正常に動かそうとして、色々と小手先の修正を加えてゆくと最終的には手の施しようの無い、いわゆる「スパゲッティコード」と呼ばれる状態になります。それでも一応動いていそうな回路にすることも出来てしまいますので、品質の悪い設計が代々受け継がれてゆくという、上記で挙げたハードウェア記述言語の利点を打ち消して余りあるほどの「負の設計資産」を作り出すリスクもあります。


そのような点を考慮しますと、ハードウェア記述言語を用いた設計の担当者に求められる資質は、まず第一に電子回路、特に論理回路設計ができること、第二にはプログラミング言語を扱える事があるといえます。

電子回路設計の技術が必要である事は、ハードウェア設計者として当然必要な技術ですが、プログラミング言語を扱える事とは何でしょうか?

簡単に言いますと、シミュレーションのための入力データを生成するプログラムが作れる技能と、シミュレーションそのものを効率的に行うためのハードウェア記述言語を用いたソフトウェア的なプログラミングの技能という事になります。

一見、ソフトウェア開発のように見えるハードウェア記述言語による回路設計ですが、それはあくまでも見かけだけの話で、実際にはハードウェアを作っているという意識を持つことが大切だといえます。

2011年5月5日木曜日

LaunchPadを入れる箱

LaunchPadを用いた実験用に製作した「箱」を紹介します。

この「箱」は中にLaunchPadの基板を収納し、LaunchPad上のターゲットデバイスの汎用ポートからLEDの点滅、またはプッシュスイッチによる入力のテストを簡単に行えるようにしたものです。

ベースとなるユニバーサル基板上にLaunchPad他、基板実装部品を取り付けてあり、さらにICE用ケーブルを接続するピンヘッダをベース基板端部に取り付けてあるので、間にアダプタとなる回路を挿入する事で、ターゲットデバイスをターゲットシステム基板に搭載した状態でデバッグできるようにもしています。

回路図は以下の通りです。


基本的にピンヘッダとプルアップ及び電流制限抵抗の塊と言ってよい回路構成です。また、LEDとスイッチはケースの上面に取り付けてあります。


ベース基板とケース上面の間はフラットケーブルを用いて接続してあり、ケース上面のLEDやスイッチは空中配線としています。

ちなみに、ケースとベース基板はタカチの製品を使用しています。

  • ケース:YX-150A
  • 基板:TNF128-136

2011年5月3日火曜日

EAGLEのライブラリエディタ

現在、TIのLaunchPadをMSP430G2xシリーズのICEとして使う計画を進めておりますが、図面を引くのに少々てこずっております。

CADとしては回路図とボードレイアウトの両方が作成できるEAGLE CADのフリーウェア版を使用しておりますが、ライブラリに入っていないデバイスや未定義の回路シンボルが非常に多いので、ライブラリ編集は必須なのですが、その中でも面実装ICのライブラリ作成に威力を発揮するマクロmake-symbol-device-package-bsdl.ulpのモデル作成ウィンドウが、我が家の14インチディスプレイの縦方向のサイズよりも大きく、縮小も出来ないため実質的に操作できない状態となっております。

選択肢は3つあります。

  • ディスプレイを大きいものに買い換える
  • 使用するCADソフトを変える
  • マクロを改造する

ディスプレイを大きいものに買い換えるのは出費を伴いますが、他のソフトも使いやすくなるという相乗効果が得られます。

使用するCADソフトを変えるのは使用方法に慣れる必要がありますが、比較的簡単な対処法です。

マクロを改造するには、マクロプログラムの作成方法に慣れる必要があり、そのための学習書を入手するといった、費用と手間を要するわりに得られる効果が少ないというリスクがあります。

そういったわけで、ICE本来とはあまり関係ないところで現在悩んでいるところでもあります。

2011年4月24日日曜日

MSP430G2221の折損したピンについて

さきのエントリーで、MSP430G2221のRSTピンが折損したと書きましたが、実はTESTピンの誤りでした。

TESTピンが折れているのに何故デバッグができていたのかという理由を考えた所、ターゲットボードにはICEとの接続端子を設けずに、LaunchPadでプログラムを書き込んでから、ターゲットボードのICソケットに挿入するという手法をとっていたたと考えられます。

LaunchPadのICソケットはICのピンとのコンタクト部が絶縁樹脂の上面に露出しており、たまたま配線が繋がったことで、デバッグ用のピンが折れたマイコンチップに対するデバッグができていたものと推測できます。

なお、さきのエントリーでは、MSP430G2221内蔵の水晶発振回路が動作しないと書いておりましたが、単にプログラム中で水晶発振器が安定するまでの待ち時間を長く取りすぎていただけのことでした。

ターゲットボードの機能とプログラムについては、近日中に公開したいと思います。

2011年4月18日月曜日

MSP430G2221のRSTピンが折損

前回までのICE機能のテスト用とは別のターゲットボードを試作しました。

秋葉原で購入した、MSP430を搭載する予定のICソケットが不良品で、MSP430G2221にLaunchPadでプログラムを書き込んだ後、ターゲットボードに取り付けたICソケットに挿入したらRSTピンが折れてしまいました。

この状態で、デバッガ(CCS)との接続ができるかどうか試したところ、デバッガから認識する事は出来ました。

さらに、プログラムを書き換えて、更新させる事もできています。

なぜか、リセットする事もできており非常に不思議なのですが、資料を良く調べる必要がありそうです。


4/19追記。資料の調査はまだなのですが、現象としてはMSP430に内蔵された水晶発振回路が正常に起動しなくなっています。

2011年4月10日日曜日

LaunchPadをICEとして使う(2)

さきに、同一電源を使って制御不要なレベルトランスレータ(TXS0104EDR)を使った、LaunchPadのICE化という記事を書きましたが、今回はその続報です。

前回、紹介した回路の主要部分の回路図(EAGLE CADで描画)を示します。

上記の回路図では、水晶振動子やI2Cスレーブなどは省略しています。

回路図中のIC1がレベルトランスレータのTXSE0104EDRとなり、IC2は14ピンまたは20ピンのMSP430G2xシリーズのMCUを挿入するICソケットとなっています。

この回路はPCとのLaunchPad基板上のUSB-UART変換入出力(TXD,RXD)とSpy-By-Wire(TEST,RST)の合計4本の線のレベル変換をIC1で行って、IC2とLaunchPad側のICE機能ブロックを接続するようになっています。

操作時に注意すべき事は、さきにVCCBの電源投入、すなわちLaunchPadへの接続を行ってからVCCAの電源投入、すなわちターゲットボードの電源投入を行う必要がある点です。電源を切るときも、先にVCCAを切ってからVCCBを切るという手順になります。

これらはTXSE0104Eの仕様からの制約事項ですが、さきのエントリで書いた、TC74LCX07を使った場合どうなるか、近いうちに試してみたいと思います。

なお、このエントリーを書いた時点では、JP1を開放してVCCAにエネループ2本(約2.5V)を接続した状態でMSP430G2221のプログラミングと実行が出来ておりますが、ターゲットボード上のI2Cスレーブとの接続がうまく行っていない段階です。

おそらく、5月の連休くらいにはI2Cを動かせるようになるのではないかと、楽観的に考えております。

などと書いていたら、I2Cスレーブデバイスの未配線箇所と誤配線箇所を発見してしまいました!

というわけで、連休前にはI2Cスレーブデバイスとの接続について紹介できるかもしれません。

2011年4月9日土曜日

LaunchPadをICEとして使う(1)

マイコンのソフト開発はつい最近始めたばかりなのですが、ターゲットシステムにマイコンを入れ込んだ状態でデバッグができる方が、当然の事ながら便利です。

LaunchPadでは一般的なJTAGではなく、Spy-Bi-Wireと呼ばれる2線式インタフェースを使ってターゲットデバイスに対するプログラムの書き込みやデバッグなどを行うように作られており、そのためのコントローラがLaunchPadの基板上に搭載されています。

デバッグ用のインタフェースは2線式なので、当然の事ながら双方向となる線があります。しかも、方向を制御する信号はコントローラからは出ていません。

実は、これが問題でありまして、例えばターゲットシステムの電源電圧とLaunchPadの電源電圧は、LaunchPadの電源電圧をトレースするように、自動的に出力電圧を制御するような電源をターゲットデバイスの電源として使用するような場合を除くと、ほとんどの場合は異なります。

適当なレベルシフタを間に入れるのが良いのですが、双方向かつ制御信号なしという条件では非反転のオープンドレインバッファとプルアップ抵抗を組み合わせることになります。

この場合、片方は電源電圧より高い入力電圧に耐えるバッファを、もう片方は電源電圧より高い出力端子電圧に耐えるバッファを選定する事になります。


図に示した回路は、VCC1>VCC2と仮定しています。バッファの電源はVCC2を使い、VCC1系からVCC2系へのバッファには入力トレラント機能付き、VCC2系からVCC1系へのバッファは出力電圧トレラント機能付きのバッファを使います。

東芝がそのような用途向けのICを色々出していますが、品種が多くパッケージも色々あるので、間違いなく選ぶのがやや面倒ですが、例えばTC74LCX07などが適当といえるでしょう。

ところが、LaunchPadのメーカーでもあるTIが、「レベルトランスレータ」という、制御信号不要で双方向のレベル変換ができるという、Spy-By-Wireを異電圧電源システム間で接続するために開発されたとしか思えない製品を販売していました。

パッケージは最大サイズでSOIC(1.27mmピッチ面実装)ですが、取り寄せて試してみる事にしました。取り寄せた製品はTXS0104EDRです。型番はTXS0104Eに加えて、1.27mmピッチのSOICパッケージであることを示す「D」と梱包形態がテープリールであることを示す「R」ということになっています。

手始めに、LaunchPadからの電源をターゲットマイコンに供給して、Spy-By-Wireによる接続がうまく行くか試しましたが、最初はデバッガ(Code Composer Studio)でうまく認識されず、色々調べたものの良く分からず、結果ピッチ変換基板とICの半田付け部を再加熱したら認識されましたので、半田不良だったようです。

今のところ、ここまでしかテストしていませんが、ターゲットシステムにはI2Cエクスパンダと2桁の7セグメントLEDを取り付けているので、週末を利用して色々とテストしてみたいと思います。


最初、不等号の向きが逆だったので訂正しました。

2011年4月2日土曜日

圧電素子による発電について思うこと

世の中では熱や騒音、振動など様々なエネルギーが捨てられていますが、発電床などのように運動エネルギーの一種である振動から圧電素子を用いて電力を獲得しようとする技術の研究が行われています。たまたま見かけた下記の記事によれば、電圧は3Vとれるものの電流は1μAと極めて小さな電力しか得られないとの事でした。

「心臓の鼓動」で発電し、iPodや携帯電話を動作させるための技術が登場

振動から電力を得る方法の原理を簡単に言えば、セラミックコンデンサに衝撃を加えて誘電体に圧電効果により、過渡的な電圧パルスを発生させるという事になるので、変換可能なエネルギーはおそらく圧電素子の静電容量との相関があるのでしょう。

また、発生した電圧パルスは様々な周波数成分を含むことから、直接交流電源や直流電源として使用することはほぼ不可能と考えてよいでしょう。

さきの記事で1μAの電流が得られたとありますが、これについてもどのような周波数成分の事なのか葉きりとは書かれていませんでしたが、引用元のデイリーテレグラフの記事のタイトルはApple iPod 'could be charged by the human heart'となっているように、容量の大きなコンデンサや二次電池に蓄えて利用することを前提としてタイトルがつけられています。

もっとも、引用元でもどの周波数成分で何A取り出せるかという事には触れていませんでした。

充電して使うことを前提としている以上、最終的には直流(0Hz)で使用する想定になっているのでしょうが、圧電素子から発生する電力の周波数分布は、おそらく加えられる振動の状況によって変化するはずですので、発生した電力を有効に使うには電力ロスの少ない整流回路が必要になるでしょう。

そこで、ちょっと思いついたアイディアですが、ショットキーダイオードと面実装の大型大容量積層セラミックコンデンサを組み合わせて、コンデンサを実装した基板が周囲の振動を拾うようなものを作ると、案外効率的に電力を得られそうなので、そのうちやってみたいと思います。

何て事を書いていたら、こういうものが見つかりました。

LTC3588-1 - 圧電 環境発電(エナジーハーベスト)電源
まあ、整流器とDC-DCコンバータを内蔵していて、外付けの充電用コンデンサに蓄えた電力を供給する仕組みですので、上記のアイディアを半導体製品化して売り出し中であると言ったところですね。

2011年3月27日日曜日

グレイコード化による低消費電力もどき

実験プラットフォーム

詳細は別途紹介したいと思いますが、実験プラットフォームとしてLaunchPadのベース基板を使って簡単なソフトウェアの動作テストができる箱を作成しました。

この箱には、LaunchPadのベース基板のSpyByWireとXIN, XOUTを除く全ての汎用ポートに押しボタンスイッチとLEDドライバ(74HC05×3)を接続した回路が搭載されており、LEDとスイッチを取り付けたケースに収納して色々な実験ができるようにしてあります。

スイッチ周りの回路の構成は次の通りですが、ハードウェアによるチャタリング防止機能はつけていません。これは、ソフト的なチャタリング防止の実験や検討を行うためです。

MSP430のピンと押しボタンスイッチの間には100Ωの短絡保護抵抗を直列に挿入し、スイッチの反対側をGNDに落としてあります。

100Ω抵抗と押しボタンスイッチの接点には10kΩのプルアップ抵抗を接続して、押しボタンスイッチ開放時にはHigh状態を維持し、押しボタンスイッチ短絡時にはLowレベルとなるようにしています。

但しMSP430のポートが出力に設定されていてHighが出力されているときには電流を36mAに制限するようになっていますが、元々数mAしか取り出せませんので、保護抵抗の抵抗値は再検討が必要です。

この箱から、LaunchPadで使用できる全ての汎用ポートを外部に引き出して、様々な拡張機能のテストをできるようにするのが中期的な目標ですが、当面はLEDと押しボタンスイッチを使うだけでできる実験をしてみたいと思います。

9分タイマー

汎用ポートに接続された2つの入力スイッチと、6本のLEDを使って0~9分まで1分単位で時間を設定できるタイマーのプログラムを制作しました。

先日、ステートマシンの値の変化をグレイコード化することで消費電力が減るはず、などと書きましたので、状態遷移をグレイコード化したステートマシンを用いるプログラムを組んでみました。

ただ、遷移速度が非常に遅いのであまり効果はなさそうです。むしろ、時間待ちの為のインクリメント・デクリメントの演算をストレートバイナリではなく、グレイコードで行った方が効果的であるように思います。

ちなみに、このプログラムでは待機状態のときに全てのクロックを停止させる仕様になっており、割り込み信号を受けてクロックを起動するようにしています。

以下にサンプルプログラムを元にした制御プログラムを示します。

動作させるためのハードウェア要件としてはMSP430G2シリーズの14ピンタイプの汎用ポート8本が任意に使えることと、XIN, XOUT端子に32.768kHzの水晶振動子を接続していることが条件となります。このため、LaunchPadのベース基板のTXD, RXDのジャンパストラップをオープンにする必要があります。

ソフトウェアの動作としては、以下のようになります。

  • 初期設定の後クロックを全て停止するスリープ状態になります。P1.2またはP1.3に接続されたスイッチがONにされることによる割り込みでスリープ状態を抜け出します。
  • 時刻の設定はP1.2に接続されたスイッチを繰り返し押すことにより、0→1→2→3→4→5→6→7→8→9→0…というように1分単位で行われ、P1.3に接続されたスイッチを押すことによりカウントダウンが始まります。
  • P1.3に接続されたスイッチがスイッチが押されるとカウントダウンを開始します。
  • 設定時刻を経過するとアラーム動作を行い、P1.2またはP1.3に接続されたスイッチが押されることで、アラーム動作を停止してスリープ状態になります。

各動作状態での表示については、以下のようになります。

  • スリープ状態から水晶発振器が安定するまでの期間はP1.1に接続されたLEDを点滅させます。水晶発振器が安定すると、表示に用いるLED6個全てを消灯します。
  • 時刻設定の際には、P1.4, P1.5, P1.6, P1.7 に接続されたLEDを用いて2進数で設定時刻(分)を表示します。
  • カウントダウン中は、P1.0に接続されたLEDを一秒間隔で点滅させながら、1分経過するごとに2進数表示させた設定時刻を1分ずつ減らして行き、最終的には全て消灯させます。
  • カウントダウン終了後は、P1.0に接続されたLEDを短い時間間隔で点滅させます。

以下にソースコードを示します。今回のポイントとなるグレイコード化はソースコードの先頭でステートマシンの状態を定義している箇所で行っています。

ソースコードをごらんいただけば分かるように、INITIALからSTOPまでの状態遷移においては殆どの状態遷移において1bitしか変化しません。但し、ALARMとSTOPの間は2bit変化します。これは、繰り返し処理となるHOLD→STOP→HOLDのステート数がちょうど良い数にならなかったためです。


#include  

// State Machines That Gray Coded Style
#define INITIAL 0x00 // bin 0000_0000
#define HOLD    0x01 // bin 0000_0001
#define MIN_SET 0x03 // bin 0000_0011
#define CNT_DN  0x07 // bin 0000_0111
#define ALARM   0x06 // bin 0000_0110
#define STOP    0x05 // bin 0000_0101

unsigned char state; // External Variable Used to Keep State 
int set_time;

void main (void)
{
  volatile unsigned int i;
  volatile unsigned int sec;
  
  // Initial Settings
  sec = 0x00;
  set_time = 0x00;
  state = INITIAL; // State Machine Initialize
  
  WDTCTL = WDTPW + WDTHOLD;                        // Stop watchdog timer
  BCSCTL3 |= XCAP_3;                               // Set X_CAP 12.5pF
  TACTL = TASSEL_1 + MC_1 + TACLR;                 // ACLK, up mode, Timer CLR
  CCR0 = 0x7FFF;                                   // Set TACCR0 to 16383
  P1DIR |= 0xF3;                                   // Set LED Port Output
  P1OUT &= 0x0C;                                   // LED OFF
  P1IE |= 0x0C;                                    // P1.3 Interrupt Enable
  P1IES |= 0x0C;                                   // P1.3 Fall Edge Interrupt Enable
  P1IFG &= ~0x0C;                                  // P1 Interrupt state Cleared

  // When X'tal OSC is fault, Red LED Blink
  while (BCSCTL3 & LFXT1OF) {
   P1OUT ^= 0x01;                                 // Blink Red LED
 for(i=5000;i>0;i--){;}                         // Set Blink Interval to Visible 
  }
  P1OUT = 0x00;                                    // All LED OFF

  for(;;){
   if(state == INITIAL){
    state = HOLD;             // State set as HOLD
   }
   
   if(state == HOLD){
    _BIS_SR(LPM4_bits + GIE); // All Clocks Stop and Interrupt Enable
   }
   
 if(state == HOLD){
  state = MIN_SET;
 }else if(state == CNT_DN){
  // Toggle Green LED with 1 Seconds Interval
     while(set_time > 0){
      if((TAR & 0xFFFF)==0){
         sec +=1;
          if((sec >= 60) && ((sec % 60) == 0)){
           set_time -= 1;
          }
         P1OUT = 16*set_time + (sec & 0x0001);
      }
     }
     if(set_time == 0){
      state = ALARM;
     }
 }else if(state == ALARM){
     P1OUT = 0x00;

     // Flash Red LED until Push the Button
     while(state==ALARM){
      P1OUT ^= 0x01;
        for(i=5000;i>0;i--){;}
     }

 }else if(state == STOP){
  P1OUT = 0x00;
     sec = 0;
     set_time = 0;
     TACTL |= TACLR;                 // Timer CLR
     state = HOLD;
 }
  }
}

#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void){
  volatile unsigned int i;
  LPM4_EXIT;
  P1IE &=0xF3;
  if(P1IFG & 0x08){
   P1IFG &= ~0x08;                                // P1 Interrupt Flag Cleared
    if((state == MIN_SET) && (set_time>0)){
     state = CNT_DN;
    }else if(state == ALARM){
     state = STOP;
    }
  }else if((P1IFG & 0x04) && (state == ALARM)){
   P1IFG &= ~0x04;                                // P1 Interrupt Flag Cleared
    state = STOP;
  }else if((P1IFG & 0x04) && (state != MIN_SET)){
   P1IFG &= ~0x04;                                // P1 Interrupt Flag Cleared
    state = MIN_SET;
    P1OUT = 0x00;                                  // All LED OFF
  }else if((P1IFG & 0x04) && (state == MIN_SET)){
   P1IFG &= ~0x04;
   if((P1IN & 0x04)==0){
    if(set_time < 0x09){
     set_time += 1;
    }else if(set_time == 0x09){
     set_time = 0;
    }
   }
   P1OUT = (set_time * 16);
  }
  i=0;
  while(i<10000){
   if(P1IN & 0x0C){
    i++;
   }else{
    i=0;
   }
  }
  // When X'tal OSC is fault, LED Blink
  while (BCSCTL3 & LFXT1OF) {
   P1OUT ^= 0x02;                                 // Blink Red LED
   for(i=5000;i>0;i--){;}                         // Set Blink Interval to Visible 
 P1OUT = 0x00;
  }

  P1IE |=0x0C;
}

2011年3月20日日曜日

電力事情について

はじめに

巷では原子力発電所の損壊や、節電についての話題が流れておりますが、現在の電力事情や原子力発電所に関して有益な情報へのリンク集を作成したいと思います。

また、用語解説としては電気・電力辞典(東京電力)も有益です。

  • 有志の方々による極めて有益な情報提供
    「東西で電気の周波数が何故違うのか」
    ツイッターのまとめサイトTogetterでまとめられた、関東・東北が電力不足なのに西日本では節電をしなくて良いのか? という疑問に対する答えを分かりやすく丁寧に解説したツイートのまとめです。
    福島原発の放射能を理解する
    原子力発電所の基本から、福島第一原子力発電所で起きている出来事が過去の原子力発電所の事故事例と比較してどのように違うのかということまで、分かりやすく丁寧に解説した、カリフォルニア大学のMonreal氏による講演のスライドを物理学分野の専門家有志の皆さんが翻訳されました。(2011/3/21 一部訂正)
  • 公式情報は以下のリンク先となります
  • 資源エネルギー庁
  • 原子力保安院
  • 電力会社
    電気事業連合会
    電力会社の業界団体です。
    東北電力
    水力・火力・原子力発電と、東北地方と新潟県への電力供給を行っています。原子力発電所に関しては一部施設の損傷や停電の影響があるものの、原子炉は冷温停止状態になっています。
    東京電力
    水力発電・火力発電・原子力発電と、関東地方と山梨県・静岡県東部への電力供給を行っています。地震で損壊した福島第一原子力発電所を運営しています。
    J-POWER 電源開発
    水力発電・火力発電・地熱発電と東日本と西日本の周波数変換所(佐久間)及び本州と北海道の間の電力流通施設を運営しています。
    日本原子力発電
    地震の影響を受けた茨城県東海村に原子力発電所がありますが、事故は起きていません。

周波数変換施設等について

2011/4/1 加筆・修正

西日本と東日本では、電力会社から供給される交流電源の周波数が異なります。これは、発電事業創業当時の事情によるものですが、西日本と東日本の間の電力融通のために周波数を変換するための施設が3ヶ所。

また、津軽海峡を越えて北海道と本州の間の電力融通をするための施設が一箇所あります。

さらに、本州と四国・九州の間でも電力融通を行うための仕組みが整備されています。

また、本州内でも電力会社相互の電力融通の仕組みがあり、電力自由化に向けて平成15年末にまとめられた資料(経済産業省)に、その当時の状況がまとめられています。

西日本と東日本の間で電力をやり取りする設備
西日本は60Hz、東日本は50Hzの交流で電力が分配されています。位相や周波数の異なる交流電源同士を接続すると大事故が起こりますので、相互に電力を融通し合うためには周波数を変える必要があります。そのための施設が、静岡県と長野県に合計3ヶ所あります。
  • 佐久間周波数変換所:容量30万kW(静岡県) J-POWER 電源開発が運営
  • 東清水変換所:容量30万kW(静岡県) 中部電力が運営 ※仮運用
  • 新信濃変換所:容量60万kW(長野県) 東京電力が運営
津軽海峡を越えるための施設
本州以南の電力系統と北海道の電力系統が、津軽海峡越える海底ケーブルで接続されています。海底ケーブルでは直流送電が行われ両岸の変換設備で交流に変換されます。電力を受け取った変換設備では、直流から負荷側の系統の周波数と位相に合わせた交流への変換が行われます。海底ケーブル区間が直流である理由は、ケーブルの本数が少なくて済むことと、ケーブルの静電容量やインダクタンスの影響を回避できることなどであるそうです。<参考:直流送電のメリット・デメリット及び具体例を解説した資料(北大)>
  • 北本連系設備(北海道・青森県):容量60万kW J-POWER 電源開発が運営
本州と四国・九州の間の電力融通設備
以下の系統は交流のまま電力の受け渡しが行われます。
  • 関門連系設備(山口県・福岡県):容量30万kW(本州→九州),278万kW(九州→本州) J-POWER 電源開発が運営
  • 本四連系設備(岡山県・香川県):容量120万kW J-POWER 電源開発が運営
また、紀伊半島と四国を結ぶ電力融通施設もあり、津軽海峡を越える施設と同様に直流送電が行われます。

周波数が違うと何故だめなのか

初期位相が同じである、50Hzと60Hzの波形を同じ時間軸上にプロットすると下記の図のようになり、丸で囲んだ部分では、最大で振幅値の約2倍の電圧の差を生じます。

この状態に限らず、電圧が異なる区間がほとんどを占めますが、そのような場合には、送電線や変圧器・発電機に異常な電流・電圧を生じ、火災などの各種災害の原因になりますので、周波数の異なる交流電源同士を絶対に直接並列接続してはいけないのです。

2011年3月13日日曜日

コンシューマー機器の省エネルギー技術について

先日(2011/03/11)、日本近海で発生した地震による交通機関の麻痺で、情報収集に使っていたPHSの電池が消耗して使えなくなったり、停電により街路照明が無く歩行の安全確保の面で困りました。

結果として、非常時に備えてPHS用の予備電源や、ヘッドランプなどを携行することの重要性を痛感させられましたので、今後の開発テーマにしたいと考えておりますが、今回はコンシューマー機器類の消費電力抑制技術について述べたいと思います。

消費電力の抑制技術

ここでは、ほとんどのコンシューマー機器に搭載されている、LSIの消費電力抑制技術を取り上げたいと思います。

コンシューマー機器に搭載されている、ロジック系LSIはCMOSプロセスを用いている事と思います。

一般にCMOSプロセスのロジック回路は、状態が変化する時に電力を消費しますので、消費電力の抑制にはクロック周波数を下げたり、使用していない回路へのクロック供給を停止する方法や、状態変化の少ない回路として設計するといった方法が採られます。

特に、クロックを止めたり、周波数を下げることについて述べたいと思います。

LSIの場合

工場出荷時に内部回路が確定しているLSIに関しては、それらの開発ツールでデファクトスタンダードの地位を占めるSynopsis社Power Compiler等を使用することで、使用されていない回路へのクロック供給停止機能を自動的に製品へ付加する事ができますが、クロックスピードの低減ということに関しては自動化されておらず半導体製品開発段階から入念に考慮しなければなしません。

また、マイクロプロセッサなどを搭載したLSIでは、ソフトウェア制御によりクロックの制御を行う事が可能なものもあります。当然、クロックを制御するだけでなく例えば変数をグレイコード化するなどして、回路そのものの状態変化を減らすことでも消費電力の抑制が出来ます。

当ブログで取り上げているMSP430についても、待機時の消費電力を抑制するためにクロックの発振を完全に停止させた状態から割り込みによって起動させたり、内部オシレータのクロック周波数制御を行う事が可能です。

リコンフィギュアラブルデバイス

近年、低価格化が進み最終製品への採用も増えてきたFPGAやCPLDではクロック制御が意外と面倒です。

単純にクロックラインにゲートを挿入して、使用しないときにクロック供給を停止させたり、独自に作成したカウンタでクロックを分周した出力を低速クロックとして使うと、そのままでは論理合成ツールや配置配線ツールがそれらのクロック制御回路の出力信号をクロックとして認識してくれません。

また、仮にクロック制御回路の出力信号をクロックとして設定しても、基になるクロックとクロック制御回路の出力クロックの間のタイミング同期がきちんと取られる保障がないため、最悪の場合には回路を修正して論理合成と配置配線をやり直す度に、異なるタイミングで動作する回路が生成されるという酷い結果になることがあります。

そういった問題を回避するために、FPGAやCPLDに内蔵されているクロック制御用専用ゲートやPLLを用いて、クロック系統をきちんと設計し、各クロックの相互関係に応じた回路設計や論理合成・配置配線におけるタイミング制約の指定を行う必要があります。

簡単なまとめ

コンシューマー機器に用いられる半導体の低消費電力化に関しては、おおむね次のように言えるかと思います。

  1. CMOS回路の消費電力抑制には、クロック供給停止やクロック周波数の低減、状態変化の少ない回路方式の採用が有効
  2. 工場出荷段階で回路が固定される、マイコンなどの半導体製品では、設計段階でクロック供給停止機能を自動的に付加する事が可能だが、周波数の低減は自動化されていない
  3. マイコンやマイクロプロセッサを内蔵した半導体製品では、ソフトウェアでクロック制御できる物があり、その機能を用いる事で消費電力を抑制できる。また、回路の状態変化を減らす事によっても消費電力を抑える事ができる。
  4. FPGAやCPLDのようなリコンフィギュアラブルデバイスでは、クロック供給停止や周波数の低減が意外と面倒だが工夫次第で可能である

私の知る限りでは、以上のような方法で機器の性能や機能を活かしたまま、半導体の消費電力を抑制して消費電力を抑えることができます。

釈迦に説法とは思いますが、携帯情報端末のハードだけでなくソフトの開発者の方にも、バッテリ駆動機器の低消費電力化ということを念頭に置いて、製品開発を行って欲しいと思います。


追記(2011/03/21)

Webで検索したところ、このような記事がありました。 マルチクロックドメイン設計の落とし穴(EDN Japan)

LSIの内部で使用するクロック周波数が複数ある場合は、回路設計に細心の注意を払う必要があることを具体例を挙げて示してあり、良い参考資料といえます。

2011年2月26日土曜日

LaunchPadの電源

LaunchPadの回路図(ユーザーガイド(PDF))によると、USBバスから供給される5V電源は、LDOレギュレータのTPS77301で3.6Vに降圧された後にボード上の回路に供給される。よって、LaunchPadのVCCを直接電源として利用する場合、電圧が3.6Vであることに留意する必要がある。

特に、外部に低電圧動作のICなどを接続する場合は、電源電圧の規定値に注意する必要があり、必要に応じて降圧回路やレベルシフタを追加する必要がある。

また、USBポートからの供給電流は、PCにLaunchPadが認識されるまでの期間は、USBの規格に従うと100mA以内とする必要がある。

よって、消費電流が大きい負荷を接続する場合は、別途電源を用意する必要がある。

また、ICEの機能ブロックの消費電流はMSP430F1612(8.7mA)及びTUSB3410(15mA)の消費電流の合算値+αで30mA程度と見積もる事ができるので、ターゲットデバイスと外部接続回路を含めた消費電流が70mAを超える場合、外部電源を設けることが望ましいと考えられる。

2011年2月21日月曜日

LaunchPad付属X'talの使用

TIのMSP430のプラットフォームである、LaunchPadにオプションパーツとして付属している32.768kHzの水晶振動子を取り付け、内部キャパシタを12.5pFに設定して発振させ、タイマーのカウント値が16384(2Hz相当)の整数倍になる度にLEDをトグル点灯させているが、時々点滅動作が止まるように見える。

考えられる原因は以下の通り。

  • 実際に発振が不安定
  • 目視チェックなので錯覚
  • プログラムの問題
ちなみに、使っているプログラムは以下の通りである。
#include  <msp430g2231.h> 
void main (void)
{
  volatile unsigned int i;
  // Initial Settings
  WDTCTL = WDTPW + WDTHOLD;                        // Stop watchdog timer
  BCSCTL3 |= XCAP_3;                               // Set X_CAP 12.5pF
  TACTL = TASSEL_1 + MC_2 + TACLR;                 // ACLK, continuous mode, Timer CLR
  P1DIR |= 0x41;                                   // Set LED Port Output
  P1OUT &= 0xBE;                                   // LED OFF

  // When X'tal OSC is fault, Red LED Blink
  while ((BCSCTL3 & LFXT1OF)||(BCSCTL3 & XT2OF)) {
   P1OUT ^= 0x01;                                 // Blink Red LED
 for(i=5000;i>0;i--){;}                         // Set Blink Interval to Visible 
  }
  P1OUT &= 0xBE;                                   // LED OFF
  P1OUT |= 0x40;                                   // Green LED ON

  // Toggle Red LED and Green LED with 0.5 Seconds Interval
  while(1){
   if(((TAR & 0xFFFF)%0x4000)==0){
    P1OUT ^= 0x41;
   }
  }
}

オシロスコープや周波数カウンタを使用できる環境ではないので、上記のプログラムについて検討すると、問題点としてはタイマーの値(TAR)の剰余計算を行っている事により、LEDを点滅させる際の処理時間が長くなることが挙げられる。

そこで、プログラムを以下のように修正してテストしてみると、点滅する時間間隔が安定しているように見える。

#include  <msp430g2231.h>

void main (void)
{
  volatile unsigned int i;
  // Initial Settings
  WDTCTL = WDTPW + WDTHOLD;                        // Stop watchdog timer
  BCSCTL3 |= XCAP_3;                               // Set X_CAP 12.5pF
  TACTL = TASSEL_1 + MC_1 + TACLR;                 // ACLK, up mode, Timer CLR
  CCR0 = 0x3FFF;                                   // Set TACCR0 to 16383
  P1DIR |= 0x41;                                   // Set LED Port Output
  P1OUT &= 0xBE;                                   // LED OFF

  // When X'tal OSC is fault, Red LED Blink
  while ((BCSCTL3 & LFXT1OF)||(BCSCTL3 & XT2OF)) {
   P1OUT ^= 0x01;                                 // Blink Red LED
 for(i=5000;i>0;i--){;}                         // Set Blink Interval to Visible 
  }
  P1OUT &= 0xBE;                                   // LED OFF
  P1OUT |= 0x40;                                   // Green LED ON

  // Toggle Red LED and Green LED with 0.5 Seconds Interval
  while(1){
   if((TAR & 0xFFFF)==0){
    P1OUT ^= 0x41;
   }
  }
}

ちなみに、ツイッター上でMSP430シリーズの水晶発振器では内部キャパシタを使用するよりも、外部キャパシタを使用した方が良いとの情報を頂いているので、基板のセッティングを変えてテストしてみたい所ではある。

2011年2月17日木曜日

新規作成

ブログスペースを作成。
不定期に公開可能なレポートを掲載予定。

フォロワー