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

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

       1.TB6612FNG電機驅動模塊函數

            

         (1)<概述>oop

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

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

以直接驅動電機,利於減少系統尺寸。對於PWM信號輸入頻率範圍,高達100kHz的頻率更是能夠知足咱們的大部分需求。spa

         (2)<主要參數>3d

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

過熱保護,低壓檢測code

         (3)<模塊接線圖>blog

               (對應口能夠在模塊背面看到)ip

                解讀: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.關於實物的鏈接

 

相關文章
相關標籤/搜索