STM32F103C8T6驱动SG90舵机--通过延时

文章介绍了如何通过延时函数而非复杂定时器配置来驱动SG90舵机。作者提供了初始化舵机引脚和控制转动角度的代码示例,强调了在20ms周期内调整高电平持续时间以控制舵机转动不同角度的方法,并提醒注意避免使用可能导致精度问题的delay_ms函数。
摘要由CSDN通过智能技术生成

前言

最近博主在尝试驱动SG90舵机的时候,发现网上教程都是通过定时器的方式,还要进行各种配置,太麻烦了,于是自己用延时简单写了一下,也能用。

舵机的控制

舵机控制就是需要一个20ms的脉冲信号,通过高电平的持续时间来转动不同的角度,很多人都说通过定时器来产生这个脉冲,但是如果只是简单的处理,直接用延时处理就行了
在这里插入图片描述

代码

/*
*	函数内容:初始化舵机引脚
*	函数参数:无
*	返回值:	无
*/
void Init_SG90(void)
{
  GPIO_InitTypeDef temp;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	temp.GPIO_Mode=GPIO_Mode_Out_PP;
	temp.GPIO_Pin=GPIO_Pin_8;
	temp.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&temp);
}

/*
*	函数内容:控制舵机转动
*	函数参数:高电平持续时间-us,
											500us,0°
											1000us,45°
											1500us,90°
											2000us,145°
											2500us,180°
					  就是一个pwm信号,在20ms的周期内,控制高电平持续的时间对应转动不同的角度
						循环10次是为了给他提供一个周期信号,防止舵机没有反应
*	返回值:无
*/
void Control_SG90(uint32_t us)
{
	int i=0;
	for(i=0;i<10;i++)
	{
		if(us<=20000)
		{
			PBout(8)=1;
			delay_us(us);
			PBout(8)=0;
			delay_us(20000-us);
		}
	}
}

直接通过延时模拟就行,注意不要直接使用delay_ms,参数都说uint类型的,2.5这种浮点数会被隐式转换掉然后导致转动角度不符合。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值