使用STM32定时器实现PWM控制SG90舵机

目录

1、PWM介绍

1.STM32F103C8T6 PWM资源:

2.PWM输出模式

3.PWM周期与频率

4.不同IO口输出PWM相对应连接到定时器的那一路

 2、sg90舵机介绍及实战

1.sg90舵机介绍

2.代码实现

1.codeMX配置

2.用到的HAL库函数

1.开始产生PWM信号

返回状态值

2.修改比较值,修改占空比 

 具体代码

看这篇文章之前如果对PWM波和SSG90舵机不熟悉可以先看我之前51的文章

51—PWM开发SG90舵机

在51的时候因为芯片没有集成PWM功能,所以我们当时是使用IO口模拟的,在STM32上芯片已经集成了PWM功能,所以我们直接使用即可。

1、PWM介绍

1.STM32F103C8T6 PWM资源:

  • 高级定时器(TIM1):7路
  • 通用定时器(TIM2~TIM4):各4路
  • (这是我的单片机的,这个可以在芯片手册查看)

    2.PWM输出模式

  • PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
  • PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
  • 3.PWM周期与频率

    【公式】:f=1/T,单位是s,单位是HZ。(其中大写字母T,表示周期,小写字母f表示频率)

    PWM占空比由TIMx_CCRx寄存器决定

    4.不同IO口输出PWM相对应连接到定时器的那一路

     这个我们可以查看产品手册(都是可以查看到的)

     2、sg90舵机介绍及实战

    1.sg90舵机介绍

    注意接线

    PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右。 

    确定周期/频率

    如果周期为20ms,则 PSC=7199,ARR=199(这两个值也可以是其它的)

     角度控制

  • 0.5ms———–0度; 2.5% 对应函数中CCRx为5
  • 1.0ms———–45度; 5.0% 对应函数中CCRx为10
  • 1.5ms———–90度; 7.5% 对应函数中CCRx为15
  • 2.0ms———–135度; 10.0% 对应函数中CCRx为20
  • 2.5ms———–180度; 12.5% 对应函数中CCRx为25
  • 2.代码实现

    需求:每隔1s,转动一个角度:0度 –> 45度 –> 90度 –> 135度 –> 180度 –> 0度

    1.codeMX配置

    2.用到的HAL库函数
    1.开始产生PWM信号

    HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

    参数1:定时器句柄

    参数2:使用通道

    返回状态值
    2.修改比较值,修改占空比 

    #define __HAL_TIM_SetCompare            __HAL_TIM_SET_COMPARE

    #define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)  

    参数1:定时器句柄

    参数2:使用通道

    参数3:指定捕获比较寄存器的新值(占空比)

     具体代码

    	HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);//启动定时器
      while (1)
      {
    	HAL_Delay(1000);
    		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,5);
    	HAL_Delay(1000);
    		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,10);
    	HAL_Delay(1000);
    		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,15);
    	HAL_Delay(1000);
    		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,20);
    	HAL_Delay(1000);
    		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,25);
      }

    作者:Tyro_wang

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用STM32定时器实现PWM控制SG90舵机

    发表评论