エレクトロニクスでは、サーボモーターは、その精度と取り扱いの容易さから、主にロボット工学プロジェクトで使用されています。サーボモーターはサイズが小さく、非常に効果的でエネルギー効率が高いです。それらは高トルクを提供し、モーターの仕様に従ってウェイトを持ち上げたり押したりするために使用できます。このチュートリアルでは、サーボモーターとサーボをSTM32F103C8ボードとインターフェースする方法について学習 します。サーボモーターのシャフトの位置を変えるためのポテンショメーターと、角度値を表示するためのLCDも接続されています。
必要なコンポーネント
- STM32F103C8(ブルーピル)ボード
 - サーボモーター(SG90)
 - LCD(16x2)
 - ポテンショメータ
 - ブレッドボード
 - ジャンパー線
 
回路図と接続

SMT32F103C8ピンの詳細
STM32F103C8、我々は10本の持っADCピン(PA0-PB1)を、そしてここでは1本のだけのピン(PA3)を使用 ()analogreadを ポテンショメータにより、モータの軸位置を設定します。また、STM32の15個のPWMピン(PA0、PA1、PA2、PA3、PA6、PA7、PA8、PA9、PA10、PB0、PB1、PB6、PB7、PB8、PB9)のうち、1個のピンがサーボにパルスを供給するために使用されます。モーターのPWMピン(通常はオレンジ色です)。
以下の詳細な記事を読むことで、PWMとADCの詳細を学ぶことができます。
- STM32F103C8でADCを使用する方法
 - STM32F103C8のパルス幅変調(PWM)
 
STM32F103C8とLCD間の接続
| STM32F103C8 | LCD | 
| GND | VSS | 
| + 5V | VDD | 
| ポテンショメータセンターPINへ | V0 | 
| PB0 | RS | 
| GND | RW | 
| PB1 | E | 
| PB10 | D4 | 
| PB11 | D5 | 
| PC13 | D6 | 
| PC14 | D7 | 
| + 5V | A | 
| GND | K | 
サーボモーターとSTM32F103C8間の接続
| 
 STM32F103C8  | 
 サーボ  | 
| 
 + 5V  | 
 赤(+ 5V)  | 
| 
 PA0  | 
 オレンジ(PWMピン)  | 
| 
 GND  | 
 ブラウン(GND)  | 
ポテンショメータの接続
ここでは2つのポテンショメータを使用しました
1.右側のポテンショメータは、LCDのコントラストを変化させるために使用されます。3つのピンがあり、左のピンは+ 5V用、右のピンはGND用、中央のピンはLCDのV0に接続されています。
2.左側のポテンショメータは、アナログ入力電圧を制御することによってサーボモーターのシャフト位置を変更するために使用されます。左側のピンには3.3Vの入力があり、右側にはGNDがあり、中央の出力はSTM32の(PA3)に接続されています。

サーボモーター用のSTM32のプログラミング
前のチュートリアルと同様に、FTDIプログラマーを使用せずにUSBポートを介してArduinoIDEでSTM32F103C8をプログラミングしました。Arduinoのようにプログラミングを進めることができます。完全なコードは、プロジェクトの最後に以下に示されています。
まず、サーボおよびLCD機能用のライブラリファイルを含めました。
#include
次に、LCDディスプレイ用のピンを宣言し、初期化しました。また、PWMおよびポテンショメータの他のいくつかの変数を宣言しました。
const int rs = PB0、en = PB1、d4 = PB10、d5 = PB11、d6 = PC13、d7 = PC14; LiquidCrystal lcd(rs、en、d4、d5、d6、d7); intservoPin = PA0; int potPin = PA3;
ここでは、データ型 Servo を使用して可変サーボを作成し、以前に宣言されたPWMピンに接続しました。
サーボサーボ; Servo.attach(servoPin);
次に、ピンPA3からアナログ値を読み取ります。これはADCピンであるため、アナログ電圧(0-3.3)をデジタル形式(0-4095)に変換します。
AnalogRead(potPin);
デジタル出力は12ビットの分解能であるため、次数(0-170)の範囲の値を取得する必要があり、ADC(0-4096)の値を最大角度170度に従って除算するため、24で除算します。
角度=(読み取り/ 24);
以下のステートメントは、サーボモーターが指定された角度でシャフトを回転させるようにします。
Servo.write(angle);
完全なコードを以下に示し、コメントで詳しく説明します。
