Arduino、回収HDモーター、およびホールセンサーによるBLDCモーターコントロール
ビュー: 0 著者:サイトエディターの公開時間:2020-09-02原産地: サイト
お問い合わせください
現在、愛好家は、従来のDCモーターと比較してブラシレスDC(BLDC)の制御に非常に興味があり
、モーターの性能が向上しており、エネルギー効率も向上していますが、使用はより困難です。この目的のために多くの棚
製品が存在します。
たとえば、RC航空機にとって非常にうまく機能する小さなBLDCSコントローラーがたくさんあります。
BLDCの制御をより深く調べたい人のために、産業用ユーザー向けの多くの異なるマイクロコントローラーやその他の電子ハードウェアもあります。これは通常非常に優れたドキュメントを持っています。
これまでのところ、BLDCコントロールにArduino Micro-Controllerを使用する方法の包括的な説明は見つかりませんでした。
また、再生ブレーキをかけることに興味がある場合、または発電のためにBLDCを使用することに興味がある場合、小さなモーターでの使用に適した製品は多くありません。また、3相発電機を制御する方法についても知りませんでした。
この構造はもともとはリアルタイムの計算に関する物語にありましたが
、コースが終わった後も続けています。
このプロジェクトのアイデアは、フライホイールのエネルギー貯蔵と再生ブレーキを備えたハイブリッド車の比例モデルを示すことです。
プロジェクトで使用されるモーターは、破損したコンピューターハードドライブからクリーンアップされた小さなBLDCです。
このマニュアルでは、Arduino Micro-ControllerとHallに使用する方法について説明します。ホールは
、運転および再生ブレーキモードにおける位置センサーに影響を与えます。
Oscillisoftにアクセスすることは、このプロジェクトを完了するために、不可欠ではないにしても非常に役立つことに注意してください。
スコープにアクセスできない場合は、スコープなしでそれを行う方法についていくつかの提案を追加しました(ステップ5)。
このプロジェクトが実際のモーターコントローラーに含めるべきではないことの1つは、現在の保護などの安全機能です。
実際、最悪のことは、HDモーターを燃やすことです。
ただし、現在のハードウェアを使用して過電流保護を実装することは難しくありません。ある時点でそれを行うかもしれません。
より大きなモーターを制御しようとしている場合は、モーターと自分の安全性を保護するために、現在の保護を追加してください。
このコントローラーは、\ 'real \'の作業を行うことができるより大きなモーターでこのコントローラーを使用しようとしますが、まだ正しいものを持っていません。
eBayは86 Wの車を約40ドルで販売していることに気付きました。
良い候補者のように見えます。
また、独自のBLDCを組み立てるキットを販売する\「Gobrushless \」と呼ばれるRC Webサイトもあります。
これらはあまり高価ではなく、それを構築するのは経験の価値があります。
このウェブサイトには、モーター用のホールセンサーはないことに注意してください。なんて!
この構造を書くことは大きな仕事です。
お役に立てば幸いです。コメントや提案をお願いします。
Digital Multimeter(DMM)
-DMMに周波数計オシロスコープがある場合(
少なくとも2つのチャネルを使用する方が良い)
T8 Torxドライバー(
ハードドライブを開くにはそのうちの1つが必要です)。
良いハードウェアストアがあります。
マシンワークショップと迅速なプロトタイプ(
これらは非常に役立ちますが、このプロジェクトはそれらなしで行うことができると思います)。
からの材料BLDCモーター磁気リングは、
モーターの半分)
別のハードドライブベベラル(3-6)からのコンピューターハードディスク(
ハードディスク(DCブラシ付きOK)ラバー
バンドのシルバーディスクに2番目の小さなモーター、または(できれば)
別のモーター電子パンプレートソリッドワイヤー月のハンドル付きのブラシレスDCモーターがあります。 OHMSTマイクロ回路L6234 3相モータードライバーIC TWO 100 UFコンデンサ1 10 nfコンデンサ1 220 nfコンデンサ1 1 UFコンデンサ100 UFコンデンサ3つのDiodes 1 12。HoneywellS411ABipolar
Hall-5 AMP FUSE 1 FUSE HOLDER 3
注:MIKE ANTONが販売されているMIKE ANTONを販売します
。逆潜在誘導を使用して制御されます)。
仕様と調達情報は、これら2つのリンクに記載されています。このプロジェクトを行う場合は、BLDCがどのように機能し、制御するかを徹底的に理解するために時間をかけることをお勧めします。
オンラインで多数の参照があります(
いくつかの提案については以下を参照)。
ただし、私のプロジェクトには、あなたが理解するのに役立つはずのチャートとテーブルをいくつか含めています。
このプロジェクトを理解するために最も重要だと思われる概念のリストは次のとおりです。MOSFETトランジスタ3フェーズハーフブリッジ6-
(
PWM)ホール
チップAVR443の文化幅変調
ペーズ
モーターセンサー、ハードドライブモーターをクリーンアップする良いビデオですが、著者はモーターを踏み台として、そしてステッピングモーターとして走っているようです。データシート、アプリケーションノート、購入情報など、L6234モータードライブICのBLDCのより具体的な参照Webページ。
ハイブリッド電気自動車用途向けのPMブラシレスモータードライブ用の無料サンプル。
これは、再生ブレーキ段階の変化の順序を説明する唯一の論文です。
このホワイトペーパーでは、電気自動車の再生ブレーキは有用で、そこからいくつかの数字を借りましたが、再生がどのように機能するかを誤って説明していると思います。
リサイクルされたディスクドライブモーターでこのプロジェクトを行いました。なぜなら、通過するのは簡単だったので、小さな低電圧モーターを使用してBLDCによって制御されたコードを学習し、安全性の問題を引き起こさないのが好きです。
さらに、ホールセンサーのマグネット構成は、
これらのモーターの2番目の磁気リング(ローター)を使用することで非常にシンプルになります(ステップ4を参照)。
ホールセンサーの取り付けとキャリブレーションのすべての手間をすべて行いたくない場合(ステップ5-7)、
少なくともいくつかのCD/DVDドライブモーターがホールセンサーを構築していることがわかります。
モーターに逆慣性を提供し、少し負荷をかけるために、モーターに5つのハードドライブを置き、少し強い接着剤でやさしく接着し、モーターに接着しました(
これにより、元のプロジェクトでフライホイールを作りました)。
ハードドライブからモーターを取り外す場合は、ハウジングを外すためにT8 Torxドライブが必要です(
通常、センターンラベルのスティックの後ろに2本のネジが隠されています)
と、モーターを所定の位置に保持する内部ネジが必要です。
また、この方法でヘッドリーダー(
Sound Circleエグゼクティブ)を削除する必要があります
。メモリディスクを取り出してモーターに到達することができます。
さらに、そのモーターからローターを除去するには、2番目の同じハードドライブモーターが必要です(
内部に磁石があります)。
モーターを分解するために、私はローター(上)を
モーター(上)につかみ、ステーター(下)にこじ開けました。2
つのドライバーは180度離れています。
変形せずに、モーターを十分にタイトなペアに保持するのは簡単ではありません。
木材V-ブロックを構築することをお勧めします。
この目的に使用される
旋盤の磁気リングに穴を開けて、モーターの上部に快適に収まるようにしました。
旋盤を使用できない場合は、強い接着剤でモーターの逆ローターを固定できます。
下の写真2と3は、私が分解したモーターの1つの内部を示しています。
前半には(ローター)は8ポール(
プラスチックに包まれた磁石)があります。
後半(ステーター)には、
12個のスロット(巻線)があります。
3つのモーターフェーズのそれぞれには、直列に4つのスロットがあります。
一部のHDモーターには、下部に3つの接点があり、1つはフェーズごとに1つの接点があり、もう1つはモーターの中心タップ(
3つのステージが出会う)です。
このプロジェクトでは、センタータップは必要ありませんが、センサーフリーコントロールで便利になる可能性があります(
いつかセンサーなしのコントロールに関するメモをリリースしたいと思います)。
モーターに4つのコンタクトがある場合、Ohmeterで位相を識別できます。
中心タップと位相の間の抵抗は、任意の2つのフェーズ間の抵抗の半分です。
BLDCモーターに関する文献のほとんどは、はしご型の潜在的な波形を持つ人を扱っていますが、ハードドライブモーターには正弦のように見える逆ポテンシャルがあるようです(以下を参照)。
私の知る限り、正弦波PWMで正弦波モーターを運転することは正常に機能していますが、効率はいくらか低下する可能性があります。
すべてのBLDCモーターと同様に、これは3相ハーフ
トランジスタブリッジで構成されています(
以下の2番目の写真を参照)。私は
St Micro(L6234)が作成したICを使用しています。
、モータードライバーとしても知られる橋に、
L6234の電気接続はステップ8に示されています。
下の3番目の写真は、モータードライバーと3つのモーターフェーズの概略図を示しています。
モーターが時計回りに動作するために、スイッチは次の順序で作成されます(
最初の文字は上部トランジスタであり、2番目の文字は下位トランジスタです)
:ステップ1 2 3 4 5 6時計回り:CB、AB、AC、BC、BA、CAカウンタークロックワイズ:BC、BA、CA、CB、AB、AC
のみが必要です。これらのモーター。
したがって、各モーターの回転速度は4回発生します。
2つのシーケンスは同じように見えますが、6ステップシーケンスでは、CWの場合、位相を通る現在の方向が1つの方向であり、CCWの場合、現在の方向は反対であるため、同じ
ではありません。
バッテリーまたは電源の電圧をいずれかのモーター相に適用することで、これを自分で見ることができます。
電圧を適用すると、モーターは一方向に少し移動して停止します。
上記のシーケンスのいずれかで位相の電圧をすばやく変更できる場合は、モーターを手動で回転させることができます。
トランジスタとマイクロコントローラーは、これらすべてのスイッチを非常に迅速に完了し、モーターが高速で動作しているときに毎秒数百回切り替えます。
また、両方の相に電圧が適用されている場合、モーターは少し動き、その後停止することに注意してください。
これは、トルクがゼロであるためです。
これは、下の4枚目の写真で見ることができます。これは、一対の運動相の背面の可能性を示しています。
これは正弦波です。
波がx
シャフトを通過すると、この相によって提供されるトルクはゼロです。 6
ステップのBLDCフェーズ変更シーケンスでは、決して起こりませんでした。
特定の位相のトルクが低くなる前に、電力は別の位相の組み合わせに切り替えられます。
通常、より大きなBLDCモーターは、モーター内のホールセンサーで製造されています。
そのようなモーターがある場合は、この手順をスキップできます。
また、少なくともいくつかのCD/DVDドライブモーターが既にホールセンサーに組み込まれていることを知っています。
モーターが回転すると、3つのホールセンサーが位置検出に使用されるため、位相の変化が適切な時期に実行されます。
私のHDモーターは最大9000 rpm(150 Hz)です。
ホイールごとに24の変更があるため、9000 rpmでは、280マイクロ秒ごとにマシンが変更されます。
Arduino Micro-Controllerは16 MHzで動作するため、各クロックサイクルは0.06マイクロ秒です。
文の削減を実行するために必要なクロックサイクルの数を知りませんが、100クロックサイクルが必要であっても、文の減少ごとに5マイクロ秒かかります。
HDモーターにはホールセンサーがないため、モーターの外側に設置する必要があります。
センサーは、モーター回転に関して固定し、モーター回転と一致する一連の極にさらされる必要があります。
私の解決策は、同じモーターから磁気リングを除去し、制御するモーターに逆さまに取り付けることです。次に、この磁気リングの上に3つのホールセンサーを、モーターシャフト(
に互いに30度離れた30度に設置しました。
120度の電気モーター回転)
私のホールセンサーホルダーは、私によって加工された3つのアルミニウム部品と、高速プロトタイプで作られた3つのプラスチック部品で構成されるシンプルなホルダーで構成されています。
これらのツールがない場合、位置を示す別の方法を見つけることは難しくないはずです。
ホールセンサー用のブラケットの作成はより困難です。
これは、作業の可能性のある方法です。1。
適切なサイズのプラスチックトレイを見つけて、ホールセンサーを慎重にエポキシできます。 2。
テンプレートは紙に印刷されており、磁気環の半径と同じ円を備えており、3つのマークは15度3です。
テンプレートをディスクに接着し、テンプレートをガイドとして使用して、ホールセンサーエポキシを所定の位置に配置します。
ホールセンサーがモーターに取り付けられたので、以下に示す回路に接続し、DMMまたはオシロスコープを使用してテストして、モーターが回転するにつれて出力が高くなり、低くなることを確認します。
Arduino 'S 5 V出力を使用して、これらのセンサーを5 V未満で実行します。
ホールセンサーの出力が高または低い(1または0)、
南極または北極圏を感じるかどうかに依存します。
それらは15度離れているため、磁石はそれらの下で回転し、45度ごとに極性を変化させるため、これら3つのセンサーは同時に高くも低くもありません。
モーターが回転すると、センサーの出力は6です。
次の表に示されているステップパターン。
センサーは、3つのセンサーのうちの1つがモーター相変化位置で正確に変更されるように、モーターの動きと整列する必要があります。
この場合、最初のホールセンサー(H1)の立ち上がりエッジは、
Cの組み合わせ(高)とB(低)の開口部と一致する必要があります。
これは、ブリッジ回路でトランジスタ3と5をオンにするのと同等です。
センサーを磁石とオシロスコープに合わせます。
これを行うには、3つのスコープチャネルを使用する必要があります。
2番目のモーターのベルトに接続してモーターを回転させ、2つの位相の組み合わせ(
AとB、A、C)の間の逆電位を測定します
。
下の写真の波のように
、オシロスコープのチャンネル3のホールセンサー2の信号を見てください。
ホールセンサーホルダーは、ホールセンサーの立ち上がりエッジが位相の変化を実行するポイントと完全に整列するまで回転します(以下を参照)。
私は今、同じキャリブレーションを行うためのチャネルが2つしかないことに気付きました。
位相併用B-のBEMFが
Cを使用している場合、H2の立ち上がりエッジはBC曲線に関連します。
ここで位相変化を実行する必要がある理由は、常にモータートルクをできるだけ高く保つことです。
バックポテンシャルはトルクに比例し、バックポテンシャルが次の段階曲線を下回ると各位相の変化が発生することに気付くでしょう。
したがって、実際のトルクは、各位相の組み合わせの最高部分で構成されています。
スコープにアクセスできる場合は、ここでアライメントの私のアイデアです。
これは実際、BLDCモーターがどのように機能するかを知りたい人にとっては興味深い演習です。
モーターフェーズAが
電源に接続され(正)、B(負)電源に電源をオンにすると、モーターは少し回転して停止します。
次に、負の電力鉛がCフェーズに移動し、電力がオンになっている場合、モーターはさらに向きを変えて停止します。
シーケンスの次の部分は、正のリードをフェーズBなどに移動することです。
これを行うと、モーターは常にトルクがゼロの場所で停止します。これは、チャートがチャートのX軸を通過する1つの場所に対応します。
第三相の組み合わせのゼロ点は、最初の2つの組み合わせの位相変化位置に対応することに注意してください。
したがって、B- Cの組み合わせのゼロトルク位置は、
H2の立ち上がりエッジを配置する場所です。
この位置を細かいマークまたは鋭いブレードでマークし、H2の出力がこのマークで正確に高くなるまでDMMを使用してホールセンサーホルダーを調整します。
学校のスケジュールから少し逸脱していても、モーターはうまく機能するはずです。
3つのモーター相は、L6234 3相モータードライバーから電力を受け取ります。
これは、時の試練に耐えることができる良い製品であることがわかりました。
パワーエレクトロニクスを使用するときに誤ってコンポーネントを揚げる方法はたくさんあります。電気エンジニアではなく、常に何が起こっているのかを知りません。
私の学校プログラムでは、6つのMOSFETトランジスタと6つのダイオードの独自の3
位のハーフブリッジ出力を行いました。
他のドライバーIntersilのHIP4086でこれを使用しましたが、このセットアップには多くの問題があり、
トランジスタとチップの束を燃やしました。 12Vで
L6234(
モーター)を実行します。
L6234には、6つのトランジスタのハーフブリッジを制御するための珍しい入力セットがあります。
すべてのトランジスタには入力があるわけではありませんが、
3つのステージのそれぞれに有効な(EN)入力があり、次に別の入力(in)
を開いたフェーズのトランジスタ(上または下)を選択します。
たとえば、トランジスタ1(アッパー)と6(下)をオンにして、
EN1とEN3の両方が高く(
ステージを閉じたままにするためにEN2が低く)
、IN3低い。
これにより、フェーズの組み合わせcが作成されます。
L6234アプリケーションノートは、モーターの速度をIN PINに制御するために使用されるPWMを適用することを提案しましたが、その時点では、\ 'Strange \'が位相の上下のトランジスタを交互に交換するのは\ 'Strange \'であると思い
ます。ます
私の方法では、PWM周波数で高相
を
継続
し少し小さいので、より大きなバージョンについては、L6234のドキュメントを参照してください。
注:Mike AntonはL6234用のPCBを作成しました
。
スペックと購入情報については、これらのリンクを参照してください。私は多くのことを見つけていません。
それがどのように機能するかについての私の理解について説明します。
私は電気技術者ではないことに注意してください。私の説明に対する修正に感謝します。
運転するとき、制御システムはトルクを最大化する方法で電流を3つのモーターフェーズに送ります。
再生ブレーキでは、制御システムもトルクを最大化しますが、今回は電流をバッテリーに戻しながらモーターを遅くする負のトルクです。
私が使用した再生ブレーキ法は、米国のオークリッジ国立研究所の論文から来ました。 S.政府。
自動車モーターの多くの研究を行う研究室。
以下のチャートは、それがどのように機能するかを説明するのに役立つ別の論文からのものです(
ただし、この2番目の論文で与えられた説明は部分的に間違っていると思います)。
モーターが回転すると、モーター相のBEMF電圧が上下に変動することに注意してください。
図では、BEMFがステージBで高く、ステージで低い瞬間を示しています。
この場合、電流がBからBに流れる可能性があります。
再生ブレーキにとって重要なローエンドトランジスタは、すぐにオンとオフになっています(
毎秒数千のPWMスイッチ)。
ハイエンドトランジスタスイッチがオフになったとき。
低トランジスタがオンになると、最初の写真に示されているように電流が流れます。
パワーエレクトロニクスに関しては、回路はブーストコンバーターと呼ばれるデバイスのようなもので、モーターの位相にエネルギーが保存されます(
ウィキペディアには、ブーストコンバーターの仕組みを説明する良い記事があります)。
このエネルギーは、ローエンドのトランジスタがオフになると放出されますが、電圧が高くなると、電流は各トランジスタの隣にある\ 'anti-Excitation \'ダイオードを即座に流れ、バッテリーに戻ります。
ダイオードは、電流がバッテリーからモーターに流れるのを防ぎます。
同時に、この方向の電流(
運転に反して)
が磁石リングと相互作用して、モーターを遅くする負のトルクを生成します。
ローサイドトランジスタはPWMスイッチを使用し、PWMのデューティサイクルはブレーキの量を制御します。
運転するとき、モーターの整流は、可能な限り最高のトルクを維持するために、あるコースで1つの組み合わせから次の組み合わせに切り替えます。
一部のスイッチングモードにより、モーターが可能な限り多くの負のトルクを生成するため、再生ブレーキの整流は非常に似ています。
最初のステップでビデオを見ると、再生ブレーキが正常に機能することがわかりますが、うまく機能しません。
主な理由は、私が使用するハードドライブモーターが非常に低いトルクモーターであるため、最高速度を除いて多くのBEMFを生成しないことだと思います。
低速では、再生ブレーキはほとんどありません(もしあれば)。
また、私のシステムは比較的低い電圧(12 v)で動作します。
さらに、アンチエビザーションダイオードを通る各パスは数ボルトだけ電圧を減少させるため、効率も大幅に低下します。
私は通常の整流器ダイオードを使用しており、電圧低下の特別なダイオードを使用すると、パフォーマンスが向上する場合があります。
以下は、Arduinoの入力と出力のリストです。
私のボードのチャートと写真も含めます。 2-
デジタルエントリホール1
120 K GNDの抵抗3
デジタルエントリーホール2
120 K GNDの抵抗4
ホール3デジタル入力
-120 K GND 5
1デジタル出力400オーム抵抗器6 2デジタル出力6
2デジタル出力400オーム抵抗器7
3デジタル出力400 OHM Residorを伴う400 OHM Residorを伴う400 OHM Residor
のデジタル出力を伴う400 OHM Residorを伴うデジタル出力を伴う400 OHM Residor
のデジタル出力と直列400オーム抵抗器11-
EN 3デジタル出力は、400オームの抵抗器、100 Kオームポテンティオメーター、両端に接続され、アナログピン0が中央に接続されています。
このポテンショメータは、モーターの速度とブレーキボリュームを制御するために使用されます。
5 V電源は、ホールセンサーの実行にも使用されます(ステップ5を参照)。
Ardjuinoのために書いたプログラム全体があります。これにはコメントが含まれています
。
XシリーズはST L6234 3-
位相モータードライバーIC *ランニングディスクドライブモーターの時計回り *再生ブレーキ *モーター速度とブレーキを1つのポテンショメータ * 3つのホール
エフェクトセンサー * Arduinoが3つのホールセンサー(ピン2,3,4)から出力を受信し、6つの異なる段階の段階で3つの異なる位相段階の段階で、6つの
段階の段階に変換します。
異なるEN 1,2、3 * 3は、それぞれ5,6、7で(1,2,3)を使用して
PWMデューティサイクルを変更し、ドライビングと再生ブレーキを
、
変更
し
ます1
;
AllState
(){pinmode(2、input);
/ホール1ピンモード(3、入力);
/ホール2ピンモード(4、入力);
/L6234ホール3/ピンモードモータードライバーの出力(5、出力);
/1ピンモード(6、出力);
/2ピンモード(7、出力);
/3ピンモード(9、出力);
/en 1ピンモード(10、出力);
/en 2ピンモード(11、出力);
/EN 3/シリアル。 begin(9600);
シリアル接続を使用している場合は、この行を除外してください。
プログラムの最後にあるフラッシュコマンド。
/*ピン9、10、11のPWM周波数を設定します/PWMをピン9、10の場合は32 kHzに設定します/最初に3つすべてのプレディバイダービットすべてをクリアします:int prescalerval = 0x07;
/Prescalervalと呼ばれる変数を作成し、バイナリ番号\ '00000111 \' TCCR1B&= 〜PRESCALER
/およびTCCR0Bの値を\ '11111000 \'で等しく設定します。
/prescalervalをバイナリ番号\ '00000001 \' tccr1bに等しく設定します| = prescalerval2;
/またはバイナリ数の\ '00000001 \'を使用したTCCR0Bの値 /PWMをピン3,11の場合は32 kHzに設定します(
このプログラムはピン11のみを使用します)
/3つの前の3つの前ビットすべてをクリアします。
/およびバイナリ数の\ '11111000 \'を使用したTCCR0Bの値/次に、適切な前エンコードビットを設定します。TCCR2B| =エンコード前のビット2。
/またはバイナリ数の\ '00000001 \'を使用したTCCR0Bの値/最初に3つの事前エンコードビットすべてをクリアし
ます
。
印刷プログラムが始まってからです。 println(time); //シリアル。 print(\ '\');
throttle = alalogread(0);
/スロットルポテンショメータMSPS = MAP(
スロットル、512,1023、0,255);
/運転は、ポテンショメータbspeed = map(
throttle、0,511,255、0)の上半分にマッピングされます。
/ポットの下部にあるハーフパートの再生ブレーキ/MSPS ed = 100;
/hallstate1 = digitalread(2)のデバッグ用;
/ホール1から入力値を読む2 = Digital Read(3);
/ホール2から入力値を読む3 = Digital Read(4);
ホール3(8、hallstate1)から入力値/数値書き込みを読む;
/対応するセンサーが高出力の場合、LEDは
DigitalWrite(9、HallState2)のデバッグに当初使用されています。
// DigitalWrite(10、HallState3); hallval =(hallstate1)+(2*hallstate2)+(4*hallstate3);
/3つのホールセンサーのバイナリ値を計算します/*シリーズ。 print(\ 'h 1:\');
シリアルポートのデバッグ用。 println(hallstate1);シリアル。 print(\ 'h 2:\');シリアル。 println(hallstate2);シリアル。 print(\ 'h 3:\');シリアル。 println(hallstate3);シリアル。 println(\ '\');
*///シリアル。 println(mspeed); //シリアル。 println(hallval); //シリアル。 print(\ '\');
/トランジスタ出力/遅延(1000)を監視します。
/* T1 = DigitalRead(2); // t1 = 〜T1;
T2 = DigitalRead(4); // t2 = 〜T2;
T3 = DigitalRead(5); // t3 = 〜T3;シリアル。印刷(T1);シリアル。 print(\ '\ t \');シリアル。印刷(T2);シリアル。 print(\ '\ t \');シリアル。印刷(T3);シリアル。 print(\ '\');シリアル。 print(\ '\');シリアル。 print(digitalread(3));シリアル。 print(\ '\ t \');シリアル。 print(digitalread(9));シリアル。 print(\ '\ t \');シリアル。 println(digitalread(10));シリアル。 print(\ '\');シリアル。 print(\ '\'); //遅延(500);
*/駆動段階の変更/各バイナリ番号には、出力の値を変更するために使用されるさまざまなトランジスタ/ビット数学に対応するケースがありますarduino:/portdには、L6234ドライバーのINピンの出力が含まれています/アッパートランジスタまたは下部トランジスタ/ENピンが各フェーズのセットを制御するかどうかを決定するために使用される出力が含まれます
。ポテンショメータによって制御されるスロットル値)。 if(throttle> 511){switch(hallval){
case 3:/portd = 1111xxx00;
/ピン0-
7 xxxの予想出力は、ホール入力を指し、portd&= b00011111を変更してはいけません。
portd | = B01100000;
/analowrite(9、mspeed);
PWM on A Phase(
ハイエンドトランジスタ)Analogwrite(10,0);
フェーズB閉鎖(duty = 0)Analogwrite(11,255); // -duty = 100%(
ローエンドトランジスタ)ブレイクのフェーズC;
ケース1:/portd = b001xxx00;
/ピン0-
7ポートの予想出力&= B00011111;
/portd | = B00100000;
/analowrite(9、mspeed);
位相上のPWM(
ハイエンドトランジスタ)AnalogWrite(10,255); //(
ローエンドトランジスタ)analogwrite(11,0)のフェーズB; //フェーズBオフ(duty = 0)break;
ケース5:/portd = b101xxx00;
/ピン0-
7ポートの予想出力&= B00011111;
/portd | = B10100000; analogwrite(9,0); analogwrite(10,255); analogwrite(11、mspeed);壊す;
ケース4:/portd = b100xxx00;
/ピン0-
7ポートの予想出力&= B00011111;
portd | = bym000;
/analowrite(9,255); analogwrite(10,0); analogwrite(11、mspeed);壊す;
ケース6:/portd = b110xxx00;
/ピン0-
7ポートの予想出力&= B00011111;
PORTD B11。 000 =;
/analowrite(9,255); analogwrite(10、mspeed); analogwrite(11,0);壊す;
ケース2:/portd = b010xxx00;
/ピン0-
7ポートの予想出力&= B00011111;
B0201700 PORTD | =;
/analowrite(9,0); analogwrite(10、mspeed); analogwrite(11,255);壊す; }}
/再生ブレーキ位相の変化 /portd(
L6234上のピンの出力)
ピンは常に低いため、各フェーズの低いトランジスタのみが再生中に使用されます。制動。 else {
/portd = b000xxx00;
/ピン0-
7ポートの予想出力&= B00011111;
portd | = bym0000; // switch(hallval){
case 3:analogy writing(9、bspeed); // analogwrite(9,0); analogwrite(10,0); analogwrite(11,0);壊す;
ケース1:アナロジーライティング(9、bspeed); analogwrite(10,0); analogwrite(11,0);壊す;
ケース5:アナロジーライティング(9,0); analogwrite(10,0); analogwrite(11、bspeed);壊す;
ケース4:アナロジーライティング(9,0); analogwrite(10,0); analogwrite(11、bspeed);壊す;
ケース6:アナロジーライティング(9,0); analogwrite(10、bspeed); analogwrite(11,0);壊す;
ケース2:アナロジーライティング(9,0); analogwrite(10、bspeed); analogwrite(11,0);壊す; }}
/time = millis();
印刷プログラムが始まってからです。 println(time); //シリアル。 print(\ '\'); //シリアル。フラッシュ();
/シリアルポートを使用してデバッグしたい場合は、
このプロジェクトでArduinoが行う操作は非常に簡単であるため、マイクロプロセッサでこのタスクを行うのは無駄のように思えると思います。
実際、L6234 のアプリケーションノートは、
このジョブを行うために、簡単なプログラム可能なゲートアレイ(格子半導体で作られたGAL16V8)を推奨しています。
私はこのデバイスのプログラミングに精通していませんが、ICのコストはわずか2ドルです。 39ニューアークで。
他の同様の統合回路も非常に安価です。
別のオプションは、控えめなロジックゲートをつなぐことです。
3つのホールセンサーの出力からL6234 ICを駆動できる比較的単純なロジックシーケンスをいくつか思いつきました。
ステージAのチャートを以下に示し、3つのステージすべての真理テーブルを(
およびCフェーズの論理回路のために、\ 'not \'ドアを\の反対側に切り替える必要があります
B
。