使用STM32控制舵機

一、了解舵機

舵機是一種可以精確控制角度的電機,常用於機器人、模型、自動門和遙控車等領域。舵機通常有三個線纜:電源、地線和信號線。通過改變信號線上的脈衝寬度,可以改變舵機轉動的角度。

標準的舵機可以轉動0度到180度,其中90度為中心位置。改變脈衝寬度可以讓舵機轉動到任意角度。

二、連接舵機和STM32

舵機通常需要在一定電流下運行。因此,可以通過使用外部電源來提供舵機的電源,來避免過大的負載對STM32的影響。連接舵機的線纜時,需要將信號線連接到STM32的一個旁邊的GPIO引腳上。

示例連接:


    //引入庫
    #include "stm32f10x.h"
    
    //定義舵機控制引腳
    #define Servo_Pin GPIO_Pin_7
    #define Servo_Port GPIOB
    
    int main(void)
    {
        //初始化GPIO引腳
        GPIO_InitTypeDef GPIO_InitStruct;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能GPIOB時鐘
        GPIO_InitStruct.GPIO_Pin = Servo_Pin;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽輸出
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;         //50MHz
        GPIO_Init(Servo_Port, &GPIO_InitStruct);
        
        //設置GPIO引腳輸出高電平,以控制舵機複位
        GPIO_SetBits(Servo_Port, Servo_Pin);
        
        while (1)
        {
            //控制舵機偏向左移動10度
            GPIO_ResetBits(Servo_Port, Servo_Pin);
            delay_ms(1);
            GPIO_SetBits(Servo_Port, Servo_Pin);
            delay_ms(19);
        }
    }

三、控制舵機旋轉

通過改變脈衝寬度來控制舵機旋轉,具體要控制多少角度需要根據具體舵機的型號來決定。假設舵機的最小脈衝寬度為500us,最大脈衝寬度為2500us,則中間位置的脈衝寬度應該為1500us。

假設使用的是72MHz的系統時鐘,可以使用定時器輸出PWM波來產生脈衝寬度,具體的控制代碼如下:


    #include "stm32f10x.h"
    
    #define Servo_Pin GPIO_Pin_7
    #define Servo_Port GPIOB
    
    #define PWM_Prescaler 71
    #define PWM_Period 1999
    
    int main(void)
    {
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
        GPIO_InitTypeDef GPIO_InitStruct;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
        
        GPIO_InitStruct.GPIO_Pin = Servo_Pin;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(Servo_Port, &GPIO_InitStruct);
        
        TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInitStruct.TIM_Prescaler = PWM_Prescaler;
        TIM_TimeBaseInitStruct.TIM_Period = PWM_Period;
        TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
        
        TIM_OCInitTypeDef TIM_OCInitStruct;
        
        TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OCInitStruct.TIM_Pulse = 1500;
        TIM_OC1Init(TIM3, &TIM_OCInitStruct);
        
        TIM_Cmd(TIM3, ENABLE);
        
        while (1)
        {
            //控制舵機向左移動5度
            TIM_SetCompare1(TIM3, 1700);
            delay_ms(1000);
            
            //控制舵機向右移動5度
            TIM_SetCompare1(TIM3, 1300);
            delay_ms(1000);
        }
    }

四、總結

本文介紹了如何使用STM32控制舵機,包括連接舵機和STM32、控制舵機旋轉等方面。通過學習本文可以掌握如何使用STM32控制舵機的基本知識,為後續的舵機控制項目提供幫助。

原創文章,作者:RDNYE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369686.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RDNYE的頭像RDNYE
上一篇 2025-04-13 11:45
下一篇 2025-04-13 11:45

相關推薦

  • MG90S舵機參數詳解

    一、物理參數 MG90S舵機是一款微型舵機,其體積小,重量輕,方便安裝,適合各種小型機器人、模型等領域的應用。 下面是MG90S舵機的一些物理參數: – 重量:9g – 尺寸:22…

    編程 2025-01-16
  • 舵機控制教程:原理、應用與實例詳解

    舵機作為一種常見的電機,主要用於控制機器人、模型等設備的位置、角度等,是機器人控制領域中非常重要的執行器。本文將從以下幾個方面,詳細介紹舵機的原理及其應用和實例: 一、舵機的原理 …

    編程 2024-11-05
  • 舵機控制原理

    一、電機基礎知識 電機是一種將電能轉化為機械能的裝置,舵機也屬於電機範疇。常見的電機有直流電機和交流電機兩類。 直流電機每個轉子針柱上帶有永久磁鐵,轉子繞組內接直流電源,當電流通過…

    編程 2024-10-10
  • 舵機原理圖解析

    一、舵機的基本原理 舵機是一種能夠通過控制電子信號來控制機器人或其他機械的角度和角速度的電機。舵機電路核心由一個電機、一組位置感測器和一個控制電路組成。這個組合使得舵機變得非常精確…

    編程 2024-10-04

發表回復

登錄後才能評論