概要: STM32 サーボ、モーター ドライブ、OSBoat 回路ロジックのレビュー

        1 か月の学習を経て、STM32 ボードについての最も基本的な理解が深まりました。私個人にとって、最も簡単なアプリケーションはモーターの制御です。少し前に PWM の学習を終えたところですが、今日は古いプロジェクト OSBoat の制御部分について新たに理解したので、今日のアプリケーションの概要を説明します。


ステアリングギア

        ステアリング ギアは位置 (角度) サーボ ドライバーであり、角度を継続的に変更して維持する必要がある制御システムに適しています。その他の詳細については割愛しますが、原理は非常に難しいので応用すれば誰でも分かることです。

         これは私がテストに使用したステアリング ギアであり、最も一般的に使用されるステアリング ギアの 1 つでもあります。ここでは主にいくつかの重要な内容を記録します。

        180°、30kgのステアリングギアですので、一般的なステアリングギアの場合、ステアリングギアの制御には通常20Ms程度のタイムベースパルスが必要となり、パルスの高レベル部分は0.5Ms〜の範囲となります。 2.5Ms 角度制御パルス部分、合計間隔は2Msです。180°ステアリングギアを例にとると、対応する制御関係は次のようになります。

0.5Ms————0°

1.0Ms————45°

1.5Ms————90°

2.0Ms————135°

2.5Ms————180°

        360°ステアリングギアは他の一般的なステアリングギアとは異なり、速度と方向を制御できる無段変速減速モーターに相当しますが、0〜360°の角度制御機能はありません。制御方向は一般的なステアリングギアの制御信号と同じです。
0.5Ms—前進最高速度
1.5Ms—速度は 0
2.5Ms—後進最高速度です。

        ほとんどのステアリング ギア接続には 3 本のワイヤがあります。

黄-S: データ(pwm信号)を送信するために使用される信号線です。

赤 - V: 正の電源ライン (VCC) です。

茶(茶、黒)-G:アース線(GND)です。

        

        サーボの最も基本的なことを理解したら、コードを見てみましょう。

        サーボやモーターの制御は不思議なものだと思っていましたが、PWM出力で実現できることが分かりました。PWM 出力についてはここでは詳しく説明しませんが、以前学習して記録した記事は次のとおりです: (14 メッセージ) [学習記録] STM32 PWM 出力実験_HFUTdumpling Blog-CSDN Blog

コードに直接移動します。

pwm.c:

#include <pwm.h>
#include "sys.h"

void My_TIM3_Init(u16 arr,u16 psc)
{
	GPIO_InitTypeDef GPIO_InitStr;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStr;
	TIM_OCInitTypeDef TIM_OCInitStr;
	
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	GPIO_InitStr.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStr.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
	GPIO_InitStr.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStr);
	
	TIM_TimeBaseInitStr.TIM_Period = arr;
	TIM_TimeBaseInitStr.TIM_Prescaler = psc;
	TIM_TimeBaseInitStr.TIM_ClockDivision = TIM_CounterMode_Up;
	TIM_TimeBaseInitStr.TIM_CounterMode = TIM_CKD_DIV1;
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStr);

	TIM_OCInitStr.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStr.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStr.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OC2Init(TIM3,&TIM_OCInitStr);
	TIM_OC1Init(TIM3,&TIM_OCInitStr);

	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	TIM_Cmd(TIM3,ENABLE);
}

main.c:

 int main(void)
{	
	My_TIM3_Init(19999,71);//周期为20ms (arr+1)(psc+1) = 20000*72/72000000 = 20ms
	delay_init();
	while(1)
    {
		TIM_SetCompare1(TIM3,500);     //舵机驱动
		delay_s(3); //超过2s尽量自己新写一个延时函数,因为大于2s会溢出
		TIM_SetCompare1(TIM3,2000);
		delay_s(3);
	}
	
}

        ここで強調すべき点の 1 つは、関数late_s() を単独でカプセル化する必要がある理由です。時間厳守アトムには 2 つの late_ms() と late_us() が付属しており、lay_ms() を呼び出すと、所要時間が 2 秒よりも長くなるからです。オーバーフローの場合、内部カウンタの倍数は制限されているため、2 秒を超えるとカウンタはオーバーフローします。つまり、遅延が 2 秒を超えることはありません。したがって、自分で late_s() をカプセル化する必要があります。もちろん、これも非常に簡単で、for ループを実行するだけで完了です。

void delay_s(u16 s)
{
	int i = 0;
	for(i = 0;i < s;i++)
	delay_ms(1000);
}	

コンパイルが完了したら、プログラムをダウンロードできます。

ここでST-LINKを使用してプログラムをダウンロードします。これはより便利で、4 本のワイヤを接続する必要があります。

GND、3.3V、SWCLK、SWDIO であり、これらを STM32 インターフェイスに接続し、対応するドライバーをコンピューターにインストールします。

(私は非常に早い段階で取り上げたので、ここには関連リンクを含めません。サイト C には関連記事がたくさんあります)。

        ダウンロードが完了したら、サーボを 32 ボードに接続し、ST-LINK を取り外し、外部電源をオンにします ( 2 つの電源を同時に接続しないように注意してください。ボードが焼けやすくなります)。 。スイッチをオンにすると、サーボが動作を開始します。サーボは 3 秒ごとに 135 度、順方向に 1 回、逆方向に 1 回回転します。

        これでサーボの駆動は完了です!

モーター

        手持ちの空きモーターがなかったので、当初は OSBoat (以前のプロジェクト、後述) のウォームギアモーターを使って動かしたいと考えていました。溶接が必要なアース線 (GND) が欠落しているため、続行できませんでした。しかし、これにより、OSBoat ボートの回路配線ロジックを理解することができました。これは、予想外の大きな収穫でした。

        まずモーターについて説明しますが、ステアリングギアと同様に、モーターも PWM によって制御され、異なるデューティ サイクルを調整することで実現されます。モーターとステアリングギアの違いは、モーターは PWM データを送信するために 2 つのピン ポートを使用する必要があり、モーター ドライブも必要であることです。

        では本題に入ります。コードから始めましょう。

pwm.c: サーボと同じ。ここでは、サーボよりも 1 つ多くのピン ポートを開くだけで済みます。サーボには PA6、モーターには PA5 と PA6 を使用しました。これら 2 つはサーボの pwm.c ファイルですでに完了していることがわかります。港の。

    GPIO_InitStr.GPIO_Pin = GPIO_Pin_5 | GPIO_ピン_6;

main.c:

 int main(void)
{	
	My_TIM3_Init(19999,71);//周期为20ms (arr+1)(psc+1) = 20000*72/72000000 = 20ms
	delay_init();
	while(1)
	{
		TIM_SetCompare1(TIM3,10000);//电机驱动
		TIM_SetCompare2(TIM3,500);
		delay_s(2);
		TIM_SetCompare1(TIM3,500);
		TIM_SetCompare2(TIM3,10000);
		delay_s(2);
	}
}

        コードは非常に単純で、2 つの TIM チャネルが呼び出される点を除いて、基本的にサーボと似ています。

        ここではモータードライバーが必要ですが、これはより一般的に使用されており、私がここで持っているドライバーでもあります: L298N。

        L298N モーター制御モジュールの実装方法 - Zhihu (zhihu.com)

        実際、この図にはこのドライブの使用法が完全にまとめられています。その応用に関する私の要約をいくつか簡単に挙げてみましょう。

        出力 A と出力 B は、2 つのモーターが接続できること、つまり出力端を意味します。電源モジュールの 3 つのポートの中央は GND で、両側はそれぞれ 12V 電源と 5V 電源です。最も重要なのは入力ポートです。中央の 4 つのポートはロジック入力ポートで、左側の 2 つは IN1 と IN2、つまりチャンネル A、右側のチャンネル B も同様です。ロジック入力とは、その名のとおり、接続するとモーターを起動できることを意味します。左右のチャンネル A と B が有効な場合、速度やその他の命令など、他の方法で制御する必要がある場合に接続する必要があり、それ以外の場合は、ハイレベル、つまりショートに接続する必要があります。つまり、写真のような L298N ボードには、ハイレベルに接続されたジャンパー キャップが付属しています。彼のことは心配しないでください。

        配線は、IN1 と IN2 (または IN3、IN4) を STM32 の PA5 と PA6 (私のプログラムは PA5、PA6) に接続し、アース線を STM32 のアース線に接続します (基準がある必要があると理解しています)。ライン、そうでないと高レベルと低レベルは意味がありません)、完了できます。私のところではこれとアース線を溶接する必要があるようですが、まだ溶接していないので実際の実装工程はありません。


OSBoat プロジェクトの紹介と配線ロジック

        OSBoat は、米国のアルゴンヌ国立研究所チームの新しいスポンジ Oleo Sponge にちなんで名付けられました。この種のスポンジは優れた疎水性と親油性を備えており、繰り返し油を吸収したり絞り出したりすることができます。このスポンジの特性により、当社の船体に搭載することで、海上原油の自動洗浄を実現します。私たちは当初、メカニカル・イノベーション・デザイン・コンペティションの生態系修復コンペティションのテーマに基づいて、このようなプロジェクトの制作を開始しました。

        どういうわけか、この図面の主任設計者は私ではありませんが、このプロジェクトの主任技術者は私と数えられます。制作からモデリングの修正、実現までは主に私とチームメイトによって行われます。機械工学を専攻する学部生であれば、やる気さえあれば難しいことではありません!写真を見てください!

        図 1 は研究室で撮影された写真、図 2 は合肥理工大学屯渓路キャンパス湖瓶塘で撮影された写真です。

        このプロジェクトはこれまでに 1 つの全国賞、2 つの州賞、および数え切れないほどの学校賞を受賞しています。州および大臣以上のレベルで受賞した賞は次のとおりです。

        中国大学学生機械工学イノベーションおよび創造性コンテスト - 「Zhuoran-Dushun Cup」第 13 回プロセス機器実践およびイノベーションコンテストで 3 位

        第10回全国大学生機械革新設計競技会 安徽省部門 準優勝

        第16回「シーメンスカップ」チャイナ・インテリジェント・マニュファクチャリング・チャレンジ - 中国東部ディビジョン1で優勝

        それがどれほど優れているかについては話しません。本題に入りましょう。なぜこの記事でこのプロジェクトについて言及するかというと、このプロジェクトの管理は私のチームメイトが行っているからです。彼は私の先輩の 1 人で、CSDN 組み込み分野の優れた著者です。彼は現在、上海の某チップ R&D 会社で働いています。 . 大きな工場で働いてください (はい、最大の工場でなければなりません)。(メッセージ 14 件) トップ組み込みブログ_CSDN ブログ - Linux ドライバー開発、STM32、U-Boot ソース コード分析ブロガー

        実はこのプロジェクトは半完成品で、諸事情により機械構造や制御理論がまだ実現できていないため、制御を作った上司も以前作った時はあまり複雑なものは使いませんでした。そこで、OSBoat の回路配線のロジックをすぐに理解する機会がありました。

        この写真が回路全体であるはずです。出力端には 2 つの水中プロペラとウォームギヤ減速モーターが装備されています。コントローラーはRoboMasterの一般的に使用されているコントローラーです。(32はデバッグ中の私です) 次に、全体の回路を整理するために大まかに図を作成しました。

PS: コンピューターを変更したら、Visio に問題が発生して使用できなくなりました。友達の皆さん、何とかしてください。

        これはおそらく回路全体の基本図で、主な機能はボート全体を遠隔から制御および移動できるようにすることです。

そんな比較的簡単なことを先輩のような大物に求めるのは、ちょっとやりすぎな気がする。

        あ、ちなみにこの記事の出典もこのプロジェクトから来ていますが、私たちは群知能理論をこのプロジェクトに統合したいと考えています。これはステーション C の Xiaobai による「いいね!」数、コレクション数、閲覧数が最も多い記事でもあります。ご認識いただきありがとうございます。(メッセージ数 14 件) 微分方程式の解法について - 初心者のための Matlab の ODE ソルバー_HFUTdumpling のブログ-CSDN ブログ_微分方程式ソルバー

まとめとフォローアップ学習計画

        Zhengdian Atom のコースに続く STM32 の学習プロセスが終了しました。ブラザー・アトムのコースを見終えたとき、私はまだ多くの疑問を抱いていました。しかし、アプリケーターとして、STM32 を使用してモーターを制御できるようになったとき、STM32 についての理解が深まり、または別の理解が得られ、間違いなく私にとって非常に幸せな日でした。

        その後の組み込み学習については、主に 2 つの部分に分けます。まず第一に、これは依然としてプロジェクト指向であり、実際に学習することが間違いなく最も効率的かつ最速です。組み込み開発は PCB 設計と切り離せないため、今後も電子設計関連の内容を学習し、Altium Designer ソフトウェアを使用して自分で PCB ボードを設計していきます。同時に、これまでの Android 開発の経験 (その時ステーション C に登録せず、関連する学習教材を残しておいたことを後悔しました) に基づいて、アプリを使用して携帯電話をリモコンとして使用する方法を学びたいと考えています。 Bluetooth または Wi-Fi モジュール、リモコン。そして、近い将来、STM32 のいくつかの実践的なプロジェクトにもさらに触れる予定です。結局のところ、私はロボットとして毎日 3D プリンティング研究室に座っており、特殊な環境下にあるため、トラブルを起こしやすいのです。

        ここを見ている友達は本当の愛に違いありません、見てくれてありがとう、一緒に学び、進歩しましょう、そして私とコミュニケーションを取るすべての人を歓迎します!皆さんもいいね、集めて、フォローしていただけると嬉しいです!


参考記事:

1.ステアリングギア_Baidu百科事典 (baidu.com)

2. (メッセージ 14 件) PWM 制御 servo_kkdaron のブログ-CSDN blog_servo pwm control

おすすめ

転載: blog.csdn.net/weixin_47723114/article/details/127727386