SG90舵机的使用

SG90舵机是一种常用的位置伺服驱动器,常见于遥控模型中。它由电机、减速器和位置检测元件组成,通过PWM信号控制角度。STM32F030芯片可以通过配置TIM3模块来发送PWM信号,调整舵机角度。代码示例展示了如何初始化TIM3及设置PWM占空比来操纵舵机在不同角度间切换。

SG90

1.SG90舵机官方数据

尺寸:21.5mmX11.8mmX22.7mm
重量:9克 (1kg=1公斤=2斤)
无负载速度:0.12秒/60度(4.8V) 0.002s/度
堵转扭矩:1.2-1.4公斤/厘米(4.8V)
使用温度:-30~~+60摄氏度
死区设定:7us (7MHZ)
工作电压:4.8V-6V
位置等级:1024级
脉冲控制精度为2us

2.舵机的作用

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前,在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。
主要用于需要输出某一控制角度的场合,舵机可以根据控制信号来输出指定的角度,常见的有0-90°、0-180°、0-360°,这几种舵机除了能够输出最大角度不同之外,价格和性能参数没有任何区别(同一型号而言)。

3.工作原理(线序:红正棕负黄信号)

舵机主要是由外壳、电路板、驱动马达、减速器与位置检测元件所构成。其工作原理是由接收机发出讯号给舵机,经由电路板上的 IC驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,藉由检测电阻值便可知转动的角度。一般的伺服马达是将细铜线缠绕在三极转子上,当电流流经线圈时便会产生磁场,与转子外围的磁铁产生排斥作用,进而产生转动的作用力。依据物理学原理,物体的转动惯量与质量成正比,因此要转动质量愈大的物体,所需的作用力也愈大。舵机为求转速快、耗电小,于是将细铜线缠绕成极薄的中空圆柱体,形成一个重量极轻的无极中空转子,并将磁铁置於圆柱体内,这就是空心杯马达。

下面咱们针对具体型号,比如SG90模拟舵机和MG90S数字舵机,来看看这两者之间的区别。
首先,引脚都是兼容的三根线排列一致,分别是GND(棕色)、VCC(红色)、PWM(黄色),控制方式也是一样的PWM时序,具体的方法如下:
(1).采用PWM控制的方式来进行舵机的操纵
(2).舵机的控制需要MCU产生一个20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机的角度
(3).数据:

0.5ms-------------0度; 2.5% 对应函数中占空比为250
1.0ms------------45度; 5.0% 对应函数中占空比为500
1.5ms------------90度; 7.5% 对应函数中占空比为750
2.0ms-----------135度; 10.0% 对应函数中占空比为1000
2.5ms-----------180度; 12.5% 对应函数中占空比为1250

4.Code

主控:STM32F030+PWM

time.c

void MX_TIM3_Init(void)
{
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};

  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 48-1;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 20000-1;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 10000;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  HAL_TIM_MspPostInit(&htim3);

}
 MX_GPIO_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */

	HAL_TIM_Base_Start_IT(&htim3);
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);  //

	uint16_t dutycycle = 10000;
    __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, dutycycle); 
	HAL_Delay(3000);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	dutycycle = 500;
	__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, dutycycle);
	HAL_Delay(3000);
	  
	dutycycle = 750; //2500 180
	__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, dutycycle);
	HAL_Delay(4000);
	  
//	dutycycle = 400;
//	__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, dutycycle);
//	HAL_Delay(3000);
    /* USER CODE BEGIN 3 */
  }

特别注意:SG90分180度和360度,请确认范围!

reference

### STM32F103C8T6 控制 SG90 舵机 对于STM32F103系列单片机而言,控制SG90舵机的关键在于利用定时器生成精确的PWM信号来调整舵机的角度位置。具体实现方法涉及配置特定的定时器通道作为PWM输出端口。 #### 配置PWM输出 为了使能PWM功能并启动相应的定时器通道,在初始化阶段需要调用`HAL_TIM_PWM_Start()`函数[^3]: ```c // 启动 TIM3 的 CH1 用于 PWM 输出 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); ``` 此代码片段展示了如何开启TIM3的第一个通道(CH1),以便它可以发送PWM脉冲给连接到该引脚上的SG90舵机。 #### 设置PWM参数 根据不同的应用需求,可能还需要进一步设置PWM的具体参数,比如周期长度和占空比等属性。这通常涉及到修改定时器的相关寄存器值或者使用更高层次的API接口来进行设定。 #### 完整示例程序框架 下面给出了一段完整的示例代码,它能够帮助理解整个过程是如何运作的: ```c #include "stm32f1xx_hal.h" // 假设已经完成了必要的硬件资源定义以及全局变量声明... void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM3_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM3_Init(); // 开始从 TIM3 CH1 发送 PWM 波形至舵机 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); while (1){ // 主循环体... } } /* 用户可以根据实际应用场景编写更多辅助函数 */ ``` 这段代码提供了一个基本结构,其中包含了系统时钟配置、GPIO初始化以及TIM3初始化等功能模块。当一切准备就绪之后,便可以通过调用`HAL_TIM_PWM_Start()`来激活PWM输出,从而达到控制舵机的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静思心远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值