讲师博文
智能wifi小车- SG90舵机驱动 来源 : 未知     2018-09-21

SG90舵机驱动简介

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在摄像头云台中,我们使用了两个SG90舵机。

舵机的工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服(SG90)为例,那么对应的控制关系是这样的:

 

 

0.5ms-------------0度;

1.0ms------------45度;

1.5ms------------90度;

2.0ms-----------135度;

2.5ms-----------180度;

SG90接线:红 - 正、棕 - 负、橙 - 信号

STM32CubeMX配置

使用TIM33的通道1、2进行控制。

 

 

PWM配置

 

 

PWM周期为19.8ms,当设置通道Pulse值在45-225之间时产生的脉冲范围为0.5ms~2.5ms,而且Pulse宽度刚好为180,方便调值。

源码

#include "pwm.h"

#include "oled.h"

extern TIM_HandleTypeDef htim2;

extern TIM_HandleTypeDef htim3;

void Change_Pulse(uint16_t left,uint16_t right)

{

__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, left);

__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_4, right);

uint8_t speed[3]={32,32,'%'};

speed[0]=left/100+'0';

speed[1]=(left%100)/10+'0';

OLED_ShowStr(48,5,speed,2);

speed[0]=right/100+'0';

speed[1]=(right%100)/10+'0';

OLED_ShowStr(80,5,speed,2);

}

void Change_Pulse_Left(uint16_t left)

{

__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, left);

uint8_t speed[3]={32,32,'%'};

speed[0]=left/100+'0';

speed[1]=(left%100)/10+'0';

OLED_ShowStr(48,5,speed,2);

}

void Change_Pulse_Right(uint16_t right)

{

__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_4, right);

uint8_t speed[3]={32,32,'%'};

speed[0]=right/100+'0';

speed[1]=(right%100)/10+'0';

OLED_ShowStr(80,5,speed,2);

}

void Change_Pulse_Rudder1(uint16_t angle)

{

__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, angle);

}

void Change_Pulse_Rudder2(uint16_t angle)

{

__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, angle);

}

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:智能wifi小车- L298N直流电机驱动

下一篇:智能wifi小车-ADC电源监控

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号