PCBWayに作ってもらった基板に部品を実装して正常に動作することが確認できました。
基板を作って発注するまでの記事はこちらです。
基板が届く
注文していた基板がPCBWayから届きました。一緒に注文したPCBWayグッズについては、こちらをご覧ください。
こちらが届いた基板です。
5milの線幅ですが、とてもきれいに製造されています。
基板に、このマイコンボードを直接実装できるように、端面スルーホールにしました。
それでは、組み立てていきましょう。
はんだペーストの印刷
ダンボールの上に基板をおきます。
メタルマスクを載せて、開けておいた穴に画鋲をさし、位置合わせと固定を行います。画鋲を刺して位置合わせをすることで、基板とメタルマスクの位置を確実に合わせることができます。
この位置合わせのためのデータの作り方はこちらをご覧ください。
メタルマスクの奥側にはんだペーストを載せます。私はオーブンでリフローしやすい、低融点鉛フリーはんだペーストを使っています。
はんだペーストを印刷するスキージには、フレキシブルパテを使います。以前はクレジットカードなどのプラスチックのカードを使っていましたが、フレキシブルパテは先端のどの場所にも一定の力がかかり、はんだペーストを均一にムラなく印刷することができます。
奥にのせたはんだペーストを、フレキシブルパテで手前へ引き寄せながらはんだペーストを印刷していきます。フレキシブルパテは先端の加工精度ととてもよく、はんだペーストがメタルマスクに残っていません。
RP2040は0.4mmピッチ、パッドは0.2mmピッチです。画鋲による位置合わせと、フレキシブルパテによって、完璧な位置にきれいにはんだペーストが印刷できました。
部品の実装
部品の実装にはピンセットではなく、電動バキュームピックアップツール HAKKO394を使っています。
HAKKO394は掃除機のように、テープから表面実装部品を吸着します。
ピンセットは部品の左右から挟み込むため、部品を密に実装できません。HAKKO394は、部品の上面を吸着するために、部品と部品の間隔が狭くても実装が可能です。
テープから直接ピックアップする最大のメリットはこれです。極性のある部品はテープの中では、必ず同じ方向を向いて収納されています。
このため、テープから直接ピックアップすると、必ず同じ向きに吸着できます。
テープに入った部品の向きと、実装する基板の向きを合わせておくことで、ピックアップした向きのまま、基板へ実装することができます。
こちらはSOT-32-5のパッケージのICの例です。
面付けされた基板は、実装先の部品の向きが全て同じなので、次から次へとどんどん実装していくことができます。
ノズルにはこれを使っています。
純正よりもパイプの径が太くノズルが短いので、吸着力が高く位置合わせがしやすいです。
ノズルを変えれば、ピンセットではつまみにくいQFNパッケージもピックアップできます。
最後にUSBコネクタを実装しました。
全ての部品の実装が終わりました。HAKKO394のおかげで、とてもスムーズに実装が完了しました。
リフロー
熱風が庫内を循環する、コンベクションオーブンでリフローします。
テスコムのこのコンベクションオーブンは、加熱の途中でも温度を変更することができます。
90度で数分プリヒートして、130度に変更。全ての部品が同じ温度になるまで待ちます。今回はUSBコネクタがあり熱容量が大きいため、全てが温まるまで130〜140度でしばらく待ちます。
オーブンの中には熱電対温度計のセンサを入れておいて、温度をモニターしています。
灰色のはんだペーストが溶けて、銀色へと変化していきます。全て溶けたら165度まで上昇させます。
165度に達したら、扇風機で冷却します。
リフローが完了しました。
今回はRP2040のピッチが0.4mmと狭いため、はんだブリッジが起きにくいように、メタルマスクの開口部を0.05mm狭くしてみました。そのおかげか、はんだブリッジすることなく、きれいにリフローすることができました。
捨て基板を取り去ります。RP2040のマイコンモジュールになりました。
動作テスト
パソコンにつないでみる
果たして正常に動作するでしょうか。USBケーブルでパソコンと接続してみます。RP2040はmbedと同じように、USBで接続するとUSBメモリのようなマスストレージとして認識されます。
おおおお!!!「RPI-RP2」というドライブが追加されました。RP2040が動作している証拠です。
Arduino IDEでプログラムを書き込んでみる
RP2020はRaspberry Pi Pico同様、Arduinoでもプログラムを作ることができます。Arduino IDEのボードマネージャでRaspberry Pi Picoをインストールします。
今回作ったボードはSparkFunのProMicro RP2040と互換なので、ボードの設定を「SparkFun ProMicro RP2040」に変更します。
SparkFunのProMicro RP2040同様、NeoPixelが搭載されているので、NeoPixelのサンプルを動作させてみます。
ライブラリマネージャでAdafruit NeoPixelのライブラリを追加します。
スケッチ例の「Arafruit NeoPixel」の中の「standtest」のサンプルプログラムを開きます。
NeoPixelはGPIO25ピンに接続されているので、LED_PINを25に書き換えて、書き込みボタンを押してみます。
おおおおおお!!!RPI-RP2にファイルが書き込まれましたよ!
おおおおおおおおおおおお!!!!!!!!
NeoPixelが光ました!オリジナル RP2040 マイコンボードが動作しています!!
全てチェックしてみる
8枚ボードを作ったので、1つ1つ同じプログラムを書き込んでNeoPixelが光るか試していきます。
素晴らしいことに、全てのボードでNeoPixelが光ました。
RP2040を使った、オリジナルのRaspberry Pi Picoボードを自作することができました。
🎁オリジナルRP2040ボードプレゼント
今回お試しで8個作りましたが、実験に4つあれば十分なので、残りの4つを4名の方にプレゼント致します。使ってみて何か不具合があったら、教えていただけると幸いです。
ピン配置
SparkFun ProMicro RP2040と同じピン配置ですが、I2Cをピンへ出力したため、GPIO10、11とSCL、SDAが追加されています。
NeoPixelのDIピンはGPIO25ピンと接続されています。NeoPixelのDOピンはLEDの右にあるDOへ出力されています。
標準のRaspberry Pi Picoボード同様、SWDCKとWSDIOのデバックピンを追加しました。
電源回路
電源部分の等価回路はこのようになっています。
USBに接続している場合は、RAW(5V)ピンには5Vが出力されます。1.5Aの過電流遮断回路が入っています。
USBに接続していない場合には、RAW(5V)ピンから電気を供給します。USBへ電気が行かないよう逆流防止回路が入っています。電圧範囲は、3.3Vのレギュレータの仕様により3.5Vから5.5Vとなります。だたしNeoPixelを使う場合には、5Vを供給する必要があります。
フラッシュメモリサイズ
フラッシュメモリサイズは、SparkFun ProMicro RP2040と同じ16MBytesと大容量です。
応募フォーム
ご希望の方は、以下のフォームよりご応募ください。もしフォームが表示されない方は、こちらよりご応募できます。お申し込みの上限に達すると自動で締め切られます。
送信をクリックするとgoogleフォーム及び、thankyou[@]kohacraft.comより自動送信メールが届きます。届かない場合には、迷惑メールフォルダに入っていないか確認していただき、無ければLab[@]kohacraft.comまでご連絡ください。
ご応募から2営業日程度で発送致します。
頂いた個人情報は発送とサポートのみに利用し、第三者への提供は一切いたしません。また1ヶ月後をめどに全て削除致しますのでご安心ください。
オリジナルのRP2040ボードができました
RP2040のオリジナルボードが作れることがわかりました。RP2040を使った応用回路を今後作っていこうと思います。
コメント
先日はrp2040お送り頂きありがとうございます。rp2040マイコンは他のavrマイコン等同様にフラッシュメモリ内に値を保持出来るそうなのですが、なかなかそれを可能にするヘッダファイルが見つかりません。何かご存知ありますでしょうか?ちなみにarduino ide環境においてarduino unoではprogmemファイル samd21マイコンではflash strage.hで可能のようです。
佐高様 PR2040マイコンボードプレゼント企画にご応募ありがとうございました。
正常に動作していますか?
私も始めたばかりなので、良くわかりませんが、こちらのスレッドがとても参考になります。
https://forums.raspberrypi.com/viewtopic.php?t=319837#p1915273
#include <pico/platform.h>
const uint8_t __in_flash(huge_data_table)[65536] = { /* ... */ };
で、データをフラッシュに配置して
const uint8_t* const huge_data_table_uncached = (const uint8_t*)((size_t)huge_data_table + 0x03000000);
で、ポインタを使ってデータにアクセスできます。
0x03000000はメモリ空間の中のflashの位置かもしれません。
a = huge_data_table_uncached[n];//n=0-65535
としても値が取り出せるのではないでしょうか。
Githubのplatform.hに __in_flash の使い方が書いてあります。
https://github.com/raspberrypi/pico-sdk/blob/master/src/rp2_common/pico_platform/include/pico/platform.h
For example a `uint32_t` variable explicitly placed in flash (it will hard fault if you attempt to write it!)
uint32_t __in_flash("my_group_name") foo = 23;
フラッシュの値をconstでなはい変数としても使えるようですね。フラッシュなので、その変数へ値を書き込むとフォルトが発生すると言っています。
私も使い方が知りたいので、うまくいったらシェアしていただけると嬉しいです。