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

舵机控制原理:

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

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

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

MG90S舵机驱动原理和程序代码_第1张图片

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

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

MG90S舵机驱动原理和程序代码_第2张图片

可以通过调节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;

 

你可能感兴趣的:(代码,电子器件)