MG90S舵机驱动原理和程序代码

news/2024/11/24 16:08:22/

舵机控制原理:

舵机的控制信号为周期是 20ms 的脉宽调制(PWM)信号,其中脉冲宽度从 0.5ms-2.5ms,相对应舵盘的位置为 0-180 度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上

一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。

其中间位置的脉冲宽度是一定的,那就是1.5ms

角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。

当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。

可以通过调节PWM的占空比控制舵机的转向角度。

文章转载来源:https://blog.csdn.net/avrmcu1/article/details/24384745

#ifndef __STEERING_H
#define __STEERING_H
#include "sys.h"
void TIM4_PWM_Init(u16 arr,u16 psc);//TIM4_CH1
#endif
#include "steering.h"
void TIM4_PWM_Init(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = arr;TIM_TimeBaseStructure.TIM_Prescaler =psc;TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM4,&TIM_OCInitStructure);  TIM_Cmd(TIM4,ENABLE);  }
    TIM4_PWM_Init(199,7199);while(1){delay_ms(10);TIM_SetCompare1(TIM4,5);	delay_ms(300);TIM_SetCompare1(TIM4,10);delay_ms(300);TIM_SetCompare1(TIM4,15);delay_ms(300);}

应为T=20ms,所以对应的f=1/T=50HZ

频率:pwm = 72M / ((arr+1)*(psc+1))(单位:Hz)

占空比:TIM3->CCR1 / arr(单位:%)

注意:如果定时器模式选择为:

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

那么对应的输出比较极性为:

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 

相反:

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

 


http://www.ppmy.cn/news/480008.html

相关文章

STM32——MG90S数字舵机驱动

引脚介绍: 引脚都是兼容的三根线排列一致,分别是GND(棕色)、VCC(红色)、PWM(黄色)时序 驱动程序 void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TI…

STM32CubeMX(09)MG90S舵机驱动实验

文章目录 前言一、舵机是什么?二、STM32CubeMX配置2.1时钟树配置2.2定时器配置2.3生成代码 三、代码编写四、测试结果注意: 总结 前言 今天我们来学习使用一下舵机,并用STM32CubeMX配置,STM32F407ZGT6来驱动舵机 ,那么…

stc8a控制MG90S舵机

1、实验目的: 利用硬件PWM进行控制舵机; 硬件PWM使用P6端口; 2、实验设备: 单片机开发板stc8a8k最小核心板; 7pin的OLED MG90S舵机; 3、原理: 舵机的控制原理,  舵机的伺服系统由可…

转转前端周刊第七十期

转转前端周刊 本刊意在将整理业界精华文章给大家,期望大家一起打开视野 如果你有发现一些精华文章想和更多人分享,可以点击我们的公众号名称,将文章链接和你的解读文案发给我们!我们会对内容进行筛选和审核,保留你的推…

Vue 中防止用户频繁点击按钮的优秀实践

系列文章目录 文章目录 系列文章目录前言一、为什么要防止用户频繁点击按钮?二、优秀的防止用户频繁点击按钮的实践方法1.禁用按钮2.添加防抖函数3.添加节流函数 总结 前言 在 Vue 开发中,我们常常会遇到用户频繁点击按钮的问题,这不仅会导致…

从PETA数据集中提取性别

0、前言 本文提供了一个从PETA数据集中提取性别属性的方法。 1、方法 通过以下代码,可以从数据集中解析出每个图片的属性,并根据性别存放到不同文件夹: """ parse persons gender from PETA """ import gl…

android 人脸解锁 锁屏动画,人脸保护锁(人脸识别锁屏)

这是一款十分炫酷的锁屏工具,还记得电影中的特工所用的人脸识别锁吗?这款应用也能让你过过瘾!人脸识别锁屏安卓版是一款用人脸做密码来打开手机屏保锁的一个APP。不仅可以作屏保锁,也可以单独保护某些重要程序不被偷窥,例如查看短…

android 紧急拨号界面,紧急拨号解锁

摘要 腾兴网为您分享:云上广水,云南人社12333app,缘之空,酷乐家软件,找我测,酷盘,msn聊天软件,新视通会议系统,剑网三体验服,迷你pdf转word,意大利炮表情包,星…