Arduino、回収した HD モーター、ホールセンサーを使用した BLDC モーター制御
ビュー: 0 著者: サイト編集者 公開時間: 2020-09-02 起源: サイト
お問い合わせ
現在、愛好家はブラシレス DC (BLDC) の制御に非常に興味を持っています。
従来の DC モーターと比較して、モーターの性能が向上し、エネルギー効率も向上しましたが、使用するのが難しくなります。多くの既製製品が存在します。
この目的のために、
たとえば、RC 航空機に非常に適した小型の BLDC コントローラーが多数あります。
BLDC の制御をさらに詳しく調べたい人のために、産業ユーザー向けのさまざまなマイクロコントローラーやその他の電子ハードウェアも用意されており、通常は非常に優れたドキュメントが用意されています。
これまでのところ、BLDC 制御に Arduino マイクロコントローラーを使用する方法についての包括的な説明は見つかりませんでした。
また、回生ブレーキや BLDC による発電に興味がある場合、小型モーターに適した製品はあまり見つかりませんし、三相発電機の制御方法も知りませんでした。
この構造はもともとリアルタイム計算に関する話の中にあったもので
、コース終了後も続けています。
このプロジェクトのアイデアは、フライホイール エネルギー貯蔵と回生ブレーキを備えたハイブリッド車の比例モデルを示すことです。
このプロジェクトで使用されるモーターは、損傷したコンピューターのハードドライブからクリーンアップされた小型の BLDC です。
このマニュアルでは、Arduino マイクロコントローラーとホール
影響位置センサーを駆動モードと回生ブレーキ モードで使用する方法について説明します。
このプロジェクトを完了するには、必須ではないにしても、oscillisoft にアクセスすると非常に役立ちます。
スコープにアクセスできない場合は、スコープを使用せずにアクセスする方法についていくつかの提案を追加しました (ステップ 5)。
このプロジェクトで実際のモーター コントローラーに含めるべきではないものの 1 つは、過電流保護などの安全機能です。
実際、最悪の事態は、HD モーターが焼き切れてしまうことです。
ただし、現在のハードウェアで過電流保護を実装することは難しくないので、いつか実装するかもしれません。
より大きなモーターを制御しようとしている場合は、モーターとあなた自身の安全を保護するために過電流保護を追加してください。
「実際の」作業を実行できる、より大きなモーターでこのコントローラーを使用したいと考えていますが、適切なモーターをまだ持っていません。
eBay で 86 W の車が約 40 ドルで販売されていることに気づきました。
良い候補者のように見えます。
独自の BLDC を組み立てるキットを販売する「GoBrushless」という RC Web サイトもあります。
これらはそれほど高価ではないので、構築してみる価値はあります。
このウェブサイトにはモーター用のホールセンサーはありませんのでご注意ください。ふぅ!
この構造を書くのは大変な仕事です。
ご参考になれば幸いです。コメントや提案をお寄せください。
デジタル マルチメーター (DMM) -
DMM に周波数メーター オシロスコープがある場合 (
少なくとも 2 つのチャンネルがあることが望ましい)、
T8 Torx ドライバー (
ハード ドライブを開くにはいずれか 1 つが必要です)。
良い金物店があります。
Machine Workshop と Rapid Prototype (
これらは非常に役立ちますが、このプロジェクトはこれらがなくても実行できると思います)。
材料 コンピューターのハードディスクからの bldc モーター磁気リング (
モーターの半分)
別のハードドライブから いくつか (3-6)
ハードディスクの銀色のディスクに 2 番目の小さなモーターがあります (DC ブラシ付き OK)
ゴムバンドまたは (できれば)
別のモーターが付いたハンドル付きブラシレス DC モーター 電子パン プレート 単線 Arduino Duemilanove 120 k オームの抵抗 6 ~ 400 オームの抵抗 リニアまたは回転ポテニオメーター 100 k オーム STマイクロ回路 L6234 三相モーター ドライバー IC 100 uF コンデンサ 2 個 10 nF コンデンサ 1 個 220 nF コンデンサ 1 個 1 uF コンデンサ 1 個 100 uF コンデンサ 3 個 受信ダイオード 1 個 2.
Honeywell SS411A バイポーラ ホール 5 アンプ ヒューズ 1 個 ヒューズ ホルダー 3
注: Mike Anton は、このマニュアルで説明したパワー エレクトロニクスとホール センサー回路を置き換える製品を設計および販売しました (
逆電位を使用して制御されます)誘導)。
仕様と調達情報は、次の 2 つのリンクで見つけることができます。 このプロジェクトを実行する場合は、時間をかけて BLDC がどのように動作し、制御するかを徹底的に理解することをお勧めします。
オンラインには多数の参考資料があります (
いくつかの提案については以下を参照してください)。
ただし、私のプロジェクトには、理解に役立ついくつかのグラフと表が含まれています。
このプロジェクトを理解するのに最も重要だと私が考える概念のリストは次のとおりです。 MOSFET トランジスタ 三相ハーフブリッジ 6-文の
3 ステップの削減
相モーターのパルス幅変調 (PWM) ホール -
マイクロチップ AVR443: センサー - 一般的なリファレンス DC モーター デジタル位置センサーの基本原理
atmelbrusless DC モーター制御に基づく三相ブラシレス DC モーターの制御
フライング スター ホール センサーの相 BLDC モーター制御ハードドライブモーターをクリーンアップする良いビデオですが、著者はモーターをステッピングモーターとして、またはステッピングモーターとして実行しているようです。 l6234 モーター ドライブ IC の BLDC に関するより詳細なリファレンス Web ページ。データ シート、アプリケーション ノート、購入情報が含まれます。
ハイブリッド電気自動車アプリケーション用の PM ブラシレス モーター ドライブの無料サンプル。
これは、回生ブレーキの位相変化の順序を説明している唯一の論文です。
この論文「電気自動車の回生ブレーキは有益です。私はそこからいくつかの数字を借用しましたが、回生がどのように機能するかを誤って説明していると思います。」
私がこのプロジェクトをリサイクルしたディスク ドライブ モーターで実行したのは、通過が容易であり、BLDC によって制御されるコードを学習して安全上の問題を引き起こさないために小型の低電圧モーターを使用するのが好きだからです。
さらに、
これらのモーターの 2 番目の磁気リング (ローター) を使用することにより、ホール センサーの磁石構成が非常にシンプルになります (手順 4 を参照)。
ホール センサーの取り付けと調整 (ステップ 5 ~ 7) という面倒な作業をしたくない場合は、
少なくともいくつかの CD/DVD ドライブ モーターがホール センサーに組み込まれていることがわかります。
モーターに回転慣性を与えて少し負荷を与えるために、5 台のハードドライブをモーターに置き、少し強力な接着剤で優しく接着してモーターに接着しました (
これが私の元のプロジェクトのフライホイールでした)。
ハードドライブからモーターを取り外す場合は、ハウジングのネジを外すために T8 トルクス ドライブが必要です (
通常、センタロン ラベルのスティックの後ろに 2 本のネジが隠されています)
と、モーターを所定の位置に固定する内部ネジが必要です。
ヘッドリーダー(
サウンドサークル幹部)も取り外す必要があります
。こうすることで、メモリーディスクを取り出してモーターに到達することができます。
さらに、そのモーターからローターを取り外すには、2 番目の同じハードドライブモーターが必要になります (
内部には磁石があります)。
モーターを分解するために、ローター (上) をつかみ
、モーターの万力でステーター (下) をこじ開けます。
2 つのドライバーは 180 度離れています。
モーターを変形させずにしっかりと固定するのは簡単ではありません。
木製の v ブロックを構築するとよいでしょう。
この目的に使用する
旋盤で磁気リングに穴を開け、モーターの上部にぴったりと収まるようにしました。
旋盤が使用できない場合は、反転したローターを強力な接着剤でモーターに固定できます。
下の写真 2 と 3 は、私が分解したモーターの 1 つの内部を示しています。
前半には (ローター) 8 極 (
プラスチックで包まれた磁石) があります。
後半(固定子)には
12 個のスロット(巻線)があります。
モーターの 3 相にはそれぞれ、直列の 4 つのスロットがあります。
一部の HD モーターには、底部に 3 つの接点があり、各相に 1 つの接点があり、もう 1 つはモーターのセンター タップ (
3 つのステージが交わる場所) です。
このプロジェクトではセンタータップは必要ありませんが、センサーフリー制御では便利です(
センサーフリー制御に関するメモはいつかリリースしたいと思っています)。
モーターに 4 つの接点がある場合は、抵抗計で位相を識別できます。
センタータップと相間の抵抗は、任意の 2 相間の抵抗の半分になります。
BLDC モーターに関する文献のほとんどは、はしご型の逆電位波形を持つものを扱っていますが、ハード ドライブ モーターの逆電位は正弦波状であるようです (下記参照)。
私の知る限り、正弦波モータを正弦波 PWM で駆動すると、効率は若干低下する可能性がありますが、正常に動作しています。
すべての BLDC モーターと同様、このモーターも三相半
トランジスタ ブリッジで構成されています (
下の 2 番目の写真を参照)。
ST Micro製IC(L6234)を使用しています。
モータードライバーとも呼ばれるブリッジには
L6234 の電気接続はステップ 8 に示されています。
下の 3 番目の写真は、モーター ドライバーと 3 つのモーター相の概略図を示しています。
モーターを時計回りに動作させるには、次の順序でスイッチが行われます (
最初の文字は上部トランジスタ、2 番目の文字は下部トランジスタです)
: ステップ 1 2 3 4 5 6 時計回り: CB、AB、AC、BC、BA、CA 反時計回り: BC、BA、CA、CB、AB、AC これら 6 つ -
ステップ シーケンスには 360 の「電気次数」が必要ですが、物理次数だけが必要です。これらのモーターの場合は 90。
したがって、各モーターの回転速度は 4 倍になります。
2 つのシーケンスは同じように見えますが、6
ステップ シーケンスの場合、CW の場合、位相を通る電流の方向は一方向であり、CCW の場合、電流の方向は逆であるため、同じではありません。
これは、バッテリーまたは電源の電圧をモーターのいずれかの相に印加することで確認できます。
電圧を加えるとモーターは一方向に少し動いて止まります。
上記のシーケンスのいずれかで相の電圧をすばやく変更できる場合は、モーターを手動で回転させることができます。
トランジスタとマイクロコントローラーはこれらすべてのスイッチを非常に迅速に完了し、モーターが高速で動作しているときは 1 秒あたり数百回スイッチングします。
また、両相に電圧を印加するとモーターが少し動いて止まりますのでご注意ください。
トルクがゼロになるからです。
これは、下の 4 番目の写真で確認できます。これは、モーターの相のペアの逆電位を示しています。
これは正弦波です。
波が x
シャフトを通過するとき、このフェーズによって提供されるトルクはゼロになります。 6
ステップの BLDC 相変化シーケンスでは、決して起こりませんでした。
特定の相のトルクが低くなる前に、電力は別の相の組み合わせに切り替えられます。
大型の BLDC モーターは通常、モーター内のホール センサーによって製造されます。
そのようなモーターをお持ちの場合は、この手順を省略できます。
また、少なくともいくつかの CD/DVD ドライブ モーターにはすでにホール センサーが組み込まれていることがわかっています。
モーターが回転すると、3つのホールセンサーで位置検出を行い、適切なタイミングで位相変化を行います。
私の HD モーターは最大 9000 RPM (150 Hz) で動作します。
9000 RPM ではホイールごとに 24 回の交換があるため、機械は 280 マイクロ秒ごとに交換されます。
Arduino マイクロコントローラーは 16 MHz で動作するため、各クロック サイクルは 0.06 マイクロ秒です。
文の縮小を実行するのに何クロック サイクルが必要かはわかりませんが、100 クロック サイクルが必要なとしても、つまり、文の縮小ごとに 5 マイクロ秒かかります。
HDモーターにはホールセンサーが無いため、モーターの外側にホールセンサーを取り付ける必要があります。
センサーはモーターの回転に対して固定され、モーターの回転と一致する一連の極に露出される必要があります。
私の解決策は、同じモーターから磁気リングを取り外し、制御するモーターに逆さまに取り付けることです。
次に、この磁気リングの上に 3 つのホール センサーを、モーター シャフト上で互いに 30 度離れて取り付けました (
電気モーターの回転は 120 度)。
私のホール センサー ホルダーは、私が加工した 3 つのアルミニウム部品と高速プロトタイプで作成した 3 つのプラスチック部品からなるシンプルなホルダーで構成されています。
これらのツールがない場合でも、位置を示す別の方法を見つけるのは難しくありません。
ホールセンサー用のブラケットを作成するのはさらに困難になります。
これは考えられる作業方法です。 1.
適切なサイズのプラスチック トレイを見つけて、ホール センサーを慎重にエポキシ接着します。 2.
磁気リングの半径と同じ円を持ち、3 つのマークの間隔が 15 度 3 であるテンプレートが紙に印刷されます。
テンプレートをディスクに接着し、テンプレートをガイドとして使用して、ホール センサー エポキシを所定の位置に慎重に配置します。
ホール センサーがモーターに取り付けられたので、以下に示す回路にホール センサーを接続し、DMM またはオシロスコープを使用してテストし、モーターの回転に伴って出力が上下することを確認します。
Arduino の 5 V 出力を使用して、これらのセンサーを 5 V で実行します。
ホールセンサーの出力が高いか低いか(1か0)。
それは彼らが南極を感じるか北極を感じるかによって決まります。
それらは 15 度離れており、磁石はその下で回転し、極性が 45 度ごとに変化するため、これら 3 つのセンサーが同時にハイになったりローになったりすることはありません。
モーターが回転すると、センサー出力は
下表の6ステップパターンとなります。
3 つのセンサーのうち 1 つがモーターの位相変化位置で正確に変化するように、センサーはモーターの動きと位置合わせする必要があります。
この場合、最初のホール センサー (H1) の立ち上がりエッジは、
C (ハイ) と B (ロー) の組み合わせの開きと一致する必要があります。
これは、ブリッジ回路のトランジスタ 3 と 5 をオンにすることに相当します。
オシロスコープでセンサーと磁石の位置を合わせます。
これを行うには、スコープの 3 チャネルを使用する必要があります。 2番目のモーターのベルトに接続してモーターを回転させ、2相の組み合わせ(
間の逆電位を測定します。
AとB、AとC)
これは2つの正弦波です。
下の図の波のように
、オシロスコープのチャンネル 3 のホール センサー 2 の信号を見てください。
ホール センサー ホルダーは、ホール センサーの立ち上がりエッジが位相変化を実行するポイントに完全に揃うまで回転します (下記を参照)。
同じキャリブレーションを行うには 2 つのチャンネルしかないことがわかりました。
位相組み合わせ B-C の BEMF を
使用する場合、H2 の立ち上がりエッジは BC カーブに関係します。
ここで位相変更を行う理由は、モーターのトルクを常に可能な限り高く保つためです。
バックポテンシャルはトルクに比例し、バックポテンシャルが次の段階の曲線を下回るときに各位相の変化が発生することがわかります。
したがって、実際のトルクは各相の組み合わせの最も高い部分で構成されます。
スコープにアクセスできない場合の調整方法は次のとおりです。
これは、BLDC モーターがどのように動作するかを知りたい人にとって、実際には興味深い演習です。
モーターのA相(プラス)とB相(マイナス)を
電源に接続し、電源を入れるとモーターは少し回転して停止します。
その後、マイナス電源リードをC相に移して電源を投入すると、モーターはさらに回転して停止します。
シーケンスの次の部分は、プラスのリード線を B 相などに移動することです。
これを行うと、モーターは常にトルクがゼロになる場所で停止します。これは、チャートの X 軸が通過する 1 つの場所に対応します。
3 番目の相の組み合わせのゼロ点は、最初の 2 つの組み合わせの相変化位置に対応することに注意してください。
したがって、B-C の組み合わせのゼロトルク位置は、
h2 の立ち上がりエッジの位置となります。
この位置に細かいマークまたは鋭い刃でマークを付け、H2 の出力がこのマーク上で正確に高くなるまで、DMM を使用してホール センサー ホルダーを調整します。
学校のスケジュールから少し外れても、モーターは正常に動作するはずです。
3 つのモーター相は、L6234 3 相モーター ドライバーから電力を受け取ります。
これは時の試練に耐えられる良い製品であることがわかりました。
パワー エレクトロニクスを使用するときに、コンポーネントを誤って破損してしまう可能性はたくさんあります。私は電気エンジニアではないので、何が起こっているのか常にわかりません。
私の学校のプログラムでは、6 個の MOSFET トランジスタと 6 個のダイオードからなる独自の 3
相ハーフブリッジ出力を作成しました。
これを他のドライバー Intersil の HIP4086 で使用しましたが、このセットアップには多くの問題があり、
大量のトランジスタとチップを焼き付けました。
私はL6234(
つまりモーター)を12Vで実行します。
L6234 には、6 トランジスタのハーフブリッジを制御するための珍しい入力セットがあります。
すべてのトランジスタに入力があるわけではありませんが、
3 つのステージのそれぞれにイネーブル (EN) 入力があり、次に別の入力 (IN) があり、
どのトランジスタが開相になるかを選択します (上部または下部)。
たとえば、トランジスタ 1 (上) と 6 (下) をオンにします。
EN1 と EN3 は両方ともハイになります (
ステージを閉じたままにするために EN2 はローになります)
IN1 はハイ、IN3 はローになります。
これにより、位相の組み合わせは C になります。
L6234のアプリケーションノートでは、モーターの速度制御に使用するPWMをINピンに適用することを提案していましたが、その際、各相の上下のトランジスタを交互にオンにするのは「おかしい」と考えたため、ENピンに適用することにしました。
実際には、両相のロートランジスタを同時にオンしても問題はないようです。両相は同電位なので、どちらにも電流は流れません。
私の方法では、PWM周波数で交互に高位相が有効化および無効化され、位相変化全体の間低位相
はオンのままです。Arduinoボードにピン接続を追加しました。また、
回生電流のリップルを減らすために、電源とGNDの間に2.5アンペアのヒューズを追加しました。
この図は少し小さいので、より大きなバージョンについては、を参照してください。
注: Mike Anton が L6234 用の PCB を作成しました。これにより、このトラックが置き換えられ
、組み立ての手間が省けます。
と購入情報について
仕様
これらのリンクを参照してください。私は電気技術者ではないので、説明を修正していただければ幸いです。
は、
回生ブレーキでは、制御システムもトルクを最大化しますが、今回は、電流をバッテリーに戻す際にモーターを減速させる負のトルクを使用します。
米国のオークリッジ国立研究所の論文から引用したものです (
自動車モーターに関する多くの研究を行っている
以下の図は、
ただし、この 2 番目の論文の説明は一部間違っていると思います)。
モータが回転すると、モータ相の BEMF 電圧が上下に変動します。この場合、B
段から
電流が流れる可能性があり、
回生ブレーキまで
のスイッチがオフになると、次のように
下位トランジスタ
電流が流れます。最初の写真に示されているように、
パワー エレクトロニクスの観点から見ると、この回路はモーターの位相にエネルギーが蓄えられるブースト コンバーターと呼ばれるデバイスのようなものです (
ウィキペディアにはブースト コンバーターの動作について説明した優れた記事があります)。
しかし、電圧が高くなると、電流が各トランジスタの隣の「抗励起」ダイオードを通って流れ、同時に
ダイオードがバッテリーに電流を流すのを防ぎます。回転方向 (
この
駆動とは逆)
のトルクを生成し、
ローサイド トランジスタは PWM スイッチを使用して負
駆動時にモータの転流が 1 つの組み合わせから次の組み合わせに切り替わり、可能な限り高いトルクが維持されます。
は、私が使用しているハードドライブ モーターが非常に低トルクである
ビデオをご覧ください。最初のステップでは、回生ブレーキが正常に動作していることがわかりますが、うまく動作しないの
ため、低速時を除いて回生ブレーキがほとんど発生しないことです。
。
また、私のシステムは比較的低い電圧 (12 V) で動作します。さらに、抗励起ダイオードを通る各パスにより電圧が数ボルト低下します
また、
通常の整流ダイオードを使用していますが、電圧降下が低い特殊なダイオードを使用すると、より良いパフォーマンスが得られる可能性があります。
以下に、
ボードのチャートと写真を示します。 2-
デジタル エントリー - ホール 1
の Gnd 3 の 120 K の抵抗
ホール3
の 120 K の抵抗
デジタル入力 -
Gnd 5 の抵抗1 400 オームの
1 つの
抵抗 6 400 オームの抵抗と直列の 2 デジタル出力 7
3 400
オームの抵抗と直列のデジタル出力 9-
400 オームの抵抗と直列の EN 1 のデジタル出力 10- 400 オームの
EN 3 のデジタル出力は 400 オームの抵抗と直列です。 100 k オームのポテンショメータ。両端に 5 V と GND が接続され、中間にアナログ ピン 0
抵抗と直列のEN 2 のデジタル出力 11-
が接続されています。この
ポテンショメータは、モーターの速度を制御するために使用され、5 V の電源はホール センサー
bldc_congroller
用
に作成したプログラム全体です。/*
の動作にも使用されます (ステップ 5 を参照)。これは、Ardjuino
3. 1. 1*3 by David Glazer です。 L6234 3 相モータードライバー IC * ディスクドライブモーターを時計回りに回転 * 回生ブレーキ付き * モーターの速度とブレーキは 1 つの
ポテンショメータによって
制御 * モーターの位置は 3 つのホール効果センサーによって制御 * Arduino は 3 つのホールセンサー (ピン 2、3、4) から出力を受信
*
IN
1、2、3
そして、それらの組み合わせを
32 kHz でピン 9、10、11 の 6 つの異なる位相変化ステップに変換 * PWM 出力 (EN に対応)それぞれピン 5、6、7 の 1、2、3*3 DO (
* PWM
)
デューティ サイクルを変更するポテンショメータに 0 のシミュレーションを接続し、
* 駆動と回生ブレーキの間で * 0- 499:
ブレーキ * 500- 523: タクシー *
524-
1023 : モータリング * さまざまな値
を出力してデバッグ用に多くの行をコメントします。 */Int allstate1
; 3 つのホール センサーの変数 (3,2,1)
int HallState3;
/3 つのホール センサーのバイナリ値 int bSpeed = 0、スロットルの位置
, INPUT
{pinMode(2
); /Hall 2 pinMode (4,INPUT); /In 1 pinMode (6
を測定します。スロットルポテンショメータの設定 ()
プログラムの最後にあるフラッシュ コマンドをアンコメントしてください。ピン 9、10/最初に 3 つ
,OUTPUT); pinMode (9,OUTPUT); /EN 2 pinMode (11,OUTPUT); /EN 3/serial シリアル接続を使用する場合は、
/prescalerVal という変数を作成し、それを 2
の前置分周器ビットをすべてクリアします: int prescalerVal = 0x07;
進数 \'00000111\' TCCR1B & = ~ Prescaler
/そして TCCR0B の値を 2 進数 \'11111000\' に設定します/次に、適切な値を設定します
。プリ
エンコーディング ビット: int プリエンコーディング
ビット 2 = 1; /prescalerVal を 2 進数 \'00000001\' に設定します TCCR1B = prescalerVal2 /または
TCCR0B の値を 2 進数 \'00000001\' に設定します
/ピン 3,11 に PWM を設定します11) /最初に 3 つのプリケーラー ビットをすべてクリアします:
TCCR2B & = ~ Pre-calerval;
/そして、2 進数の TCCR0B の値を設定します。/次に、
適切な
プリエンコーディング ビットを設定します: TCCR2B | =プリエンコーディング ビット
2;
/または、2 進数の TCCR0B の値を設定します。 \'00000001\'
}
/最初に 3 つの事前にエンコードされたビットをすべてクリアします
:
/PRGROM のメイン ループ void ループ (){ /Time = millis (); //Serial.Throttle
= analogRead (0);
512,1023, 0,255);
/駆動はポテンショメータの上半分にマッピングされますbSpeed
=map ( Throttle, 0,511,255, 0) /デバッグ用
HallState1 = digitalRead (2) /ホール 1 2 = デジタル読み取り(3);
/ホール 2 からの入力値の読み取り 3 = ホール 3 からの入力値の読み取り / 数値の書き込み
(8, HallState1) / 対応するセンサーが高出力の場合、LED が点灯します。digitalWrite (9, HallState2)+(2*HallState2); (4*HallState3);
/* シリアル ポートのバイナリ値を計算します。 println(\'H 3: \'); println(HallState3); Serial. println(\' \');
*
/ //Serial. println(mSpeed); //Serial. println
(HallVal); //Serial.
print(\'\'); /Monitor transistor output/delay (1000); /* T1 = digitalRead (2); //T1 = ~T1; T2 = digitalRead (4); //T2 = ~T2; T3 = digitalRead (5); //T3 = ~T3; Serial. print(T1); Serial. print(\'\t\'); Serial. print(T2); Serial. print(\'\t\'); Serial. print(T3); Serial. print(\'\'); Serial. print(\'\'); Serial. print(digitalRead(3)); Serial. print(\'\t\'); Serial. print(digitalRead(9));
Serial. print(\'\t\'); Serial. println(digitalRead(10)); Serial. print(\'\'); Serial. print(\'\');
//delay(500); */Driving phase change/each binary numberオンになっているさまざまなトランジスタに対応するケースがあります/出力Arduinoの値を
: /
ドライバのINピンの出力が含まれます/
変更するために使用されるビット演算
PORTD
には、 L6234
各相の
上部トランジスタまたは下部
デューティ・サイクルを
トランジスタのどちら
/ENピンがArduinoコマンド類似によって制御され、PWMの
を決定するために使用される出力
= ONまたはスロットル値がポテンショメータ
設定します(0 = OFF
、 255
によって
制御されます)。 511){switch (HallVal){
/A 相の PWMトランジスタ)analogWrite(10,0)
Case 3:/PORTD = 1111xxx00; /
ピン 0 ~ 7 xxx の出力はホール入力を指します
& = B01100000 ;
; // フェーズ C オンデューティ = 100% (ローエンド トランジスタ) ブレーク;
/PORTD = B001xxx00;
/
PORTD | = B00100000; /
Analowrite (
9,mSpeed); A 相オン (ハイエンド トランジスタ)analogWrite(10,255); //B 相オフ (デューティ
= 0); / ポート D = B101xxx00;
/ 予想される出力
B00011111; /
PORTD | = B10100000
;analogWrite(11,mSpeed); /PORTD
= B100xxx00; / PORTD = B00011111; /Analowrite(
9,255)
;analogWrite(11,mSpeed); /
PORTD = B110xxx00;
/Analowrite (9,255); analogWrite(10,mSpeed); analogWrite(11,0); break; Case
変更
PORTD
2:/PORTD = B010xxx00; /Expected output of pin 0- 7 PORTD & = B00011111; B0201700 PORTD | =; /Analowrite (9,0); analogWrite(10,mSpeed); analogWrite(11,255); Break; }} /回生ブレーキ位相
/
IN ピンの出力
(L6234
の
) 回生時には各位相の Low トランジスタのみが使用されます。 // PORTD = B00011111;
// スイッチ (HallVal);アナログ書き込み (9,bSpeed); //
analogWrite(11,0);
ケース 1: アナログ書き込み (9,0); analogWrite(11,bSpeed); break;
Case 4: analogy writing (9,0); analogWrite(10,0); analogWrite(11,bSpeed); break;
Case 6: analogy writing (9,0); analogWrite(10,bSpeed); analogWrite(11,0); break; Case 2: analogy writing (9,0); analogWrite(10,bSpeed)
; nanoWrite(11,0
); Break; /Time = millis (); //Serial.print(\'') //Serial.flush(); このプロジェクトで
L6234
実行する操作は非常に単純なので、マイクロプロセッサで実行するのはもったいないと思います。
のアプリケーション ノートでは、
Lattice Semiconductor 製 GAL16V8) を推奨していますが、
このデバイスのプログラミングに慣れていないため、単純なプログラマブル ゲート アレイ (
他の同様の集積回路も非常に安価で、
チャートを
3 つの出力から L6234 IC を駆動できる比較的単純なロジック シーケンスを考え出しました。ホール センサーの
以下に示します。ステージ A のチャートと、3 つのステージすべての真理値表を示します (
B フェーズと C フェーズの論理回路を使用するには、「not」ドアを「or」の反対側に切り替える必要があります。
このアプローチの問題は、各ステージに 20 近くの接続があるため、組み立てるのにかなりの手間がかかることです。
プログラマブル ロジック ゲートとしてプログラムするのが最善です。