stm32 智能避障小车(二)之sg90

这一篇我要先写sg90这篇,因为比hsr04简单。总体的介绍思路是:实物讲解、模块原理、代码详解
1、实物讲解
首先我们先来看sg90的样子:
在这里插入图片描述
然后再看看它的接线,买过来的sg90舵机模块引出来了三根线,分别为黄色、红色、棕色,他们分别为信号线、3.3V电源线和地线,接的时候要注意,不要接错了。
2、模块原理
1、其实舵机可以分为两种,一种是模拟舵机,一种是数字舵机,这两者的区别是:模拟舵机需要一直给与要转的角度命令,直到到自己想要的角度,注意这个给定的时间许多不许少,就像是小孩子一样,你要不断的给与鼓励和奖赏,才会达到自己的要求;而数字舵机是只需要给定一次角度命令就行了,就像是长大了的孩子,你可以把事情很放心的交给他,说一次就好。
2、说了半天,那么角度命令是什么呢?其实就是我们熟悉的pwm信号,下面给出占空比与旋转的角度之间的关系:

高电平低电平旋转角度
0.5ms19.5ms-90度
1.0ms19ms-45度
1.5ms18.5ms0度
2.0ms18ms45度
2.5ms17.5ms90度

我要对这个表格做一些说明:
1)、高电平加上低电平等于 20ms,那是因为要求的pwm频率是50hz,1s/50 = 20ms,所以周期就是20ms。
2)、角度怎么看,想象自己站在xy轴的0坐标上,正对着y轴,y轴就是0度。负度在左手边,正度在右手边。
3)、其实低电平的时间并没有那么死板,只要在0.5ms和20ms之间就可以。
3、代码详解
我使用的是野火指南者开发板,黄色信号线连接的是pb8。
先来看gpio配置,配置为推挽输出模式

void SG90_GPIO_Config(void)
{		
		/*定义一个GPIO_InitTypeDef类型的结构体*/
		GPIO_InitTypeDef GPIO_InitStructure;

		/*开启LED相关的GPIO外设时钟*/
		RCC_APB2PeriphClockCmd( SG90_GPIO_CLK , ENABLE);
		/*选择要控制的GPIO引脚*/
		GPIO_InitStructure.GPIO_Pin = SG90_GPIO_PIN;	

		/*设置引脚模式为通用推挽输出*/
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

		/*设置引脚速率为50MHz */   
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

		/*调用库函数,初始化GPIO*/
		GPIO_Init(SG90_GPIO_PORT, &GPIO_InitStructure);	
		
		
		GPIO_ResetBits(SG90_GPIO_PORT, SG90_GPIO_PIN);
}

接着是主函数里的代码,我实现的功能是先0度,在-90度,在90度旋转。

int main(void)
{	
	int i;
	/* LED 端口初始化 */
	LED_GPIO_Config();
	/* 配置SysTick 为10us中断一次 */
	SysTick_Init();
	SG90_GPIO_Config();
     i = 0;
	{
//舵机的左转,50,1950         舵机的正向 130,1860        舵机的右转 230,1750
		//舵机的正向
		for(;i<35;i++)
		{
			GPIO_SetBits(SG90_GPIO_PORT, SG90_GPIO_PIN);
			Delay_us(130);//延时一毫秒
			GPIO_ResetBits(SG90_GPIO_PORT, SG90_GPIO_PIN);
			Delay_us(1860);//延时一毫秒
		}
		i= 0;
//		//舵机的左转
		for(;i<30;i++)
		{
			GPIO_SetBits(SG90_GPIO_PORT, SG90_GPIO_PIN);
			Delay_us(50);//延时一毫秒
			GPIO_ResetBits(SG90_GPIO_PORT, SG90_GPIO_PIN);
			Delay_us(1950);//延时一毫秒
				
		}
		//
		i = 0;
		//舵机的右转
		for(;i<30;i++)
		{
			GPIO_SetBits(SG90_GPIO_PORT, SG90_GPIO_PIN);
			Delay_us(230);//延时一毫秒
			GPIO_ResetBits(SG90_GPIO_PORT, SG90_GPIO_PIN);
			Delay_us(1860);//延时一毫秒
				
		}
//		
	}

}

附上代码包链接快上车
打完收工。。。。。。

  • 23
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值