STM32Cubemx PWM驱动SG90舵机

简介: STM32Cubemx PWM驱动SG90舵机

一、SG90相关介绍



名 称:9克舵机 180度

尺 寸:23mmX12.2mmX29mm
重 量:9克

扭 矩:1.5kg/cm
工 作 电 压: 4.2-6V
温 度 范 围:0℃--55℃
运 行 速 度:0.3秒/60度
死 带 宽:10微秒




二、Cubemx配置

sys配置



RCC配置




LED小灯



PWM输出一个周期时间为20ms,初始值为0.5ms

计算方法:Timer定时器时钟我们设置为72Mhz,这里我们将预分频设置为72-1,则一个周期为72Mhz/(71+1)=1Mhz(即1us),所以20ms的周期我们需要计数20000-1=19999个填入Counter

Period参数中。

另外,我们还需要一个默认脉冲宽度为0.5ms的,0.5/20*20000=500



生成工程




三、keil中代码配置

main.c

/* USER CODE BEGIN 0 */
void Set_SG90_angle(TIM_HandleTypeDef * htim,uint32_t Channel,uint8_t angle,uint32_t countPeriod,uint32_t CycleTime)
{
  uint16_t compare_value=0;
  if(angle<=180)
  {
    //角度转化为数值
    compare_value=0.5*countPeriod/CycleTime+angle*countPeriod/CycleTime/90;
    __HAL_TIM_SET_COMPARE(htim, Channel, compare_value);//调整占空比
  }
 
}
 
/* USER CODE END 0 */


初始化,此处舵机到达0度位置

 /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
  /* USER CODE END 2 */


while

 /* USER CODE BEGIN WHILE */ 
 while (1)
  {
      HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
  
      //SG90从0°旋转到180°
      for(uint8_t i=0;i<180;i++)//从0到180°递增
      {
        Set_SG90_angle(&htim3,TIM_CHANNEL_2,i,20000,20);//此函数i设置舵机到达的角度
        HAL_Delay(5);       
      } 
 
      //SG90从180°旋转到0°
      for(uint8_t j=180;j>0;j--)//从180°到0°递减
      {
        Set_SG90_angle(&htim3,TIM_CHANNEL_2,j,20000,20);//此函数设置舵机到达的角度
        HAL_Delay(5);       
      }
 
    /* USER CODE END WHILE */


以上代码实现了舵机在180度水平方向反复运动效果。因为初始化默认舵机停留在-90度位置,可以先注释while中的占空比,调整舵机角度。一定注意舵机供电5V。


链接: https://pan.baidu.com/s/1Gk949glHw9BW_1QC6eFV2g?pwd=8swi

提取码: 8swi

目录
相关文章
|
29天前
STM32Cubemx PWM驱动加湿器模拟火山喷发效果
STM32Cubemx PWM驱动加湿器模拟火山喷发效果
37 14
|
29天前
STM32CubeMX mpu6050驱动
STM32CubeMX mpu6050驱动
37 10
|
8天前
|
编解码 算法
掌握PWM:STM32F103实现PWM控制直流电机小风扇
PWM,即脉冲宽度调制(Pulse Width Modulation),是一种广泛应用于电子和电机控制领域的信号编码方法。PWM的核心思想是通过改变数字信号的脉冲宽度来模拟模拟信号的幅度变化,从而达到控制输出功率的目的。
|
29天前
STM32CubeMX WS2812B灯驱动
STM32CubeMX WS2812B灯驱动
25 1
|
29天前
STM32CubeMX ULN2003步进电机驱动
STM32CubeMX ULN2003步进电机驱动
19 0
|
29天前
STM32Cubemx TB6612直流电机驱动
STM32Cubemx TB6612直流电机驱动
31 0
|
1月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
124 0
|
2月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
138 2
|
2月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
245 4
|
1月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。