2016年5月7日土曜日

作った基板が動作しない:調査編

連休のお楽しみと思って、リフローして作った基板が動いてくれません。

ESP-WROOM-02の基板なのですが、私にしては周辺回路が多く新設計要素も多い。楽しみにしていたブツです。リセットするとシリアルにお馴染みのゴミが出てくるので、CPUのリセット回路とTxDが生きていることは間違いないようです。

…何の慰めにもなってねぇ。

一通り電圧などをチェックしたけど、原因らしきものは見当たりません。大きめの基板で、リフロー時に全体のハンダが融けるまで少し時間がかかったのでESPの内部配線が溶けてしまったのでしょうか。

と、推測する以外できることがなくて途方に暮れていたのですが、確認できました。facebookのESP8266関連のグループで、

  • ブート時のメッセージに端子の状態などが書かれている
  • Arduino IDE 1.6.8はボーレート74880に対応している


等を教えていただき、さっそく試してみたところ、
ets Jan  8 2013,rst cause:2, boot mode:(5,4)
waiting for host
というメッセージが出ていました。

ESP8266 WikiのBoot Prosessによれば、これはMTD0=GPIO15がHIGHになっていることを示しています。回路では4.7kΩでプルダウンしていますし、実際の電圧を測ると2mV程度で十分LOWです。つまりこれは、内部で断線している、ということです。

もうお手上げです…でもこれで諦めが付きました。

コミュニティに感謝申し上げます。

さて。

こうなるともう一枚作った方が早いんですが、手元に一部の部品在庫がないので作れません。

まずESP-WROOM-02の交換を目論みました。が、吸取り網では無理でした。ESPは側面と底面に電極があるので、底に入ってしまったハンダを吸い取るのは難しいです。吸取り網では基板と密着した電極の表面張力に太刀打ちできません。

とりあえずもう一度ホットプレートで温めて引っぺがすコトにします。

■追記■

ヒーティングガンで簡単に除去できました。で、新しいESPを取り付けたのですが、症状は変わりませんでしたorz

2016年5月4日水曜日

コテ先メンテ

さる事情によりはんだ吸い取り網を長時間使っていたらコテ先が真っ黒に。



というわけで、リフレッサーでメンテナンス。ハンダが解ける温度になったらスイッチを切ってリフレッサーに突っ込んでコテ先をまんべんなく擦り付ける。ハンダが溜まってくるので、コテ先クリーナーで掃除して、またリフレッサーで掃除。温度が下がり過ぎないうちに終了。

電源入れたままやると、こて先クリーナーを使っている間に黒ずんできちゃったりするので、私は切ってます。

きれいになりました。


…写真はイマイチだけど、実際はピカピカなのよ。

2016年5月3日火曜日

MacでAlteraのQuartus Prime Liteを動かす(Ubuntu上

コンパイル通った記念w

FPGAやりたいけど開発ツールがWindows、というのがネックになって手を付けておりませんでした。いや、言い訳じゃなくて、そんだけWindowsが嫌い。Windows+Eclipseはもっと嫌い。Windows+Eclipse+Strutsはそれだけで退職しようかと思うレベルで嫌い。

…と、話が逸れましたが。

Linux版があるのは知ってたんですが、死ぬほど苦労した末にビルドを通してやっと半分ぐらいの機能が使える…というを印象があって敬遠してました。でも、今どきはそんな苦労しなくてもインストーラからさくっと使えると風のウワサに聞きまして。

というわけで、VirtualBoxにUbuntuを入れ、その上でAltera社のFPGA「MAX10」シリーズを使うための開発ツールQuartas Prime Liteを入れてみました。

まずVirtualBoxをインストールし、その上にUbuntuをインストールします。ちょっと古いけど、この記事を参考にしました。ありがとうございます。VirtualBoxには8GB割り当てています(母艦はiMac 5k, 3.2 GHz Core i5, 24GB, 外付けのSSD)。バージョンなど読み替えつつインストールしてください。なお、Quartus Prime Liteはダウンロード10GB+インストールサイズ20GBの合計30GBは食いますので、最初からその程度の容量+30GBぐらいは確保しておきましょう。
MacのVirtualBoxにLinuxのUbuntuをインストールする方法

私は上記で50GBしか確保しなかったら、スペースが足りないと言われてしまい、MAX10以外のデバイスをカットしてようやくインストールできました。これでは空きがギリギリになってしまうので、以下の手順で仮想マシンのディスク容量を確保しました。

Altera.comでユーザ登録をしてからダウンロード。死ぬほど時間がかかりますが、大人しくひたすらダウンロード。

ダウンロードしたらダウンロードディレクトリにある「Quartus-lite-15.1.2.193-linux.tar」をダブルクリックし、アーカイブマネージャで開き、さらに右クリックして解凍します。解凍し終わったらターミナルを起動し、ディレクトリを移動して ./setup.sh でインストーラを起動します。あとは画面の指示に従っていけばOK。

インストーラの最後で「デスクトップにアイコンを置く」っていうチェックボックスがあって、その方が便利なのでオンにしたのですが、何故かアイコンが残っていません。ぜひインストール完了時にQuartus Primeを起動してランチャーに登録しておいてください。あたしゃ起動の方法がわからなくて、結局インストーラをもう一回走らせるはめになりました。

ともかく、これで準備OKです。おお早朝始めたのにもう夕方だ…まぁ大部分はインストール待ち時間だったのですが。


その後、岩田利王さんのチュートリアルを参考にLチカを記述して、なんとかコンパイル通すところまでたどり着きました。すっかり夕食の時間です。

これで、フライングで注文してしまったMAX10がムダにならないで済みますw しかし、考えてみりゃ連休明けまで届かないですよね、今日頼んだものってorz

■追記 5/11■

やっとQuartus Prime Lite on Ubuntu on MacでLチカまでたどり着きました。


2016年4月29日金曜日

フライパンリフロー

右上がフライパンリフロー製

ホットプレートは急速に温度を下げられない、という欠点があります。

とりあえずハンダが確実に固まっている150度まで温度を下げたら冷たいステンレス板の上において冷ましているのですが、うちわで全力で扇いでも220度から150度まで1分ぐらいかかってしまいます。

で。

おやつのホットケーキを焼いていて気付きました。フライパンなら濡れ雑巾の上に置けばアッという間に冷める、ということに。

テフロンがダメになって捨てようと思ってそのまま忘れていたフライパンがあったので、まず何も乗せない状態でガスコンロにかけて放射温度計で温度上昇ぐあいを見てみました。我が家のコンロの場合、強火にすると150度以上ではだいたい2度/秒ぐらいで温まって行きます。いい感じ。冷却についてもあまり急冷しすぎてもいけないので濡らしたキッチンペーパー2枚で試してみたら、30秒ほどで100度前後まで下がってくれました。

ということで、150度前後まで冷めたところで、適当な基板にチップ抵抗などを乗せて試してみました。まったく問題ありません。というか、鉄のフライパンで料理するときに「煙が出てきたら油を引いて」てなことを言いますが、同様にうっすら煙が出てきたぐらいで230度前後になるので、温度計なしでも感覚が掴めます(笑)

ホームリフローの入門にはホットプレートがもっともローコストかと思っていましたが、今どきテフロンのフライパンは200-300円ぐらいで買うことができるので、これが最安値ですねぇ。安いホットプレートだと均一に温度が上がらないのですが、ガスなら遠火の強火という手も使えますし(電子工作とは思えない話になってきたなぁ)、前述の通り素早く温度を下げることができるのはメリットだと思います。

なお、お試しになる場合は、慣れれば温度計なしでも出来なくはないと思いますが、放射温度計は必須です。まず何も乗せない状態で温度の上がり具合いを確認し、次にダメになっても良い基板/部品で何度かリハーサルをして、それから実際にやってみてください。

2016年4月28日木曜日

ハト対策のトゲトゲ

微妙に高いので自作しました。

材料:ソニック ベージュ カーペット画鋲 AW-152 とガムテ

ガムテの粘着面を上にして発泡スチロール等の上に置く。2-3cm間隔で画鋲を挿す。粘着面を鳩がよく来る場所に貼り付ける。以上。

鳩が止まるような場所は砂埃などでテープがくっつきにくいと思いますので、事前に掃除しておきましょう。

■追伸(4月28日)■

鋲のないちょっとした隙間に足跡を発見しました。ダクトテープを裏張りしたので、油断して着地した連中が少しは慌ててくれることを願います。

なお、敷地内での鳩の捕獲は鳥獣保護法の処罰外なので、そこんとこよろしく。

2016年4月27日水曜日

Board1 出荷準備なう(出荷しました)


手順3

Board1の出荷作業は、
  1. まずヘッダピンとピンソケットを用意する。市販のは40ピンなので、それをカット作業台の上で手作業で切る。
  2. ラベルを用意する。プリンタ用名刺を利用しております。
  3. 同梱漏れがないかチェックするために4x5のマス目にヘッダとソケットを並べておく。ついでにピン数が間違いないかチェックする。
  4. 外袋にラベル紙とヘッダピンとピンソケットを入れていく
  5. Elecrowから納品されたモジュールを袋ごと入れる
という段取りで進めております。たった40個なんですが、約100分かかりました…。内職で生計を立てていくのは無理っぽいです。

手順4が終わったところ

こういう作業をしてみて:
  1. 自分が社会人として生きていけるのはキーボードとマウスのおかげである
  2. 自分はとことん不器用かつ数も数えられない人間である
  3. 単純作業をミスなくこなすには人間は複雑すぎる
  4. シックスシグマどころか1/40のミスorz
ということを思い知らされました。

ところで。


40ピンから16ピンx2個を切り出すと8ピン余ります。実験などで消費しきれる量ではありません。最近では自分用に16ピン使うときも、これをつなぎあわせて使っています。

だって「もったいないオバケ」が怖いじゃん。

■追伸(4月28日)■
昨日昼ごろ不在配達、今朝DHL営業所に取りに行き、動作確認したのちに梱包をして神楽坂のスイッチサイエンス様へ持ち込み、さっそく出荷していただきました。連休前にギリギリ間に合って良かったです。

お買い上げくださったお客様、スイッチサイエンス様、ありがとうございます。

連休中に楽しんでいただければ幸いです。もし何かツマったら、あるいは何かできたら、サポートページへお越しください。お待ちしております。

2016年4月24日日曜日

WiFiワイヤレスオーディオ(失敗)

送信側

受信側。手前の補聴器1個15万円ナリ

■やりたいこと■

赤外線ヘッドフォンアダプタが壊れました。私は耳が悪いので、これがないとテレビが見られません。アニメ見られないのは死活問題ですw ただ、最近市販されているワイヤレスヘッドフォンは音量が低すぎてほぼ聞こえません。特にBluetoothものは出力が小さくて先日ヨドバシで試聴してみたのですが、全滅でした。なんせ私はiPhone+標準添付のイヤホンだと最大音量にしても音楽ほぼ聞こえないんです。やぁねぇ、難聴orz

ということで、ESP-WROOM-02を使ってライン入力した音声信号をWiFiで飛ばし、受信側もESP-WROOM-02を使って受けたデータをDACで出力しそれなりに増幅してヘッドフォンへ…ということを試してみました。ラズパイなら簡単なんですが首からラズパイぶら下げるわけにもいきませんしw

ESP内蔵のADCはあまりにも貧弱なのでMCP3204、DACはMCP4922を使いました。どっちも秋月で入手できます。アンプとしてはポタアン用オペアンプを試してみて、音量が出ないようなら適当なパワーアンプを使ってみようと思ってます。

…とスタートしたのですが。

■先に結論■

今のところ、意図したようには動いていません。ADC/DACからのやり取りとESP-NOWまたはUDPでの通信はそれぞれはちゃんと動いているのですが、一緒にするとデータが欠落してしまいます。

サインカーブを送信して受信側の信号をイヤホンで聞いていると、基本的には連続音がずーっと聞こえていて、数秒ごとにバタバタとノイズが入り、ときたまプチっと100mSecぐらい空白ができる…という感じです。HiFiはまったく期待していなかったのですが、ノイズはいかんです。

ADC/DACを扱うためのインターバルがESP-NOW/UDPの送受信処理によってブロックされているようです。FIFOバッファを持ったADC/DACでないと無理かなぁ。

当初の目標に関しては失敗なのですが、とりあえずADC/DACの接続、ESP-NOW/UDPでの伝送などの参考にしていただければ幸いです。

関係ないですが、インターフェース誌のMATLAB特集を読んでフィルタなどを生成できることを知りまして、「あれ、もしかしてMATLABで補聴器作れるんじゃね?」と思ってググってみたら、すでにやってるヒトが。世界は広い。ただ、帯域ごとのコンプレッションは含まれていないので、そこは遊べる余地があるなぁ。

■高速DA変換テスト■

苦手なSPIなので、メモリ上に作ったサイン波形を連続出力してみました。イヤホンを直結すると「ぷー」という200hzの単音が聞こえます。

■高速AD変換テスト■

標準SPIライブラリで読み込み処理を書きました。

昭和臭ただよう可変抵抗器

その簡易的な動作テストとしてボリューム(可変抵抗)をつないですべてのビットが出てくるかを確認します。



これはそのための文字列表示処理
  int a = readADC(kRightCh);
  char buf[32], buf2[32];
  itoa(a, buf, 2);
  sprintf(buf2, "%16s %5d", buf, a);
  Serial.println(buf2);


読み込み処理はMCPのタイミングチャート(page 21)の通りに書けばこうなります。
  digitalWrite(SS, LOW);
  SPI.transfer(0b00000110);
  uint16_t result = word(0x0f & SPI.transfer(0x00), SPI.transfer(0x00));  
  digitalWrite(SS, HIGH);
でも、これだとch選択が分かれてしまって、今ひとつ面倒くさいです。その前のページを見るとスタートビットさえあれば動くっぽいので
  digitalWrite(SS, LOW);
  SPI.transfer(0b00011000 | ch);
  uint16_t result = word(0x3f & SPI.transfer(0x00), SPI.transfer(0x00)) >> 2;  
  digitalWrite(SS, HIGH);
と書きました。ちなみに連続した24bitのパターンが崩れなければいいので、
  digitalWrite(SS, LOW);
  SPI.transfer(0b01100000 | ch << 2);
  uint16_t result = word(SPI.transfer(0x00), SPI.transfer(0x00)) >> 4;  
  digitalWrite(SS, HIGH);
と書いても動きます。計算量は同じなので、どちらでも。

■ESP-NOWについて■

一度に送れるパケット長は最大200バイトです。また、CRCをつけて調べてみたのですが、パケット単位の誤り検出が行われているようで、化けたデータは届きません。

別のESPから送信しっぱなしにしておいてデータを受信したらLEDが点灯する状態で走らせれば、本来なら常時点灯したままになるはずです。しかし、時々0.5-1Hzぐらいの周期でLEDが消えます。これはたぶん他のWiFiからの干渉なのだと思います。本来、WiFiはチャンネルを自動選択しますが、ESP-NOWは固定したままなので、これはどうしようもないですね。

UDPではその現象は起こりません。が、正弦波を流してイヤホンで聞いていると、前記の通り数秒ごとにバタバタとノイズが入ります。ノイズの入り方はESP-NOWでのLEDの点滅と同じような感じなので、共通した原因なのだろうと思います。

■動作テストと考察■

オーバーランやアンダーランの処理を真面目に書いてないですが、テストとして送信側では計算で作ったサインカーブをバッファにセットし、ADC読み込みをスキップした状態でパケットを送ります。受信側は受信したパケットを順次DACに送出して、オシロで波形を見ます。

きれいな正弦波が見えるのですが、ときどき直流になりますw 受信データが化けていないのはCRCで確認済(このソースには含まれていません)なので、WiFiの受信処理によってDACへ出力するためのインターバルが止まっているのが原因と思われます。ただ、送った波形が少なくとも数パケット分なんの障害もなく受信されていることの方が多いので、定常的な受信処理そのものでインターバルがブロックされるわけではなく、それ以外のオーバーヘッドによって止まっているのではないかと推測しています。

一般的に音声信号は微小時間単位で見ると同じパターンの繰り返しなので、パケットの受信にときどき失敗することがあってもDACへの出力が止まらなければ聴覚上それほど酷い状態にはならないのですが、ときどき止まるってのは冒頭に書いたようにわりと耳障りな状態になります。

■ソース■

githubに置いておきます。


■今後■

ESPでI2Sで動作させた事例を見つけたので、DACチップを入手できたら試してみます。

■メモ■

  • ADC/DACともに、CSはずっとLOWにしててもダメです。特にDACはラッチがついているから問題ないんじゃないかと思ったんですが、1データごとにCSを上げ下げしないと動いてくれません。
  • 前にも書いたかもしれませんが、Serialは結構CPUパワーを食いますしTimerの動きも邪魔します。動作の様子を見るためのSerialですが、高速処理にハサむとシュレディンガーの猫的な状態になるので気をつけましょう(経験者・談

2016年4月23日土曜日

ヒートガンリフロー、失敗

見事失敗しました。5秒もかかりませんでした。

理由:部品がすべて吹き飛んだから

割と大きめな表面実装三端子はともかく、0603抵抗は大丈夫だろうと思っていたのですが、いやー、きれいサッパリ吹き飛びましたw 温度をあげるためのノズル(白光(HAKKO) ハッコーヒーティングガン オプションノズル A1111 )を取り寄せたのですが、ノズル細くなる→勢い良くなる→飛ぶ…は当然っすね。

と思ってノズル外してみてもやっぱり飛びました。やっぱ一番安いヒートガン(白光 ハッコーヒーティングガン 883B 100V-1KW平型プラグ 883-13 )じゃダメか…。リフローするには、専用の温度調節機能付きヒートガン(高い)じゃないとダメですね。

まぁ…失敗しても笑って済ませられるところが表面実装部品のいいところ。実験単価は基板と三端子あわせても100円以下でした。  

2016年4月20日水曜日

出勤前電子工作(未完成)



今日はこのぐらいにしといたるわー。ずっとやろうやろうと思っていたけど、かなり面倒な作業になる予感があったので手を付けなかったプロジェクト、ようやく始めました。

しかし、何も出勤前にやるこたないよねw


これは昨日の朝ですが。 あと、友達から「写真がピンぼけだ」というご意見をいただいたのですが、それはブログの縮小機能がダメなせいです。クリックして拡大すると鮮明になります。わりと(割とかよ