はい、転送されましたが、ちょっと違う気がしませんか?遅すぎる?心配しないでください。続けていきます。この章の最後で説明する原理によると、8 ビート モードではステッピング モーターが 1 回転するのに 64 リズムかかりますが、プログラムでは各リズムが 2ms 続くため、1 回転は 128ms、つまり 1 秒になります。 . 7 回転以上ありますが、1 回転に 7 秒以上かかるように見えるのはなぜですか?
それでは、「永久磁石加速ステッピング モーター」の「加速」の概念を理解しましょう。図 9-7 は、この 28BYJ-48 ステッピング モーターの分解図です。写真からわかるように、真ん中の白いピニオンがステッピング モーターのローター入力です。このピニオンは 64 のリズムで回転します。円を描くと水色の大きなギアが駆動し、これが最初の加速レベルです。右上の赤い歯車の構造を見てみますと、モーターローターと最終入力軸を除いた3つの変速機歯車は、多歯の層と小さな歯の層からなる構造になっていると考えられます。 , そして、各歯車は独自のを使用します。次の歯車の小さな歯層が次の歯車の多歯層を駆動します。このように、2 つの歯車ごとに 1 レベルの加速度が形成され、合計 4 つの加速度レベルがあります。総加速比は何ですか?つまり、インプットシャフトが1回転するまでに、ローターが何回転するかということです。
図 9-7 ステッピング モーターの外歯車の表現
モーター パラメーター テーブルの加速比パラメーターを確認してください - 1:64、ローターが回転します64回回して、最終的に入力軸が1回転することになるので、入力軸が1回転するのに64*64=4096リズム、2ms*4096=8192msとなり、1回転するのに8秒以上かかることになります。 「今のテストの結果は一致していますか?」と同じです。 4096 個のリズムが 1 つの円を描くように回転するため、1 つのリズム回転の角度、つまりステップ角は 360/4096 になります。表のステップ角パラメータ 5.625/64 を見てください。計算してみると、これら 2 つがわかるでしょう。値が等しい。すべてがクリックされました。
ここで原則の基本的な理解は完了したはずですが、「実践こそが真実を試す唯一の基準である」という考え方を皆さんに養っていただきたいと考えています。ステッピングモーターの最大の特徴は何でしょうか?移動量を正確に把握!それでは、それが正確かどうかをテストする必要がありますか?どのくらい正確ですか?練習方法は? 90度回転させて測定して、禁止されているかどうかを確認しますか?それはいいのですが、たった 1 度、あるいは 1 度未満のズレだった場合、正確に測定できますか?洗練された楽器がないと難しいですね。さらに数円回転させて、最終的に停止した位置がまだ元の位置ではないかどうかを確認してみましょう。これに応じて、任意の回転数で回転するモーターの制御を容易にするためにプログラムを変更します。
#includevoid TurnMotor(unsigned long angle); void main(){ TurnMotor(360*25); //360 度*25,即 25 圈 while (1); } /* 软件延时函数,延时约 2ms */ void delay(){ unsigned int i = 200; while (i--); } /* 步进电机迁移转变函数,angle-需转过的角度 */ void TurnMotor(unsigned long angle){ unsigned char tmp; //暂时变量 unsigned char index = 0; //节奏输入索引 unsigned long beats = 0; //所需节奏总数 //步进电机节奏对应的 IO 掌握代码 unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 }; //盘算需求的节奏总数,4096 拍对应一圈 beats = (angle*4096) / 360; //判别 beats 不为 0 时履行轮回,然后自减 1 while (beats--){ tmp = P1; //用 tmp 把 P1 口以后值暂存 tmp = tmp & 0xF0; //用&操作清零低 4 位 tmp = tmp | BeatCode[index]; //用|操作把节奏代码写到低 4 位 P1 = tmp; //把低 4 位的节奏代码和高 4 位的原值送回 P1 index++; //节奏输入索引递增 index = index & 0x07; //用&操作完成到 8 归零 delay(); //延时 2ms,即 2ms 履行一拍 } P1 = P1 | 0x0F; //封闭电机一切的相 }
上記のプログラムでは、最初に指定された角度で回転するようにモーターを制御する関数を作成しました。この角度の値は関数のメソッド パラメーターによって与えられます。その後、main 関数で便利に次のことができます。呼び出し時に関数を変更し、実際のパラメータを使用してモーターを任意の角度で回転するように制御します。ここでは 360*25 (25 個の円) を使用しましたが、他の値に変更して結果を確認することもできます。プログラムは 25*8=200 秒間実行されます。まず入力シャフトの初期位置を記録してから、電源を入れて完了するまで辛抱強く待ちます。見てください。エラーはありますか?どうしたの? どうしたの? 転送量を正確に制御できないの?
この問題は実際には加速比に由来しています。もう一度見てみましょう。メーカーが指定する加速比は 1:64 です。どのメーカーがモーターを製造していても、モデルが公称 28BYJ-48 である限り、加速度の比率は 1:64 です。しかし、実際にはどうでしょうか?分解計算により、実際の正確な加速比はこの値 1:64 ではなく、1:63.684 であることがわかりました。このデータを取得する方法も非常に複雑です。各ギアの歯数を数え、各レベルの加速比を乗算して結果を取得します。測定された加速比は (32/9)*(22/11) となります。 *(26/9)*(31/10)≈63.684 したがって、実際の誤差は 0.0049、つまり約 0.5% になります。100 回回転すると半回転になります。つまり、25 回回転したことになります。ターンオフの 8 分の 1、つまり 45 度ですか? 誤差が 45 度かどうか見てみましょう。そして、実際の加速度比 1:63.684 から、1 回転するのに必要なリズムの数は 64*63.684 ≒ 4076 であると結論付けることができます。次に、以下のプログラムのモータードライブ関数の 4096 を 4076 に変更して再試行します。わずかな誤差も見えませんか?しかし実際には、以下の計算結果はほぼ近似値であるため、誤差は依然として存在します。実際の誤差は約 0.000056 (1 万分の 0.56) です。半回転の違いを生むのに 10,000 回転しかかからないため、無視できます。 。
では、なぜメーカーのパラメータに誤りがあるのでしょうか?メーカーは知らないのか?この問題を説明するには、実用化に戻る必要があります。ステッピング モーターの最も一般的な目的は、ターゲットを特定の角度 (通常は 360 度以内) で回転するように制御することです。この 28BYJ-48 の最終的な設計目標は、エアコンのファンブレードを制御する場合、ファンブレードの動作範囲は 180 度を超えないため、この使用例では、メーカーはおよそ 1:64 の整数加速比を与えていますが、これは十分に正確で合理的です。 。ただし、今回のプログラムのように、必ずしもエアコンのファンブレードを駆動する必要はなく、何回も回転させて他のことを行うこともできますが、現時点ではより正確なデータが必要であり、それが私たちの希望です。誰もが理解して習得できること、つまり、いわゆる「既成の計画」に囚われず、自分たちでシステムを「設計」し、そこで見つかった問題を解決できなければなりません。 。
以上が28BYJ-48 ステッピングモーターの転送精度と詳細な分析を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。