用HAL庫結合STM cube編寫代碼控制stm32f103c8t6來驅動減速電機實現慢快逐步切換轉動


  • 用到的模塊
  1. TB6612FNG電機驅動模塊
  2. stm32F103C8T6最小系統板
  3. LM2596S降壓模塊
  4. 直流減速電機(不涉及編碼器知識)
  • 模塊介紹

       1.TB6612FNG電機驅動模塊

            

         (1)<概述>

            TB6612FNG是東芝半導體公司生產的一款直流電機驅動器件,它具有大電流MOSFET-H橋結構,雙通道電路輸出,可同時驅動兩個電機。

與L298N使用基本一致。而且,相比於L298N的熱耗性和外圍二極管續流電路,其無需外加散熱片,外圍電路簡單,只需接電源濾波電容就可            

以直接驅動電機,利於減小系統尺寸。對於PWM信號輸入頻率范圍,高達100kHz的頻率更是可以滿足我們的大部分需求。

         (2)<主要參數>

最大輸入電壓 VM=15V
最大輸出電流 Iout=1.2A(平均)
模式 正反轉/短路剎車/停機功能
內置電路

過熱保護,低壓檢測

         (3)<模塊接線圖>

               (對應口可以在模塊背面看到)

                解讀:VM直接接電池即可,VCC是內部邏輯供電,一般給3.3V或者5V都可以,模塊的三個GND接任意一個即可,因為都是導通的,STBY置高模塊才能正常                            工作。

                           完成上面的工作之后,我們就可以開始搭載硬件電路了。

        2.  LM2596S DC-DC降壓電源模塊

          (1)<產品參數>

輸入電壓 3.2V~46V
輸出電壓 1.25V~35V
輸出電流 3A以內
轉換效率 92%以內
輸出文波 <30mV
開關頻率 65kHz
工作溫度 -45℃~+85℃
尺寸大小

43.2mm*21.0mm*14.0mm

(長*寬*高)

 

          筆者用12V電源供電,那接到單片機及電機驅動模塊內部驅動口必須經過降壓到3.3~5V才可以給正常供電。

          話不多說,上圖:

          

           (2)<具體使用>    

           ——可以看到模塊的正面有一個藍色的長方體,頂部有一個旋鈕,可能比較難操作,我們用一字形螺絲刀(細一點的)來旋轉上面的旋鈕即可調節輸出電壓。注意降壓模塊的四角,我們可以看到    IN-   IN+   OUT-   OUT+    的字樣。IN則為輸入電壓所接腳,OUT則為輸出電壓所接腳,外部電源就是通過這個模塊於內部電路形成聯系。

           ——指示燈亮,模塊正常工作。

           ——IN+/-接外部電源,用萬用表測量輸出OUT+/-的電壓值達到所需要電壓為止

           ——長時間工作建議在2.5A以內的電流使用,同時加上散熱片(10W以上輸出);由於是降壓模塊,為了保證輸出穩定,請保持最小1.5V壓差

     3.直流減速電機

        按照慣例還是先上圖介紹

 

                                (電機參數  ——>  購自平衡小車之家)

 

      所以這次單純控制電機,我們只需單純引出兩條線接到驅動模塊上

 

  • 具體電路搭建

          ——電路必須依靠軟件的控制前提,所以我們從軟件入手

          1.打開cube,輸入STM32F103C8,點進去進行如圖配置(PWM頻率選取10kHz)

 

(PA1/PA2為Output模式)

 

 

   (打開TIM1通道一,設為PWM輸出模式)

 

 (注意77和99)(用這個來確定PWM頻率)

(時鍾樹設定,查表看到TIM1掛載於APB1 timer clocks)

到這,我們的cube已經配置完畢。

我們點擊齒輪創建工程

       

        2.關於程序的編寫

int main(void)
{
  /* USER CODE BEGIN 1 */ uint16_t pwm_val = 0; /* 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_TIM1_Init();
  /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET) ; HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  while (pwm_val < 50) { pwm_val++; __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_val); HAL_Delay(50); } while (pwm_val) { pwm_val--; __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_val); HAL_Delay(50); } /* USER CODE END 3 */
}
}

其中(1)在main函數中定義一個變量pwm_val用於控制PWM輸出的占空比。

      

       (2)HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);          //即在while(1)之前使能PWM輸出通道CH1。

        

       (3)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET) ;
                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);  //定義IO

    

       (4)在while(1)中不斷改變PWM輸出的占空比,控制電機的轉動速度,實現一個電機轉動速度由慢到快再由快到慢的的效果。周期約為5秒。要注意的是,配置的自動加載參數是99,在while(1)                  中,占空比的變化是范圍是0~50。

   

       3.關於實物的連接

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM