STM32HALライブラリCUBE構成シングルチャネルドライブサーボ


ソフトウェアとハ​​ードウェアのモデル

STM32F103RCT開発ボード
STM32CUBEMX + KEIL5プログラミング
STM32F11.8.3ライブラリバージョン

1.ステアリングギアにはどのような信号が必要ですか?

  1. 正負の電圧信号:購入するサーボの種類によって異なります。3.3v、8.0v、各種種類があります。
  2. パルス幅変調信号(PWM):180°ステアリングギアの場合、通常、サイクルは20ms(周波数は50Hz)で、パルス幅(1サイクルの高レベル持続時間)は500〜2500usです。その中で、1500usはステアリングギアホイールを90°の位置として理解できる中間位置にします。500-1500usと1500-2500usの間では、0-90°と90-180°の方向に回転します。それぞれ。

2.実装手順

1.CUBE構成

ここでは、TIM2とそのチャネル2のみが構成に使用されます(チップの選択などの基本的なコンテンツは繰り返されません)。

  1. クロックツリーの構成
    ここに画像の説明を挿入
    ここでは、デフォルトの周波数分割係数を変更せずに直接使用しています。必要に応じて変更するだけです。
  2. 水晶発振器クロックの選択
    RCCをクリックして水晶発振器
    ここに画像の説明を挿入
    選択ます
    ここに画像の説明を挿入
  3. タイマーとそのチャンネルを選択します
    ここに画像の説明を挿入
  4. 周波数分割係数などのパラメータを計算します
  • ここでの周波数は8MHzです。最初に800で割ります
    ここに画像の説明を挿入
    。8パーセントの周波数が800-1と書かれている理由がわかりません。基本的な知識を統合するために、カウンターのカウンター部分を確認することをお勧めします。
  • 現在のカウンターとイベントを消費する必要がある1つは1 /(8MHz / 800)= 0.1msです。サイクルを20msにする場合は、20 / 0.1 = 200回カウントする必要があり、自動リロード値は200です。
    ここに画像の説明を挿入
  • 今周期は20msのは、我々はあなたがハイレベルの期間が1.5ミリ秒になりたい場合は、あなたが私たちの比較値のニーズが15になるように、15回を数える必要がある、200手段が20msをカウント、パルス幅を設定する必要があり
    ここに画像の説明を挿入
    、我々がしたい場合変更するには初期値の場合は、コード内のCCRの値を変更するだけです。
  1. 次に、コードをエクスポートします
    ここに画像の説明を挿入
    ここに画像の説明を挿入

2.コードの追加


  1. main関数でPWMAddの出力を開始します
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);

タイマー2、チャネル2のPWM出力2を開始する手段。while
ループを追加します。

TIM2->CCR2=10;
HAL_Delay(2000);
TIM2->CCR2=20;
HAL_Delay(2000);

これは、比較値を変更して出力パルス幅を1000usと2000usの間で切り替え、角度の偏向を実現することを意味します。
3.全体的な主な機能は次のとおりです。

int main(void)
{
    
    
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    
    
    TIM2->CCR2=10;
		HAL_Delay(2000);
		TIM2->CCR2=21;
		HAL_Delay(2000);
		
		/* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

ソースのダウンロード

おすすめ

転載: blog.csdn.net/weixin_50303783/article/details/113790924