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

您所在的位置:网站首页 为什么超声波避障实现不了了呢 stm32 智能避障小车(二)之sg90

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

2024-06-09 23:31| 来源: 网络整理| 查看: 265

这一篇我要先写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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3