windowsでSTM32F4シリーズの開発環境を整える

先日後輩がうちのサークルには珍しくARMマイコンでマイクロマウス作りたいって言っていたし、
僕も先日パソコンを研究所に返却してしまい、開発環境を失ったので、窓マシンで開発環境
整えないとなぁと思っていたところだったので、書き込みまでできたらブログかなんかに
窓でのARMマイコン環境の整え方とかメモ的に書いとくか。。。。

とか思いながら、コンパイルまで行ったので、書いときます。
(引っ越しですぐ書き込めるボードがどっか行ってしまったので、見つけたら書き込んでみます)

もしかしたら、ちょいちょい修正入れていくかも。


あと、あくまでも私の開発環境ということで、もっと簡単に環境を整えられるかもしれません。
そこはご愛嬌ということで。。。


それでは。


基本的に、エディタ、コンパイラ、ライターの三つを用意します。


本当は統合開発環境入れて一発OKみたいな流れがいいんですが、
フリーで良い開発環境が無いため別々にインストールします。
コード制限とか、煩わしいユーザー登録とかたくさんです。
前Ride7のフリーのものがいきなり有料になったりしたしね(突然使えなくなって大変困りました)。


エディタは今までlinuxvimでやってたため、windowsでもvim系の
gvimを使おうと思いますが、なんでも良いと思います。
(サクラエディタ、notepad++、秀丸エディタeclipse、etc…)


gvimのインストール
http://www.kaoriya.net/software/vim/


gvimの使い方はここでは説明しません。
使いやすいようにvimrcを書き換えておくといいと思います。


次にコンパイラのインストール
https://launchpad.net/gcc-arm-embedded


windows向けのコンパイラを選択。
インストールの最後に環境変数にパスを入れるチェックを入れて完了する。
(Add path to environment variable)


最後にライターをインストール。
これはマイクロマウス業界で有名な方がPythonで作ったライターを使います。
http://www.ktechinfowell.net/micromouse/index.html


ライターと言いつつも、ただのpythonスクリプトです。
(これがあるから割とどんな環境でもSTMマイコンの開発ができるという超優れもの
今のところ、Ubuntu,Vine,windowsで動作確認済みです)


STM32 Writerがありますが、STM32_Programの中にも書き込みスクリプトが入っているので、
ライターのインストールついでにサンプルプログラムもありがたく貰っときましょう。
このサンプルプログラムがあれば、ロボット作るのが非常に楽になります。


STM32_Writerにライタースクリプトの使い方は書いてありますが、念のため、
pythonとpyserialがインストールされていない場合はインストールします。
2.7系でそろえておくのがいいと思います。


STMicroの提供するライブラリを使うため、ライブラリインストールしますが、
STM32_programに書いてあるリンクはもうすでにありません。
(STMicroのwebページは書き換わりが非常に多く、情報を集めるのに一苦労します。
良いマイコン作ってるのにこの部分は本当に残念です。分かりずらい。)


ライブラリは
STM32 ARM Coretex 32bit マイクロコントローラ > リソース、ソフトウェアタブのSTM32 Standard Peripheral Libraries の中にあります(2015/07/03現在)


STM32F4の場合はSTSW-STM32062のリンク先にある。(version1.5.1)
100Mを超えているので、ちょっと重い。


解凍したライブラリをSTM43_programでゲットしたサンプルディレクトリに入れます。
入れ方はfiles_required.txtに従ってください。


プログラムは整ったので、次にコンパイルの手順を踏むが、windowsにmakeコマンドが
デフォルトで入っていないので、インストールする。
http://gnuwin32.sourceforge.net/packages/make.htm
バイナリバージョンをダウンロードして展開。


これだけだとmakeしてもライブラリ足りんぞ。と怒られるので、追加のライブラリをダ
ウンロード。
先ほどのリンク先の下のほうにdependencies zip fileがあるので、ダウンロードして展開。


スペース、2バイト文字が入っていると上手くいかないみたいなので、
私は
C:\make
に展開した。


それではどこでもmakeコマンドが通るように、C:\make\binに環境変数にパスを通す。(windowsにパ
スを通すやり方はここでは書きません。)


これでほぼ整ったが、STMicroからのライブラリのバージョン違いでこのままだとコン
パイルが通らない。そこで3点修正を加えます。


1.使用するデバイスの指定
ProgramDir\Libraries\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h


の最初のほうに


#define STM32F40_41xxx


と書く


2.コンパイルエラーになるCファイルの削除
ProgramDir\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fmc.c


注:)RAMとかNANDメモリとかのライブラリらしく、消していいファイルかどうかはわからないので自己責任で。


3.makefile書き換え
スタートアップファイルと書かれている部分を修正


STARTUPFILE := startup_stm32f4xx.s -> STARTUPFILE := startup_stm32f40_41xxx.s


これすべて書き終えたら、プログラムのあるディレクト
(mainディレクトリの一個上)でコマンドプロンプトを開いて、
makeと入力すればコンパイルが通る。

コンパイル通るとこんな感じに


gvimの開発はこんな感じでしょうか。

左のファイラっぽい何かは、
: 30 vs ./
とか打てば出ます。今はなんもプラグイン入れてません(入れられなかった)。


通らなければ適宜エラーメッセージを見て対処。


プログラムの書き込みは書き込みピンをハイにした状態で起動し、
シリアルケーブルでPCと繋ぎ、write_main_xxx.pyを実行

シリアルターミナルはwindowsだったらteratermがいいんじゃないかな。

以上。


デバッガとかほしい人は以下の詳しいサイトを参考にしてください。
http://nemuisan.blog.bai.ne.jp/?eid=188089

マイクロマウス理科大プチ大会に参加してきました

毎回久しぶりのブログ更新になっています、アーサーです。

先週は久しぶりにマイクロマウスの活動として理科大プチ大会に参加してきました。


去年の全国大会ぶりにマウスを引っ張り出してきましたが、何もせず出るのはちょっと癪だったので、
機体の改良と修理を行いました。


まずはギアの交換から。
いままでは自作した樹脂のギアをモータ軸に圧入してましたが、加速時にスぺっているみたいだったので、
真鍮製の金属ギアを買って、メタルロックでがっちり固定しました。(金属結合と同じ強度を誇るらしい)


まぁ、すんなり上手くいくわけもなく、モータ壊したりしました。


コアレスモータの中ってこうなってるんですね。


次に、クラッシュすると結構頻繁にもげる書き込み用のタクトスイッチの修理を行いました。


ということで、大会前日の調整でここまで走れるようにしておきました。
改良した甲斐もあって、結構いい感じに走れるようになりました。


大会当日はサークルの大きくなりように驚嘆しました。
また、後輩がめきめき育っていて安心感があり、そのうち負けるなと思いました。(もう負けてるけど。)


一番驚いたのは、新入生のライントレーサにラインセンサが6個とかついてて、
ロボット作り始めてまだ2か月くらいしかたってないはずなのに、もうすでに独自性を出してきていたり、
なんか、時代が変わったのかなと感じざるを得ませんでした。


大会の結果的には後輩の大会なのに老害勢が上位を占めてしまって、なんだこの酷い感じは。。。
という思いもありましたが、楽しく参加できました。


ちなみに僕はサーキット、クラシックともにギリギリ3位でした。


この大会がおそらく僕のクラシック競技最後の出走でしたが、
時間が空き次第ハーフに手をだして、海外赴任中でもなるべく参加したいと考えています。

それでは。

遅くなりましたが、全国大会の報告


久しぶりのブログ更新です。


先日修論を提出しまして、
最終公聴会がまだですが、少し心に余裕が出てきました。


と言うことで、だいぶ遅くなりましたが去年の全国大会の報告をしたいと思います。


参加したのはマイクロマウスクラシックエキスパート部門です。
学生大会で5位で、上位陣がみなシード権を持っていたため、
なし崩し的にシード権が降ってきました。


と言うことで、全国大会は決勝から出ました。
こちらがその時の様子です。


ustreamから持って来て自分のところだけ切り出しました。
だいぶ画質は悪いです。



第2走しか最短で走れず、結果は17位
悔しい。。。


終わってみれば、
もっと行けたんじゃないかとか思ったりしましたが、
大会始まる前には、
ゴールにすら辿りつけないんじゃないかとか
思ったりしていたので、結果が残って良かったと思います。


今年は新しいハードウェアを作らずにソフトを集中してやっていく
と言う思惑はうまく働いてくれたんじゃ無いでしょうか。
実際にはトルクが足りてないんじゃないか疑惑でモータ増やしたり、
基板が死んで、作り直したり、マイコン張り替えること5回とか
ハードウェアに割いた時間は結構ありますが、それはそれで楽しかったと思います。


今年こそは信頼性のあるハードウェアを作りたいと思います。


吸引勢に勝つためには自分も吸引するか吸着するか、
まったく別のベクトルに行くかしもう無さそうですね。


次作どうしましょ。。。

最近の気になる組み込みLinuxボード

ちょっとネット見てたら新しい組み込みLinuxボードが次々出ていて、
ポチる衝動が抑えられません。。。ということで一部紹介です。


まず最初はHerdKernelからここ最近出たODROID-Wです。

http://www.hardkernel.com/main/products/prdt_info.php?g_code=G140610189490

こいつのすごいところは、RaspberryPiをがっつり意識していて、
一部のピンがピンコンパチなだけでなく、Raspbianが普通に走るみたいです。
サイズもRaspberryPiの半分位の大きさです。
あとラズパイ用カメラが使えるだけでなく、RaspberryPiよりも引き出されているピンの種類が豊富です。

価格は$30です。

問題は、BroadcomがHerdkernelにプロセッサを供給しないと表明しているみたいで、
今あるロットが無くなったらもう追加で販売出来ないとのこと。。。
Herdkernelも何でか分からないみたいで、みんな抗議してくださいと書いてある。。。

詳しい情報はリンクを飛んでください。どちらにしろ魅力的なボードであることは間違いないです。


次にACME SYSTEMSから出ているArietta G25です。
ちょっと非力感はありますが、最低限の機能を備えていて超小型のボードです。
http://www.acmesystems.it/arietta

RAMによって値段は若干変わりますが、256MBのRAMで30ユーロです。


最後にまたACME SYSTEMSですが、Acqua A-5です。
http://www.acmesystems.it/acqua

先ほどよりちょっと大きめでって言っても5×5cm程度なので、それでも小さいと感じます。
ただ、外に引っ張り出せる機能が豊富なので、非常に魅力的に感じます。

値段的には256MBで$69でちょっと高めですね。

ということで、ポチッたらまた報告します。

DXFデータを変換し、KiCadに取り込ませる方法


先日マイクロマウス合宿で、KiCadに別のソフトで設計した基板外形とか取り込めるの?
という質問が出まして、やはり困っている方は多々いる様子でした。


そこで、今回DXF形式のCADデータをKiCadに取り込む方法を紹介します。
(超長い記事なので、気を付けてください。)

去年のマシンの基板外形を例に取って説明します。

こんな感じになります。


(注意:去年まではPCBEを使っていたので、KiCADに取り込んだデータを実際に発注したことはありません。あくまでも参考程度だと考えてください。
尚、今年ハーフサイズマイクロマウスを作製予定なので、この手順でうまくいけば後日報告します。)


手順がすごく多く、途中で挫折してしまうかもしれないので、最初にロードマップを示します。

まとめるとこんな手順です


1.DXF->Gコード
2.Gコード->ガーバー
3.ガーバー->ガーバー
4.ガーバー->KiCAD
5.KiCADでごにょごにょ


3番のガーバーからガーバーってなんだよって感じですが、KiCadは円弧の扱いが不得意みたいです。
読み込みはうまくいっても、基板外形として取り込むとこうなります。


3番はそこらへんを何とかする手順です。
と言うことで、KiCadで円弧は扱えますが、他のCADから持ってくるのは相性が良くありません。
具体的には円弧を直線に直す手順だと思ってください。
細かく言えば、データ量増えるし、若干精度落ちるわのトレードオフを行います。


円弧の入った複雑な基板外形を読み込ませようとしても、大抵うまくいきませんが、
うまくいく可能性もあるので、そういう場合は3番目の手順は飛ばせることもあります。


(ちゃんと円弧をそのまま読めるようにしている人がいたら教えてください!)


データの流れとソフトウェアの関係としては、

鍋CADからDXF->NCコンバータでGコードに変換->NCコンバーターでガーバーに変換->PCBEで円弧を直線に直してガーバー出力->
KiCadのガーバービューアで読み込んで、基板エディタ(PCBNew)のデータフォーマットに変換->完成

となります。


前置きが長くなりましたが、それでは始めます。



===============鍋CADからスタート!======================


それでは、DXFデータであればソフトウェアはなんでもいいと思いますが、私が鍋CAD愛用者なので、そこからスタートします。

前回作ったロボットのCADデータがこれです

そこから基板データを吐き出します



=================NCコンバータの手順========================


NCコンバータにて、先ほどのDXFファイルを読み込みます。
(NCコンバーター_2 http://www7b.biglobe.ne.jp/~ncexprt/convex/convex_frame.html)



それでは一旦Gコードに変換します。

そこから新しいウィンドウが出てくるので、ガーバーに変換します。


前のウィンドウに変換結果が出ます。
NCコンバーターでそのまま保存するとライセンスキーを入手して下さいと言われて保存できないので、
中身を全選択してコピーして、テキストエディタに張り付けて拡張子をgrbとして保存します。


私は適当にbase.grbと名前を付けました
円弧が無ければこのままKiCadに読み込ませられると思います。



================PCBEの手順====================================


それではPCBEを起動します

PCBEでは、パスをしっかり指定しないといけないので、先ほどbase,grbを保存したディレクトリに
一旦プロジェクトを保存して、作業ディレクトリをそこに指定します。
絶対パス相対パスを理解しているのであれば、プロジェクトの作業ディレクトリを指定する手順は飛ばしてもかまいません。
ディレクトリ名に日本語が入っていても問題はありませんでした。


私の今回の作業ディレクトリは
C:\Users\Arthur\Desktop\個人\ブログ\DXFtoKiCAD
です
ツッコミどころはいろいろありますが、まぁスルーで。。。

適当にbase.pcbとでも名前を付けておきます


ファイルからガーバー入力を選択します

一応、作業ディレクトリを確認します。


ここで先ほどガーバーに変換したファイルを入力します。
外形として取り込みたいので、外形にチェックを入れます。

実は、ここに絶対バスを入力しても読み込めます。

うまくいくと、読み込めます。ここが一番ハードル高いと思います。


このままPCBEを使うという選択肢もあります。
PCBEでデータ作るとこんな感じになります。


読み込めたら、円弧を直線補完するために、PCBEの旧データフォーマットで一旦保存します。
実は旧PCBEでは円弧が扱えなかったため、勝手に直線補完されます。


今回は適当にbase.pcbとして上書きしました。


円弧が直線補完されてるか確認します。

出来てますね。

それではガーバーで出力します。

適当にbasenew.grbと名前をつけました。



============================いよいよKiCadの手順===========================


それではいよいよKiCadに取り込んでいきます。

KiCadを立ち上げたら、ガーバービューワーを立ち上げます

立ち上がりましたら、ガーバーファイルを開きます


読み込めましたか?

それでは、基板エディタ(PCBnew)に読み込むため、データを出力します。


ボードファイルの名前はbaseとかにしました。
出力レイヤーを選択します。


基板外形を選択します。


さっきの出力レイヤーの表記が基板外形となっているのを確認します。


出来ていましたら、いよいよ最終段階の、基板エディタにデータを読み込ませます。


ボートの追加を選択します。


ここで、拡張子を変更しないとガーバービューワーで出力したデータが見えません


読み込ませたら、こうなります。

これでうまくいきました!


=======================出来た!=====================================


さて、いかがでしたでしょうか。
だいぶ量が多いので、面倒だったと思いますが、これで結構複雑な基板外形でも取り込めるようになるのではないでしょうか。

そのうち、円弧を円弧として取り込ませてもうまくいくような方法を見つけるか、作るかしますので、なんとかできたらまた報告したいと思います。

それでは。

自作モデルロケット

ここ最近、電子工作らしいことはあんまりできてませんが、モデルロケット作ったりしてました。

なんだかんだ、頻繁に活動してたわけではありませんが、ロケット歴2年目になりました。


今回はリッチミルクの筒を筐体にして飛ばしました。

あー、良いアングル。

それでは打ち上げ。


こちらはハイスピードカメラで撮影しました。

なんというか、モデルロケットってすごく簡単に飛ぶので楽しいですね。

どれくらい飛びそうかを見積もるのは非常に重要なので計算したほうが良いですが、
割と広いスペースを確保することと、打ち上げるとき近くによらないとか、風向き考えるとか、
ちょっと安全に配慮すれば簡単に打てますので、皆さんおすすめです。

MikuMikuPenguinをインストールしてみる

さて、新年明けました。私は就活で死にそうになっています。


しかし!素晴らしいアメリカ人の方(超絶日本語うまい)が、ミクさんをLinux環境で躍らせることに成功し、
さらにオープンソースとして公開していたので、これは私もやってみないといけない!
との衝動に駆られましたので、やってみました。


こちらで紹介しています。
D


http://www.nicovideo.jp/watch/sm22646066
https://github.com/sn0w75/MikuMikuPenguin


MikuMikuPenguinのペンギンは、Linuxのイメージキャラ(タックス)から持ってきたのかな?
ちょっと気になるのはライセンスで、GPL V3です。
使っているライブラリの関係でそうせざる負えない理由があったのかもしれませんが、
LGPLだったらよかったなぁ。

と言っても、別にこれで商売しようと考えているわけでもないし、まぁ良いか。


インストールと実行の手順をメモ程度に書き記しておきます。
まだまだバグだらけですが、こらからどんどん良くなっていくでしょう。
今後に期待です。
この人のtwitterみてると、MIDIが再生できた!なんてこと言ってたから、そのうち取り入れられるでしょう。
追記:別プロジェクトだそうです


というわけで、私はVMware PlayerにUbuntu13.10、32bit版を入れて実行しました。
ネイティブでやりたかったんだけど、Windows8デュアルブートってまだ怖いんだよね。。。というわけで仕方なく。。。
(もしエラーが出たら、ちゃんとgithubに書いてある注意書きをよく読んでみましょう)


それでは必要なパッケージをインストールします。
$ sudo apt-get install g++ git-core autoconf libglfw-dev libsoil-dev libglm-dev libbullet-dev libglew-dev libtool


で、ここで注意してほしいのが、VMwarePlayerはOpenGL2.1以上が使えないそうなので、
違うリポジトリをインストールしないといけない。
(実はエラーが出て、解決できず製作者にメールを投げて聞きました。。。
そしたら快く、ここらへんの解決の方法などを教えてくれました。)


もしネイティブでやるなら、


$ git clone https://github.com/sn0w75/MikuMikuPenguin


もしVmwareや、Macでやるなら以下のリポジトリ
追記:私の勘違いで、Macは元のリポジトリでOKだそうです。


$ git clone https://github.com/sn0w75/MikuMikuPenguin/tree/legacy-210


あとは、

$ cd MikuMikuPenguin-legacy-210
$ autoreconf -i
$ ./configure
$ make


以上です。
で、実際に使うときは、以下のコマンドで行きます。


$ ./pmx model_file.pmx motion_file.vmd


ここで、model_file.pmx motion_file.vmdはそれぞれモデル、モーションのファイルを指定します。


しか〜し!
実はバグとかいっぱいあって、いろいろエラーが出ました。
おそらく、私の使っているモデルとの相性が悪いっていうのもあるんでしょうが、
こんな感じになりました。

IAさんです。
下半身が消えてますね。いろいろあるんでしょう。


実はTda式改変ミクJKStyleをやってみたんですが、Segmentation Fault出て、
GDBを使ってデバグしたら、libSOILらへんでエラー出てることは突き止めたんですが、なんだかよくわかりませんでした。


少しづつエラーとか減らしたり、コード見て勉強したりしようと思っています。


ということで、このプロジェクトを少しだけ見守っていこうと思います。