PCBAをAllpcbに発注してみた

概況

テスト用サンプルを作成することで、品質かねてコストの面から海外PCB生産を試してみたいと思ったので、旧正月休まず営業と宣伝していたAllpcb(Jiepei、捷配)に依頼した。今回はPCBのみならず、試しに部品調達、実装も頼むことにした。

allpcbにpcbaを発注してみた
allpcbにpcbaを発注してみた

ミッション

PCBサイズ5cm x 5cm+、かつMOQが5枚+のハードルから、PCB 5枚大きいサイズPCB 5枚(6cm x 6cm)、小さいサイズPCB 20枚(3cm x 3cm)、面付2枚x2枚、つまり大きいサイズPCBに小さいサイズPCBが4枚入るので、大PCB 5枚=小PCB 20枚と注文した。また、小さいサイズPCB 4枚に部品調達に実装も依頼した。Allpcbが一旦図面、部品調達確認を終えたものの、のち、Allpcb営業から面付のVスロット加工は8cm x 8cm+にしないとできないと、Vスロットの代わりに、0.5mmの穴開けをすると提案した。Allpcb営業曰く回路と外観に影響なしと言い切ったので、今回限り見栄えを犠牲するかもしれないことを覚悟してGo aheadと穴あけ提案を承認した。

これまでの流れ

2月10日にAllpcb営業にWEBメッセージを送って、ユーザ登録を済ませてGerb&BOMファイルをUpload、2月12日旧正月を挟んで、2月19日にAllpcb営業が確認完了、3月2日までに作成完了と伝えて、2月19日にクレジットでお支払いを済ませて、いよいよ生産をスタートさせることに。これで、旧正月を挟んだとはいえ、ほとんど毎日メッセージかメールの往来で生産に必要な図面確認してもらって9日間もかかった。料金は、166.56USDと表示して、実際の支払い+5USD(3%)、カード会社の手数料だろうか。DHL送料は28USDとの見積もりで、クーポン30USDで免除となった。残りのクーポン2USDが破棄か行方不明。

PCBA工程

Allpcb営業が作成したスケジュールは上記添付画像のとおり。

Parts

5日(2月19日~2月25日)、冗長分含む部品代75.80USD。すべての部品の数がPCB図面必要数以上に調達したようで、生産時のムダが発生した際に必要だそうだ。最後余った分を完成品とともに必ず送るように要望した。

PCB

5日(2月19日~2月25日)、製造費用17.00USD。

SMT

2日(2月26日?~2月27日?)、実装費用70.69USD、開始、完成時間がよく分からない。

オーダー~届くまで

今回PCBA生産依頼したものが届くまでの進捗を以下のとおり記録しておくので、ご参考にしてください。

・2月10日(水) 見積依頼、注文オーダー、2月12日(金)旧正月、2月15日(月)旧正月連休明け

→2月19日(金) やっとAllpcb技術が確認完了、2月25日にPCB完了、3月2日に発送の予定が知らせたので、支払い済ませた

→2月25日(木) PCB予定完了日、完了せず、Allpcbに連絡して返事なし

→2月26日(金) 返事なし

→2月27日(土) 再度連絡、2月25日にPCB完了予定だったが、完了せず、部品到着済み、SMT未着手と返事くれた。予定日3月2日の出荷に間に合うか、遅れるならいつ送るか不安、やっと19時19分にPCB Packing完了

→2月28日(日) PCBAに入ったらしい、予定の3月2日出荷に間に合いそう

→3月2日(火) Allpcb営業に本日出荷可能かと確かめると、本日出荷できない、いつ出荷するかわからないと返事してくれた。予定日出荷不能のことを事前予告なし、いきなり出荷しないとの事態になった。再度遅延の理由を聞いたところ、注文が立て込んで生産が追い付かない状況?との回答だった。予定とおりに出荷するようと要望して工場が調整した結果、日暮れ時今夜DHL発送可能との回答あった。

allpcb-message
allpcb-message

→3月3日(水) DHL画面で荷物を検索したところ、Allpcbが荷物データを作成したが、DHLへの引渡しは完了してないと。やはり宣言通りに3月2日(火)に出荷できなかった。クレームを出して早く出荷するよう求めた。13時すぎDHL集荷した。

allpcb_dhl
allpcb_dhl

→3月5日(金) DHL配達予定日。

→3月6日(土) 予定日より1日遅れて、届いた。関税&DHL通関手数料→1900円、制作総額→およそ2万円。早速PCBA=4枚、動作確認していずれも設計通りに動いたので主な目標が達成したとの判断。ステンシルの添付を忘れたみたいなので、別途送付するようと要望した。

pcba_動作確認
pcba_動作確認

→3月8日(月) Allpcb営業はステンシルが工場の判断で破棄したと返事、おかしいと感じた。情報セキュリティへ不安が残る。

結び

注文~届くまでほぼ1ヶ月経った。品質に不安があったが、幸いに動作確認済みなので、今回の制作が目標達成とした。反省として、PCBAよりPCBを発注したほうが良いことが分かった。また海外配送のほうがDHLでも3~4日かかるので、早く作りたいのであれば、国内へ発注したほうが良い。なお、Allpcbの場合、本社と営業は杭州市におき、工場は安徽省のどこかにあるか、外注したためか、キャッチフレーズに書いたように「世界最速生産」は、残念ながら実力を見せられなかった。PCBAの場合、部品が揃わないと長い時間かかるため、国内へ発注か、部品を調達して自社で実装したほうが良いだろう。良いところとしては、価格と、営業は平日、休日にも関わらず連絡すると返事してくれた。日本製含む部品の価格は、中国現地で調達したほうが圧倒的に安い。もちろん正規ルートから購入するのが前提。恐らくほとんどの部品は東南アジアで製造されて、まして大量購買による単価の引き下げが当然なことだ。ステンシルを送ったらお客がSMTを頼まないとか、送料はお客が払うから高いほうを選ぶとか考え方がおかしい、嘘やんと思われた時に大人の辛抱が必要でまだ進化の余地が多々あると感じさせられた。この経験を生かして、これからは評判のよいJLCPCBに発注することに。

関連記事

PCBをJLCPCBに発注してみた

2+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

STM32CubeIDEでSTM32F411設定

はじめに

前の記事でArduino IDEを生かしてSTM32F411の設定、動作確認を行った。今回はST本家のIDE環境であるSTM32CubeIDEでSTM32F411を設定してから、UARTシリアル出力を確かめたい。

STM32CubeIDEでSTM32F411設定
STM32CubeIDEでSTM32F411設定

環境

・PC Ubuntu 18.04
・STM32F411CEU6 on Weact Black Pill
・USB-TTLモジュール(STM32シリアル送信の確認)
・J-Linkモジュール、4ピン簡易版(STM32へスケッチを書き込む)

結線

・PC USB<-> J-LinkのUSB (J-Linkモジュール) J-Linkの3V3、GND、SWDIO、SWCLK <-> Black Pillの3V3、GND、SWDIO、SWCLK
・PC USB<-> USB-TTLモジュールのUSB (USB-TTLモジュール) USB-TTLケーブルのRx、Tx <-> Black PillのTx、Rx

設定

・STM32CubeIDEを立ち上げる。
・New Projectのtestを作成する。
・test.iocを開いて、システムクロックを100MHz(RCC、HSE、Crystal、25MHz)になるように設定する。
・USART2(A2ピン、A3ピン)をAsyncに設定する。
・sys(J-Link)を設定する。
・test.iocを保存して、BUILDを行う。
・main.cを開いて、下記をwhile(1)ループに追加する。

HAL_UART_Transmit(&huart2, (uint8_t *)"Hello, world!\r\n", 15U, 100U);

・RUNをクリックする。
・ターミナルでsudo gtkterm(以下を参照)。

シリアルモニタ

今回は、Ubuntuターミナルのgtktermを使いたい。

$ls -lrt /dev/serial/by-id/
$sudo apt-get install gtkterm
$sudo gtkterm

gtktermを立ち上げて、PortとBaudrateの設定を行って、”Hello, world!”の繰り返すことを確認する。

結果確認

STM32F411シリアル出力確認
STM32F411シリアル出力確認

感想

Arduino IDEやPlatform.io等のIDEよりペリフェラルの可視化においては、STM32CubeIDEのほうが優れていると感じたので回路設計や、ファームウェア開発のスピードアップに活用していきたい。

STM32CubeIDEでUSART設定
STM32CubeIDEでUSART設定

関連記事

Arduino IDEでSTM32F411 Black Pillへスケッチを書き込む

1+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

SAMD21-ATmega328 SPI対向試験

概要

I2C(SCL+SDA)の信号線が1本(SDA)に対して、SPI(SCLK+MISO+MOSI+CS/SS)の信号線が2本(MISO+MOSI)あり、結線がやや複雑で、SAMD21、ATmega328のSPIの挙動が明らかに違う。しかしSPIの通信スループットはI2Cの数倍以上あるため、面倒でもやる価値がある。以下の対向試験でSPIでデータの送受が確認しよう。

Master=SAMD21

/**********************************************
  SAMD21 as SPI Master
**********************************************/
#include <SPI.h>
 
void setup() {
  Serial.begin(9600);
  Serial.println("---------SAMD21G18A as SPI Master--------");
  SPI.begin();
  digitalWrite(SS, HIGH);
}
 
void loop() {
  SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));//SPIトランザクション開始
  digitalPinToPort(SS)->OUTCLR.reg = digitalPinToBitMask(SS);//SS->LOW
  byte rx = SPI.transfer(0x11);//転送
  digitalPinToPort(SS)->OUTSET.reg = digitalPinToBitMask(SS);//SS->HIGH
  SPI.endTransaction();//SPIトランザクション終了

  Serial.print("tx = ");
  Serial.print("17");
  Serial.print(" / rx = ");
  Serial.println(rx);
   
  SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
  digitalPinToPort(SS)->OUTCLR.reg = digitalPinToBitMask(SS);
  rx = SPI.transfer(0x21);
  digitalPinToPort(SS)->OUTSET.reg = digitalPinToBitMask(SS);
  SPI.endTransaction();
  
  Serial.print("tx = ");
  Serial.print("33");
  Serial.print(" / rx = ");
  Serial.println(rx);
   
  delay(2000);
}

Slave=ATmega328

/**********************************************
  Arduino UNO as SPI Slave
**********************************************/
#include "SPI.h";

void setup() {
  Serial.begin(9600);
  Serial.println("----Arduino UNO as SPI Slave-----");
  SPI.setBitOrder(MSBFIRST);//最高位を先に
  pinMode(MISO, OUTPUT);//出力ピン設定
  SPCR |= _BV(SPE);//SPI Control Register
  SPI.attachInterrupt(); //割り込みを可能に
}
//割り込みハンドラー
ISR(SPI_STC_vect) {
  byte rx = SPDR;
  Serial.print("ISR! ");
  Serial.println(rx);
  SPDR = rx;//受信データをそのまま返す
}
void loop() {//空転
}

結果

Master側

tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17

Slave側

ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17

※ Master側の受信はずれている。最初からずれているのであとはずっとずれてしまった。

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

Arduino IDEでSTM32F411 Black Pillへスケッチを書き込む

はじめに

STM32F411CEU6実装のWeact Black Pillボードが簡易にArduino IDEでUSB Type-C or シリアル(USB→TTL 4ピン)経由、スケッチが書き込めるかを実験してみよう。当然、FlashLoader、keilなどでJTAG、SWD経由でもFlash書き込み可能とされる。因みに、出荷時の初期状態ではWeAct HID bootloaderが書き込み済みなので、電源を入れたら、C13 LEDが点滅状態に入るのを確認する。また、STM32CubeProgrammer 2.6.0STM32duino Bootloaderや、WeAct HID bootloaderを書き込んで出荷時の初期状態に設定できる。Bootloaderの書き込み先頭アドレスは0x8000000となる。

ボード情報

USB speed : Full Speed (12MBit/s)
Manuf. ID : STMicroelectronics
Product ID : STM32 BOOTLOADER
SN : 3197347F3030
FW version : 0x011a
Device ID : 0x0431
Device name : STM32F411xC/E
Flash size : 512 KBytes (default)
Device type : MCU
Device CPU : Cortex-M4

MCU情報

STM32F411CE、周波数100Mhz、RAM 128KB、ROM 512KB

手順

Flash書き込みソフトのSTM32CubeProgrammer 2.6.0をダウンロードして、Windows 64bit版の場合、exeファイルから、Ubuntuの場合、linuxファイルからインストールする。上記STM32CubeProgを使ってUSB書き込みの場合、プログラムモードにあるUSBポートが認識できない。後述Arduino IDEで書き込みの場合でもUSBポートが認識できない。また、Windows10、ubuntu 18.04環境とも同現象が出る。
※追記、上記USBポート認識できない現象、dfu-utilをインストールすることで解消する。

$sudo apt-get update
$sudo apt-get install dfu-util
$dfu-util -l

STM32duinoの追加

Arduino IDEでファイル→環境設定→下記リンクを追加して、ツール→ボード→ボードマネージャ→STM32を検索してインストールする。

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

ボード情報などの設定

シリアルの場合

stm32f411_arduino_ide_serial_setting
stm32f411_arduino_ide_serial_setting

USBの場合

stm32f411_arduino_ide_usb_setting
stm32f411_arduino_ide_usb_setting

PC接続

ボードをUSB Type-C or シリアルケーブルでPCに接続する。

モードの切り替え

プログラムモードへ切り替えるため、BOOT0を押下と同時にNRSTを押下→NRSTを離す→0.5秒後BOOT0を離す→初期状態のLED点滅が消える。この一連の指操作は、Finger Danceと言われる。

スケッチの書き込み

ファイル→スケッチ例→01Basics→Blink、書き込みボタンをクリックする。ときに書き込み失敗が起きても、再びモードを切り替て試したらほとんどの場合、2回連続の書き込みで済むようになる。

stm32f411_arduino_ide_usb_ok
stm32f411_arduino_ide_usb_ok

動作確認

下図のようにUSB接続、USB書き込みの場合、うまくいくと再び初期状態と違うパタンの青色LED点滅が確認できる。

STM32F411SEU6_Black_Pill動作確認
STM32F411SEU6_Black_Pill動作確認

追記

結論として、安価なST-Link/J-Linkでもプログラムの書き込みが安定して、そしてISPモード(シリアル、USB)で書き込む際に必要なFinger Danceも要らないので、作業に向いている。次に、ROSSerialなどを組み込んで、オープンソース化するロボット関連製品の開発に役立てたい。これで、Arudino開発環境が馴染み深いユーザーさん向けの製品の開発にとくに意味あると考えられる。

参考資料

WeActTC/MiniF4-STM32F4x1

関連記事

STM32CubeIDEでSTM32F411設定

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

KiCADの自動配線ツールの入手

概略

KiCAD自動配線に必要なツールはFreeroutingとJava SDKの2種類あります。以前利用したリンクは何故か切れてダウンロード不能となって、2020年9月時点において下記のリンクからダウンロードできた。また、必要に応じてインストールしておく。

リンク

・Freerouting releases
・Java SE Development Kit 15

以前、PHPの開発でNetBeans(IDE環境)に馴染み深いので、今回NetBeansとJDK 8を以下のリンクより同時にダウンロードしてそして一発でインストールすることもできて便利に感じる。
・Freerouting releases
・JDK 8u111 with NetBeans 8.2

なお、Freeroutingに関するトラブルが起きた場合、Freerouting issuesを参照する。

Windows10およびUbuntu18.04でKiCADをインストールして、自動配線Freeroutingに、うまくいかないまたは気に入らない時に手動配線と組み合わせて、配線の工数を減らして、単層基板でも多層基板でも回路設計に充分に役立つ。

以上、ご参考まで。

2+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア