APDahlen Applications Engineer
概要
Microchipの PIC16 の構成可能ロジックブロック(CLB)機能は、今回のステッピングモータプロジェクトで実証されています。このプロジェクトは、 PIC16F13145 のVerilog設計機能に焦点を当てており、回路図とコードが含まれています。
はじめに
この技術概要では、図1に示すようにステッピングモータを制御することにより、PIC16 の構成可能ロジックブロック(CLB)を説明します。
-
CLBファブリックは PIC16 マイクロコントローラのコアとは独立して動作します。
-
ステッピングモータにはハーフステップ制御が用いられます。
-
モータは回転方向押ボタンとイネーブル押ボタンで制御されます。
-
モータはユーザーによってプログラムされた一定の速度で動作します。
-
デジタルロジックはVerilogでコーディングされています。これは誤植ではありません。ゲート記述およびVerilogスタイルの記述によるプログラマブルロジックは、現在 PIC16 プログラミングの一部となっています。
CLBにより、一般的にマイクロコントローラの周囲に散在するグルーロジックを統合し、吸収することが可能になります。その結果、フットプリントが小さくなり、BOMが少なくなり、全体的なコストが下がります。
ステッピングモータプロジェクトは、Stepper.X.zip(596.1 KB)からダウンロードできます。
前提項目
前回の記事では、Microchip PIC16 CLBを使い始めるための seed project について説明しました。I/Oピンの設定やMPLAB MCCツールを使用したシンプルなロジックブロックの接続など、前提となる項目が紹介されているので、この記事を読み進める前に確認してください。
図1: デモプロジェクトで使用されているステッピングモータドライブ
3.3V DCと12V DCを誤って接続しないでください。
図1では、ブレッドボードの上部の電源レールが12V DCに直接接続されていることがわかります。PICのピンをこのレールに接続しないでください。接続するとPICが焼損します。
私も経験しましたが、本当にあっという間に起こります。PICが爆発し、さらにPCのUSBポートが焼損すると事態は悪化する一方です。これは忘れられない高価な教訓となるでしょう。
技術的なヒント: マイクロチップの構成可能ロジックブロック(CLB)は、PICの構成可能ロジックセル(CLC)とよく混同されます。どちらもデジタルロジック機能を提供し、一部の PIC16 ファミリに搭載されているためです。
PIC16 のデジタルロジックペリフェラルを、相対的なサイズと機能の観点から考えると分かりやすいでしょう。
小さな ロジック: CLCの紹介記事は、従来の555タイマに設定する方法を示しています。
大きなロジック: CLBの紹介記事では、1つのSeed Projectについて説明しています。この記事では、ステッピングモータの例を紹介します。
実験再現に必要な部品
図1に示すステッピングモータのデモは、以下の部品を使用して構築されています(コア部品についてはDigiKeyのリンクが張られています)。
-
PIC16F13145 マイクロコントローラ用、Microchipの EV06M52A Curiosity評価ボード
-
モータ巻線用フライバックダイオード
-
2N3904 トランジスタ
-
各トランジスタのベースの1kΩ直列抵抗器
-
このロジックプローブの代用の記事で説明されている抵抗器付きLED
-
25V DC 1000uFなどの電源デカップリングコンデンサ
-
ブレッドボード、ワイヤ、およびジャンパ
-
12V DC電源(図示せず)
回路構成
回路を組み立てる前に、必ず前提条件の記事を確認してください。これにより、組み立てとトラブルシューティングを容易にするための基礎が確立されます。これ以降、回路を組み立てる際に問題が発生することはないはずです。図1と図2の写真とともに、図3の回路図を参考にしてください。
図2: 各モータ巻線にはフライバックダイオードが接続されています。各トランジスタのベースには直列抵抗が挿入されています。
技術的なヒント: 各モータ巻線と並列にフライバックダイオードを接続することを忘れないでください。ダイオードを入れないと、高電圧スパイクが発生し、2N3904 トランジスタが破壊されます。図2には、ダイオードをブレッドボードの電源レールに接続している様子がはっきりと示されています。
後方に見えるのはトランジスタのベース電流制限抵抗です。
図3: モータドライブ用ディスクリートNPNトランジスタを搭載したステッピングモータプロジェクトの回路図
このデモプロジェクトにVerilogが使われたのはなぜでしょうか?
Verilogは、ゲートレベル表現と比較して、高速でトラブルシューティングが容易であることから選択されました。この例では、Verilogは、出力ロジックと同様に次のステートのためのカルノー図を作成する必要がありません。以前は何時間もかかっていたことが、数分で済みます。
同時に、学習者からゲートレベルのソリューションを設計する学習機会を奪いたくありません。Verilogを使えば、最終的な結果を素早く示した後、時間をかけてステートマシンを一から手作業で構築することを提案できます。
個人的な注釈: Verilogには本当に驚かされます。およそ25年前にプログラミングを始めたときには、まさかVerilogでPIC16をプログラムするとは思ってもいませんでした。当時は、私はアセンブリ言語で書いていましたので。
ステッピングモータ制御ロジックのVerilogプログラミング
トップレベルの制御ロジックの説明を図4に示します。これには2つのセクションがあります。
-
Stateモジュール: このモジュールは押ボタンからのイネーブル入力と回転方向入力を受け付けます。ハーフステップのシーケンスを制御する3ビットのステートレジスタを保持します。コードはリスト1に含まれています。このモジュールが3ビットのアップダウンカウンタとして動作することがわかります。
-
StepperOutputsモジュール: このモジュールは3ビットのステートを受け入れ、図5に示すように必要な出力信号を生成します。このコードはリスト2に含まれています。このモジュールはデコーダとして動作し、演算の中核はルックアップテーブルとして実装されています。
トラブルシューティングを簡単にするため、モジュールを独立して構築しました。まず、Stateモジュールを最初に構築し、一時的にPIC出力に接続して、LEDを用いて動作を確認しました。
なお、ステッピングモータプロジェクトでは、デジタルロジックファブリックの約50%を消費します。
図4: 2つのVerilogモジュールを示すトップレベルのロジック記述
module State(
input CLK, enable, dir,
output step_val_2, step_val_1, step_val_0
);
reg [2:0] step_val;
assign {step_val_2, step_val_1, step_val_0} = step_val;
always @(posedge CLK) begin
if (enable) begin
if (dir == 1'b0) begin
step_val <= step_val + 3'b001; // forward
end else begin
step_val <= step_val - 3'b001; // reverse
end
end
end
endmodule
リスト1: StateモジュールのVerilogコード
図5: 8つのディスクリート出力を持つステッピングモータのハーフステップドライブ波形
module StepperOutputs(
input CLK,
input step_val_2, step_val_1, step_val_0,
output out_3, out_2, out_1, out_0
);
reg [3:0] step_val;
assign {out_3, out_2, out_1, out_0} = step_val;
always @(posedge CLK) begin
case ({step_val_2, step_val_1, step_val_0})
3'b000: step_val <= 4'b1000;
3'b001: step_val <= 4'b1100;
3'b010: step_val <= 4'b0100;
3'b011: step_val <= 4'b0110;
3'b100: step_val <= 4'b0010;
3'b101: step_val <= 4'b0011;
3'b110: step_val <= 4'b0001;
3'b111: step_val <= 4'b1001;
default: step_val <= 4'b0000;
endcase
end
endmodule
リスト2: StepperOutputsモジュールのVerilogコード
おわりに
このステッピングモータのプロジェクトは、PIC16 のCLBの基準となるものです。これにより、PIC16 の機能、プログラミングスタイル、使いやすさについて、どのような結果が期待できるかが分かり、この基準をべースに、PIC16 を従来の74シリーズロジックや他のHDLツールと比較することができます。
ご健闘をお祈りします。
APDahlen
著者による関連記事
この記事が気に入った場合は、以下の関連記事も役立つかもしれません。
-
MCCツール使用のヒント。Preventing Microchip’s MCC Melody from Overwriting Your Code
-
ラジコンサーボロボットアームから構造体を学びます。What is a struct?
-
産業用アプリケーションで使用されている PIC16 をご覧ください。Light Curtain Teardown; Inside the Banner EZ-Screen LP
著者について
Aaron Dahlen氏、LCDR USCG(退役)は、DigiKeyでアプリケーションエンジニアを務めています。彼は、技術者およびエンジニアとしての27年間の軍役を通じて構築されたユニークなエレクトロニクスおよびオートメーションのベースを持っており、これは12年間教壇に立ったことによってさらに強化されました(経験と知識の融合)。ミネソタ州立大学Mankato校でMSEEの学位を取得したDahlen氏は、ABET認定EEプログラムで教鞭をとり、EETプログラムのプログラムコーディネーターを務め、軍の電子技術者にコンポーネントレベルの修理を教えてきました。
Dahlen氏は、ミネソタ州北部の故郷に戻り、コンデンサ探しから始まった数十年にわたる旅を終えました。彼の物語はこちらからお読みください。




