admin管理员组文章数量:1558937
目录
一、SG90舵机模块介绍
二、SG90舵机模块接线说明
三、测试说明、SG90舵机驱动代码
四、串口调试助手把采集的SG90舵机数据发送出来
五、源代码
六、串口调试助手软件
七、舵机原理图资料
一、SG90舵机模块介绍
首先介绍说一下什么是舵机。舵机是一种位置(角度)伺服的驱动器。适用于一些需要角度不断变化的,可以保持的控制系统。sg90就是舵机的一种。
舵机的工作原理比较简单。舵机内部有一个基准电压,单片机产生的PWM信号通过信号线进入舵机,与舵机内部的基准电压作比较,获得电压差输出。电压差的正负输出到电机驱动芯片上,从而决定正反转。开始旋转的时候,舵机内部通过级联减速齿轮带动电位器旋转,使得电压差为零,电机停止转动。 “舵机是一种直流微型伺服电机,它能够接收并响应控制信号,实现角度或位置的精确控制。舵机通常由直流电机、电机控制器、电位器和减速器等部分构成,并封装在一个便于安装的外壳中。它通过闭环控制系统来工作,能够根据输入的信号精确地控制输出轴的角度,并在负载变化时自动调节以保持稳定的控制状态。舵机的应用非常广泛,包括在自动驾驶仪中操纵飞机舵面,以及在智能小车和机器人中实现转向和关节运动等功能。舵机可以分为不同的类型和角度,其中180°舵机最为常见。”
舵机一般可以再0-180度或0-360度转动任意角度,经常用于小车小船转向控制和机械臂的关节等。舵机的转动角度范围不是固定的,请购买时问问商家,到底是哪个范围的。实际使用中,我们对舵机有两个基本需求:
- 舵机转动一定角度。
- 舵机转动时,控制者要求舵机转到一个新的角度。
机器如何给舵机发送其转动角度呢?首先,要低成本,信号线要少。其次,要满足任意角度和中途打断。设计者推出了一个简单的方法:用一个时长为20ms的信号去控制舵机,信号的前一段为高电平,持续时间0.5ms到2.5ms,代表转动角度0-180或者360度,后半段为低电平,这就是PWM信号,具体如下图:
容易看出来,PWM信号利用前段为高电平持续时间控制旋转角度,本质用占空比控制了旋转角度。运转时,舵机转到你指定的角度需要一定的时间,转动的角度越大,需要的时间越久,所以你可能需要等待一定的时间。如果你刚刚给舵机发送指令转到180度,紧接着又发送指令转到90度,舵机会不转到180度再转到90度,而是在接受到信号时直接在当前的角度直接转到90度去。
二、SG90舵机模块接线说明
1 红色线 外接3.3V-5V
2 黑色线 外接GND
3 橙色线 接单片机PA1引脚
三、测试说明、SG90舵机驱动代码
编译环境:keil5
测试单片机: STM32F103C8T6
功能:功能1:按键控制舵机旋转 功能2:0-180°循环旋转
PWM.c文件编写舵机驱动代码如下:
#include "stm32f10x.h" // Device header
void PWM_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_InternalClockConfig(TIM2);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 20000 - 1; //ARR
TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; //PSC
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0; //CCR
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_Cmd(TIM2, ENABLE);
}
void PWM_SetCompare2(uint16_t Compare)
{
TIM_SetCompare2(TIM2, Compare);
}
PWM.h文件,对舵机驱动函数经行了声明:
#ifndef __PWM_H
#define __PWM_H
void PWM_Init(void);
void PWM_SetCompare2(uint16_t Compare);
#endif
四、串口调试助手把采集的SG90舵机数据发送出来
printf("舵机旋转角度= %d °\r\n",Angle);
五、源代码
《STM32单片机+SG90舵机+OLED屏幕+舵机旋转角度数据发送到串口调试助手》源代码_sg90舵机资源-CSDN文库
六、串口调试助手软件
串口调试助手-keil5调试工具资源-CSDN文库
七、舵机原理图资料
SG90舵机原理图、模块资料资源-CSDN文库
版权声明:本文标题:STM32单片机+SG90舵机+OLED屏幕+舵机旋转角度数据发送到串口调试助手+源代码 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1727404910a1113263.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论