私のKiCADことはじめ（フルNchモータードライバ）

どうも皆様、ぱんザキです。
12月も20日を迎え、呉高専Advent Calendarも終盤に差し掛かってきましたが皆様いかがお過ごしでしょうか。
私はこの企画に誘ってきた張本人が記事を落としたと聞いて絶賛:thinking:中です。
まあそんなことは置いておいて、まじめな話を...

さて、今回は”私のKiCADことはじめ”などと銘打っておりますが、その実態はフルNchモータドライバ（以下MD）の開発記録となっております。KiCAD自体にも触れはしますが（大嘘）入門向けではないです、すみません。長々と無駄話をしてもあれなので本題に移りましょう。

#もくじ
1.概要
2.KiCADについて
3.回路設計、部品選定
4.パターン設計
5.発注、製作
6.動作確認
7.まとめ

#1.概要
諸事情で現在使用しているMDよりも小さいモノが必要になった
せっかくだし今まで作ったことの無いフルNchで作ろう
設計にKiCADを使った（人生初）
予算は余裕があるのでツヨツヨMDにしよう！

というわけで以下仕様
・フルNch
・ゲートの制御がめんどいのでフルブリッジドライバを使う
・小型化のため部品のピッチは（手ではんだ付けできる範囲で）最小のものを選ぶ
・制御用マイコンを乗せる
・回転状態のインジケーターLEDを乗せる
こんなところですね、では早速設計と行きたいところですが、KiCADについてご存じない方もいることと思いますので(MDはどうなんだって？そんな人はまずこの記事にたどり着かないでしょう)少しばかりKiCADの説明をしますね。

#2.KiCADについて
![image.png](https://qiita-image-store.s3.amazonaws.com/0/317969/da0832cf-3ce5-4f58-1958-1a5d9d6bba6c.png)
KiCAD（キキャド、ケーアイキャド）とは電子回路、及びパターン配線の設計をするソフトです。
これだけだとちょっとわかりづらいですね。
まあ、主には
-電子回路図面（.sch）の設計
-回路の図面から”部品同士のつながり方の情報”であるネットリスト（.NET）の生成
-ネットリストをもとに基板上の実際の配線を設計するパターン設計
の三工程を行います。

この他に、設計した基板を企業に発注して作ってもらう場合はパターン図面からそれ用のデータを出力したり、設計した基板を3Dモデルで見たり、画像からシルクを生成したりもできます。
導入や使い方についてはgoogleなどの検索フォームで"KiCAD"と検索すれば見つかると思うのでここでは書きません。
使い勝手については慣れれば相当使いやすいですが、慣れるまでは結構面倒な上にこのソフト、割と重いのでそれなりのPCスペックでないと人権が与えられません。
参考までにですが、私の環境を晒しておきます。
-windows10home
-intel corei75500U
-RAM 8GB
-SSD 500GB
-グラフィック intel標準GPU
以上の環境で結構カクつく&たまに落ちるのでRAM 4GBだとかSDDじゃなくてHDDとかの人は覚悟しておいてください。
パターン設計の時の方がカクついてたのでもしかしたらグラフィックを強化した方がいいかもしれません。

また、KiCADのようなソフトで、Tinaというソフトがあります。このソフトは回路の設計だけでなくシミュレーションもできてとても便利なのですが、有料ソフトで、なかなかいいお値段がするので、学生には少々手を出しづらいところです。
さあ次はいよいよ設計に入ります。

#3.回路設計、部品選定
今回作るのはフルNchMDなのですが、そもそもフルNchとは？という人もいることでしょうそうでしょう。フルNchというのはMDのメインの回路である「Hブリッジ」のFETを全てNchFETにしたものです。
え？Hブリッジがわからない？
.....しょうがないなぁ、じゃあそこから
Hブリッジはモーターを正転・逆転のどちらの回転もできるようにする回路です。
![Hburiburi.png](https://qiita-image-store.s3.amazonaws.com/0/317969/25771bcf-b896-ba0e-6c1d-0bdf2af2dc25.png)
回路図自体はこんな感じです。
見たら何となくわかるとは思いますが、左上と右下のスイッチがオンになるとモーターが正転、右上と左下のスイッチがオンになると逆転します。ついでに言うとモーターが回ってる状態で下2つ、もしくは上2つのスイッチをオンにするとモーターにブレーキがかかります。
ちなみに、右上と右下、左上と左下のスイッチが同時にオンになると電池のプラスとマイナスがショートし燃えます、燃えます。そこらへんは設計段階、あるいは制御の段階で回避します。
おっと話がそれましたね、ともあれこれがHブリッジという回路の動作です。

そして通常(？)このHブリッジでは、上側（電源側、ハイサイド）にPchFET、下側（接地側、ローサイド）にNchFETを用います。回路図に次のようになります!![Hburiburi.png](https://qiita-image-store.s3.amazonaws.com/0/317969/e5c6f283-d069-96ac-4341-116337541a64.png)

...ここで突然ですがFETのお話になります！！（今更感）。
FETというのは言ってしまえば電気で動くスイッチの一種です。ついでに言っておくとここまで私が口にしてきたFETとは全てMOSFETのことです（それ以外について知りたい方は各自で調べてください）。
FETには主に3つの端子があります。上の回路図のFET（どれでもいいです）を見ていただいて、
1の端子がドレイン
2の端子がゲート
3の端子がソース
となっています。
FET自体の動作ですが
ソース端子を基準として、ゲート端子の電圧が高いか低いかでドレインからソース（もしくはソースからドレイン）に電流が流せるかが決まります。
ここで、
Nchではソース端子よりもゲート端子の電位が高いときにドレインからソースに向かって電流が流せます
Pchではソース端子よりもゲート端子んｐ電位が低いときにソースからドレインに向かって電流が流せます。
そして上のPN混合の回路ではPchFETの基準電位（ソース）は電源になっています。
ここまで言えばカンのいい人は気づくと思います、「じゃあフルNchの場合ハイサイドのNchFETはどこを基準にしているんだ？ハイサイドのNchの基準を電源にしたらFETをオンできないしそもそも電流の向きが違う」と、そのとおりです、なのでフルNchMDでは次のような回路構成になります。
![Hburiburi.png](https://qiita-image-store.s3.amazonaws.com/0/317969/68c5bcb7-63ad-d12c-6875-d84e4a15da55.png)
はい、そうです、モーターの端子のところを基準にします。ここで1つ問題が発生します。それは何か、モーターの端子電圧は電源やグランドと違って一定ではないということです。モーターの端子電圧はモーターというものの特性上いくらかの電圧が発生したりしています（あやふや）。ではどうすればハイサイドのFETをオンすることができるのか...

一言でいうと、「ゲートへの入力電圧にモータの端子電圧を足す」です。そうすればモータの端子電圧とはかかわりなくゲートに常に一定の入力を入れることができます。
「えっ？そんなことができるんですか？」と思ったそこのあなた、できるんです、これが、めんどいですが。
最初の方に私がゲートの制御がめんどいと言っていたのはそういうことです。できるにはできるがそのための回路を一から組むのは非常にめんどくさい。
ので、今回はゲートドライバという回路素子を使います。
今回使用するゲートドライバICはIntersil クワッド MOSFETドライバ HIP4081AIBZです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/317969/1e2a0c21-7fd8-399a-0d4a-4e4b7f59651f.png)
なんとこのIC、これ一つでフルNchのHブリッジを制御できます、まあ多少の外部素子は必要ですが。
ここまでして、なぜフルNchにこだわるかというと、単純にその方が流せる電流が大きくなるからです。実はPchFETはNchFETに比べ流せる電流が少ないのです。原理について説明しだすと本当にキリがないので説明しません。興味のある人はググってください。
と、いうわけでこのICとHブリッジ、その他のマイコンとか絶縁用素子とか、一部部品の電源とかパスコンとか諸々を組み込んで出来上がった回路がこちらになります。![Hburiburi.png](https://qiita-image-store.s3.amazonaws.com/0/317969/d8442b3f-d869-c27d-530d-5ea983aef94a.png)
はい、まあいきなりこんなもの出されても意味わかりませんよね（解像度も低いし...）、順を追って説明していきます。画像も各部に分けて貼りなおすので安心してください。
![Hburiburi2.png](https://qiita-image-store.s3.amazonaws.com/0/317969/11b34151-af8a-34c3-7f9f-64832070b33e.png)
まずはマイコン及びコネクタたちです。
特に説明することもないです。
メインのマイコンから指令を受けたり、センサーからデータを受け取ったりしながら、先ほどセンサー説明したゲートドライバICに指令を出します。
指令と言っても信号線3本で済みます。モーターの回転状態（正転、逆転、ブレーキ、フリー）を決定する線が2本（2本の信号線のHIGHとLOWの組み合わせで回転状態を決めます）とモーターの回転する速さを決定するPWM信号を送る線が1本です。
PWMというのは「パルス幅変調」というもので、1周期の、オンの時間とオフの時間の割合を調整することで出力を調整する方法です。
あと、コネクタたちは、マイコンにプログラムを書き込んだり、センサーにつながったり、電池につながったり、モーターにつながったりします。
![Hburiburi5.png](https://qiita-image-store.s3.amazonaws.com/0/317969/d507d1a3-0590-1712-34ff-f999f3b5473b.png)
![Hburiburi1.png](https://qiita-image-store.s3.amazonaws.com/0/317969/3c1eb485-0f4b-e730-11cc-280a00194e42.png)
次はモータの回転状態のインジケータ（画像1枚目）とマイコン側とモーター側の絶縁（画像2枚目左）、そして先ほど説明したゲートドライバとその周辺回路（画像2枚目右）になります。
ではまずインジケータ回路について、見ての通り、マイコンからゲートドライバICに指令を送る3本の信号線に並列にLEDが入っています。
これらの動作を説明していきます。
まず、信号線の状態とモーターの状態の対応は次のようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/317969/bda4c905-2aed-b95b-2e23-8c2dea56bb79.png)
この表の時のLEDの動作を考えてみましょう
まずPWMの線がLEDのアノード側にあることから、PWMがLOWのとき、LEDはどちらも消灯することになります。
そしてPWM線がHIGHの時カソード側にあるA,B線の状態によりLEDの点灯状態は変わってきます、一例として、PWMがHIGHでA線がLOWの時、赤LEDは点灯します。
以上のLEDの動作も含めて再度表を作ったものがこちらになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/317969/c011e297-b3e0-3f56-52cd-7507c08e49ed.png)
この表を見ると、モーターの状態とLEDの点灯状態の対応が次のようになっていることがわかります。

正転　　→　黄LEDのみが点灯
逆転　　→　赤LEDのみが点灯
フリー　→　どちらのLEDも消灯
ブレーキ→　どちらも点灯orどちらも消灯

これでモーターの状態ごとに異なったLEDの点灯状態となり、LEDがモーターの状態を示すインジケータとなりました。また、PWM線は先ほど説明した通り出力の調整を担っているため、モーターの回転速度がLEDの光の強さに反映され、どの程度の出力をモーターに送っているかも（おおまかにですが）わかります。
フリーとブレーキのどちらもで、「両方のLEDが消灯」という状態が発生しますが、これはプログラムによって比較的簡単に回避可能です（というか動作的にはどちらも停止なので回避せずとも大した問題は起きません）。
回転状態のインジケータについてはマイコンに直接LEDを接続してプログラムによって制御してもいいのですが、プログラムの内容によっては回転状態がLEDに反映されませんし、何よりマイコンのGPIOを余計に2本使用することになります。さらに言うと、今回使用しているマイコンにはPWMを出力できるピンが1か所しかないためモーターの出力をLEDの光の強さに反映することができません。そういった理由からインジケータの設計は回路図のようなものにしました。

では次に画像2枚目左の回路（マイコン側とモーター側の絶縁）について説明していきたいと思います。大丈夫です、さっきほどは長くならないはずです。
マイコン側とモーター側を電気的に絶縁する理由はこうです、

・モーターを回したりすると電源に割と大きめのノイズが発生する
・そのノイズがマイコンとかに加わると最悪マイコンが死ぬ
・それは嫌だ

なので絶縁します。そのために今回はデジタルアイソレータ（シリコンラボ社、Si8645BA-B-IU）を使用します、名前のまんま、絶縁器です。入力側と出力側にそれぞれ違う電源を接続して、入力と出力を電気的に絶縁したまま信号を伝達することができます（回路図よく見ていただくとわかると思いますが、部品の右側と左側で電源とグランドの名前が違います）。
こうすることでモーターのノイズがマイコン側に流れ込んでくることを防ぎます。

最後に画像2枚目右側についてですが、これは先ほど説明した通りなので割愛、しいて言えばデバイスの仕様に合わせて外部に部品を追加しています。
コンデンサでモーターの端子電圧をFETへの入力へ加算している
ダイオードで電流の向きを固定している
くらいですかね（実際はもうちょいややこしいですが私の認識はその程度です）。

![Hburiburi3.png](https://qiita-image-store.s3.amazonaws.com/0/317969/74b7ca5e-4c78-c56a-5fc9-a1bc08214fa2.png)
先ほどのデジタルアイソレータの電源用のDCDCコンバータ（LinearTechnology社製、LT1934）です。
モーター側の電源は12Vですが、デジタルアイソレータの動作電圧は5Vなので、この回路を使ってデジタルアイソレータ用の5V電源を生成します。
このデバイス自体は5V以外の電圧も生成できますが、今回は5Vが欲しいのでデータシートに載っている5V用の周辺回路をそのまま利用しました。便利ですね。
別に三端子レギュレータでも良かったような気もしますが、わずかな発熱すらも嫌った筆者によって決定されました（他人事）。まあこのデバイス結構高い（一個500円超え）んでMD一枚につきこれが一つ乗ってるのは結構アホッぽいです。

![Hburiburi4.png](https://qiita-image-store.s3.amazonaws.com/0/317969/4c36fa35-50d2-762f-a4a6-41d9838d99d6.png)
Hブリッジです、さっきも説明した通りです。え？さっきと回路図が違うじゃないかって？大丈夫です、何も変わってません。変わったのは大電流を流せるようにFETをソースが5ピンあるもの（Infenion社製IRFS3004）に変えただけです。

以上回路設計のコーナーでした（ラジオ風）。

#4.パターン設計
ここまでで設計した回路図をもとにネットリストを生成します。
とはいえ、それはKiCADが自動でやってくれるので、我々がするのはボタンを一つ押すだけです。便利ですね（9行ぶり、2回目）
生成したネットリストをKiCADのPCBエディタで読み込みます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/317969/d66f5386-a57c-bfd6-460c-fd04b7d872c3.png)
読み込むとこんな感じで全ての部品が1か所に集まった状態で出てきます。
この時点で部品の端子同士を回路図と同様につないだ補助線が表示されており、この補助線を頼りに配置・配線を行ったものがこちらになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/317969/dd599f0f-8fdf-90a3-eaf8-1e9c24fba993.png)
これでパターンの設計は完了です。一部、部品が重なっているようなところがあるかと思いますが、基板の表と裏に配置しているので問題はありません。
そしてこの基板をKiCADの3Dビューワで見たものがこちらになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/317969/1b3fd36b-737e-4d53-1b69-c304f1a163a6.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/317969/2e7edf7c-1bb1-5f90-0fe7-f576157ec345.png)
穴が開いているはずのところが塞がったりしていますが、パターン設計の図面上は問題ないのでスルー
（さらっとパターン設計を終わらせましたが、発注先の企業によって規格、例えば最小線幅とかが違うのでそこらへんの設定しとかないとあとあと泣きを見ます）
では発注していきましょう。

#5.発注・製作
発注についてですが、結構面倒なうえに私自身人から教わった通りにやっただけなのでここには書きません（書けません、ごめんなさい）。今回はfusionPCB　https://www.fusionpcb.jp/fusion_pcb.html?gclid=CjwKCAiA9efgBRAYEiwAUT-jtDT0BIj_zlZ-BEN5P131OPZJiK7-g34RNPFmXGBEYK2T43EuTsUENxoCeoUQAvD_BwE
にデータを送り、プリント基板を作っていただきました。（10枚程度までならかなり安く作ってくれるので、試作にはもってこいです）

さてさて届いた基板がこちらになります。![IMG_3909.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/077cf1f2-1a94-7cf3-a114-701a8ce155f3.jpeg)
![IMG_3910.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/aa310993-a16d-e3a1-2d5e-d7bbd98403ba.jpeg)
少々画像が暗いですが、設計通りのプリント基板ができました。素晴らしい。
ちょうど同じ日に部品も届いていたので部品のチェックをしてさっそく製作を...
![IMG_3914.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/97f9f96c-74aa-5d38-463c-da854abe0d2a.jpeg)
ん？...
<img width="768" alt="IMG_3915.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/317969/4162fff3-6c0f-0840-42f5-d43cd6c03c0c.jpeg">
おい！おい！おい！死んだわこいつ
あああああああフットプリント間違ってりゅううううううう！！！！！？？？？？

い、いやまあこれは部品の足伸ばせば何とかなるやろし、ほかの部品のチェックを.....？
![IMG_3916.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/a8ba364b-5b80-9475-60fc-6964c38c7e05.jpeg)
おい.....おい！？
<img width="768" alt="IMG_3917.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/317969/21e49d2d-1148-07ca-a5d8-4778db6dd9b1.jpeg">
ちょっ！！？？部品に対してフットプリントの幅が足りてない、だと...？納期が迫っているというのに....
軽く絶望しましたね。
この部品を手ではんだ付けしようとしたところ、基板1枚とマイコン3個をダメにしました。
えっ？この状態からでも入れる保険があるんですか？！
そんなものはあるはずもないですが、対応策は一応あります。

というわけで、リフロー（基板全体を炉で熱しはんだ付けをする）を試みることに...
当然リフロー専用の炉などあるわけもなく
![IMG_3935.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/880819bf-bfe4-a6a5-e538-f3470efa092c.jpeg)
正気かこいつ？
いえいえいたって正気です、基板全体を熱せればよいのでそれがオーブントースターでも問題はないはずです。さて果たしてこの方法で部品はつくのやら...
![IMG_3936.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/01a42b20-6738-aed0-38a8-d05b9c7386c2.jpeg)
うーん火力が足りなかったようですね、はんだが溶けた痕跡がありません。
仕方がないのでもう一つの方法を試してみましょう。
![IMG_3938.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/0a942946-a042-ecef-c2b9-020fa5d1f45a.jpeg)
はい、そうですホットプレートです。というか自宅リフロー的にはトースターよりもホットプレートの方が一般的です。
![IMG_3946.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/2fe13b20-8c5a-8246-11ca-4560d6c15cd5.jpeg)
こんどはちゃんと付いたみたいです。というわけでマイコンのはんだ付けはこの方法で行きましょう。
さてもう一つ問題のデジタルアイソレータの方ですが、とりあえず基板にマスキングテープで仮止めして、足に導線をつないでいくことに...
![IMG_4004.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/37516ec1-9858-f2ea-4da8-b6ede6a42c70.jpeg)
気が狂いそう....
これ部品1個付けるのに部品の足をブリッジさせたりしながら7時間ぐらいかかりました（よく部品が熱でダメにならなかった）。
というわけで、こんな方法で基板9枚も作ってられないので別の方法を
![IMG_4005.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/f1068f3f-9ff1-1a59-7e9c-f817848ff6b7.jpeg)
欲しい場所にランドが無いなら作ればいいじゃない！
つまりそういうことです。作業時間が6時間ほど短縮されました、やったね。

と、まあそんなこんなで完成しましたフルNchMD
![IMG_4090.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/2f474231-5f60-78ed-171d-199213f9be77.jpeg)
![IMG_4091.JPG](https://qiita-image-store.s3.amazonaws.com/0/317969/53029bad-80e8-9832-d2e5-f2edd3947e38.jpeg)
さてさて、それでは動作確認と参りましょう。

#6.動作確認
さすがに最初からモーターをつなぐのは怖いので、まずはインジケータを利用して、ロジックが正しく動作しているかを確認しましょう。
コントローラーのR2を押したら正転、R1を押したら逆転、離したらブレーキというプログラムです。
![90v5d-lzmu2.gif](https://qiita-image-store.s3.amazonaws.com/0/317969/fdaa6016-b572-280c-a244-2c63890652cc.gif)
問題なさそうですね。
今回はブレーキとフリーをどちらもLED全消灯で作っています。
それではいよいよ実際にモーターをつないで動かしてみましょう。

![yxx2e-7v3tj.gif](https://qiita-image-store.s3.amazonaws.com/0/317969/7a02b894-dbf8-8bde-4951-dae9938af028.gif)

よしっ、動作も問題なさそうです。
それでは今回はこれで終了です。最後に少しまとめやら感想やらを書かせていただきます。

#7.まとめ
いや～何とか動かすことができました、納期にも間に合ったので完全勝利ってところですかね。
そんなわけないですね、すぐイキる。今回の開発ではいろいろと問題点が見えてきました。

まず設計、発注段階でのミスですが、記事に書いてないミスが結構沢山あります。
・コネクタのピンアサインを間違える
・実はゲートドライバもマイコンと同じミス（手ではんだ付けできたのでスルー）
・ネジ止め用の穴をつけ忘れたため当初の予定より基板が大きくなった
・耐電圧が使用する箇所で発生する電圧より低いコンデンサを買った
などなどいろいろミスをやらかしています。

あと動作テストの動画では一発で動いてるように見えますが、デジタルアイソレータまわりで結構イザコザがありました（ほとんどははんだ付け不良が原因でしたが）

なにより作業を始めたのが納期ギリギリだったせいで、設計のチェックに十分な時間を割くことができず設計ミスに気付かなかったこと、再発注する時間すら残っていなかったこと。
フットプリントはちゃんと自分で作るべきでした、はい。

それに、いくら予算に余裕があったとは言え、コストを掛けすぎた感は否めないです、なんせこのMD、1枚4000円近くするので。次はもうちょっと値段を抑えた設計にしたいと思います。

まあ、何はともあれここまで長々とお付き合いいただきありがとうございました。
それではまたどこかでお会いしましょう。