7.6 1周4:驱动SG92R舵机

同学送的一个这个舵机,我想着把它驱动了,找了些资料和代码,刚好能驱动成功,细节没有看太多,有些不明白的地方,我在文中指出来。

硬件介绍:SG92R

红线:5v   棕线:GND   黄线:信号线(接其他引脚)

舵机的工作原理:

sg92r的控制电路由微控制器或其他控制器提供PWM(脉宽调制)信号。

我的理解,有这个区间 0.5ms~2.5ms,然后输出高电平就能驱动,我的操作是用for循环去遍历这个区间的值,到达驱动的目的。

 

#include "stm32f10x.h"

#define PWM_FREQ 50  // 设置PWM信号频率为50Hz
#define SERVO_MIN_PULSE_WIDTH 500  // 舵机最小脉宽500us
#define SERVO_MAX_PULSE_WIDTH 2500  // 舵机最大脉宽2500us
#define SERVO_LEFT_POSITION 1300  // 舵机左转位置的脉宽

void delay_us(uint32_t us) {
  uint32_t count = us * (SystemCoreClock / 1000000) / 9;
  while(count--);
}

void servo_rotate(uint16_t pulse_width) {
  GPIO_SetBits(GPIOA, GPIO_Pin_6);  // 设置PB5输出高电平
  delay_us(pulse_width);  // 延时等待脉宽结束
  GPIO_ResetBits(GPIOA, GPIO_Pin_6);  // 设置PB5输出低电平
  delay_us(20000 - pulse_width);  // 延时保持50Hz的PWM周期
}

int main(void)
{ 
	GPIO_InitTypeDef GPIO_InitStructure;
	int i,j,k,l;
	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // 使能GPIOA时钟

 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;  // PA6口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 最大输出频率为50Mhz
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	

	
	// 控制舵机反向旋转360°
//    for (k = SERVO_MAX_PULSE_WIDTH; k >= 1300; k -= 20) {
//      servo_rotate(k);
//    }
    for (l = 2000; l <= SERVO_MAX_PULSE_WIDTH; l += 56) {
      servo_rotate(l);
    }
   


 

这个地方,for()中第三个参数的自加值我是自己试出来的,我的目的是转45°,具体的我也不明白。 

 while(1) {
		
		// 控制舵机正向旋转45°
//    for ( i = SERVO_MIN_PULSE_WIDTH; i <= 1500; i += 10) {
//      servo_rotate(i);
//    }
    // 控制舵机正向旋转360°
//    for ( i = SERVO_MIN_PULSE_WIDTH; i <= SERVO_MAX_PULSE_WIDTH; i += 10) {
//      servo_rotate(i);
//    }
//    for (j = SERVO_MAX_PULSE_WIDTH; j >= SERVO_MIN_PULSE_WIDTH; j -= 10) {
//      servo_rotate(j);
//    }
    
    // 控制舵机反向旋转360°
//    for (k = SERVO_MAX_PULSE_WIDTH; k >= 500; k -= 10) {
//      servo_rotate(k);
//    }
//    for (l = SERVO_MIN_PULSE_WIDTH; l <= SERVO_MAX_PULSE_WIDTH; l += 10) {
//      servo_rotate(l);
//    }
		}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值