クアッドコプター3

骨組みが出来たら、現実味が増した感じですけどー、まだまだ先は長いですねー
まず、基板に、ジャイロ。加速度センサーを中心に配置しました、残りのスペースにCPUなどを載せます。
今回は手持ちの関係で、SH7125を使う事にしましたー、現在では、100MHzのRXマイコンが手頃な価格で入手できるので、わざわざ、過去のCPUを使う理由も無いと思いますがー、タンスの肥やしにするのもアレなので、あえてこれを使います、機能的には十分なものと思います。
SH7125とRXマイコンの比較(参考)
・価格
SH7125F(R5F71253) ---> 900円(秋月の価格)
RXマイコン(R5F56218BDFP) ---> 950円(秋月の価格)
・内蔵メモリー
SH7125F ---> フラッシュ128キロバイト、RAM8キロバイト
RXマイコン ---> フラッシュ512キロバイト、RAM96キロバイト
・速度など
SH7125F ---> 50MHz、5V動作、各種タイマー、A/Dなど
RXマイコン ---> 100MHz、単精度浮動小数点演算器、2.7V~3.6V動作、A/D、USBインターフェース、リアルタムクロックなど

どうです、比べるまでも無い感じですね・・
※基板作る時にはRXでやってみようとおもいますねー

まあでも、SH7125のりソースは少しだけあるので、未知のCPUで、荒波に飛び込むより、無難ではあります、でもやっぱりメモリー(RAM)が少ないのは痛いです・・
プログラム変更の度にフラッシュに書き込むのは面倒だし効率が悪いので、簡単なモニターを用意して、実験段階ではRAMで開発をするのが一般的な方法です、自分も、Sフォーマットをロードしたり、メモリーのダンプを行うモニターを作成しましたが、RAMが狭く、色々考えながら進めないと駄目な感じです。

昨日も、インプットキャプチャー機能を試していると、1チャンネルだけなら動作するのに、複数のチャネルを同時に動かすとハングアップしたり、妙な動作をしていましたがー、よくよく調べてみると、スタックの領域と、ワークエリアが接近し過ぎていて、ワークエリアを壊していたようです・・・
※これ気がつくまでに凄く時間がかかりました・・・・・

・プロペラの話・・・
クアッドコプターでは、2組の正転、逆転の組みを作り、回転による反力を相殺します、最初、「あぁ、逆に回すんだから、プロペラを逆に組めばいいんだよねー」と簡単に考えてましたがー、実際に逆転にしたら、風向も逆になるだけで意味ありません、よーーく考えると、「ピッチが逆じゃないと駄目なんでは・・」と思いましたー、ネットを調べると、CW/CCWペアとかでプロペラ売ってました、「あーーあ、なるほどねー」って感じで、急遽、シンガポールで売っていた8インチ、ピッチ4.5のプロペラを購入しましたー(汗)

このクラスだと、飛ぶ事は出来るでしょうが、やはり推力は出ない感じなので、実験機が上手くいったら、RXマイコンで作り直します、その時は10インチのプロペラでやってみたいですねー

続く~

クアッドコプター2

センサーを入手したところで、送信機、受信機をどうするか・・

以前は、2.4GHzの無線モジュールを使って自作しようと思いましたがー、「早く飛ばしてみたい!」とゆー事で、既存の物を買う事としましたー、例によって色々探すと、アメリカで売っている(中国製)やつが安くて高性能な感じですー、しかし、今ひとつ食指が沸かない感じです・・、そんな時、いつもお世話になっている Daytona7 でプロポを観たら、JR(日本遠隔無線)製のプロポセットがそれなりの価格で売られていたので、それを購入してみましたー
高いですがー、安物買いの何とかとゆーのもありますし、丁度良い落とし所と思います。

送信機は7チャネル、受信機は6チャネル?、基本、4チャネルあれば、ヘリコプターの機動には十分そうですがー、何か別のものを制御する事もできるしで、7チャンネルくらい必要だろうと思った次第ですー、又、この機種はテレメトリー機能があり、機体の情報をプロポに返す事が出来ます。
標準では、受信機の電圧しか返せませんが、オプションのセンサーを繋げば、色々な情報を返す事が出来るようです。

-----

さて、肝心の機体ですがー、実験機という事もあり、お手軽に作る事を考えていましたー、そこで、ホームセンターで入手できるアルミの中空材に注目しました、10mm角で、1mmアルミの押し出し材でしょうか?、アルマイト処理もしてあり、軽いです、機体は軽ければ軽いほど良いのですが、ある程度の強度も必要です、このアルミなら強度は十分で、穴を開けて軽量化も可能と思い、これで基本の骨格を制作します、中心をフライスで削り、十字に合わせます。

そして、端にモーターをマウントします。


↑モーター試運転の様子。

プロポのスロットルを中間より少し上目くらいにすると、ほんのり浮き上がります~、モーター4個なら、十分な推力が得られると思えます。

-----
じつは、フライス盤の加工範囲の関係で、最初は30cmくらいで造りました、しかし、モーターを載せてみると、プロペラが当たる事が判明・・・、34cmで作り直しました・・・ルート2倍の計算がちゃんと出来てなかった。

クアッドコプター

以前、Youtube で観てから、自分で作ってみようと考えて、色々部品を集め始めたのが1年以上前になりますー、最近ようやく、必要な部品が揃い初めて、土日に少しづつ制作しています。

最近ではフライバイワイヤーの専用コントローラーも売っているようで気軽に誰でも作れるようですが、やはり、自分で作る事の意味は大きいです。

-----

まず、最初に考える事は、全体でどのくらいの規模にするかという事、基準に考えたのはモーターでした、色々なサイトを巡り、ラジコン飛行機用のブラシレスモーターで手頃な大きさ、値段を見極めながら選んだのがこれです。

Daytona7 ラジコン専門店
※自分は、↑ここでモーター、プロペラ、アンプ、電池、充電器など揃えました~

とりあえず、このモーターで色々実験してみて、推力が足りないとか、全体のバランスとかは後で考える事にしましたー

ブラシレスモーター: EMAX CF2805
モーターアンプ: TURNIGY P10A
バッテリー: ZIPPY 2200mA (20C)

これら動力系部品を揃えたとこで、加速度センサー、ジャイロセンサー購入で、中々進まず、仕事も忙しくなり、かなりの時間スルーしていましたが・・

今年の初め、センサーを購入してから、また少しづつ進み始めました~
InvenSense 社のジャイロ、加速度センサーMPU-6150です。
※値段は1000円くらいなんですが、送料が高いので、10個購入してしまいました・・(欲しい人がいたら実費でお分けします)
QFN パッケージで、半田付けが難しいと思ったのですがー、Youtubeの半田付け動画を参考に、コテライザーに、ホットブローのコテ先を付けて、万能基板に付けてみましたー、まだ火を入れていないので、正しく動作するかは不明です・・

続く・・・

最後の「もて耐」終了

先日の日曜は、茂木で、最後となる「もて耐」のマスターズクラスに出ていましたー

今年は、ForceV4オーナーズクラブからRC45で参加させてもらいました。
自分もRC45を所有していますから、とても好きなバイクですが、発売されてから既に17年、部品もほとんど無く、750ですが、最近の600スーパースポーツよりパワーも少なく、戦闘力では劣るものの、乗っていて楽しいバイクです、そして最高のV4サウンド。

RC45と言ってもピンキリですが、貴重なものなので、このレーサーを作るとなると、コスト的にはリッターマシンより高くなります、今回のマシンは、「梅」と言われる、エンジンノーマルな仕様です、それでも、ガレージウルフマンの伊藤さんが貴重な部品を合わせて作ったマシンは、バランスが良く、扱いやすくて、走っていると、気持ちよく、疲れないし、楽しくて攻めたくなりますww
そして、純粋培養のレーサーでもあります。
エンジンはノーマルでも、ラムエアー付きで、HRCのインジェクション用コンピューターとレース用点火系で14000回転まで回ります。
12000を超えてからの伸びが気持ちよく、綺麗にトルクフルに回るとこがインラインフォーと違うV4なんだと感じられます。

レース前に30分のスポーツ走行を2回乗りましたが、要所を押さえても16秒くらいしか出ないので、乗り方を根本的に変えないと駄目だなと思いました、リッターバイクだと、コーナー侵入でそれなりに入り、向きを変え、マシンを立てて、アクセルを開けると、10秒は簡単に出るのですがー、RC45のレーサーには同じやり方は通用しません・・、やはりコーナーリングスピードで稼がないと・・・
※以前に乗ったRC30レーサーでは、同じような乗り方で14秒くらいが出ていたので、絶対的なパワーではRC30の方が上な感じですが、他のライダーの印象では、「パワーがある」と言っていたので、自分の感覚が間違っていたのかもしれません・・・(歳はとりたく無いもんだな・・・)
それと高価で貴重なマシンを転倒で壊す事も出来ないと思い、かなりマージンをとったのですが、コーナーリングスピードを稼がないとタイムなんて出る訳無いので、この辺りは「ヘタレ」と言われても、転ばない方を選びましたー(この辺りは「おとな」ですww)

今年は震災の影響でコース改修など、スケジュールが大幅に変更になり、11月20日と言う、寒い時期の開催でしたー
なので、暑さ対策は必要無く、逆に寒すぎるのではと思っていましたが、雨で冷たかった以外は、そこまで寒くもなく、それなりに良いコンディションでしたー

参加台数が42台と、グリッド割れしていたので、予選は無く、スタート位置は「クジ」で決まりますー、しかし、なんと、「どんべから二番目」の最後尾スタートと言う、「美味しい」とこからのスタートですwww、耐久レースでは、スタート位置とゴールの順位にはあまり相関が無く、トラブルが無いチームが良い順位をゲット出来るし、スタート時は、何かと混乱に巻き込まれやすいので、後ろに誰もいないのはむしろありがたい事だったのかもしれません。
※後は前を抜くだけだしねーwww

そして、スタート。
第一ライダーはヒロさんですー、自分は、足が痛くて走れないのでルマン式は無理と思って、やってもらいましたー
何事も無く無事に走りぬき、多分30位くらいで自分と交代。

昨日からの雨は止んでいたものの、路面はWETで、二番目、第一スティントを乗りました、路面は半乾き状態ですがー、まだ濡れている場所が沢山あるので、そのままレインで出ました、二週目の裏ストレートから90度への侵入で、ブレーキのかけ方をミスって、止まれなくなり、グラベルに少し出てしまいましたが、何とかグラベルを転ばずに走り、コースに復帰、非常に危ない状況でした(汗)
それでビビリが入り、中々タイムを上げられずにいたら、今度は雨が降ってきましたー、さらに、メットのシールドが曇り、前が見えませんー、シールドを少し開けたり、色々しながら走っていると、当然タイムもボロボロで、空気口が閉まっている事に気がつくまで数週を無駄にしましたー、やっと曇りが取れて冷たい雨の中、タイムを削っていくと、何だか、エンジンのフケが悪くなりました(水温が低かったのかもしれません)、もしやガスが無いの?とヒヤヒヤしていたので、少し早いけど、大事をとって、次のライダーに交代する事にしました、この時多分25位くらい。

Session 4 started at 09:53:05

1 0:02:37 2:37.603
2 0:05:25 2:47.628
3 0:07:58 2:33.039
4 0:10:30 2:32.208
5 0:13:08 2:37.991
6 0:15:42 2:34.319
7 0:18:15 2:32.991
8 0:20:50 2:34.304
9 0:23:29 2:39.659
10 0:26:12 2:42.626
11 0:28:47 2:35.037
12 0:31:17 2:29.870
13 0:33:46 2:29.511 Best time
14 0:36:19 2:32.802
15 0:38:54 2:34.432
16 0:41:25 2:31.769
17 0:44:01 2:35.669

第三ライダーはマシンオーナーの fukurou さん、これもまた無事に走りきり、第四ライダーのおむすびさんにチェンジ、自分が予定より短く切り上げてしまったので、少し長く走ってもらいましたー、そして再び、ヒロさん、この時、既に雨は止み、レコードラインが乾き始めましたーが、まだドライで走るのは無理と考え、そのままレインで走ってもらいました。

二回目のスティントでは、雨も止み、レコードラインはほぼ乾いていたので、ドライタイヤに付け替えて、出ましたー、この時16位くらい、ピット作業を担当した人が非常に良い仕事をしてくれて、タイヤ交換を無事済ませ、自分はリアサスのコンプを元に戻して(レインを入れた時にコンプを抜いていた)出ていきましたー、レコードラインを外さなければ、路面はほぼドライな感じで、気持ち良くラップでき、RC45楽しい~って感じでした、ほどなくして前に「R1」がいたのですが、コーナーで近づいても、ストレートで逃げられてしまうを5周くらい繰り返していましたー、無理にインを刺す事も出来たけど、路面は全部がドライでは無かったので用心しながら、V字でインを差して抜きましたー、抜いて数周クリアラップが取れてそこそこ気持ちよく全開で走り、ベストが出ました(公式には2分14秒075)、その後バックマーカーに捕まり、少し集中が落ちて、ダラケましたが、かなり楽しく周回を重ねて、今回は50分ピッタリ走りました、この時15位くらい、リッターバイクだとヘロヘロになりますが、リッターバイクよりパワーの無い45だと、加速Gが少ないのでほとんど疲れません~ww

Session 8 started at 14:08:50

1 0:02:22 2:22.935
2 0:04:43 2:20.715
3 0:07:01 2:17.668
4 0:09:19 2:17.823
5 0:11:38 2:19.085
6 0:13:58 2:20.012
7 0:16:15 2:17.571
8 0:18:33 2:17.799
9 0:20:52 2:18.562
10 0:23:08 2:16.355
11 0:25:23 2:14.730
12 0:27:37 2:13.760 Best time
13 0:29:50 2:13.985
14 0:32:07 2:16.241
15 0:34:25 2:18.037
16 0:36:41 2:16.216
17 0:38:57 2:15.570
18 0:41:14 2:17.363
19 0:43:30 2:16.309
20 0:45:47 2:16.403
21 0:48:03 2:16.540
22 0:50:24 2:20.714

そして、最後のライダーに交代して、自分の任務は終わりです~
そして最後のライダー fukurou さんも走りぬき、チェッカー!
最終的には17位完走となりました!!

「RC45」って乗ってて楽しいバイクだなーとつくづく思いましたーやっぱV4ですねー

そして、今回、ピット作業や、監督、サインボード、食事、その他もろもろ、雨の中、最善を尽くしてくれたクラブメンバーや、色々雑用などをやってくれたヘルパーさんたちに感謝を捧げたいと思います。
「本当にありがとうございました~」

2011 もてぎマスターズ 7時間耐久ロードレース (リザルト)

-----
チーム名 :FORCEV4オーナーズクラブ
参戦マシン:'94年 HONDA RVF/RC45
ゼッケン:11番32番ピット

()内は所有V4マシン
チーム監督     PRYCE16(NC30)

第1ライダー    fukurou (RC30・RC45)
第2ライダー    hira (RC45)
第3ライダー    お下劣ヒロ (NC35)
第4ライダー    おむすび (NC30・RC30)

メカニック
しりうす(NC30)
bootang(RC30)
やま(RC46)
FIRE(NC30)
TOSHI(NC30)

ヘルパー
ATUSHI(NC30)
他クラブ内外から数名

Cygwin の OpenGL 開発環境構築

Cygwin で OpenGL の開発環境を構築する場合、unix 系と Windows 系、複数のやり方があるようなのだけど、情報が少ないように感じた、それで、自分で判った事をここにメモ程度に書いておこうと思う。

まず、Cygwin では、コンパイラが複数ある、通常のソースコードと、Windows の API(WIN32-API) をコンパイルできるもの(Mingwin 系)
そして、gcc3 系と、現在最新の gcc4 系

gcc3 系では、「-m」のオプションスイッチで、Windows 環境をコンパイルする事ができるが、gcc4 系では、この機能は無くなり、クロスコンパイラで、対応をするようになった。

基本的な事だが、windows 系の開発では、unix 系で普通に使えるライブラリーの多くは利用できない、windows で利用可能なようにポートされたライブラリーを別途入れる必要があり、ヘッダーのインクルードなども適切に記述する必要がある。
※たとえば、Windows で POSIX のスレッド(pthread)を使いたいなら、POSIX Threads for Win32 をインストールする必要がある。(cygwin では、gcc の windows 系クロスコンパイラに含まれている)

OpenGL のプログラム開発では、unix 系、Windows 系、どちらでも、開発を行う事が出来るけど、unix 系では、コンソールアプリケーション以外では、X-Window のアプリとして動作させなければならず、X サーバーを通して動作させる事になる。
Windows 系では、ネイティブなバイナリーを作成でき、実行コードを配布する場合も便利なので、自分は、Windows 系の開発環境でおこなっている。
※Linux や OS-X などでも少しの改修でリコンパイルでき、動作するように、している。
基本的には glut を使うので、動かすだけなら簡単と思う。

cygwin で利用できるコンパイラ
・gcc3 gcc version 3.xx コンパイラ、これだけインストールすると、単に gcc
・gcc4 gcc version 4.xx コンパイラ、gcc version 3.xx と両方インストールすると、gcc3 と gcc4
・i686-w64-mingw32 windows のソースコードをコンパイルできるクロスコンパイラ32/64 ビット
※32ビット、64ビットのバイナリー作成では、関連ライブラリーをスイッチするようだ。

メディアプレイヤーをコンパイルする場合に必要なライブラリー郡
(1)cygwin のインストーラーでインストール出来るもの
libz 圧縮、解凍ライブラリー(自分でソースコードをコンパイルして組み込む場合は不要)
pthread-win32 POSIX のスレッドライブラリー(PTHREAD-WIN32)
glut OpenGL glut ライブラリー

(2)自分でライブラリーの構築などを行うもの(基本的に全て、オープンソース)
boost         boost ライブラリー(最新のバージョンを利用したい為、別途アーカイブを展開している。)
AL OpenAL ライブラリー
DX DirectX を gcc で使う為のヘッダー、ライブラリー(DirectSound、DirectInput を利用)
freetype2 TrueType を描画(レンダリング)する為のライブラリー
libjpeg_x86 JPEG をデコード・エンコードする為のライブラリー(x86バイナリー専用の高速版)
libpng PNG をデコード・円コードする為のライブラリー
mupdf PDF をレンダリングする為のライブラリー
openjpeg JPEG2000 ライブラリー
jbig2         JBIG2 ライブラリー
id3tag        MP3-TAG ライブラリー
↑これらは、cygwin gcc でコンパイルして、ライブラリーを構築したので、別途アーカイブしてある。

今回は、OpenGL プログラムを走らせるだけなので、↑のライブラリー構築などは割愛する。

(1) 基本的なインストール
・まず、cygwin をインストールしなければならない、インストール方法は、非常に沢山他のサイトなどで詳しく説明されているので割愛する。
・重要なのは「必要なコンポーネント」と思う。(下のリストは、足りない物があったり、余分な物があるかもしれない)
・「Devel-gcc-mingw」関係を全部インストール
・「Devel-gcc4」関係をとりあえず全部インストール(※gcc4-core と gcc4-g++ があればOK)
・「Devel-gccmakedep」をインストール(Makefile で従属規則を自動生成するのに使う)
・「Devel-mingw64-i686」関係を全てインストール
・「Devel-make」(GNU Version)をインストール

(2)インストールを確認
・今回は、コンパイラとして「i686-w64-mingw32-gcc」を使うので、コンソールから、

i686-w64-mingw32-gcc --version

以下のようなメッセージが出れば、とりあえずコンパイラのインストールは成功。

i686-w64-mingw32-gcc (GCC) 4.5.3
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

(3)gcc3 系 mingw の OpenGL 関係をコピー(この手順が適正か判らないが・・・)
・i686-w64-mingw32 環境にも OpenGL 関係のヘッダーやライブラリーはあるのだが、イマイチ使いにくいので、gcc3 系の OpenGL ライブラリーを手動でコピーして使う、ライブラリーは互換性があるようなので、4系でも使えるようだが、gdb などでデバッグするような場合は問題が起こるかもしれない。
・元のファイルをリネームして一応保存しておき、mingw 関係のヘッダーなどをコピー
cd /usr/i686-w64-mingw32/sys-root/mingw/include/GL
mv gl.h gl_h
mv glu.h glu_h
cp /usr/include/w32api/GL/*.h .
cd /usr/i686-w64-mingw32/sys-root/mingw/lib
mv libopengl32.a libopengl32_a
mv libglu32.a libglu32_a
cp /usr/lib/w32api/libopengl32.a .
cp /usr/lib/w32api/libglu32.a .
cp /usr/lib/w32api/libglut32.a .

(4)OpenGL が動作するか確認
・まず、ソースコード「main.cpp」を入力

#include <cstdio>
#include <GL/glut.h>

static GLint faces[6][4] = {  /* Vertex indices for the 6 faces of a cube. */
{0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4},
{4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3} };
static GLfloat v[8][3];  /* Will be filled in with X,Y,Z vertexes. */

static GLfloat g_angleX =  60.0f;
static GLfloat g_angleZ = -20.0f;

static void reshape_task(int width, int height)
{
}

static void idle_task()
{
glutPostRedisplay();
}

static void display_task()
{
int w = ::glutGet(GLUT_WINDOW_WIDTH);
int h = ::glutGet(GLUT_WINDOW_HEIGHT);
glViewport(0, 0, w, h);

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Setup the view of the cube.
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0,    // field of view in degree
1.0,        // aspect ratio
1.0,        // Z near
10.0);    // Z far
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0,    // eye is at (0,0,5)
0.0, 0.0, 0.0,    // center is at (0,0,0)
0.0, 1.0, 0.);    // up is in positive Y direction

// Adjust cube position to be asthetic angle.
glTranslatef(0.0, 0.0, -1.0);
glRotatef(g_angleX, 1.0, 0.0, 0.0);
glRotatef(g_angleZ, 0.0, 0.0, 1.0);

g_angleX += 1.0f;
g_angleZ += 0.5f;

for(int i = 0; i < 6; ++i) {
struct rgb {
GLfloat r, g, b;
};
static const rgb col[6] = {
{ 1.0f, 1.0f, 1.0f },
{ 0.2f, 1.0f, 1.0f },
{ 1.0f, 0.2f, 1.0f },
{ 1.0f, 1.0f, 0.2f },
{ 0.2f, 0.2f, 1.0f },
{ 1.0f, 0.2f, 0.2f }
};
glColor3f(col[i].r, col[i].g, col[i].b);
glBegin(GL_QUADS);
glVertex3fv(&v[faces[i][0]][0]);
glVertex3fv(&v[faces[i][1]][0]);
glVertex3fv(&v[faces[i][2]][0]);
glVertex3fv(&v[faces[i][3]][0]);
glEnd();
}

glutSwapBuffers();
}

void init()
{
// Setup cube vertex data.
v[0][0] = v[1][0] = v[2][0] = v[3][0] = -1;
v[4][0] = v[5][0] = v[6][0] = v[7][0] =  1;
v[0][1] = v[1][1] = v[4][1] = v[5][1] = -1;
v[2][1] = v[3][1] = v[6][1] = v[7][1] =  1;
v[0][2] = v[3][2] = v[4][2] = v[7][2] =  1;
v[1][2] = v[2][2] = v[5][2] = v[6][2] = -1;

// Use depth buffering for hidden surface elimination.
glEnable(GL_DEPTH_TEST);
}

int main(int argc, char** argv);

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(512, 512);
glutCreateWindow("test cube");
glutDisplayFunc(display_task);
glutReshapeFunc(reshape_task);
glutIdleFunc(idle_task);

init();

glutMainLoop();
return 0;
}

・続いて「Makefile」を入力
#-----------------------------------------------#
# GNU-Makefile for "gcc" #
#-----------------------------------------------#
TARGET = OpenGL_Test
PSOURCES = main.cpp
CSOURCES =

OPTLIBS = opengl32 glu32 glut32

INC_SYS =
# /usr/i686-w64-mingw32/sys-root/mingw/include
# /usr/boost_1_43_0
INC_LIB =

PINC_APP =
CINC_APP =
LIBDIR =

INC_S = $(addprefix -I, $(INC_SYS))
INC_L = $(addprefix -I, $(INC_LIB))
INC_P = $(addprefix -I, $(CINC_APP))
INC_C = $(addprefix -I, $(PINC_APP))
CINCS = $(INC_S) $(INC_L) $(INC_C)
PINCS = $(INC_S) $(INC_L) $(INC_P)
LIBS = $(addprefix -L, $(LIBDIR))
LIBN = $(addprefix -l, $(STDLIBS))
LIBN += $(addprefix -l, $(OPTLIBS))

#
# Compiler, Linker Options, Resource_compiler
#
CP = i686-w64-mingw32-g++
CC = i686-w64-mingw32-gcc
LK = i686-w64-mingw32-g++
RC =

POPT = -O3
COPT = -O3
LOPT =

COF = -o
LOF = -o

PFLAGS = -DWIN32
CFLAGS = -DWIN32
LFLAGS =

# -Wuninitialized -Wunused -Werror -Wshadow
CWARN = -Wimplicit -Wreturn-type -Wswitch -Wformat

OBJECTS = $(PSOURCES:.cpp=.o) $(CSOURCES:.c=.o)

.SUFFIXES :
.SUFFIXES : .res .hpp .h .c .cpp .o

$(TARGET).exe: $(OBJECTS) Makefile
$(LK) $(LOF)$(TARGET).exe $(LFLAGS) $(LIBS) $(OBJECTS) $(LIBN)

.c.o:
$(CC) $(COPT) $(CFLAGS) $(CINCS) $(CWARN) -c $< $(COF)$@

.cpp.o:
$(CP) $(POPT) $(PFLAGS) $(PINCS) $(CWARN) -c $< $(COF)$@

.rc.c:
$(RC) $< $@

all:
make clean
make depend
make $(TARGET)

install:
cp ./$(TARGET).exe /usr/local/bin/.

run:
./$(TARGET).exe

clean:
rm -f $(OBJECTS)
rm -f $(TARGET)

dllname:
objdump -p $(TARGET).exe | grep "DLL Name"

tarball:
chmod -x *.[hc]pp Makefile
rm -f $(TARGET)_$(shell date +%Y%m%d%H)_src.tgz
tar cfvz $(TARGET)_$(shell date +%Y%m%d%H)_src.tgz \
*.[hc]pp Makefile
chmod 444 $(TARGET)_$(shell date +%Y%m%d%H)_src.tgz

zip:
$(LK) $(LOF)$(TARGET).exe $(LFLAGS) $(LIBS) -mwindows $(OBJECTS) $(LIBN)
rm -f $(TARGET)_$(shell date +%Y%m%d%H).zip
zip $(TARGET)_$(shell date +%Y%m%d%H).zip *.exe *.dll

depend:
makedepend -Y -- $(CFLAGS) $(INC_P) -- $(CSOURCES) $(PSOURCES)
# DO NOT DELETE

(5) コンパイルと実行
・まずコンパイル
make
・実行
make run
・画面に、512×512のWindowが作られ、四角い箱が回転すれば成功!

PCオーディオ(その2)

さて、部品が揃ったので早速組み立てです。

今度は、以前の失敗で懲りて、全部ソケットを使います、「直」に載せると、余分な工程が無くて、作業が速いのですが、前回のように壊すと、どうする事もできずに、作り直しですww
ソケットを使った事で、ソケットと変換基板下のスペースを有効活用できます。

とりあえず、丁度良い大きさのユニバーサル基板があったので、それにPCM2704を標準的な回路で組んで、PCに接続して、認識する事を確認しました。
※オーディオを再生させて、信号が正常な事をオシロスコープで確認しました。

次に、CS8416関係ですが、SSOPでも幅が狭くて、秋月の変換基板ではパッドの部分が不足していたのでダイセン電子の変換基板を使います、ただ、この基板の横幅は、600ミルでは無く、通常の28PINソケットが使えません。
一般的なソケットでは無く、ヘッダーピンにしたので、基板下のスペースをさらに有効に使えます、PLLのフィルターは、このスペースに配置しました。

・オーディオマニアが陥る霊感商法
USB に繋いだオーディオ機器は音が悪いとされます、それを改善する為、1本数万円の高価なケーブル(霊感商法と何ら変わらないと思います)まで売っています、確かに、電源ラインには、PCで発生したスイッチングノイズが乗っており、これらが音質に与える影響はあるかと思いますし、USB一口では、500mAの電流しか取れませんから、別に電源を取りたいと考えるのでしょうが、設計してみると、ヘッドホンアンプと、USBデバイス、D/Aなど諸々で、500mAあれば十分ですし、可聴範囲のノイズは聞こえない程度に取り除けば良い事です。
USB の信号は差動のデジタル信号で通信を行なっており、ケーブルの品質がある程度あれば、値段の差による音の違いは無いと思われます、ブラインドテストをすれば、ハッキリすると思いますが、数万円のケーブルと、ダイソーで買える100円のケーブルに何の違いもありません、デジタルデータは、価格の大小に関係無く、完璧に転送できますし、USBオーディオの仕様や仕組み、その他必要な知識も無い人が、ジッタの影響とか、欠損するデジタルデータとか、論理的裏付けの無い技術論は滑稽で仕方ありませんww
数万円のケーブルは抵抗が低くて、100円で売っているケーブルより優れていますが、何十メートルも伸ばす訳ではありませんし、デジタルデータは差動信号による半二重のパケット通信です、デジタルデータは欠損無く通信できますし、エラーコレクションもありますからデジタルデータの欠損は通常ありません、もしあるようなら、USBのクライアントとして認識できなくなります。
影響を与えるのは電源ラインだけですが、それも、500mA程度ですから、ある程度のゲージを使った銅線であれば問題無いレベルです。

しかしながら、それでも、人知の及ばない何かが作用して、月の満ち欠けだとか、微弱な電磁波とか、何か影響’を与えるかもしれませんが、「ダブルブラインドテスト」でもやって、それで80%以上の確からしさでも常にマークしない限り、そんな戯言を信用する訳にはいきません。

USB_AUDIO

・OP-AMPの電源は、+-12VのDC/DCを使っています。
・ヘッドホンアンプには、+-5VのDC/DCを使っています。
・DACには、低損失の5Vレギュレーター
※USBの電源は、通常5.2V程度ありますので、三端子レギュレーターで5V、及びロジック用などに3.3Vを生成しています、高周波のノイズを落とす為にフェライトビーズを入れています。
・とりあえずの実験用なので、とりあえず、ボリューム用二連の10Kを使っていますが、最終的にはデジタルボリュームに変えたいと思います。

さて、ネットにある色々な回路を観ると、多くの方が、非常に大きなコンデンサー(オーディオ用)を電源に入れていますが、果たしてそんな大きな容量が必要でしょうか?
※低ESRのコンデンサーは効果があると思います。

例えば、よく使う三端子レギュレーターは、入力側に0.1uF、出力側に10uF程度入れれば、十分なレギュレーションが得られるように設計されています、もちろん流れる電流のダイナミックレンジにより発生するリップルは変化しますが・・・
また、OP-AMPは電源の変動を出力に出さない為の工夫が色々施されていますから、多少のリップルが乗った場合でも、それが出力に現れる事は少ないのですから、大きなコンデンサを入れる意味はあまり無いと思います。

視聴しながら、テストする場合でも、大きな容量を入れた場合と、標準的な容量(データシート推奨の容量)を入れた場合で、ブラインドテストを行い、85%位以上の人が検知出来ないのなら、標準の容量で十分なハズです。
自分でテストするのでは、客観性に欠けますし、精神状態が変われば、結果も変わりかねません。
明らかに違う場合は別ですが、それは、何か根本的に間違っているとしか思えません。

測定器を使って、「大きな容量のコンデンサを入れるとリップルが少なくなる」と言う人もいますが、多分検知できる程のレベルでは無いと思います。

よって、コンデンサーの容量は、適切な値にする事が最も適切で、最大の効果を得る早道だと考えます。

今回の試作では、電解コンデンサーは低ESR品の100uFが二個で、残りは0.1uF~47uFの積層セラミックコンデンサーです。
ボーカロイドからクラシック、ロック、J-POPなど色々なジャンルの音を出してみましたが、現状でも十分な感じがしますが、これから、一応、測定を行い、それにより改修を行う必要はあります。
まぁ、測定を始める以前に音がまともでなかったら無駄ですからー

回路図に起こすのはこれからですーー

PCオーディオ(その1)

最近、自宅を離れ、渋谷に通って仕事をしていますがー、そこで支給されているPC、DELL製のそこそこ高速なヤツです。
※Corei7の2.8GHzとか

作業は共同作業なのですが、周りの雑音を聞きたく無い時は、イヤホンで音楽を聞きます、iPhoneから聞いても良いのですがー、気晴らしに観るYouTubeとかニコニコの動画はPCで観るので、差し直すのはメンドイしでPCで音楽も聞きたいのですがー、「音」が最悪ですー、DELLに限らず、メーカー製のPCでも、フロントパネルに出ているイヤホンジャック、かなり劣悪の品質と言わざるをえません、PCの電源ノイズがモロに乗っているし、長時間の視聴には耐え難いものがあります。

ならば、USBのオーディオインターフェースでヘッドホンアンプ付属の適当なやつをと思ったのですがー、安いやつは、チープな音しか出ないし、コンパクトで、高音質なやつは値段も高いと言う事で、色々考えているうちに、「自分で作ればいいんじゃね?」
と言う、いつものパターンに突入しましたww

丁度、秋月で、TI製のUSBオーディオインターフェース(PCM2704)を売りだしたので、1個買っていそいそと試作してみましたー

PCM2704は、ヘッドホンを鳴らす為のアンプも内蔵しており、このチップだけで、ヘッドホン出力が提供出来るものです、しかし、内蔵アンプは単一電源で動作する、簡易的な物で、音も期待するまでもなく、それなりの音しか出ませんし、出力も小さく、とても、自分が要求するようなレベルの物では無い事が直ぐに判りましたー
色々回路をいじっているうちに、誤配線をしてしまい、あっとゆーまに燃やして、お亡くなりになりましたー、半導体独特の燃えた匂いを嗅いだ時は、何ともいえない、気分です・・・・・・
※虚しいやら、ムカツクやら

PCM2704 試作
PCM2704 試作

※使える部品は再利用の為取り外している

最初は、1000円くらいで、そこそこ納得のいく音が出ればイイくらいに思ってましたがー、「自分のミスによる大きな損失」が次のやつを「ちゃんと」作るモチベーションに変わりましたー

そこで、ネットを探してみると、DAI(デジタルオーディオインターフェース)、D/Aコンバーターの製作例は多くて、みなさんハンパ無い投資をしている人もいますww
自分は、「まともな音」が聞ければ良いので、自分の考える範囲で、部品をセレクトして、発注してしまいました。

PCM2704(TEXAS INSTRUMENTS)
※USBからオーディオデータを取り出すのは、とりあえず、この石です、最大48KHz16ビットと最低限のものですがー、探しても、市販されているデバイスで、入手可能な物は、ほとんど無く、とりあえず、このデバイスで「良し」としました。
TENOR社にTE7022Lと言うデバイスがあり、96KHz/24Bits が可能なようですが、入手先を見つけられませんでした。
USBオーディオの標準デバイスとして、192KHz/24Bitsをサポートするのは、自分で組むしかなさそうです。(USB2.0をサポートした、デバイス
を備えた、マイクロプロセッサとFPGAが必要な感じです)

CS8416(CIRRUS LOGIC)
※PCM2704はアナログ出力の他に、S/PDIF信号も出力します、CS8416は、その信号をデコードして、D/Aコンバーターに必要なクロックと、データ信号を出力します、PLL回路や、オーバーサンプリングに必要なロジックも内蔵していて、最大192KHz、24ビットを扱え、外付け部品も少ない優れものです。
S/PDIF入力は、何系統かありますから、USB、光、COXIALなどを備えて切り替えが出来れば、D/Aコンバーター付きヘッドホンアンプとして使えます。

PCM1798(BURR-BROWN/TEXAS INSTRUMENTS)
※バーブラウン社は、デジタルオーディオ関係のデバイスの製造で有名な会社ですが、今はTIの傘下となっています。
このD/Aコンバーターは、192KHzのサンプリングで24ビット出力が可能な物です、ファミリーとして、さらに高性能なPCM1794と言う、最高ランクのD/Aがあり、マニアの間では、それを使うのが一般的のようですが、コストが倍以上しますし、PCM1794の性能を引き出すには、周辺回路にもかなりコストをかけないと、意味が無いので、今回は見送る事としました、データシートを読む限り、このデバイスでも、相当優れた性能を出せる事がわかります。

OPA2604(BURR-BROWN/TEXAS INSTRUMENTS)
このOP-AMPも、バーブラウン製です、高速、ローノイズ、低歪の高性能アンプです、スルーレートがなんと25V/usもあります。
秋月で300円ですが、それを調べる前にDigiKeyで370円で沢山買ってしまいました・・・(かなり痛いです・・)

TPA6120(TEXAS INSTRUMENTS)
ヘッドホンアンプは、まともな物を作ろうと思うと、意外と難しいです、色々と各社からICは出ていますが、どれもこれも、チープな物ばかりで、「本物」がありません、「ベスト」は、ディスクリートで組むべきでしょうが、スペースとコストを考えると、それも無理です、そんな時、見つけました、良さそうなのが・・
電流帰還型で超高速(1600V/us)、非常に大きなドライブ能力(低インピーダンス)、低ノイズ、オフセット電圧も小さく、+-両電源なので、カップリングコンデンサも必要ありません。
値段も600円程度と、まさに理想的。

これら部品と諸々で合計で5000円程度。

続く~

RX マイコンで ARM の牙城を切り崩せるか?

最近、秋月電子で最新のRXマイコンを取り扱うようになったー
※R5F56218BDFP(100pin)
※インターフェース5月号にも付録基板がついているが、数を作る事を考えた場合には、使えないので、デバイス単体で入手できるのはありがたい。
※Degi-Key でも扱いがあるようで、R5F56218BDFB(144pin)、1個1131円、25個だと951円と格安。

手始めに、非常に小規模なタイプR8C/11A,R8C/12A(AVRのATtiny2313クラス)、そして最近32ビットタイプである。
※R8C/11A,12A は、100円マイコンではあり、ATtiny2313より明らかに優れている部分も多い(A/Dコンバーターなど)ので、今後メインストリームで使いたいマイコンである。

自分は、6802からルネサスの前身である日立のマイコンを良く使ってきたー、6809、68000、H8、SH2、SH3など・・
※セガサターンでは、SH2が採用されていた事もあり、PSでは無くサターンに合わせてゲームも作った。
最後にまともなハードを作ったのは、80MHzのSH3基板を起こして組み込み機器に使ったのが最後であるけど、ルネサスに統合された後も、他メーカーのARMも色々使ったりして浮気はしたが、それでもやはり扱いやすさなどから好みのメーカーである。

しかし時代は替わる、もうほとんど全てがARM一色となり、全世界的にARMで統一されそうな気配なのである・・
マーケティングをサボり、消費者のニーズに答えてこなかったツケ、小回りの利く体制に出来なかった事が決めてとなり既にジリ貧感が否めない・・
※異論もあろうと思うが、自分にはそう見える。

RXマイコンは、比較的新しいアーキテクチャーである、三菱、日立、が関係を強調するルネサスにあって、各社のリソースを融合した結果生まれたこの新しいマイコンは、パフォーマンス、消費電力、コード効率など、特に組み込み系では非常に魅力的なものとなって登場してきた、価格も安く、性能も満足できる。
SHが好きな自分としては、多少複雑な気持ちなのだが、RXでは、非常に小さな規模から、かなり大きめな規模までを統一されたアーキテクトでカバーできる点が非常に正しいと感じる、リソースを集中できるし、サポートもやりやすい、いくらアーキテクトが優れていても、コストの関係でリソースを割けないと、疲弊してしまうだろう、その点、この「1本のラインで全てカバーできるかもしれない」と言う考え方は非常にシンプルで判り易く、使い手にとってもメリットが大きい。

以前の半導体では、(微細化が進んでいない時代)CISCよりシンプルな構造のRISCの方がメリットがあった、高速に動かす事が容易だったのだが、現在のように微細化が進み、複雑で大きな回路を作れるとRISC/CISCの違いはほとんどなく、CISCでも回路の工夫でいくらでも速度を出せるようになった、それゆえ、コード効率に優れるCISC系ならではのメリットを、小さなマイコンから大規模なマイコンまで反映できる、コンパイラもCISC系の方が効率を出しやすいと思う(まぁこの辺りは多少微妙ではあるけど・・)。

現状では、ARMが得意としている500MHz以上のメディアタブレット系のラインナップが無いが、そのうち出てくるだろう~、今から楽しみである。
※こちらは、デバイス単体よりIPコアが主流だろう・・

日本人だし、日本のメーカーに愛着もあるので、ルネサスさんには是非頑張って頂き、ARM の色を塗り替えるだけの力を魅せて欲しいと思う、アーキテクトが優れているのは疑いが無いのだから、自分も微力ながら応援したい~

------
とりあえず、最近秋月で販売が始まったRXマイコンを使ってみようと思い、SH7125で設計を進めていた部分をキャンセルして、RX6218に交換した、プログラムはSH用にかなり色々作ってきたのだが、ここは乗換どきと考え、リソースを捨てて開発し直す決意をした、また、仮に、少しくらいARMが安くても、現状のRXマイコンの戦略がぶれないのであれば、ARMに流れる必要もないだろう~

SH7125はデバイス単価900円、RX6218は1200円で300円高いが、能力の差があからさまに違う為、今後の事も考えて、切り替えた。
自分が感じた主な特徴は・・
・100MHz動作(165DMIPS)
・512KBバイトのFlashメモリー(100MHzノーウェイト、1000回書き換え)
・96キロバイトのRAM(100MHz動作)
・32ビット単精度浮動小数点演算
・高速割り込み
・当然ながらの豊富なインターフェース(インサーネット、USBなどなど)
・SDRAMインターフェース

こんだけあれば、当分、どんな仕様でも困らないだろうう~


↑この基板は、ブラシレスモーターの制御基板である。

開発環境はKPITからgccの環境を使える。
ルネサスの専用 C も、かなり良さそうなのだが、フリー版はコードサイズに制限があり、正規版を買うコストは払えないので、使えないのと一緒、初めから gcc で行う。
後、JTAGも欲しいとこだが、当面、コスト的に見合わないので、工夫して開発を進める事とする。
※開発したソフトウェアーなどは、オープンソースにする予定なので、興味ある人は利用してもらいたい。
※SH2AやSH7125、AVR関係で作ったリソースは公開済み。

後、痛い点として、まだ、低価格なデバイス付ボードが少ない点がある、デバイスが1200円なら、せめて3000円くらいのボードをリリースして欲しいと感じる、高専でロボットをやってる人もそのくらいの値段なら沢山使ってもらえると思う、ここで沢山使ってもらえれば、高専生が卒業して企業に移った時に威力を発揮できるしね。

電灯のLED化計画(その2)

先日は、LED の発熱に放熱器のキャパが足りないとこで、ペンディングだった、今日アルミなど買い足してきたので、いそいそと切ったり穴をあけたりして早速実験してみたー、今度は容量もかなり大きくなったので、温度上昇も抑えられ、問題無いようだ。
ただ、コストが、@+200円 くらいにはなる感じで、こんな事なら、最初から 250円 くらいで買える大きな放熱器を買えば良かった・・・(まぁ、250円で買える放熱器もそんなに大きいのは無いんだけど・・)

こういうのを「安物買いの銭失いと」と言う事もあるが、今回は50円の放熱器もちゃんと生かしているので、まぁいいか・・・


※2mm×40mmの板を180mm、10mmコノ字アングル90mm、4本

・2mm×40mm×2m → 1150円
・10mmコノ字アングル×2m → @420×2 840円
・工賃、ネジなど → プライスレス


※LED モジュールはネジと端子が当たって、ショートしそうなので、ジュラコンのスペーサーを間に入れておいた。

あと、9個同じもの作らなければ・・・
なんだか、すんごいめんどい・・・・・・・・・・・・・・・

電灯のLED化計画(その1)

以前から、電灯の LED 化をしようと思って、色々準備していたが、ある程度の明るさを実現する為には、かなりのコストがかかる・・、しかしようやくコストが下がり、実用的な値段で、電灯のフル LED 化が可能になりつつある。

現在入手できる白色 LED で、効率と光量が大きく、比較的コストが安い物は、「秋月電子」で売っている。
1Wクラスパワー LED(100ルーメン)
1個300円。
現在のとこ、1Wで100ルーメンが、目安のようだ・・

又、3個モジュールになっているLEDユニット(300ルーメン)
は、1個600円で、コストがさらに安い!

今回は、コストが一番安い3個モジュールになったタイプを10個使って、3000ルーメン(60W電球7個分)で製作する事にした。
※消費電力30W
※420ルーメンで60W電球並(東芝の LED 電球の説明)
※LED の光は拡散しない為、何かリフレクターを付ける必要があるので、光量が落ちる事を考慮して、大き目にしてある、又、LEDに流す電流を制御すればいくらでも、明るさを落とす事が出来るので調整は簡単だ!

パワー LED は明るいのだが、発熱も相当に大きい、最大光量(350mA)で点灯すると、かなり発熱するので放熱が必要なのだが、どのくらいの放熱器が必要か実験してみた。

↑やはり秋月で、丁度手頃な放熱器を安く売っていた(50円)ので、それに取り付け、温度を確認してみたが・・・
この体積では、30分くらいで、85度を超えてしまいそうなので、もっと表面積を大きくする必要があるようだ・・・

材料が無い為、今回はここまで・・・

-----

↑放熱器に穴を空け、3mmのタップを立てる~

Just another WordPress site