趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。※サイト移転しました(tomono.eleho.net ⇒ tomono.tokyo)
RSS icon
  • Core2Quadマシン静音化(実験編)

    投稿日 2012年 3月 23日 コメントはありません

    時間があいてしまいましたが、Core2Quadマシンを静音化するための実験をしてみました。

    ブレッドボードに以下の回路を組み立てました。回路図作成にはBSch3Vを使わせていただきました。

    回路自体はオーソドックスな降圧型のDCDCコンバータです。PIC12F683のCCP機能を使ってPWMの波形を生成し、それでPch-FETを駆動しています。最初は直接回転数をデューティー比にフィードバックしようかと思ったのですが、うまくいかないのでコンバータの出力電圧を分圧してADコンバータで取り込んでPWM信号のOFF/ONにより電圧を制御してフィードバックしています。そして電圧制御の目標をFANの回転数に応じて変化させています。回転数の目標はもちろんLM35で取得した温度に基づいて決定しています。ただ、ソフトウェア処理になっている関係で追従はかなり遅くなります。・・・が、ケースFANなので問題はないでしょう。

    FANの回転数センサの信号はかなりノイズがのるので、PICのソフトウェア処理でノイズ除去をかけて、ポートに再出力してマザーボードに返します。これでFANの回転数がマザーボードからも見えるようになります。

    ソフトウェアは1ms周期のタイマ割り込みを基準に動作させています。割り込み処理ルーチン内で以下の処理を行っています。

    • 1ms刻時
    • 温度と電圧を交互にAD変換
    • FANのセンサのノイズ除去と回転量検出(積算)

    メインループでは以下の処理を行っています。

    • モニタLEDの表示(1ms周期)
    • 出力電圧の安定化制御(PWM信号のOFF/ON) (1ms周期)
    • 回転速度の計算と、目標出力電圧の決定 (2秒周期)
    • 温度に基づく目標回転速度の決定 (2秒周期)

    後半の処理は実機にあわせてチューニングが必要なので、現時点ではいい加減なものになっています。


  • STM32 Value Line DiscoveryをLinuxで開発する(3)

    投稿日 2012年 2月 10日 コメントはありません

    こんどは、Eclipse Plug-in をテストしてみます。参考にしたのは、http://gnuarmeclipse.sourceforge.net/wiki/Main_Pageです。EclipseはすでにAndroidの開発環境の構築の際にインストール済みなので、そこにARMのPlug-inをインストールしてみることになります。

    1.EclipseのPlus-inのインストール

    http://gnuarmeclipse.sourceforge.net/wiki/Plug-in_installationに沿って、プラグインをインストールしていきます。

    1. 「ヘルプ」→「新規ソフトウェアのインストール」で「インストール」ウインドウが開きます。
    2. 「追加」ボタンを押し、「リポジトリの追加」ダイアログでロケーションに「http://gnuarmeclipse.sourceforge.net/updates」を入力してOKを押します。
    3. しばらくすると、名前のところに「CDT GNU Cross Development Tools」というグループが表示されるので、グループのチェックボックスはチェックなしのまま、1階層下を開き、「GNU ARM C/C++ Development Support」にチェックを入れます。チェックを入れたら「次へ」を押します。
    4. インストールする項目の確認画面が表示されるので「次へ」を押します。
    5. ライセンスの同意確認画面がでてくるので、同意して「完了」を押します。
    6. ソフトウェアのインストールが実行されますが、途中で署名なしコンテンツを受け入れるか確認する警告が表示されますので、「OK」を押します。
    7. Eclipseの再始動確認画面がでてくるので、画面に従います。

    2.プロジェクトの生成とToolChainの設定

    プロジェクトを生成し、http://gnuarmeclipse.sourceforge.net/wiki/Featuresを参考にツールチェーンの所在をCDTに教えます。

    1. C言語のプロジェクトとして新規のプロジェクトを生成します。
    2. プロジェクトタイプは「ARM Cross Target Application」とし、ツールチェーンは「ARM Linux GCC(Sourcery G++ Lite)」とします。 (summon-arm-toolchain は同じarm-none-eabi-gccなので)
    3. 構成の選択の拡張設定の中の「C/C++ビルド」の「環境」で「すべての構成」を選択した上で、「追加」を押して「名前」に「PATH」を追加し、「値」に「~/sat/bin」を展開した値を追加して、ツールチェーンの場所を知らせます。(展開した値でなければうまく行かないようです)
    4. 「OK」、「完了」、「はい」で、プロジェクトを生成します

    3.ソースファイルの追加とビルド

    1. ソースの追加で、main.cを追加します。
    2. stlink/example/blink/main.c の内容をコピー&ペーストします
    3. 「プロジェクト」→「プロパティ」で「環境」の「C/C++ビルド」の「PATH」に「~/sat/bin」を展開した値が入っているのを確認します。
    4. 同じく、「ビルド変数」に「~/sat/bin」を展開した値が入っているのを確認します。

    これでビルドすると一応コンパイルされるのですが、まず、サンプルはどのボード向けのコンパイルをするか指定するマクロ定義がないのでエラーになります。

    さらに、コンパイルできても、リンク時のマップ指定(何番地からの前提でリンクするか)を指定する箇所がわかりません。素直にMakefileがある前提(自分で作る前提)のプロジェクトとしたほうが良さそうです。

    ・・・・とりあえず、ここまでで今日は挫折・・・orz


  • STM32 Value Line DiscoveryをLinuxで開発する(2)

    投稿日 2012年 2月 9日 コメントはありません

    続きです。

    2.stlinkのインストール

    gitでリポジトリをクローンします。

    パッケージマネージャで libusb-1.0 と pkg-config がインストールされていることを確認する必要があります。自分の場合は一見libusb-1.0がインストールされているように見えたのですが、実際にmakeするとエラーになったので、

    でlibusb-1.0をインストールしました。

    その後、コンパイルします。コンパイルは make 一発です。

    STM32 Value Line Discoveryを取り付けます。・・・が、こいつのSCSIエミュレーションはだめだめらしいので、システムから無視させるために、

    とすることになっていますが、エラーになってしまいます。しかも、アンマウントしても、すぐに復活してしまいます。恒久策としては

    なのですが、それでもエラーになってしまいますので、一旦強制的に挿抜しました。

    次に、udevルールをセットアップします。

    ここでSTM32 Value Line Discoveryを取り付けると、/devの下が

    というようになります。

    3.弄ってみる

    gdbserverを起動してみます。

    とりあえず正しく認識して、gdbserverが起動しているようです。

    4.何か動かしてみる

    gdbserverが動いたままの状態にして、tutorialに沿って、Lチカのサンプルを動かしてみます。

    まず、サンプルプログラムをコンパイルします。(赤字が入力箇所です)

    次に、gdbserverに接続して、ダウンロード&実行します。

    ボード上のLEDがチカチカし始めましたので成功です。


  • STM32 Value Line DiscoveryをLinuxで開発する(1)

    投稿日 2012年 2月 8日 コメントはありません

    STM32 Value Line Discoveryは面白そうで、安いのですが、開発環境がWindows専用だったりするので、購入したものの放置していました。

    しかし、なにげに HACK A DAY を見ていたら、Linux上にSTM32の開発環境を構築する記事がでていたので、追試してみました。OSはLinuxMint11の64bit環境です。

    まず、tutrialに沿って環境構築を進めます。

    0. gitのインストール

    リポジトリはgitで管理されています。ダウンロードするためにgitを使うので、インストールします。

    1.summon-arm-toolchainをインストール

    gitでリポジトリをクローンします。

    インストーラスクリプトをカスタマイズします。

    以下の行のみ変更します。(コマンドラインオプションでも設定できるようです。)

    その他の依存関係をクリアしておきます。

    ツールチェーンを構築します。

    として構築します。勝手にツールチェーンをダウンロードして、コンパイルしていってくれます。

    かなり負荷がかかるようで、普段は静かなCPUファンがかなりの轟音を立てていました。

     


  • MSP430F2013のADコンバータを試す

    投稿日 2011年 10月 4日 コメントはありません

    Lチカデバッグ環境ができたところで、次に内蔵ペリフェラルを試します。

    MSP430LaunchPadには、MSP430G2231が搭載されています。しかし、今回試すのはMSP430G2311ではなく、秋月で300円で売っているMSP430F2013です。なぜこのチップを選ぶかというと、他のワンチップマイコンでは10bitとか12bitがせいぜいなのですが、このチップは他のワンチップマイコンでは類を見ない16bitのシグマデルタ方式のA/Dコンバータを内蔵しています。さらに、入力は差動入力になっていて、1~32倍のプログラマブルゲインアンプ(PGA)を持っています。ですので、センサをつないだときの分解能が大幅にアップするはずです。

    しかし、普通のワンチップマイコンでは10~12bitの分解能のA/Dコンバータしか搭載していないのは、CPUというデジタル回路がノイズ源になるため、高分解能のA/Dコンバータを搭載しても実力としてそれだけの分解能が得られないというところにあります。したがって、MSP430F2013のA/Dコンバータを使いこなすためには、CPUを初めとしたデジタル回路の影響を抑えることを考えなければなりません。

    そういう視点で、MSP430F20xxのコードサンプル(msp430x20x3_sd16A_02.c)を眺めてみると、WDTとLPMを使ってデジタル系の動作をなるべく抑えた状態でA/D変換を行っています。

    まず、WDTは32msのインターバルタイマとして使っていて、A/D変換の設定後にWDTを起動したら、LPM0に状態遷移してCPUの動作を停止させてしまいます。そして、停止中にその割り込み処理ルーチンの中でA/D変換のスタートをかけています。そうすることにより、チップ内のざわざわとした動作がA/D変換に与える影響や、A/D入力インタフェースのレベルが落ち着く前にA/D変換してしまうのを抑制しているようです。その結果として、(LaunchPad基板では)チップ内蔵温度センサやオフセット電圧の測定ではPGAのゲイン=1の状態で測定値のばらつきが1~2LSB程度に抑えることができています。(実験では、他の動作を行いながらA/D変換をさせると最大で8LSB程度暴れていました)

    外部回路をつけるとその作りなどに影響されるので結果がまた変わってきますが、今度はセンサをつないでみたいと思いますが、面倒なのは外部入力インタフェースのインピーダンスがかなり低い(1kΩ程度)ようなので、バッファをつけてやらなければならないのが面倒くさいです。

     


  • Lチカ通信でMSP430デバッグ

    投稿日 2011年 10月 3日 コメントはありません

    MSP430の開発環境が整ったところで、デバッグ手法を考えているのですが、今回使うMSP430F2013は、ROMの容量が2KBと小さく大した手法は使えませんので、ChaNさん提案のLチカ通信にすることにしました。

    今回作ったターゲットのPCとの接続部分は秋月のAE-UM232R(FT232RL USBシリアル変換モジュール)を使いました。

    ターゲットとの結合部分はChaNさんの回路そのままですが、PCのRS-232Cとは論理が異なるので、インバータ(7S04)は削除しています。

    センサには、秋月で150円で売っているPiNフォトダイオードS2506-02を使いました。

    ターゲットボードとは以下のような感じで結合します。

    この状態で、安定して38400bpsでの通信が可能です。115.2kbpsもセンサの距離を調整すれば通信できるのですが、ややシビアです。オシロで波形をみると波形の立ち上がりが鈍っているので、抵抗値をもう少し小さくすれば安定するような気がします。(面倒なのでそのままにしていますが)

    また、緑のLEDが隣にありますが、PiNフォトダイオードの感度特性が波長の長い方に偏っているせいか、あまり影響は受けないようです。


  • Ubuntu11.10でMSP430開発環境を構築

    投稿日 2011年 10月 2日 コメントはありません

    昨日のブログに書いたのですが、Ubuntu11.10(Oneiric)ではMSP430の開発環境がサポートされていそうな雰囲気だったので、ちょっと確認してみました。

    Ubuntu11.10(Oneiric)は現時点ではβ2です。ダウンロードしてきて、HDDにインストールしてみました。

    まず、UIがUnityに変わっているので面食らいます。これに関しては11.04(natty)が対象ですが、こちらのサイトで(インストールの方法と)インストール直後の扱いについて確認できます。Unityで一番面食らうのが、アプリケーションの起動方法と起動した後、ツールバー(メニュー)がないことでした。アプリケーションの起動は「Dashホーム」でアプリケーションの名称を入力する(!)ことで、候補が表示されます。いったん起動した後は、「ランチャーに常に表示」を設定することで、左側のランチャーから起動できるようです。ツールバーについては、各ウインドウの上についているのではなく、アクティブになっているウインドウのツールバーが画面全体の一番上の部分に表示されています。これで最近のワイド画面液晶でも少しでも広く縦のエリアを確保しよう、ということなのでしょう。

    で、こちらの検索結果からたどっていくと、universeパッケージになっているようなので、/etc/apt/source.listの中で、universeが指定されている行を見たのですが、特にコメントアウトされているところはありませんでした。すなわち、apt-get でパッケージを指定すればインストールされそうなものなのですが、実際にはインストールできません。

    しかし、各ページにはdebianのパッケージ(.debファイル)がありましたので、依存関係を考えて、

    1. msp430mcu
    2. binutils-msp430
    3. mspdebug
    4. gcc-msp430
    5. msp430-libc
    6. gdb-msp430

    の順で、インストールしたところ、すべてインストール自体はできました。

    まず、mspdebugはroot権限では動作しました。/etc/udev/rules.d の下にスクリプトを置いて、ユーザー権限でアクセスしようとしても、パーミッションで怒られますので、何か追加の設定が必要なのでしょう。

    それ以外はサンプルプログラムのコンパイル、動作確認も昨日と同様にうまくいきました。mspdebugがroot権限を要求するところだけが違いですね。


  • MSP430 LaunchPadの開発環境構築

    投稿日 2011年 10月 1日 コメントはありません

    たまたまWebサーフィンしていたら、MSP430のLinux開発環境について記載されているページがあったので、追試を兼ねて環境構築してみることにしました。

    内容物はこれ。エミュレータ機能付きのターゲットボード(MSP430G2231付き)と、予備?のMSP430G2231、32.768kHzのクリスタル、いかにもブレッドボードにつないでください、という感じのヘッダソケット、シールです。

    で、今回の情報元はここです。詳しくは直接情報元を参照してもらうとして、Ubuntu10.04LTSで追試した際の手順だけ記載します。赤字で書いた部分がオリジナルとの差分です。おそらく、オリジナルの環境では texinfo がインストールされていたのでしょう。

    1) subversionのインストール
    ・・・・すでに入ってました。

    2) texinfoのインストール

    で texinfo をインストールします。そうしないと途中で「makeinfoがない」と怒られて終了します。

    3) 作業用ディレクトリを作る

    4) ソースの入手

    5) コンパイル

    を実行すると、構築するツールのバージョンやディレクトリをいくつか聞いてきます。Insightはwgetでダウンロードするところで 404 Not Found で引っかかるので、InsightとGDBは構築しないことにして、それ以外は今回はすべてデフォルトにしました。
    最後に、「今構築するか?」と聞いてくるので、そこだけ「今構築する」に変更しました。そうすると、勝手に binutils や gcc のソースなどをダウンロードして構築してくれます。

    6) パスの修正

    パスに「/opt/msp430-gcc-4.4.3/bin」を追加します。具体的には、.bashrc の最後の行に、

    を追加します。

    7) mspdebugを書き込みツールとしてインストール

    ソースコードを mspdebug の sourceforge のページからダウンロードしてきて、コンパイルする。(ubuntuはパッケージがあるようなことが書いてあるが、実際にはない *後述)

    8) LanuchPadのパーミッション変更

    ルート権限で以下の内容のファイルを /etc/udev/rules.d/z99_msp430launchpad.rules として作成します。

    その後、

    として設定を有効にします。

    9) LaunchPadの動作確認

    LaunchPadを接続して動作確認します。開封直後の状態で接続すると、2つのLEDが交互に点滅します。

    この状態で「mspdebug –usb-list」でデバイス一覧が表示されるのを確認しました。(マニュアルはこっちを参照)

    となるので、eZ430-RF2500として認識していることがわかります。

    そこで、「$ mspdebug rf2500」とするとLEDの点滅が止まり、以下の表示がされてコマンド入力待ちになります。

    この状態で「run」コマンドを実行すると再びLEDの点滅が始まり、CTRL+C でブレークをかけることができました。

    また、「hexout 0xf800 0x800 original.hex」で元々書き込まれていたプログラムを読み出して HEX ファイルに格納できました。続けて「erase」でflashの消去、「prog original.hex」で再プログラミング、「run」で点滅を再現させることができました。

    10) コンパイルと実行の確認

    参考にさせていただいたこちらのページのまんまで完全に動作しました。

     

    ということで、最低限の環境構築ができました。できれば gdb と Insight も動かしたいところですが、とりあえずはここまでということで。

    あと、launchpad.net(こっちは Canonicalが管理している方です)のこちらのページこちらのページを見ると、どうもubuntuの11.04(natty)や11.10(oneiric)ではMSP430開発環境がパッケージでサポートされているっぽい感じです。時間があれば確認してみたいと思います。


  • PSoC環境構築

    投稿日 2011年 4月 9日 コメントはありません

    ふとしたことから、しばらく前に見た鼓動にあわせて光るペンダントの記事を思い出しました。

    ・・・で、ペンダント形にするかどうかはともかくとして、鼓動に合わせて光るものを作ってみたい、ということで、なんとなくPSoCの開発環境を引っ張り出してみました。

    で、最新のPSoC Programmer(書込みツール)とPSoC Desginer(開発環境)をインストールしました。で、PSoC Programmerを起動後、手持ちのPSoC MiniPROGを認識するかと思ってUSBで接続したら・・・認識しません。(;_;)

    Googleさんに聞いてみたら、ドライバを手動でインストールしなければならないようでです。

    デバイスマネージャで「!」マークがついているプログラマを選択して、「C:\Program Files\Cyress\Programmer\3.12.4\drivers\mprog1」フォルダにあるINFファイルをインストールしたら、認識するようになりました。

    ・・・あっちこっち試してみてるからなかなか完成しないんだよなぁ・・・。


  • PIC10F222でジョイスティックの値を読む

    投稿日 2011年 3月 30日 コメントはありません

    PIC10F222でA/D変換した値を9600bpsで送信できるようになったので、抵抗式のアナログジョイスティックを接続してみました。

    接続したところはこんな感じです。

    左上に小さな変換基板が2つありますが、その下の方に10F222が載っています。上の方の変換基板には10F200が載っていますがどこにもつながっていません。そして、右半分にAkidukino(秋月Arduino)がありますが、電源供給とUSB-UART変換の部分しか使っていません。右下のTXDのジャンパのところに左上のPIC10F222の4pin(GP2)からのUART出力がつながっていて、右上のAE-UM232Rを通してPCに接続されています。

    PIC10F222部分の拡大です。

    アナログジョイスティック部分の拡大です。

    これでアナログジョイスティックをぐりぐり動かすと、それに応じてUARTに送信される値が変化します。中央部分は摩擦によるヒステリシスのようなものがあるようで、実際に使う場合にはそれをどうキャンセルして違和感がないように見せるかが問われそうです。

    今回はブレッドボードにバラで搭載しましたが、PIC10F222は安価ですのでヒステリシスをごまかしたりした上で電源、GND、シリアル出力の3線で使えるアナログジョイスティックモジュール、なんてものも作れそうです。

    ちなみにArduinoがあるなら、直接そのアナログ入力で受ければいいじゃないか、という声が聞こえてきそうですが、まさにその通りです。ただ、これはPIC10F222の実験なので、これはこれでいいということで・・・。