[STM32] HALライブラリPWM制御モーター速度とエンコーダー読み取り(超詳細)

  みなさん、こんにちは。Xiaozhengです。この記事では、PWM制御モーターとエンコーダーがモーター速度を読み取るためのSTM32CubeMX構成プロセスについて詳しく説明し、HALライブラリーを学習しようとしている友人がSTM32CubeMXの構成方法をよりよく理解できるようにします。

モータードライブとエンコーダーを理解していない小さなパートナーがいる場合は、以下を参照してください。
モータードライブの説明[バランスカーの生産](2)モータードライブ(超詳細な説明)
エンコーダーの説明[バランスカーの生産](3)エンコーダー説明(超詳細)

  次の記事では、モーター速度のPIDアルゴリズム閉ループ制御(HALライブラリ)使用について紹介します

  言うまでもありませんが、今日から学び始めましょう!

1.ハードウェアの準備

(1)必要なハードウェア

  • チップ:STM32F103RCT6
  • ドライブ:モータードライブボードまたはTB6612(モータードライブチップ)
  • バッテリー:12Vリボバッテリー
  • モーター:エンコーダー付きモーター
  • ホイール:メカナムホイールを使用しています

(2)ハードウェア接続:

  • PA8-モータードライブボードPWM1
  • GND-モータードライブボードPWM2
    (ここでは、反転する場合はPWM1が接地され、PWM2はPA8に接続されます。両方を車のPWMピンに接続する必要がある場合は、正回転:PWM1は特定のデューティサイクル、PWM2デューティサイクルは0)
  • PA9(USART1_RX)-シリアルポートTXに接続します
  • PA10(USART1_TX)-シリアルポートRXに接続します
  • PB6-エンコーダA
  • PB7-エンコーダB

2. STM32CubeMX構成:

1.1使用したツール:

  • チップ:STM32F103RCT6
  • IDE:MDK-Keilソフトウェア
  • STM32F1xxHALライブラリ

1.2知識の要約:

  • STM32CubeMXはTIMx、USARTルーチンを作成します
  • Keilソフトウェアプログラミング

1.3プロジェクトの作成
1.チップセレクト
  チップ:STM32F103RCT6(独自のボードに応じて選択

ここに画像の説明を挿入
2. RCCを
  設定し高速外部クロックHSEを設定し、外部クロックソースを選択します

ここに画像の説明を挿入
3. LED1の構成
  使用しているボードのLED1ピンはPD2で、初期レベルはハイです。目的は、ライトのオンとオフを観察して、タイマー割り込みに入ったかどうかを判断することです。

ここに画像の説明を挿入
4. USART1は
  非同期の送受信を構成し、デフォルトのボーレートは115200ビット/秒です。

ここに画像の説明を挿入
5. PWM構成で
  は、タイマー1のチャネル1とチャネル4(TIM1_CH1とTIM1_CH4)、周波数10KHzを使用します。

ここに画像の説明を挿入
6.タイマー割り込み設定
  はタイマー2(TIM2)を使用し、周期は10msに設定されます。つまり、タイマー割り込みは10msに1回入力されます。

ここに画像の説明を挿入
  更新タイマー割り込みをオンにする

ここに画像の説明を挿入
7.エンコーダ構成
  STM32にはエンコーダ構成が付属しており、タイマー4(TIM4_CH1およびTIM4_CH2)を使用して、更新タイマー割り込みを開きます。

ここに画像の説明を挿入
8.割り込み優先度の設定
  エンコーダ割り込みはタイミング10msの割り込み内に発生するため、エンコーダ割り込みのプリエンプション優先度はタイミング10msより大きくする必要があります。

ここに画像の説明を挿入
9.構成クロック
  F1シリーズチップシステムクロックは72MHzです

ここに画像の説明を挿入
10.プロジェクト作成の最終ステップ

  • プロジェクト名を設定する
  • IDEを選択してください

ここに画像の説明を挿入
11.出力ファイル

  • ②場所:使用したファイルの.cと.hをコピーします
  • ③Office:各関数は独立した.cファイルと.hファイルを生成します

ここに画像の説明を挿入
12.プロジェクトファイルを作成し、
  [コードの生成]をクリックしてプロジェクトを作成します

13.ダウンロードツールを構成します。
  ここでは、ダウンロードを確認して直接実行してから、コンパイルを実行する必要があります。

ここに画像の説明を挿入


3. STM32ソースコード:

(1)halライブラリを使用したことがある方は、以下のコードがわかりやすいはずです。Xiaozhengはあまり説明しません。理解できない場合は、コメント欄に質問してください。main.cに追加:

/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "math.h"
/* USER CODE END Includes */
/* USER CODE BEGIN PV */
unsigned int MotorSpeed;  // 电机当前速度数值,从编码器中获取
int MotorOutput;		  // 电机输出
/* USER CODE END PV */
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *p)
{
    
    
	while(!(USART1->SR & (1<<7)));
	USART1->DR = ch;
	
	return ch;
}
/* USER CODE END 0 */
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);	    // TIM1_CH1(pwm)
  HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_1); // 开启编码器A
  HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_2); // 开启编码器B	
  HAL_TIM_Base_Start_IT(&htim2);                // 使能定时器2中断
  /* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    
    
    static unsigned char i = 0;
    if (htim == (&htim2))
    {
    
    
        //1.获取电机速度
        MotorSpeed = (short)(__HAL_TIM_GET_COUNTER(&htim4)/18);   
        // TIM4计数器获得电机脉冲,该电机在10ms采样的脉冲/18则为实际转速的rpm
        __HAL_TIM_SET_COUNTER(&htim4,0);  // 计数器清零
        
      
        //2.将占空比导入至电机控制函数
        MotorOutput=3600; // 3600即为50%的占空比
        __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, MotorOutput);
        MotorOutput=MotorOutput*100/7200; 
        // 占空比(按最高100%计算,串口打印)
        i++;
        if(i>100)
        {
    
    
          // 通过观察小灯亮灭来判断是否正确进入定时器中断
          HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_2);
          // 打印定时器4的计数值,short(-32768——32767)
          printf("Encoder = %d moto = %d \r\n",MotorSpeed,MotorOutput);	
          i=0;
        }
    }
}
/* USER CODE END 4 */

(2)STM32、シリアルポートディスプレイに書き込みます。

ここに画像の説明を挿入
(3)物理的な表示:

ここに画像の説明を挿入

4.ダウンロード

(1)プログラムのダウンロードアドレス:https
://pan.baidu.com/s/1mXYS8lQKaMX6XNA961UuJw抽出コード:z3ax

(2)シリアルポートアシスタントのダウンロードアドレス:https
://pan.baidu.com/s/11xBkoLBMVcIv7QNALpOeeg抽出コード:yzx3

5.まとめ

  上記は、モーター速度のPWM制御とモーター速度を読み取るエンコーダーのHALライブラリ構成とキールプログラミングです。モーター速度のPIDアルゴリズム閉ループ制御(HALライブラリ)使用については、後で紹介します。記事に誤りがある場合、または小さなパートナーが上記の内容について質問がある場合は、コメント領域にメッセージを残してください。Xiaozhengはそれを見た後できるだけ早く返信します!またね!

おすすめ

転載: blog.csdn.net/weixin_44270218/article/details/114045057