人生初、QFNパッケージの半田付け–失敗の例

成功する例を載せても、まぁ教訓にはなりません。

失敗からコツを覚えておくためにも、写真解説付きで載せなぜ失敗したかを考えてみたいと思います。

 

さて、半田付けの対象はTPS63000です。 このパッケージはQFN というものとなり、箱型でPINが生えていないパッケージになります。

TPS63000DRCR

半田付けする基板の位置は以下の部分です。

ccc

1

PCB 上の1PINのマークを付け忘れたのでeagle 上で確認します。右上が1PIN でパーツにポチが付いているのがマークです。裏面は中央にGNDがあり熱をPCB上に逃がす構造です。これを半田付けするには、ブローがどうしても必要です。

2
写真では大きく見えますが、いざ、部品と向き合って見てみると、その小ささに面食らいます。イメージでは、米粒2個分くらいか、それ以下です。

 

写真は、ビデオを撮りながらあとからキャプチャーしたものです。まだ、拡大鏡のCCDが用意できていないので、ビデオで代用しました。肉眼では、まったく見えないということはないのですが、状態の変化がよくわかりませんし、部品の表面についている1PIN マークがほぼ見えません。なんらかの拡大鏡は必須と感じました。

 

大きく流れは以下のようなポイントです。ペースト半田を使っていますが、工程からするとあまり意味が無い感じです。

1) 半田を適量つけ、予備半田をする

2) フラックスをつける

3) パーツをピンセットで置き、熱風を当てる

4) 半田が溶けると、パーツが少し沈むのでピンセットで少しあてなじませる

5) フラックスを掃除

 

結論から言えば、この工程の、3,4 で失敗しました。

 

1) 半田を適量つけ予備半田をする。

 

ペースト半田をつけました。かなり荒っぽいですが、溶けてきれいになるので問題ありません。そもそも3mm 四方の話で、手作業では限界があります。ステンシルを作ってつける場合は、ペースト半田の意味があると感じました。

1

熱風をあて、溶かします。

2

PCBにマスクがかかっているので、銅箔面にくっつきます。

3

ピンにブリッジが出来る場合、先がフラットになっている小手で、修正します。

4

こんな感じの状態を作ります。ステンシルで綺麗に、この胴箔面にペースト半田を付けられれば溶かさずパーツを置いてしまって良いと思います。

5

2) フラックスをつける

3) パーツをピンセットで置き、熱風を当てる

 

少し清掃してから、フラックスを付け直したほうがよかったかもしれませんが、写真のようにまだフラックスがあるのでいいかなと、パス。ピンセットでパーツを置き熱風を当てます。

6

4) 半田が溶けると、パーツが少し沈むのでピンセットで少しあてなじませる

 

フラックスの液と半田に浮いていますが、熱風を当てていると少し沈み込みます。このとき、位置がずれてしまいました。

7

うまく位置を修正できずに、一度半田が固まりました。サイド、熱風をあて、ピンセットで位置を修正しています。

8

5) フラックスを掃除

 

ちゃんとついたように見えたのですが、清掃してよく見ると、位置が大幅にずれています。

9

パーツが付いていない基板と見比べると、あきらかに下側によっています。中央のGNDパット部分がPINに干渉しているかもしれません。

10

 

というわけで、最初の工程は失敗。さて、どこが悪かったのでしょうか? だめなところをまとめると以下です。

・GNDパッドが溶けて沈み込むときにずれた。

・ブローを横から当てていた

・真上からあててたとしても、ピンが4方になく、左右にずれるの当然かも。

・ずれるとは思っていなかったので、ピンセットを持っていなかった

・PIN部分の半田が溶け、表面張力により移動した

・予備半田したあと、フラックスを付け直さなかった

 

先輩たちのビデオを見てわかったことがあります。

・工法は、大きく2つあり、GNDパットのみ予備半田をして、リフローし、PINはあとから手半田で行う方法と、同時にPINまでつける方法がある。

・PIN部分もサイドから、あとから手半田している。パーツのサイド面の端子部分と半田をなじませている。

・PINを同時につける場合は、GNDパット部分の半田を盛り過ぎないこと。予備半田したとき、サイドから見ればPIN部分と同一の高さになるようにする。これによりずれにくくする

・予備半田をしたのち、フラックスは必ずつける。フラックスの流れで、半田が溶けて沈み込みの現象が良くわかるのと、多少位置がずれた場合に、修正が楽になるのと、2つ意味がある。

・ペースト半田を使う必要は無い。

 

▼参考

 

サイド部分はあとから、半田する場合

[youtube https://www.youtube.com/watch?v=hYllE1gnzzU]

 

GNDパットとPINを同時の場合(映像にはないが、あとから、サイドもやっていると思う)

[youtube https://www.youtube.com/watch?v=JW3kRnjggFo]

PCBのカッティング・ジグを作ったよ

さて、昨日土曜日からESP BackBoost PCBの半田付けをやっていますが、まだ1枚しかPCBをカットしていないので効率化と今後のためにカットを楽にするためのジグを作りました。

ジャンク箱にあったステンレス製の金具を2つに分断し、PCBを挟み込む構造です。これで両面からカッターを1度に当てられ曲げ折ることが1工程でできます。

a

こんな感じで、挟み込んでカッターを両面から切り込ませ、曲げ折ます。Vカットライン(もどき)を手動で入れるような感じですね。 b

曲げ折った後は、やすりでサイズ調整します。作業はずいぶん楽になりました。1mm以下 のPCBでは、この工法が手作業では良さそうで、今後採用です。このサイズなら、PCBの厚みは1mmで用は足りるので、これから発注するPCBも1mm 以下のものにしていこうと思います。

 

さて、半田付けの続きをやりますか。

なかなかコツをつかむまで、練習が必要です。次の記事ネタにします。

開発ボードがコハクラフトさんより到着

kohacraftさんよりE-ink の開発ボードが到着しました。ありがとうございます。

a

PINヘッダーがあるので、自由に信号を入れ放題!電源部は、LT1945 から供給。コイルは、Coilcraft

b

さぁ、うまく表示できるでしょうか。

Scan 2実験にあたり、まだ下準備が整っていないのでそこから着手しないとです。

まずは、ESP8266 から信号を入れるため、ESP側の開発ボードの半田付けをして、シフトレジスターを用意する作業があります。 ご飯食べて、気力を回復させてから、本日は何か1つ作業を進めたいです。

RasPi2 でCの王道? WiringPi

とりあえず、RasPi でC を検索したら一番最初にヒットしたので、これで。

オフィシャル
http://wiringpi.com/

GITHUB

https://github.com/WiringPi

Ruby や PHP やPython などのラッパーもあるようです。とりあえず、c で。

 

インストールは、INSTALL か、オフィシャルサイトのドキュメントのように。build スクリプトがあります。

[root@pi wiringPi 12/04 05:34:23]# ./build 
wiringPi Build script
=====================


WiringPi Library
[UnInstall]
[Compile] wiringPi.c
[Compile] wiringSerial.c
[Compile] piHiPri.c
[Compile] wiringShift.c
[Compile] piThread.c
[Compile] wiringPiSPI.c
[Compile] softPwm.c
[Compile] wiringPiI2C.c
[Compile] softTone.c
[Compile] mcp23008.c
[Compile] mcp23016.c
[Compile] mcp23017.c
[Compile] mcp23s08.c
[Compile] mcp23s17.c
[Compile] pcf8574.c
[Compile] sr595.c
[Compile] mcp3002.c
[Compile] pcf8591.c
[Compile] mcp3004.c
[Compile] mcp4802.c
[Compile] mcp3422.c
[Compile] max31855.c
[Compile] max5322.c
[Compile] sn3218.c
[Compile] drcSerial.c
[Compile] wpiExtensions.c
[Link (Dynamic)]
[Install Headers]
[Install Dynamic Lib]

WiringPi Devices Library
[UnInstall]
[Compile] ds1302.c
[Compile] maxdetect.c
[Compile] piNes.c
[Compile] gertboard.c
[Compile] piFace.c
[Compile] lcd128x64.c
[Compile] lcd.c
[Compile] piGlow.c
[Link (Dynamic)]
[Install Headers]
[Install Dynamic Lib]

GPIO Utility
[Compile] gpio.c
[Compile] readall.c
[Compile] pins.c
[Link]
[Install]

All Done.

NOTE: To compile programs with wiringPi, you need to add:
    -lwiringPi
  to your compile line(s) To use the Gertboard, MaxDetect, etc.
  code (the devLib), you need to also add:
    -lwiringPiDev
  to your compile line(s).

[root@pi wiringPi 12/04 05:38:22]# gpio -v
gpio version: 2.31
Copyright (c) 2012-2015 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 2, Revision: 01, Memory: 1024MB, Maker: Embest 
  Device tree is enabled.
  * Root or sudo required for GPIO access.
[root@pi wiringPi 12/04 05:38:41]# 

こんな感じになりました。

[root@pi wiringPi 12/04 05:38:45]# gpio -v
gpio version: 2.31
Copyright (c) 2012-2015 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 2, Revision: 01, Memory: 1024MB, Maker: Embest 
  Device tree is enabled.
  * Root or sudo required for GPIO access.
[root@pi wiringPi 12/04 05:38:46]# 

というバージョンを使っています。Gordon Hendersonさんが作られてたようです。感謝。

[root@pi work 12/04 06:17:08]# gpio -warranty
gpio version: 2.31
Copyright (c) 2012-2015 Gordon Henderson

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Leser General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program. If not, see <http://www.gnu.org/licenses/>.

[root@pi work 12/04 06:17:14]# 

とりあえず、使ってみます。

a

いつもPIN番号を忘れて検索します。貼り付けておくことに。ラズパイのピン。

Raspberry-Pi-GPIO-compressed

コードは以下。

// Include header file
#include <wiringPi.h>

// Define GPIO21 number
#define LED 21

// Main function
int main(void) {
        int i;

        // Initialize WiringPi
        if(wiringPiSetupGpio() == -1) return 1;

        // Set GPIO pin to output mode
        pinMode(LED, OUTPUT);

        // Repeat LED blinking 10 times
        for(i=0; i<100; i++){
                digitalWrite(LED, 0);
                delay(100);
                digitalWrite(LED, 1);
                delay(100);
        }

        // Turn off LED
        digitalWrite(LED, 0);

        return 0;
}

コンパイル、実行。

[pi@pi work]$ gcc -o blink blink.c -lwiringPi
[pi@pi work]$ sudo ./blink

終了すると、プロンプトに戻ります。RasPi のGPIOはたくさんあるので、同時にいくつ使えるんでしょうね。

 

シフトレジスターを経由しなくても、今回、15本のGPIOを使えればよさそうですが、

[root@pi work 12/04 06:26:32]# gpio readall
 +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 | ALT0 | 1 |  3 || 4  |   |      | 5V      |     |     |
 |   3 |   9 |   SCL.1 | ALT0 | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI | ALT0 | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO | ALT0 | 0 | 21 || 22 | 0 | OUT  | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK | ALT0 | 0 | 23 || 24 | 1 | ALT0 | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | ALT0 | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | OUT  | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
[root@pi work 12/04 06:26:33]# 

このテーブルのwPi というのがアサインされている番号ですかね。

マニュアルだと、以下のようです。1 でON(点灯) 0でOFF(消灯)

[root@pi work 12/04 06:32:40]# gpio -g write 21 1 
[root@pi work 12/04 06:33:56]# gpio -g write 21 0

とりあえず、使えそうですね。あとは、プログラムの問題となります。さぁて、本日金曜日。お仕事終わればまた開発タイムです。

examples ディレクトリに参考コードがたくさんあります。

[root@pi examples 12/04 06:41:26]# pwd
/home/pi/wiringPi/examples
[root@pi examples 12/04 06:41:28]# 
[root@pi examples 12/04 06:41:29]# tree
.
├── blink12.c
├── blink12drcs.c
├── blink6drcs.c
├── blink8.c
├── blink.c
├── blink.rtb
├── blink.sh
├── clock.c
├── COPYING.LESSER
├── delayTest.c
├── ds1302.c
├── Gertboard
│   ├── 7segments.c
│   ├── buttons.c
│   ├── gertboard.c
│   ├── Makefile
│   ├── record.c
│   ├── temperature.c
│   ├── voltmeter.c
│   └── vumeter.c
├── header.h
├── isr.c
├── isr-osc.c
├── lcd-adafruit.c
├── lcd.c
├── lowPower.c
├── Makefile
├── max31855.c
├── nes.c
├── okLed.c
├── PiFace
│   ├── blink.c
│   ├── buttons.c
│   ├── ladder.c
│   ├── Makefile
│   ├── metro.c
│   ├── motor.c
│   └── reaction.c
├── PiGlow
│   ├── Makefile
│   ├── piGlow0.c
│   ├── piGlow1.c
│   └── piglow.c
├── pwm.c
├── q2w
│   ├── binary.c
│   ├── blink.c
│   ├── blink-io.c
│   ├── blink.sh
│   ├── bright.c
│   ├── button.c
│   ├── Makefile
│   └── volts.c
├── README.TXT
├── rht03.c
├── serialRead.c
├── serialTest.c
├── servo.c
├── softPwm.c
├── softTone.c
├── speed.c
├── spiSpeed.c
└── wfi.c

4 directories, 59 files
[root@pi examples 12/04 06:41:32]# 

 

コハクラフトさんからも発送されたようで、土日にはなんらか楽しめそうです。

PCBをカット

さて、本日は気力もそこそこ残っていたので、PCBのカッティングを手動でどうやるか検討しました。

まだカッティングの歯やミニテーブルソーを作っていないので、手持ちの工具でどうやったら簡単にかつ、0.5mm幅でカットできるか考えました。

 

リュウタに薄めの歯(1mm弱くらいの)を定規を添えて、手で削ったものが上。1mm 以上削れてしまうし、なかなか直線も出ません。その下は、カッターの歯で両面切れ込みを入れたもの。

Scan 2

その状態で折り曲げて、切断すると1.6mm のユニバーサルボードだと以下のような感じ。

Scan 3

これでとりあえず、やってみたのが以下です。

 

b

ステンレス定規に、ミニクランプで固定し、カッターで両面に切れ込みを入れて曲げ折る感じです。

a 多少毛羽立つので、やすりで調整。想定より、うまく行ったようです。

bbb

0.5mm 幅以内でカット出来た様です。

ccc

ほとんど、サイズも変わらず、やすりでもう少しカットしても仕上がりサイズ以内になりそうです。

aa

1mm 厚の基板だったので、実験の時のPCBより薄く簡単でした。この方法で今後直線部分はカットしてもいいですね。ミニテーブルソーだと、0.5mm でカットしても誇りが出ると思うので。

 

両面を挟み込むような、定規を加工すればかなり手軽に切れそうです。

E-inkディスプレイでテスト準備

さて、年末に向けてE-ink を表示するテストが出来そうなので、その準備をしています。

開発ボードは、ブログで先駆者がいらっしゃって、なんと開発ボードを分けていただくことになりました。ありがとうございます。

kohacraftのblog
タグ:電子ペーパー

E-ink ディスプレイのコネクタはPCB上につけないと無理な配線なので、電源部とコネクタから構成される開発ボードを作られていました。こちらは、まだPCB作ってないのでテストできていない旨をブログでコメントしたところ、好意で開発ボードを分けていただくことになりました。コハクラフトさま、本当にありがとうございます。E-ink のPCB発注は来年かぁと思っていたので、年末に遊べそうです。

 

以下の回路図は、sprite_tm さんのページにある手書きのものをトレースしたものです。配線するときの覚書としてメモしておくことに。

2_Schematic_e-ink ただいま、コハクラフト開発ルームにてハンドメイドで半田付けが行われている最中です。こちらは、シフトレジスタ部とESP側の準備をしています。そして、先に発注してあるロジックアナライザーも今年中に来ると思いますので、どんな手順を踏めば表示されるのかを解き明かしていきたいと思います。

 

英語ソースでは先人がいるのですが、まだ要点がつかめず、ポイントの要になる部分がわかりません。コハクラフトさんのブログでいくつか解き明かされて、ソニーのdigital book reader PRS-600 本体にE-ink を挿げ替えても表示が可能だそうです。Sony のE-ink には、LB060S01-RD02 という型番のE-ink で、今回手持ちで流通している、ED060SC4(LF)を繋げても表示できるということがわかっています。上の回路図では、9pin , 10pin は繋がっていますが、そこはポイントではなさそうということが状況から言えそうです。

要するに、E-ink に入れる信号のタイミングがポイントになることは間違いなさそうです。

今回しょっぱなにテストしようとしているソースは、
https://github.com/take-i/espeink/blob/master/user/eink.c

で、各所にos_timer_armでタイミングをを取っている部分がいくつかあります。その関数を集約したものが、

https://github.com/take-i/espeink/blob/master/user/io.c

にあり、ここにもタイミングとっている部分、os_delay_us がいくつかあります。このあたりをいじって、どのような挙動だと表示され、あるいは、されないのかという根本原理を探ってみたいと思います。

 

果たして、以下の3つのページでは何を言おうとしているのか?

http://essentialscrap.com/eink/electronics.html

http://essentialscrap.com/eink/waveforms.html

http://spritesmods.com/?art=einkdisplay&page=3

読んでいるだけでは、いまいちピンときません。実機を交え、1つづつ噛み砕いてみたいと思います。そして、次のE-ink ディスプレイにも応用できるノウハウが得られればと思っています。一番やりたいのは、フレキシブルなE-ink への表示です。まだ、モノがこなれていないので、入手方法がわからずですが、数年経てば入手経路も確立されてくるだろうと思っています。