2019年12月12日木曜日

STM32F042K6T6 のブレークアウト基板を作成する(後編)

PCB を修正する

前回作成した PCB は、USB の D+/D- がひっくり返っていたのを修正する。それ以外に今回は、
  • ピンに5V 端子を追加(合わせてGNDも追加)
  • シルクに各端子名を表示
  • パーツ配置を色々微調整
という改良を加えた。


基板も初の白色にしてみる。

ちゃんと各ピンに端子名を入れた。やっぱり必須・・・。

LED を焦がす


基板が届いたので、早速ハンダ付けをする。まず、レギュレータまでハンダ付けしたところでテストしてみたら、電源 LED が付かない!?電源 LED を3.3Vではなく、5V から取るように変えた時に、LED の向きを逆向きに変更したことを忘れ、前回の組み立て物を見てその通りに半田付けをしてしまっていた。。。

配線とサーマルパターンはなるべく太めに、と思って作っているのもあり、こういう時に、パーツのハンダ付けを外すのがまだ自分には難しくて、結局、LED を1個壊してしまった。。。

そして、全部ハンダ付けし終わった後、DFU 経由のファームウェア書き込みは、前回のようなトラブルもなく、すんなり出来た。だけど、2つあるLチカ用 LED のうち1つが光らない!?ハンダ付けするときに、ハンダゴテで熱し過ぎていたようだ。。。こちらもハンダの取り外し途中で壊してしまった。。。

この写真は直した後。ここで光っている左側の D2 が壊れていた。

壊れた LED を外すときに、基板の表面も焦がしてしまった。下の写真で、レジストが少し剥がれている。"D2" シルクの周りのレジストもほんのり焼けている。とほほ。

D2 と D2 の上側端子の間が少し茶色く剥がれている

まあでもこれで何とか動いたので、最後にピンヘッダをブレッドボードに刺した状態でハンダ付けして完了!

と思ったら、この最後の最後でも、残念なハンダ付けになってしまった。。。

5V と GND を追加したので左右で 1 ピンずつ多い

上の写真を手前から見たところ
左が前回の組み立てで、右が今回のもの。ピンが斜めっております。写真だとあまり分からないけど、実物だともっとめっちゃ斜めって見えますよ。おかげで、ブレッドボードに刺した時に、1つ隣の列じゃないと、ジャンパーワイヤーが刺さらないでござるよ。。。


特徴


さてさて、気を取り直して、この breakout ボードの特徴としては:
  • 3.3V 250mA
  • 電源 LED
  • Lチカ用 LED x2
  • I2C プルアップ付き(PF0, PF1)
  • BOOT0 スイッチ付き(PB8 w/ プルダウン抵抗)
  • リバーシブルに使えるよう、LEDと抵抗が表裏背中合わせ
というところ。BOOT0スイッチは、DFU 書き込み時以外は、普通にPB8のスイッチとして使えるし、I2Cのプルアップ抵抗は地味に使えそうと思って付けてみた。



J-Link のシリアル経由で printf 波形観察


では、この出来上がったブレークアウト基板で、ADC で取り込んだ波形を見てみよう。I2C のテストとして、液晶ディスプレイも付けてみる。

まず、STM32CubeIDE でピンの設定を行う。I2C と KEYSW, LED1, LED2 のピンは、このブレークアウト回路ではこの位置で固定になる。SWD と USART はデバッグ用。


また、コード側では、
/* USER CODE BEGIN Includes */
#include <stdio .h>
/* USER CODE END Includes */

/* USER CODE BEGIN 0 */
int __io_putchar( int ch ) {
    HAL_UART_Transmit( &huart1, (uint8_t*) &ch, 1, 0xffffffff );
    return 0;
}
/* USER CODE END 0 */
のように printf() で USART に出力されるように実装しておいて、ADC(DMA) の結果を printf() で出力する。

ただしここで、MX_DMA_Init() と MX_ADC_Init() は、以下のようにこの順序で呼ばれないと動かないらしい。今回は CubeMX の手順で何が違ったのか、main() 関数の先頭でこの2つの呼び出し順が逆になっていて、ADC が1サンプルしか取得されず、小1時間悩んでしまった。
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_DMA_Init();
  MX_ADC_Init();
  MX_I2C1_Init();

あとは、Nucleo ST-Link の J-Link 化を行い、SWCLK, SWDIO, NRST, GND をつなぎ、USART1 の TX, RX もつなぐ。I2C に SSD1306 液晶ディスプレイもつなぐ。そうしてできた、最終的なブレッドボード。

I2C でディスプレイに文字が表示できている

そして、printf で ADC の値を出力して、ArduinoIDE の シリアルプロッタを開くと、こんな感じに波形が出た。めでたし!
I2C の SDA 信号を観測したもの。

感想

今回も失敗だらけだったけど、でも、LQFPのハンダ付けは2回目で、前回よりは上手く出来た?と思う。

あと、今回は初めて白い基板で注文してみたけど、基板の配線をシゲシゲと眺めるのが好きなタチとしては、配線があまり見えなくて少しさみしかった。黒もあまり見えなかったんだよな。もごもご。。。

とはいえ、とりあえずブレークアウト基板は完成!?





0 件のコメント:

コメントを投稿