モータの鳴らし方byHanDen

電子工作の初心者がモータを演奏したりVVVF音を再現したりする方法を紹介するブログ ホビー向けの電子工作を基礎から書いていきます 記事のミス等のお問い合わせはTwitterにてお願いします。 当ブログを参考に製作をする際は必ず自己責任にて行ってください 当ブログを参考にしたことによる損害等の責任は一切負いません ドメイン取得につきURLを http://vvvf.blog.jp から http://blog.henden.net に変更しました

KiCad5の使い方 5章プリント基板エディタPcbnewの使い方 その2

5-4 フットプリントのロック

1
3-12 フットプリントロック

 

フットプリントを右クリックし「ロック中」, 「ロック」または「ロック解除」(図3-12の□囲み)を実行すると、フットプリントのロックおよびアンロックが可能です。フットプリントをロックすると、移動などの時は本当に移動するかを聞かれるほか、ネットリスト読み込み時に削除の設定が入っていても、自動削除されなくなります。また、フットプリントを選択した状態で「L」キーを押すとロック、ロック解除の切り替えができます。

 

5-5 フットプリントの配置

フットプリントの配置で使う機能は基本的に「移動」と「回転」と「裏返し」程度で使う機能自体は非常に少ないです。しかし、この配置が基板のすべてを決めるといってもいいくらい重要な項目で、出来上がった基板の見栄えやはんだ付けの難易度、配線の難易度などが大きく変わります。このことを考えたうえで適切な配置をする必要があります。

「移動」と「回転」は回路図エディタと同じ方法で実行できますが、ここでも再度紹介します。

移動は、カーソルを移動したい部品の上に置いたうえでキーボードの「M」キーを押す(または右クリック「移動」(5-131))と移動が始まります。フットプリントを移動したい移動先に移動させて、その位置でクリックしてすることで移動を完了できます。(キーボードは半角モードにしていないと反応しないので注意してください)

2
5-13 フットプリント配置

回転はカーソルを回転したい部品の上に置いたうえでキーボードの「R」キーを押す(または右クリック「左回転」(5-132)を実行する)で左向きに90度回転します。(右クリック「右回転」を選んだ場合は右に90度回転)また、移動中に「R」キーを押して回転させることも可能です。

 

裏返しは両面基板において、部品を基板の表面に実装するか、裏面に実装するかを選ぶ機能です。初期の状態では表面に部品が配置されていますが、「裏返し」をすることで裏面に部品を配置することができます。方法は、カーソルを裏返したい部品の上に置いたうえでキーボードの「F」キーを押す(右クリック「裏返す」(5-133))(移動中に「F」キーを押しても実行可)と部品が裏返されて、部品の枠線などの色が裏面の色に変わります。

14
これらの操作を繰り返して、基板上に部品を配置していきます。


5-6 配線

配線を始めるにあたって、まずは「配線」(図5-43)をクリックして配線をするモードに入ります。

4
続いてレイヤーの選択をします。なお、表と裏のレイヤー切り替えは「V」キーでも可能です。

3
5-14 配線

 4

5-4 右メニュー

 

配線を開始したいパッドをクリックすると配線が開始され、接続先のパッドが図5-14のようにハイライト表示されます。配線をハイライト表示された接続先につなぎクリックすると配線の接続が完了します。配線幅はデザインルールで設定したとおりです。また、デザインルール上配線を通せない箇所がある場合は図5-15のように迂回ルートを自動で見つけ出されます。便利に見えますがお節介な機能なので配線をいったん中止し通せる場所を再検討すると良いかもしれません。なお、迂回ルートが見つからないときは通せなくなった地点で配線が止まります。

配線を途中で中止したい場合はキーボードの「Esc」キーを押すと作業の中止ができます。(配線以外にも移動なども同様に中止できます)

4
5-15 自動迂回

 

5-7 配線の機能

5
5-16 グリッド

配線やフットプリントの配置の基準となる、グリッドの間隔は上部のグリッド(図5-16)部から選択できます。DIP系だとピッチの半分の1.27mm程度が扱いやすいですが面実装などをする場合はもっと細かくすると自由度が上がります。

6
5-17 経路指定

配線の経路を指定したい場合は、経由したい地点をクリックすると、配線がクリックした個所を通るように配置されます。

7
5-18 ビアを配置

配線の途中で、配線を基板の表から裏、裏から表に移動させたい場合はビアを配置します。ビアの配置は配線を行っている途中で、ビアを置きたい場所でキーボードの「V」キーを押します。(ビアを配置したい場所で右クリック、「貫通ビアを配置」でも可) するとビアが配置され配線のレイヤーも自動的に表から裏、裏から表に移動し、逆の面で配線を続けることができます。

 配線関連はKiCad4.0.7で紹介したレガシーツールとは挙動が大きく変わっていますので注意してください。

8


 

5-8 配線の削除

配線の経路指定やビアの配置を繰り返して配線作業を進めていきますが、途中で既存の配線が邪魔で新たな配線を引けなくなる場合もあります。その場合は既存の配線を一旦削除したうえで、新しい配線と既存の配線を引き直します。配線の削除はやり方により2種類に分かれます。それは配線上にカーソルを置き「Delete」キーを押すことで実行できる配線の削除セグメントを選択して削除を行うセグメントの削除です。それぞれ以下のような機能を持ちます。

配線の削除:パッドとパッドの間の配線全体を削除します。ただし、3つ以上のパッドをつないでいる配線の場合は削除操作をしていないパッド間の配線は残ります。

セグメントの削除:配線の角やビアの間の一直線区間(セグメント)のみを削除します。配線全体を削除する必要がなく一部分のみ削除したい場合に使用します。

状況に応じてこの削除方法を使い分けます。Deleteキーでの削除の場合も配線をクリックしてセグメントが選択された状態になるとセグメントの削除になります。もちろん、右クリックのメニューでの削除もセグメントの削除です。また、右ツールバーの削除(図5-48)で配線の削除を実行する場合は「セグメントの削除」になります。

9
5-19 削除


また、配線を切断したい所で、右クリックの「配線を切断」をするとセグメントの分割が可能です。

 

5-9 配線の移動

既存の配線の移動や、配線済みのフットプリントを移動して、引けない配線を引けるようにする場合もあります。

配線を移動させる場合は、配線にカーソルを置いた状態で「M」キー(右クリック「ノードを移動」も可)を押します。角や表裏で配線が重なっている場合「明示的な選択」メニューが表示され、移動する配線のセグメントを聞かれるので移動したい方を選択します。すると選択したセグメメントの移動ができるので移動先でクリックして位置を確定させます。

11
10
5-20 配線の移動

 

配線のドラッグは、配線がつながったまま選択地点を移動させる機能です。移動したいセグメント上にカーソルを置いた状態で「GorD」キーを押すと(または右クリックで「ドラッグ(自由角度)or「ドラッグ(45度モード)」も可)選択地点を配線がつながったまま移動できます。(45度モード「Dキー」は配線角度が45度固定でドラッグできます)

12
3-21 配線のドラッグ

 

5-10配線後のフットプリントの移動

フットプリントの移動は回路図エディタの時と異なり配線がつながったままのドラッグはできません。(レガシーツールセットでは可能でしたがモダンツールセットで廃止になりました) そのため、フットプリントのみが動き、接続済みの配線は動かず接続が解除される「移動」のみ使えます。

使用方法は「移動」はフットプリントの配置の際の「移動」と同様に移動したいフットプリントに置いた状態で「M」キーを押すと(または、右クリック「移動」)フットプリントを移動できる状態になります。フットプリントを目的の場所に移動させて、クリックすることで移動を確定させます。

13
14
3-22 フットプリントのドラッグ

 

これらの操作を繰り返して、すべての配線を接続していきます。

全ての配線の接続が完了すると下部に表示されている、「未配線」の数が0になります。

15
3-23 残配線0

この表示を確認出来たら配線作業は完了です。

KiCad5の使い方 5章プリント基板エディタPcbnewの使い方 その1

今回からは基板のアートワークを行うPcbnewの使い方の紹介です。

5
最初に「Pcbnew(上図↑3)を開きます。
1
5-1 起動画面

起動するとこのような黒い画面が表示されます。Pcbnewはメニューが非常に多いのでツールバーを3つに分けて機能を紹介します。

なお、本章では「モダンツールセット」を使用して解説を行います。(設定は上部メニュー「設定」→「モダンツールセット(アクセラレータA)」を選択します。)

まずは上部のメニューから

2
5-2 上部メニュー

1:基板セットアップ プリント基板のレイヤー設定やデザインルールの設定を行う項目です。配線幅やビアの穴径などはここで設定します。

2:ページ設定 プリント基板エディタの全体のサイズを設定します。プリント基板でA4を超えることはまずないと思うので、基本的にはそのままで大丈夫です。

3:プロット プリント基板製造会社に送るデータを生成する機能です。

4:画面の再描画 フットプリントのデータを変えたときなどに表示をすぐに反映させる機能です。基本的には自動で反映されるので使うことはないと思います。

5:基板またはページに合わせてズーム 拡大しすぎたときや縮小しすぎて現在の場所がわからなくなった時に拡大率を初期の状態に戻す機能です。

6:フットプリントエディターを開く フットプリントを編集する画面を開きます。

7:フットプリントビュアーを開く 登録されているすべてのフットプリントを表示させる画面を開きます。

8:ネットリストをロード 回路図エディタで出力したネットリストを読み込む機能です。

9:回路図から基板を更新 ネットリストを介さずに回路図からフットプリントや接続状態等の回路の情報を読み込む機能です。

10:デザインルールチェックを実行 設計した基板がデザインルールに反していないかを確認する機能です。

11:レイヤー選択 基板の表裏の配線や基板印刷などのレイヤーを切り替える機能です。

12:Eeschemaで回路図を開く 回路図を編集したいときなどにEeschemaを開きます。

13:Pyhonスクリプトコンソールの表示/非表示 スクリプトを実行するためのコンソールの表示非表示を切り替える機能です。

 

次に左側のメニューです。ここは主に表示関連のメニューが多いです。

3
5-3 左メニュー

1:デザインルールチェックを無効(有効) デザインルールに違反した配線を引くことできなくするリアルタイムDRCの機能の有効無効を切り替えるボタンです。理由がない限り使うことはありません。通常はこのDRCを有効状態(画像のように選択されていない状態)にします。また、この機能はレガシーツールセットでのみ有効です。KiCad5では通常はモダンツールセットとなるためこの機能は使えません。

2:グリッドを非表示(表示) 画面のグリッドの表示非表示を切り替える機能です。グリッドがない状態は作業しにくいので通常は有効にしておきます。

3:mm(inch)単位 表示の単位を切り替える機能です。日本では基本的にmm単位で使われるのでmm単位を選択しておきます。

4:ボードのラッツネストを非表示(表示)  配線が未接続のコンポーネントの接続先同士を結ぶ線(ラッツネスト)の表示非表示を切り替える機能です。

5:ゾーンの塗りつぶしを表示(非表示、アウトラインで表示) ゾーン(ベタグランドなど基板のパターンを面で作る箇所)の表示の切り替えです。好みや必要に応じて使い分けます。

6:アウトライン(塗りつぶし)モードでパッドを表示 パッドの表示をアウトラインモード(パッドのふちのみ表示)と塗りつぶしモードで切り替える機能です。基本的に塗りつぶしモードの方が見やすいと思います。

7:アウトライン(塗りつぶし)モードでビアを表示 ビアの表示をアウトラインモード(パッドのふちのみ表示)と塗りつぶしモードで切り替える機能です。

8:アウトライン(塗りつぶし)モードで配線を表示 配線の表示をアウトラインモード(パッドのふちのみ表示)と塗りつぶしモードで切り替える機能です。塗りつぶしモードの方が見やすいです。

9:ハイコントラスト表示モード 画面の表示の色合いを変える機能です。基本的に使わないと思います。

 

続いて左側のメニューです。ここは基板の中身の編集系のメニューが主です。

4
5-4 右メニュー

1:ネットをハイライト 任意のパッド・配線を選択すると配線で接続されるべきパッドがすべてハイライト(強調)表示される機能です。

2:フットプリントを追加 回路図に無い部品を追加する機能です。主に固定用の穴やロゴなどを追加するときに使います。

3:配線を追加 部品のパッド同士を接続する配線を行う機能です。

4:ビアを追加 基板中にビアを追加する機能です。ベタグランドの上層下層間の接続などに使います。

5:塗りつぶしゾーンを追加 ベタグランドなど基板全体または一定の範囲を銅箔で覆いたいときに使います。

6:キープアウトエリアを追加 部品や配線を配置することを禁止するエリアを設定する機能です。

7:図形ライン(円、円弧、ポリゴン)を追加 基板上に図形を配置するときや基板の外形線の描くときに使います。

8:銅体層または図形層にテキストを追加 基板上に文字を配置したいときに使用します。

9:アイテムを削除 フットプリントや配線を削除するときに使用します。

10:距離を計測  基板内の任意の場所の距離を計測する機能です。

 

5-1基板の外形線の作成

最初に、レイヤーを「Edge.Cuts」に変更します。

5
5-5 レイヤー

画面右側の図のようなレイヤー表示部の「Edge.Cuts(5-5←)の右側の青いが表示された箇所(図のの交点部)をクリックするとレイヤーが切り替わります。(ほかのレイヤーに切り替える場合も同様に各レイヤー名の左の空白(の列)をクリックします)(上部のメニューからの切り替え(図5-2↓8)も可能)

続いて外形線を引きます。「図形ラインを追加」(5-4←6の一番上)をクリックして直線の図形を描くモードに切り替えます。カーソルが鉛筆に変わったことを確認して、外形線を引き始めたい場所でクリックして、外形線を引き始めます。

5
5-6 座標

カーソル座標のdx,dyを確認しながら、外形線の角にしたい場所でクリックします。すると外形線の一辺が作成されます。dx,dyは線を引き始めた箇所からの距離なので斜めの線でなければ線の長さと同じです。四角形のほかの辺も同様に描き、4辺すべてが描き終わる箇所(外形線の開始地点と同じ場所)でダブルクリックをして、外形線を確定させます。(ダブルクリックすると引いた線が確定される仕様なので、外形線の途中でダブルクリックをして一旦確定させて、再度終端地点から線を引くなど複数回に分けて描くことも可能)

7
5-7 外形線

3-7のように黄色の線の四角形ができていれば、外形線は描けています。

 

 

5-2 ネットリストの読み込み

上部のツールバーの「ネットリストをロード」(図5-2の↓8)をクリックして「ネットリスト」を開きます。

8
5-8 ネットリスト読み込み

初めにネットリストのファイルをフォルダアイコン(5-8の→1)から開きます。初回のネットリスト読み込みの際は特に設定の変更をせずに、下部「基板を更新」(↓2)をクリックしてネットリストの読み込みを始めます。ネットリストの読み込みをする際に、取り消しができないというメッセージが表示さるので「はい」をクリックします。回路図エディタでフットプリントを正しく設定していた場合は特にエラーがなく終了します。

回路図エディタで正しくフットプリントの設定ができていない場合、「メッセージ」に下図のようなエラーが表示されます。この場合、Eeschemaでエラーが表示されたコンポーネントのフットプリントの設定を修正して、再度ネットリストを出力し、Pcbnewで読み込みをします。

6
5-9 エラー

また、基板作成中の仕様変更などでネットリストを再度読み込む場合は、状況に応じてそれぞれの設定を変更する必要があります。

フットプリントを更新:回路図エディタで部品のフットプリントの変更を行った場合はチェックを入れる必要があります。

複数のネットを短絡している配線を削除:配線の接続先が変わった際などに繋がってはいけない箇所がつながっている場合にその配線を削除する場合はチェックを入れます。

余分なフットプリントを削除:仕様変更により回路図から削除されるなどネットリストから消えた部品を削除する場合はチェックを入れます。ただし、固定穴などPcbnew上で追加した部品も削除されるので注意する必要があります。ただし、後述の「フットプリントのロック」を行った場合は削除されません。

孤立したパッドのネットを削除:配線が接続されず孤立してしまったパッドのネットを削除する場合はチェックを入れます。

ネットリストの読み込みが完了すると、下図のように読み込まれたフットプリントが表示されます。KiCad4では重なって出てきましたが5では改善されて重ならなくなりました。

 9

 なお、5-29の「回路図から基板を更新」でもネットリストの読み込みが可能です。こちらを使う場合は回路図エディタでネットリストの出力が不要になります。

 

5-3 デザインルールの設定

デザインルールは、配線の幅や間隔、ビアの大きさなど、基板を加工する際に守らなければならないルールです。

 図5-21「基板セットアップ」を開きます。図5-10←の「デザインルール」からデザインルールの設定画面を開きます。

6
5-10 デザインルール

デザインルールエディターの上部の「ネットクラス」の中に初期状態ではクリアランスが0.2mm 配線幅が0.25mm ビア径が0.8mm ビアドリルが0.4mmに設定されています。このうちクリアランスには配線同士の間隔(隙間)とビアや穴同士や配線との間隔をすべて一括にくくったものになっています。「マイクロビア径」と「マイクロビアドリル」については4層とかの基板にならない限り使うことはないので2層基板では設定の必要はありません。

業者に注文する場合は、業者で定められた、デザインルールを入力します。ただし、デザインルールギリギリでは製造に失敗する可能性があるので基本的には推奨値以上である程度余裕を持った値を入力しておきます。Elecrowに注文する場合は、「クリアランス」は0.203以上、「配線幅」は0.203以上の自分の希望する配線幅、「ビア径」と「ビアドリル」はデフォルト(0.6mm 0.4mm)のままにしておきます。

 

また、電源ラインなどで配線幅を変えたい場合は配線ごとにデザインルールを設定することが可能です。

7
3-11 デザインルール追加

デザインルールエディターの中ほどの「+」(図3-111)をクリックしてデザインルールを追加します。するとネットクラスの一覧に新規のデザインルールが表示されるのでその中の←2部に追加するデザインルールの名前(正式にはネットクラス名と言います)を入力します。

次に新たなデザインルールを設定する配線を選びます。画面右下の「ネット」の中から変更したい配線を選び右側(3)のドロップダウンリストから新たなデザインルール(変更先)を選択します。

しかし、VccGND以外で配線を太くする場合、配線のネット名を調べる必要があり大変です。そのため、配線幅を変更したくなった時にその都度「基板セットアップ」を開き、配線幅を変更するのもありかもしれません

KiCad5の使い方 4章 シンボルエディターの使い方

今回はピン設定が「不特定」になっていて、ERCを通した際にエラーとなる現象を改善する方法と新しいシンボルの作り方を紹介します。

 5
まずは、上図の↑2のシンボルエディタを起動します。

 1

4-1 起動画面

表示されているアイコンで今回使いそうなものを軽く紹介します。

1:新しいシンボルの作成 ライブラリに存在しない部品を新たに作る時に選択します。←4の一覧から操作した方が使いやすいと思うのでこの項目はあまり使わないと思います。

2:すべての変更を保存 変更を保存するときに使います。

3:重複ピンとグリッドから外れたピンのテスト 名前の通り同じ番号のピンが重複していないか、またグリッドから外れたピンがないかをチェックする機能です。

4:ライブラリ・シンボルの選択 複数あるライブラリから自分が編集したいライブラリを選ぶ機能です。

5:シンボルにピンを追加 作成中のシンボルに新たなピンを追加する機能です。

6:シンボルのボディーにテキストピンを追加 作成中のシンボルにテキストを追加する機能です。

7:コンポーネントのボディーに○○を追加 コンポーネントの枠(形)などの図形を描く機能です。

 

4.1シンボルのピンの設定変更

まずはピン情報を編集するライブラリを選ぶために、図4-1の←4で示した範囲内から編集するライブラリ(PCB Parts Library」の場合は「SamacSys_Parts)クリックして、シンボルの選択画面に入ります。

2


 編集したいシンボルをダブルクリックするとメイン画面にシンボルが表示されます。

3-1

この中からピン情報を編集したいピンにマウスカーソルを合わせて「E」キーを押すか、右クリック、「編集」と進み、ピンのプロパティーを開きます。

3
4
4-2 ピンのプロパティー

4-2の←で示した「エレクトリックタイプ」をそれぞれの端子に応じた、設定に変更します。マイコンの場合IO端子は基本的に「双方向」、電源端子は「電源入力」にします。特にピンの機能を特定できない場合は「パッシブ」にしたら良いしょう。そして「OK」をクリックして設定を完了させます。この設定をすべての端子で行います。(一部初期で設定されている端子もあります)

 

設定ができたら図4-1の↑2の「すべての変更を保存」をクリックしてライブラリに変更した情報を保存します。

もし、ピン設定を変更したコンポーネントを別の名前で保存したい場合は、図4-1の←4内の編集中のシンボルを右クリックして「名前を付けてコピーを保存」(下図←)をクリックして別名保存の画面に進みます。

5
6
「名前」(上図←)に保存したいシンボルの名前を入力して「OK」をクリックします。別のライブラリに変更する場合は保存画面の下半分のライブラリの一覧から選択します。

そして、「Ctrl+s」または図4-1の↑2の「すべての変更を保存」でライブラリを上書き保存します。

これで、ピン情報の変更作業は終わりです。

 

4.2 新規シンボルの作り方

まずは、図4-1の←4で示した範囲内新たなシンボルを追加したいライブラリを選び右クリックします。

1
4-1 起動画面

 7

 新規シンボル(上図の色付き項目)をクリックし、新規シンボルの作成画面(シンボルプロパティー)を開きます。新規ライブラリにする場合は保存先を聞かれるので保存したい場所に設定してから同様の作業を行います。

 8

コンポーネント名(上図←1)と回路図やプリント基板に印刷されるリファレンス名(2)を設定して「OK」をクリックします。

すると、グリッドのみの画面が表示されるので図4-1の→7の「シンボルのボディーに〇〇を追加」のメニューを使いコンポーネントの外形を描きます。また、描いた外形線上にカーソルを置き「E」キーを押すか、右クリック「〇〇のオプションを編集」(下図色付き項目)をクリックして〇〇図形のプロパティーに入ると塗りつぶしの設定ができます。初期設定では「全面色で塗りつぶし」を選択すると外形線の色、「背景色で塗りつぶし」を選択すると黄色で塗りつぶすことができます。必要に応じて使ってください。(設定メニューの「色の設定」で色を変えることもできます)

910

外形が描けたら、図4-1の→5「コンポーネントにピンを追加」をクリックして、ピンを追加するメニューを開きます。
11

ピン名にはピンの名前、ピン番号にはピン音番号(数字)、角度はコンポーネントの左に出るピンは「右」、右に出るピンは「左」、上に出るピンは「下に」下に出るピンは「上に」を選びます。エレクトリックタイプは先ほどの設定変更時と同じ要領で設定します。そして「OK」をクリックすると、カーソルの先端にピンがくっついた状態になるので、ピンを設置したい場所でクリックして、ピンを固定します。〇がついている方がピンの先になるということには注意してください。この作業をすべてのピンが設置できるまで繰り返します。

すべてのピンが設置できたら、図4-1の↑3「重複ピンとグリッドから外れたピンのテスト」を実行し、エラーが出ないことを確認します。

最後に図4-1の↑2の「すべての変更を保存」をクリックしてライブラリにコンポーネントを保存します。

KiCad5の使い方 3章 PCB Parts Libraryのセットアップ 

今回はKiCadをさらに強化できるツールである「PCB Parts Library」の設定方法を紹介したいと思います。このツールはフットプリントもありますが、回路図エディタに対して特に有効なのでこのタイミングで紹介したいと思います。

 

まずはGoogleなどで「PCB Parts Library」を検索または以下のURLに飛びます

https://www.rs-online.com/designspark/pcb-part-library-jp

1
2-11  PCB Parts Library サイト

図の→の「LIBRARY LOADERをセットアップ」をクリックしてライブラリを入手するソフトをダウンロードします。

 

ダウンロードしたファイルを解凍し、「Library Loader」ディレクトリ中のインストーラーを実行します。

 2

4
今回も英語のインストーラーですが気にせず、「Next」で進みます。

5
インストール先を聞かれますが、特に変更する必要もないのでそのまま「Next」をクリックしてインストールを始めます。
6

インストールが終わったら「Close」で画面を閉じデスクトップの「Library loader」を起動します。

 7

起動したら、アカウントの登録画面が表示されるので、それぞれ入力します。

8
2-12 登録画面

入力項目は以下の通りです。

Title:自分の敬称を選びます。MrMsDrの中から選べます。

First Name:自分の名前を入れます

Last Name:自分の名字を入れます。

Company:会社名を入れますが、個人の場合は適当に入れればいいです

Job Role:自分の職業を選びます。学生の場合はStudentsです。

County:自分の国を選びます。日本の場合はJapan |JPを選びます。

Email(User Name):自分のメールアドレスを入力します。これが次回以降PCB Parts Libraryにログインする時のユーザー名になります。

Password: PCB Parts Libraryにログインするパスワードを設定します。

Confirm Password:上のパスワードの確認入力なので上と同じものを入れます。

Public Alias: PCB Parts Libraryでの表示名です。公開されるかもしれないので個人情報は入れないほうがいいかもしれないです。

Your ECAD Tool: PCB Parts Libraryで使用するCADを選びます。今回はKiCadを利用するので KiCad EDAを選択します。

I agree to the Terms: 利用規約に同意するかの確認です。リンク先を確認して同意できるならチェックを入れます。

すべての項目が入力出来たら「Register」をクリックして登録を完了させます。しばらくしたら登録したメールアドレスにアカウントをアクティベートするメールが届くので、メールに書かれているリンクをクリックしてアクティベートしてください。

 

登録が完了したら下のような画面になります。

2-2
2-13  PCB Parts Library通常画面

この段階ではまだ設定が終わっていないので次の設定へと進みます。図の→の「Settings」をクリックしてライブラリの保存先の設定ウインドウを表示させます。

11

表示された「KiCad Settings」ウインドウの「Browse」(図の→)をクリックしてライブラリの保存先を設定します。基本的には自分のドキュメントフォルダーに保存用のフォルダーを作って指定するのがよいでしょう。

ここまで設定出来たら、Library loader上での設定は終わりです。

次はKiCadを起動します。

5

上図↑2のシンボルエディタを起動します。

3

「設定」メニューの「シンボルライブラリーを管理」(図の色付き項目)からライブラリの設定画面を表示させます。

4
2-14 シンボルライブラリー

初めに上図の↓1の「グローバルライブラリ」をクリックどのプロジェクトでも適応される設定項目に変更します。続いて↑2「テーブルに既存ライブラリを追加」を選びます。Library loaderで設定したライブラリの保存先を開き、「SamacSys_Parts.lib」を開きます。そして、下部の「OK」をクリックして設定を完了させます。

14

これで、回路図のライブラリの設定はできたので、コンポーネントライブラリを閉じます。

 

次にフットプリントのライブラリの設定を行います。

5

上図↑4のフォットプリントエディターを起動します。

5
「設定」メニューの「フットプリントライブラリを管理」(上図の色付き項目)からフットプリントライブラリの管理画面を開きます。

6
2-15 フットプリントライブラリ

どのプロジェクトでも適応される設定項目「グローバルライブラリ」(上図↓1)が選ばれていることを確認して↑2「テーブルに既存ライブラリを追加」を選びます。先ほど設定したライブラリフォルダを開き「SamacSys_Parts.mod」を開きます。

7
 

最後にフォットプリントライブラリの管理画面の「OK」をクリックして、KiCad側の設定は終わりです。

 

次にパーツのダウンロードの仕方を紹介します。

Library loaderを起動させ、下図の↑で示した「Search for Parts」をクリックします。

20

Webブラウザが開き、ログイン画面が表示されるので、Library loaderの初期設定で設定したメールアドレス(ユーザ名)とパスワードでログインします。

21

ログインが完了するとこのような画面が表示されるので、探したい部品の型番を→のフォームに入力して、🔍マークを押すと、部品の検索が始まります。

22

検索が完了すると図のように一覧が表示されるので、自分が使用する部品をこの中から選び(主にパッケージの種類の選択になるとは思いますが)、←で示したオペアンプのアイコンをクリックして次に進みます。もし、使いたい部品が「Build or Request」となっている場合は、部品の作成のリクエストを送る画面になります。

23

まずは作成されている部品のダウンロード方法を紹介します。←の「FREE DOWNLOAN」をクリックしてダウンロードを実行します。ダウンロードが終わると自動的にLibrary loaderKiCadのライブラリに追加してくれます。追加が完了したら完了したとのメッセージが表示され、ダウンロードは完了です。

KiCadのコンポーネント一覧にダウンロードされた部品が追加されていることを確認してください。ただし、KiCadを起動した状態でダウンロードした場合はKiCadを再起動しないと反映されません。

 また、ここからダウンロードした部品の場合はフットプリントの設定があらかじめされているので、取り付け方を変更するなどがない場合は、フットプリントの設定は不要です。

 

次に部品の作成のリクエストの送り方です。
25

リクエストを送る部品を開き、赤色の←で示された「Package Category Pick One」をクリックして部品のパーケージの種類を選びます。

26
一覧から最も近いと思われるものを選び、そのパッケージをクリックします。近いパッケージが見つからない場合は
Otherを選びます。
27

最後に←の「SUBMIT REQEST」をクリックして部品作成のリクエストを送信します。

 

PCB Parts Libraryは非常に便利なツールですが、まれにフットプリントなどのデータに間違いがあることがあります。そのため設計時には必ず使用する部品と穴間などが正しいかどうかを確認してください。

 

またPCB Parts Libraryからダウンロードした回路図の部品データでピンの設定が正しくされておらず、「不特定」となっている場合があります。その変更法は次回で紹介したいと思います。(前回の時に次回と言ったけど気にしない…)


 

KiCad5の使い方 2章 回路図エディタの使い方 

まずは起動画面の回路図のようなアイコン(下図↑1)をクリックしてEeschemaを起動します。

5
1
2-1 起動画面

起動画面のよく使う機能は以下の通りです。

1:ページ設定を編集 回路図のシートの大きさや製作者名などを設定できます。

2:回路図シンボルをアノテーション 回路図を作成した後に各部品に番号を振る機能です。

3:エレクトリカルルールのチェックを実行 描いた回路図に電気的な異常がないかどうかをチェックする機能です。

4:ネットリストの生成 描いた回路図を基板設計のツールに受け渡すデータを生成する機能です。

5:シンボルを配置 回路図の要となる回路の部品等の配置をするツールです。

6:電源ポートの配置 電源やGNDの部品の配置を行うツールです。

7:ワイヤーを配置 部品同士をつなぐ配線を描くツールです。

8:バスを配置 複数の配線をひとまとめにしてつなぐツールです。大規模な回路にならないと使うことはないと思われます。

9: 未接続フラグを配置 マイコンやコネクタ等で使用せず空きになっている端子に取り付けるフラグです。エレクトリカルルールチェックでエラーが出ないようにするために使います。

10:ジャンクション(接続点)を配置 ワイヤーの交点を接続する際に使用します。

11:グローバルラベルを配置 回路図でラベルを配置したい場合に使用します。同じ名前のラベルは回路図上で接続されたとみなされるので注意してください。

12:アイテムを削除 部品や配線等を削除したいときに使います。

 

なお、大規模な回路の場合は→11と→12の間アイコンの階層分けの機能を視野性が高まりますが、KiCadの場合あんまり使い勝手は良くないのでここでは紹介しません。

 

最初に回路の規模に応じてページサイズを設定します。

2
2-2 ページ設定

左側の「サイズ」部から適当なページサイズを設定します。小規模な回路ではA4中規模でA3大規模だとA2ぐらいが良いでしょう。

 

2-1 部品の配置

「シンボルを配置」(図2-1 5)で部品の選択モードに切り替えます。カーソルが鉛筆に変わっていることを確認して、部品を配置したい場所で、左クリックをすると、「シンボルを選択」ウインドウが表示されるので、配置したい部品を選びます。なお、ver5では起動後初回に限り表示まで時間がかかるようになりました。

3
2-3 シンボル選択

シンボルは種類別に分類されているのでその中から選べます。また、「フィルター」(図2-3←)のところに部品名を入力して検索をかけることもできます。

KiCadのライブラリでは、下図のように同じNchMOSFETでも端子の配置順に複数登録されているものがあります。この場合は必ずデータシートを確認して使用する部品に適合した部品を選択します。(使用する部品の型番ごとにピン配置が異なる場合があるためです)

3-1
IC類などライブラリに登録されていない部品は、部品を自分で作成するか、RSコンポーネンツが提供している「PCB Part Library」を利用します。

 

2-2 部品の型番または定数とフットプリントの設定

Esc」キーで通常モードに戻り、配置した部品上にカーソルを置いた状態でキーボードの「E」キーを押すか、右クリック、「プロパティー」、「プロパティーを編集」で、シンボルプロパティーを開きます。

3-2

ここで、回路図上で部品の定数やほかの部品と重なって表示されている場合は下図のように「明示的な選択」というメニューが出ます。ここでは設定したい方の「シンボル〇〇」を選びます。

以後同様のメニューが表示された場合は、編集したい部品を選択します。

3-3
4
2-4 シンボルプロパティー

「定数」(図2-4 ←1)の部分に型番または部品の定数を設定します。次に「フットプリント」をクリックし右側のライブラリアイコン(→2)を選び、フットプリントの選択画面に進みます。

5
2-5 フットプリントブラウザ

ブラウザ内から、使用する部品に適合したフットプリントを選択します。

探すライブラリはICでは「Package_**」、MOSFETやトランジスタでは「Package_TO_SOT_***」、抵抗器やコンデンサ、ダイオード、コネクタなどは部品名のライブラリです。また、ライブラリ名でTHTとあるのはスルーホール部品で、SMDとあるのは表面実装の部品です。これらのライブラリの中から、使用する部品と同じ、大きさやピッチ、パッケージのフットプリントを選びます。(間違えると基板が使えなくなります)ライブラリ内にフットプリントが存在しない場合は自分でフットプリントを作る必要があります。

正しいフットプリントが選べたら、フットプリント名をダブルクリックすると、フットプリントが確定され、シンボルプロパティーに戻ります。そして、「OK」をクリックしてフットプリントの設定を確定させます。

 

部品の挿入とフットプリント・型番or定数の挿入の操作を繰り返して、設計する回路に必要なパーツをすべて回路図上に配置します。部品はコピーすることができるので、同じパーツが複数ある場合は、フットプリントを設定したあとでコピーをすると手順を大幅に減らすことができます。

コピーは、コピーしたい部品上にカーソルを置いて「C」キーを押すまたは部品上で右クリック,「複製」をすると、マウスカーソルの先端にコピーされたパーツがくっつき、コピー先でクリックするとコピーが確定されます。

5-1
また、部品を右クリックしたメニューの「角度」の中には回転やミラーなどがあるので、必要に応じて使います。(回転はキーボードの「R」キーを押しても実行可)また、「〇〇を移動」を選択すると(またはキーボードの「M」キーを押しても実行可)部品の位置を移動することもできます。ドラッグに関しては現時点では使用する必要はありません。(今は移動と同じ)
5-2

 

2-3部品同士のワイヤー接続

「ワイヤーを配置」(2-17)でワイヤーの接続モードに入り、図2-6の↑で示したような各部品のピンの先端の未接続の印(〇又は□の印)の部分をクリックしてワイヤーの接続を始めます。

1
2-1 起動画面

回路図11

2-6 ワイヤー配置

「ワイヤーを配置」(2-17)でワイヤーの接続モードに入り、図2-6の↑で示したような各部品のピンの先端の未接続の印(〇又は□の印)の部分をクリックしてワイヤーの接続を始めます。

続いて、ワイヤーの反対側を接続したい部品の未接続の印の上(図2-6↑の左側の抵抗器の〇印)でクリックするとワイヤー(配線)が接続され、接続された箇所の未接続の印が消えます。ここで、印が消えていない場合は配線が接続されていないので、戻って再度接続を行います。なお、配線途中でクリックするとその場所で配線を折り曲げることができます。

図のOUTタグの所などワイヤーを分岐する個所では、ワイヤーの途中から、ワイヤー引き始めるあるいは、引き終えることで配線の分岐・結合となります。この際に接続のジャンクション印(図2-71の●印)が表示されていることを確認します。もし、接続したい交点でジャンクション印が表示されてないときは、ジャンクションの配置モード(図2-110)に入り、接続したい交点をクリックしてワイヤーを接続します。逆に接続しない箇所で誤ってジャンクション印を配置した場合は、削除モード(図2-112)でジャンクションを削除します。(削除対象を右クリックして削除を選ぶことや、削除対象にカーソルを置いて「Delete」キーでも削除可)

回路図13
2-7 ジャンクション

すべての部品同士をワイヤーで正しく接続できるまでこの作業を繰り返します。配線を間違えた場合は先述のジャンクションの削除と同様に配線を削除してください。また、コネクタやICなどで端子を未接続のままにする場合は、「未接続フラグ」(図2-19)を未接続の端子に配置します。また、「ドラッグ」を用いると配線が接続されたまま、部品を移動できます。

 

2-4 アノテーション

「回路図シンボルをアノテーション」(図2-12)より「回路図をアノテーション」を開きます。

6
2-8 アノテーション

基本的に初期設定のままで問題ないので下部の「アノテーション」をクリックしてアノテーションを実行します。アノテーション作業は取り消しができないというメッセージが出るので、確認して「OK」をクリックするとアノテーションが実行されます。

アノテーション後に回路図を変更してパーツが増えた場合は、再度アノテーションを実行します。また、一度アノテーションクリア、再度アノテーションをすれば、部品の番号がきれいに並ぶので必要に応じて使い分けます。

 

2-5 ERC

「エレクトリカルルールのチェックを実行」(図2-13)より「エレクトリカルルールチェック(ERC)」を開きます。

1
2-1 起動画面

下部の「実行」をクリックするとエラーチェックが始まり、問題個所があれば自動的に警告またはエラーが出てきます。

回路図17
2-9 ERC

サンプルのような回路でチェックを実行するとこのようにエラーメッセージが出ます。上2つのエラーは電源端子に「PWR_FLAG」が配置されていないため起きるエラーです。「電源ポートを配置」(図2-16)から「PWM_FLAG」を電源とGNDに接続することで解決します。上から3つ目のエラーはピンがどこにも接続されていないときに出るエラーで、一番下のエラーはラベルを配置したときに、そのラベルがどことも繋がっていないときに出るエラーです。

他に、各パーツのピンの設定が「不特定」になっている場合には下のように「ピン間の衝突問題」といったエラーが表示されることもあります。これの対策は次回紹介します。

 回路図19

ERCで出たエラーを解決または問題ないと判断できた場合は回路図作成の最後の作業である「ネットリスト」の生成に移ります。

 

2-6 ネットリスト出力

ネットリストはプリント基板を描くソフトウェアに部品のリストや接続情報などを送り出すためのファイルを生成する機能です。

「ネットリストを生成」(図2-14)より「ネットリスト」を開きます。

7
2-10 ネットリスト

KiCadのプリント基板エディタはPcbnewなのでそのまま右の「ネットリストを生成」をクリックしてネットリストを生成します。保存先はデフォルトのままで大丈夫です。

これで、回路図の作成は完了です。

回路図のサンプルはこんな感じです。

8

KiCad5の使い方 1章KiCadの初期設定

以前はKiCad4.0.7での使い方を紹介していましたが、バージョンが上がり今は5.1.4になりました。内容の更新を含めて今回からKiCad5.1.4での使い方を紹介していきます。


 回路図やプリント基板のデータを作成するツールは少し前までは
EagleBsch3v+PCBEなどしかありませんでしたが、無料版ではサイズ制限があったり、回路図とプリント基板エディタで連携ができないなど不便な点がありました。しかし近年ではKiCadというフリーでサイズ無制限で回路図作成からプリント基板のデータ出力まで統括してできるツールが登場しました。今回はこのKiCadを使って回路図作成からプリント基板のデータ出力の手順を紹介していきます。

 

まずは、KiCadをインストールする方法を紹介します。

1.KiCadのダウンロード

http://www.kicad-pcb.org/」「https://www.kicad.org/」(2021/10/23追記 KiCadのドメインが変更になっています。)アクセスし、ページ中央の「DOWNLOAD」をクリックしダウンロードページに進みます.


1

 続いて使用環境を選びます。自分の使ってるOSを選んでください。

2

使用しているパソコンが64bitOSの場合は上側の選択肢(白←)から32bitOSの場合は下側の選択肢(黄←)からダウンロードします。速度はおそらくCERNが速いと思います。

3
 

 日本語コミュニティーのサイトもありますが更新が止まっているため、海外の公式ページからダウンロードしてください。

 

 

2.KiCadのインストールと初期設定

ダウンロードしたファイルを実行ウィザードに従いインストールを行います。デフォルトのままインストールを行えば問題ないです。

 

KiCadを開くとこのような画面が表示されます

4
1-1 初期画面

インストール直後の状態では何もできないので、↑1の新規プロジェクト作成をクリックして、設計する基板に応じた適当なファイル名を入力したうえで「保存」をクリックします。空のディレクトリ内にファイルを作成することを勧めるメッセージが出てくるので「はい」をクリックします。こうすることで後々の設計段階などでファイルの管理がしやすくなります。

 

その後このような画面が表示されます。

5
1-2 起動画面

1は回路図を描く回路図エディタ (Eeschema)、↑2は回路図の部品を作成するコンポーネントライブラリエディタ、↑3はプリント基板のデータを作成するプリント基板エディタ(Pcbnew)、↑4はプリント基板のフォットプリントを作成するフットプリントエディタです。

 なお、KiCad4.0.7ではオフラインでの動作には別途設定が必要でしたが5.1では不要になりました。

準応用編 第3回 STM32マイコンのUARTをDMAを使って受信してみた

 今まではAVRマイコンのお話をしてきましたが今回はSTM32マイコンを使った応用的なお話をします。(STM32マイコンの基本的な所は今回は書かないので他の文献を…)

 今回紹介する内容はSTM32に搭載されているDMA(CPUを介さずにペリフェラルからメモリに書き込むorその逆)を使ってUART(シリアル通信)の受信データをArduinoSerialライブラリのように使えるように実装してみました。

 

DMAとは

 DMAは略さずに言うと「Direct Memory Access」です。すなわちペリフェラル(UARTSPIなどの周辺回路,周辺機器)CPUを介さずに直接メモリにアクセスすることができます。これによりCPUの負荷に関係なく確実にデータの受け渡しが可能になります。図解するとこんな感じです。
0-1

0-2

0-3

STM32における各種設定

 STM32マイコンでは各種設定はCubeMXを使って行います。その設定内容・方法を記載します。
 画面の全体画像はこんな感じです。
キャプチャ

まずは右側のペリフェラル選択画面からUSART*またはUART*(*は数字)からDMAで受信したいUARTの番号を選択します。今回はUSART2(USARTUARTの機能拡張なのでUARTを使う場合はUSART*を選んでもOK)
1

続いてペリフェラル選択画面の右上の下図に示すようなMode選択画面から←で示したAsynchronous(非同期通信, UART)を選択します。MIDIArduinoなどの通信は基本的には非同期通信となります。もし、同期通信(USARTの機能)を使う場合は用途に応じて選んでください。
2

Asynchronous」を選ぶとその下の画面には通信速度の設定などのconfigurationのメニューが表示されます。Baud Rate(通信速度)は通信相手に合わせて設定します。MIDIの場合は31250Bits/sです。他の設定も相手側に合わせます。MIDIの場合は通信速度以外はデフォルトでOKです。設定が完了したら下図↓で示したDMA Settings」を開きます。
3

 続いてDMAの設定に入ります。まずは下図の↑1の「Add」をクリックしDMAの設定を追加します。続いて出てきたDMAの設定の「DMA Request」の「Select」から←2で示した「USART*_RX(今回の場合*2)を選びUARTの受信データをDMAで受け取る設定にします。
4

 続いて「DMA Request Settings」のModeから下図←3の「Circular」を選択します。これによりDMAで受け取ったデータのバッファーがループ形状になります。(厳密にはバッファーの最後までデータが受信されると最初に戻る 例:Bufferサイズが1024の場合1023まで受信したたら次は0) DMA優先度を設定する「Priority」は他にDMAを使う場合は優先度が高いものからVery High, High, Medium, Lowにします。
 5

これにてCubeMxでのUART周りの設定は終わりです。Generate Codeでコードを出力しておきます。

 

 続いて生成されたコードを開きソースコードを書き始めます。ここで今回のシステムの構造とアルゴリズムを示します。

 今回のシステムはArduinoSerialライブラリのような使い方、つまり未読データ数の確認と未読データの取得の関数を実装します。そのため、実装する関数は2つで何かしらに未読データ数を確認する方法を編み出さなければなりません。

 未読データ数を取り出す方法として、DMAで受信したデータ位置と既に読み取り済みのデータ位置を比較します。読み取り済みのデータ数はプログラムで読み取るごとにインクリメントすれば導けます。受信済みのデータ位置には筆者がいろいろと試した結果以下の方法で読みとりが出来ました。

UARTのハンドラ(huart*(今回は*2))内のUART RxDMAのハンドラ(hdmarx)内のInstance, NDTRにてバッファーの残容量の確認ができます。具体的には以下のようなコードでremain_buf変数に残りのバッファー量を読み取れます。


 remain_buf = huart2.hdmarx->Instance->NDTR

残りのデータ量がわかればバッファーサイズからこの値を引けば現在受信済みデータの先頭位置がわかります。受信済みデータの先頭から読み取り済みデータ位置を引くと未読データ数が判明します。(バッファー端部の例外処理は必要)

 具体的なコードは以下の通りです。

未読データ数確認
6

データ読み取り
7

以上で関数の実装が出来ました。これらのコードはcubeMxの吐き出した「main.c」の/* USER CODE BEGIN 0 *//* USER CODE END 0 */の間あるいは、別のファイルに入れなければなりません場所を間違えるとCubeMxの設定変更時にコードが消えます

また、別途バッファーの宣言とバッファーのサイズ(データ数)DATANUM」の宣言が必要です。

 

実際にDMAでデータを受信するためにはDMAの動作を開始する指示をマイコンに与えなければなりません

その処理は以下のような関数(HALドライバの関数)を実行します。

HAL_UART_Receive_DMA(&huart2,serialData,DATANUM);

この関数はループ処理が始める前すなわちwhile(1){}の前に入れる必要があります。具体的な位置としてはCubeMxが吐き出した「main.cUSER CODE BEGIN 2USER CODE END 2の間で良いでしょう。場所を間違えるとCubeMxの設定を変更すると消えてしまいます

 

以上がSTM32UARTDMAで受信してArduinoSerialライブラリのように読み取る方法の紹介です。なお、今回のコードはhttps://github.com/HanDenMotor/readSerial_STM32DMAにアップしてるのそこからコピペするなりなんなりで使ってください。

次回は今回のUART受信をさらに応用してMIDIの受信プログラムの紹介をします。

準応用編 第2回 ATmega328PBを使ってみた および注意点

今回は従来からArduino UNOなどで非常によく使われているATmega328Pの強化版であるATmega328PBについて紹介してみたいと思います。まずはAtmega328Pとの違いから

 

ATmega328Pとの違い

1.       UART, SPI, I2C2つずつ使える

2.       タイマー(PWM)が使える数が多い

3.       DIPパッケージが存在しない

 

大きな違いはこの3つかなと思います。ATmega328Pと互換性をそこそこ維持しつつも最近のマイコンらしくペリフェラルも強化された完全なATmega328PBの上位互換です。DIPパッケージが無いのも近年の流れとも言えます。(IC類でも最近はDIPがディスコンになったり元から無かったりってことが増えてきています。)

 筆者はPORT出力、PWM出力(タイマー)、ADCUARTSPIを使いましたが、ATmega328Pに搭載されている機能を使う際はほとんど変更なしに同じプログラムが動作しました。ただし、UART,SPI,I2Cについては2つに増えたためレジスタ名に番号が増えて(例:UCSRAUCSR0A)いることには注意してください。

 PORT、ペリフェラルの基本的な使い方は以前の記事(ATmega328Pでの使い方)を参考にしてください。本記事ではATmega328PBを使う際の注意点を紹介します。

 

ATmega328PBの注意点

1.       ATmega328Pでは電源だったピンが一部IOに変更されている

ATnega328PではGND(ピン番号3)Vcc(ピン番号6)だったピンがそれぞれPE0PE1に変更されています。そのため、ATmega328P用に設計した基板でATmega328PBを使う場合はPE0,1の出力設定に注意しなければなりません。間違ってIOを出力にしてPE0HIGH, PE1LOWにした場合マイコンが破損する可能性があります。

2.       Timer3コンペアBOC3B)とTimer4コンペアB(OC4B)が同じピン(PD2)に設定されているため使うときの設定に注意点がある。

ATmega328PBではTimer3つから5つに増えました。しかし、新たに追加されたTimer3Timer4のコンペア(比較)B出力はどちらもPD4ピンを共用する仕様になり少し使用方法が複雑になりました。こちらについてもデータシートに記載があるのでデータシートを見てみます。

https://avr.jp/user/DS/PDF/mega328PB.pdf

データシートの122ページを見てみます。
1

すると、Timer3 コンペアBTimer4コンペアB変調器を通してPD2に繋がっていることがわかります。そして、PORTB7(PB7)の状態が1の時にOR 0の時にANDとなることがわかります。

 言い換えると、普通のPWMピンとして使おうとする場合はTimer34かのどちらかを使ったうえでPB7(PORTB bit7)1にしておく必要があるということです。(筆者はこれで数日潰しました)

 ちなみに、PB70(変調器をAND)にした場合はTimer34かのどちらかしか使わない場合は常にLが出力されます。

また、両方使った場合はPB70(AND)の場合duty比がAND(50%50%の場合は25%が出力)PB71(OR)の場合duty比がOR(25%25%の場合50%)されます。そのため、Timer34を両方有効化して使うことは基本的に無いと思います。

 

以上が筆者がATmega328PBを使っていて引っかかった点および気を付けた点になります。

 

ATmega328PBATmega328Pの正当な進化系でかつ互換性をそこそこ維持した使いやすいマイコンだと思います。ATmega328Pでは足りないけどもっと上のAVRとか32bitマイコンは大規模すぎるって時に有用じゃないかと筆者は思います。

準応用編 第1回 マイコン内蔵LED “WS2812B” の制御方法

今回はマイコンを使ってマイコン内蔵のLEDであるWS2812Bを制御します。今回紹介するLED WS2812Bの特徴はマイコンなどから信号を与えることで各LEDを個別で制御できかつ安価である(AliExpress1つ当たり10円を切る価格)で売られているという所です。数珠接続で個別制御できるため安価なLEDテープを大進化させたLEDともいえると思います。

 一見最強そうに見えるこのLED実はマイコンから制御するのが一筋縄にはできないという問題があります。(本来は専用のコントローラを使います)今回はこのWS2812B搭載のLEDテープをAVRマイコンとSTM32マイコンで制御する方法を考えていきます。

 

 

制御信号の形

 まずはWS2812Bのデータシートを見てみます。

http://www.world-semi.com/DownLoadFile/108

こちらが製造元の新しいバージョンとみられるデータシート

https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf

そしてこちらがadafruitとか秋月に掲載されているデータシートです。

ややこしいことに、信号生成に関わる箇所のパラメータがこの2者で違うことを覚えておいてください。
 データシートを見ていくとUARTでもSPIでもI2Cでも無い、専用のデータ形式であることがわかります。具体的な信号の形(1bit)は下図のような感じです。

 1

そしてこのbitが以下のように連続して送られることで1つのLEDの制御信号になります。
2 

bitを緑、赤、青の順に連続的に並べたのみでスタートビットやストップビットといったものは無いのが特徴と言えます。

 そして複数のLEDの制御はこの24bitのデータを連続的に並べることで行います。LEDの接続と信号の順番を図で表すと以下のようになります。
3

 Amazonとかの販売ページにはアドレス指定可能とか書かれていますが、実際にはアドレスを指定して制御するわけではなく、手前のLEDから順番にデータを送る形式となっています。

 このLEDの制御における注意点としてはLEDの点灯状態を変える際にはLOWが一定時間以上(50us ot 280us)続くリセット信号を送らないといけないことです。逆に言い換えるとリセットされない時間であればLOWが続いても大丈夫ということです。実はこの仕様のおかげでAVRマイコンでも制御することができます。

 

制御信号の作り方

 続いてどうやってこの信号を作り出すかを考えていきます。制御信号の形上UARTとかI2CとかSPIをそのまま使うことはもちろんできません。また、信号速度的にArduinodigitalWriteとかは使えないのはもちろん、レジスタを叩いてもdelayとか割り込みでの処理も困難です。アセンブラを使えばクロック単位で処理できるので信号生成できますが、難しいし処理も重い、でもクロック単位レベルの高速な信号生成が必要。調べてみるとSPIの複数bitを使って信号生成してる例があったので、今回はSPIを使ってAVRSTM32で信号生成をしてみることにします。

 

 まずはSPI通信の仕様を軽く説明します。

SPI通信はUARTと違って4つのピンを使って制御します。そのピンの内訳はクロック(SCK) マスターアウトプットスレーブインプット(MOSI) マスターインプットスレーブアウトプット(MISO) スレーブセレクト(SS(ーー))です。通信を行うときはSSーーピンをLOWにして、SCKピンにクロックを掛けてクロックと同期した信号を送信します。タイミングチャートを下に示してみます。

4

 ここで、ややこしいことが起きてしまいます。それはMOSI(マスター送信ピン)がアイドル時に状態が不定になるということです。その他SCKピンのアイドル時のLOW,HIGHの差や先行端、後行端を採るかの差はマイコン間などでSPI通信を行うときは合わさないといけませんが、今回のLED制御には本質的には関わりません。 

 今回WS2812Bを制御するにあたって使うピンはMOSIピンのみです。他のピンは使いません。送信するデータの工夫でWS2812Bの制御信号を作り出します。

 

今回はSPIのデータの4bitWS2812B1bitとして使います。送り出すパケット形状より下図のようにHIGHになるbitの数を調整することで0のパケットと1のパケットを作り出します。

5

この形状の出力を作り出すデータは0パケットの場合0b1000(0x80) 1パケットの場合0b1110(0xE)になります。ですが、そう単純ではありません。SPIのアイドル時の状態が不定であるためです。ここで、今回使用するマイコンのデータシートを見てみます。

 

AVRマイコン(ATmega328P) https://avr.jp/user/DS/PDF/mega328P.pdf

STM32マイコン(STM32F446)https://www.st.com/content/ccc/resource/technical/document/reference_manual/4d/ed/bc/89/b5/70/40/dc/DM00135183.pdf/files/DM00135183.pdf/jcr:content/translations/en.DM00135183.pdf

 

 まずはAVRマイコンで制御信号を作り出す方法を考えるため、データシートのSPIのタイミングチャートが書かれている121ページを見てみます。一応こちらにも引用しておきます。

AVRデータシート

 このデータシートを見るとAVRマイコンではMOSIのアイドル時の状態はHIGHになってるように見えます。確認のために実際にオシロスコープで出力波形を確認してみたいと思います。(ロジックアナライザー持ってないのでオシロを使います。)
AVR波形

 送ってるデータは0xEE(0x11101110)です。そして、信号が始まる前と後はHIGHになってることがわかります。これより、データシート通りアイドル時がHIGHになっていることがわかりました。

しかし、WS2812Bはアイドル時がLOWです。そのため、そのままではWS2812Bは動かせません。そこで、AVRマイコンでWS2812Bを制御する場合信号を反転(つまりNOTをかける)してアイドル時がLOWの信号を作りだします。

また、信号を反転させるので送るbitも反転します。つまり最終的に送る形が0b1000(WS2812B0)の場合0b0111 0b1110(WS2812B1)の場合0b0001となり16進数で表すとそれぞれ「0パケットは0b0111 0x7」「1パケットは 0x0001 0x1となります。最終的に出力した波形はこんな感じです。

AVR波形2

これによりAVRマイコンでWS2812Bを制御する信号が生成できました。また、これら図では少々わかりにくいですが、AVRの性能上8bit単位で信号に間隔が空いてしまい(LOWが長く続いてる)ます。ただし、WS2812Bの仕様上50usまでは許容されているので問題ありません。

 

 続いてSTM32マイコン(STM32F446)で制御信号を作り出すために、データシートのSPIのタイミングチャートが書かれている856ページを見てみます。こちらにも引用します。

STMデータシート

 このタイミングチャートを見るとMOSIのアイドル時の状態がHIGHLOWも両方書かれていてどちらかがわかりません。つまり、データシート上は不定というわけです。ですが、タイミングチャートのMISO(スレーブ側は出力になる)を見ると後行端採取(CPHA=1)の時はLSBが少し伸びるとみられる表記が見られるので、この条件で実験してみました。結果は下図のようにLSBの状態が次のデータの先頭まで続いていました。(他の条件での実験結果は別記事で紹介します)
STM32後端LSB0-1
STM32後端LSB0
STM32後端LSB1-1
STM32後端LSB1

WS2812Bの場合は必要な信号が「0パケットで0b1000 」「1パケットで0b1110」となっておりLSBが必ず0となります。そしてLSBのステートがアイドル時のステートとなるためアイドル時も必ず0となります。そのため、STM32マイコンで制御する場合はAVRと異なり信号の反転は不要です。また反転していないので、送り出すデータも出力波形と同様に「0パケットで0b1000 0x8」「1パケットで0x1110 0xEとなります。また、STM32マイコンではDMAが使えることもあり、8bitの間での信号の伸びが無く連続した信号が生成できています。(DMAを使わない場合でも伸びはほぼ見られませんでした)

 

最後にSPIの通信速度の設定です。

 AVRマイコンにおいてもSTM32マイコンにおいてもSPIの 通信速度(クロック)はマイコンのクロックに依存します。SPIのクロックはマイコンのクロックの1/2n(2 <= n <= 7(AVR),8(STM32)) となります。WS2812Bの場合1パケット(4bit)の長さが大体900nsから1400ns程度となっており、これから逆算するとSPIの通信速度は4.44Mbpsから2.86Mbps程度となります。筆者の環境では16MHzで駆動しているATmega328Pの場合SPIのクロックはマイコンのクロックの1/4(分周1/4)4MHz(4Mbps) で正常に作動しています。また、ペリフェラルクロック42MHzSTM32マイコンの場合はペリフェラルクロックの1/16(分周1/16)2.625MHz(2.625bps)と新版のデータシート範囲から少々ずれがありますが正常に動作しています。(ただし、個体により動かない可能性はあるので注意必要だと思います)

 

最後にWS2812BAVRマイコンとSTM32マイコンで使う場合のまとめです。

 

AVR(ATmega328P)

 アイドル時がHIGHのため信号にロジックICなどでNOTを掛ける必要がある。

 送信データ

0パケットで0x7 0b0111

1パケットで0x1 0b0001

 パケット間(SPI8bit8bitの間)に間隔が空く(LOWが長く続く) 

 

STM32(F446)

 後行端採取CPHA=1(CubeMXClockPhase : 2Edge)に設定

 アイドル時はLSBstate維持のため反転不要

 送信データ

0パケットで0x8 0b1000

1パケットで0xE 0b1110

 パケット間に間隔が空かずきれいな波形が出力される

 

共通

 SPIクロック(通信速度) 2.86Mbps~4.44Mbps程度

  多少の誤差は許容されるが、分周で合わせない場合マイコンのクロック調整も要検討

 SPIMSB First  SPIMaterモード

 SCKのアイドル時の状態はどちらでもOK

MOSIWS2812BDIN(通信ピン)に接続

データ順は緑8bit 8bit8bitの順の24bit 

複数LEDの場合は手前側のLEDのデータ(24bit)から送る

50us~280us以上のLOWが連続するとデータ転送終了

 

例:STM32マイコンで6個のLEDを赤緑青 赤緑青の順にフル点灯させる場合以下のような配列のデータをDMAで流します。

uint8_t data[72] = {0xEE, 0xEE, 0xEE, 0xEE, 0x88, 0x88, 0x88, 0x88, 0xEE, 0xEE, 0xEE, 0xEE,

                    0x88, 0x88, 0x88, 0x88, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,

                    0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x88, 0x88, 0x88, 0x88,

                    0xEE, 0xEE, 0xEE, 0xEE, 0x88, 0x88, 0x88, 0x88, 0xEE, 0xEE, 0xEE, 0xEE,

                    0x88, 0x88, 0x88, 0x88, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,

                    0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x88, 0x88, 0x88, 0x88, 

};

 

 2つのマイコンで比較すると多くのLEDを正確に制御する場合はDMAが使えるSTM32マイコンを使う方が良く、少ないLEDを簡単に制御する程度であればAVRマイコンでもできるといったところだと思います。必要な用途に応じて使い分けると良いでしょう。

ブログURL変更について

HanDenです。本日私の独自ドメインhanden.netを取得しました。
それに伴い、本ブログのURLはhttp://vvvf.blog.jp から http://blog.henden.netに変更しました。
旧URLからのアクセスの場合は自動転送されますがブログの内容に変更はございませんのでご安心ください。

ギャラリー
  • HDDを演奏する楽器を作ってみた
  • HDDを演奏する楽器を作ってみた
  • HDDを演奏する楽器を作ってみた
  • HDDを演奏する楽器を作ってみた
  • 制作日記5 細かな基板を注文してみた
  • 制作日記5 細かな基板を注文してみた
  • 制作日記5 細かな基板を注文してみた
  • 制作日記5 細かな基板を注文してみた
  • 制作日記5 細かな基板を注文してみた
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計: