Microchipの PIC16 の構成可能ロジックブロックを使用したステッピングモータドライブ


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を誤って接続しないでください。

:warning: 図1では、ブレッドボードの上部の電源レールが12V DCに直接接続されていることがわかります。PICのピンをこのレールに接続しないでください。接続するとPICが焼損します。

私も経験しましたが、本当にあっという間に起こります。PICが爆発し、さらにPCのUSBポートが焼損すると事態は悪化する一方です。これは忘れられない高価な教訓となるでしょう。

技術的なヒント: マイクロチップの構成可能ロジックブロック(CLB)は、PICの構成可能ロジックセル(CLC)とよく混同されます。どちらもデジタルロジック機能を提供し、一部の PIC16 ファミリに搭載されているためです。

PIC16 のデジタルロジックペリフェラルを、相対的なサイズと機能の観点から考えると分かりやすいでしょう。

小さな ロジック: CLCの紹介記事は、従来の555タイマに設定する方法を示しています。

大きなロジック: CLBの紹介記事では、1つのSeed Projectについて説明しています。この記事では、ステッピングモータの例を紹介します。

実験再現に必要な部品

図1に示すステッピングモータのデモは、以下の部品を使用して構築されています(コア部品についてはDigiKeyのリンクが張られています)。

回路構成

回路を組み立てる前に、必ず前提条件の記事を確認してください。これにより、組み立てとトラブルシューティングを容易にするための基礎が確立されます。これ以降、回路を組み立てる際に問題が発生することはないはずです。図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

著者による関連記事

この記事が気に入った場合は、以下の関連記事も役立つかもしれません。

著者について

Aaron Dahlen氏、LCDR USCG(退役)は、DigiKeyでアプリケーションエンジニアを務めています。彼は、技術者およびエンジニアとしての27年間の軍役を通じて構築されたユニークなエレクトロニクスおよびオートメーションのベースを持っており、これは12年間教壇に立ったことによってさらに強化されました(経験と知識の融合)。ミネソタ州立大学Mankato校でMSEEの学位を取得したDahlen氏は、ABET認定EEプログラムで教鞭をとり、EETプログラムのプログラムコーディネーターを務め、軍の電子技術者にコンポーネントレベルの修理を教えてきました。

Dahlen氏は、ミネソタ州北部の故郷に戻り、コンデンサ探しから始まった数十年にわたる旅を終えました。彼の物語はこちらからお読みください。




オリジナル・ソース(English)