【STM32】舵机SG90

1.舵机原理

舵机内部有一个电位器,当转轴随电机旋转,电位器的电压会发生改变,电压会带动转一定的角度,舵机中的控制板就会电位器输出的电压所代表的角度,与输入的PWM所代表的角度进行比较,从而得出一个旋转的方向与角度。

该舵机可以控制0°~180°旋转

舵机0°~180°旋转对应高电平的时间为500us ~2500us,而一般舵机的频率为50Hz,也就是周期为20ms,对应的占空比就是2.5% ~12.5%,2.5%对应舵机转0°,12.5%对应舵机转180°,7.5%就对应着转90°。

2.简单使用

使用旋转编码器对舵机进行控制,旋转编码器转一圈是20个脉冲,也就是计数40次,为了让旋转编码器与舵机旋转对应上,也就是旋转编码器最大计数20就可以了,对应舵机的半圈

舵机的PWM输入引脚为PB8,我们需要将PB8设置为PWM输出引脚

而PB8也是定时器4的通道3

代码:

c 复制代码
#define MAX_COUNT 20
int main(void)
{



  

  
  HAL_TIM_Encoder_Start(&htim1,TIM_CHANNEL_ALL);//编码器启动
  HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);//PWM输出启动
  int count=0;
  int duty=0;//舵机高电平对应的计数次数

  while (1)
  { 
	  count=__HAL_TIM_GET_COUNTER(&htim1);//统计编码器count=20就是转半圈
	  if(count>60000)//反转
	  {count=0;
	  __HAL_TIM_SET_COUNTER(&htim1,0);}
	  else if(count>MAX_COUNT)
	  {count=MAX_COUNT;
	  __HAL_TIM_SET_COUNTER(&htim1,MAX_COUNT);}//限制编码器最多输出10个脉冲,20次计数
	  duty=(10*(count/(float)MAX_COUNT)+2.5)/100.0*2000;
	  __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,duty);
  
  }

}
c 复制代码
  duty=(10*(count/(float)MAX_COUNT)+2.5)/100.0*2000;

count/MAX_COUNT在0~1之间

10*(count/MAX_COUNT)在0~10之间

10*(count/MAX_COUNT)+2.5在2.5~12.5之间

(10*(count/(float)MAX_COUNT)+2.5)/100.0在2.5%~12.5%之间

2000为自动重装值,*2000,就是看比较寄存器的值应该放多少,形成占空比

count/MAX_COUNT整形/整形还是整形,为了不舍弃,强转为float

相关推荐
Wave8451 小时前
基于 STM32 + ESP8266 + W25Q64 的双核 OTA 底层架构总结
stm32·嵌入式硬件·架构
xiangw@GZ3 小时前
WiFi 全世代(WiFi1~WiFi7)技术规范与核心参数总结
嵌入式硬件
振南的单片机世界3 小时前
CPU时钟:频率越高跑越快,但物理极限在“拖后腿”
stm32·单片机·嵌入式硬件
普中科技4 小时前
【普中 51-Ai8051 开发攻略】-- 第 20 章 输入捕获实验
单片机·嵌入式硬件·输入捕获·pca·普中科技·ai8051u·aicube
d111111111d4 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
d111111111d6 小时前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-134163842127 小时前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
一个平凡而乐于分享的小比特8 小时前
一文读懂MCU与FPGA:核心区别、协同之道与双修秘籍
单片机·fpga开发·职场发展·mcu开发
踏着七彩祥云的小丑8 小时前
嵌入式——认识电子元器件——微动开关系列
单片机·嵌入式硬件
调光IC-小雅9 小时前
解析FP62××系列限流保护机制:为何它是DC/DC芯片的安全底线
单片机·嵌入式硬件