使用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/n/369686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
RDNYERDNYE
上一篇 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

发表回复

登录后才能评论