stm32:sg90 和 mg90s舵机学习

早上好啊,大伙。这一期咱们来看看两个舵机,它们的工作模式是不同的,但是都是舵机,实现的原理是一样的,所以放一起讲一下。(工程链接在文章最后)

请添加图片描述

整体说明

相同点

供电电压 : 5V左右
三根线 —— 红(VCC)、棕(GND)、黄(信号)

不同点

sg90 --> PWM控制 指定角度 旋转
mg90s --> PWM控制 转动方向转动角度

sg90舵机

首先是这个小蓝 —— sg90。
也就是长这样vvv
在这里插入图片描述

基本介绍

SG90 是一款常见的微型舵机(伺服电机),因其体积小、价格低、易于控制等特点,广泛应用于电子制作、机器人、模型遥控等领域。

尺寸:约 22.2 × 11.8 × 31mm(长×宽×高)
重量:约 9g
工作电压:3.0V - 6.0V(推荐 4.8V-5V
扭矩:
4.8V 时约 1.2kg·cm
6.0V 时约 1.6kg·cm
转动角度:0° - 180°(部分型号支持 360° 连续旋转)
响应速度:约 0.1秒/60°(4.8V 时)
齿轮材质:塑料(部分型号为金属齿轮,更耐用)

它有三个接口也就是三根线 —— 信号线、电源正极、地线

红色线 —— 电源线(VCC)
棕色线 —— 地线 (GND)
黄色线 —— 信号线

在这里插入图片描述

实现原理

舵机是一种根据输入PWM信号占空比来控制输出角度的装置输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms。
下面是它的一个解剖图 ——
在这里插入图片描述

SG90 舵机由以下组件构成:

直流电机:提供动力。
减速齿轮组:降低转速、增加扭矩。
控制电路:接收 PWM 信号并控制电机。
电位器(反馈传感器):检测舵机当前位置,形成闭环控制。

工作流程

接收外部 PWM(脉冲宽度调制)信号,控制电路根据脉冲宽度调整电机转动方向及角度,电位器实时反馈位置,确保精准控制。

控制方法

控制sg90舵机旋转也比较简单,只需要给它输出PWM波,修改占空比就可以调整角度。sg90的控制一般需要一个20ms 左右的时基脉冲,脉冲的高电平部分一般在0.5ms~2.5ms。
高电平持续时间与旋转角度的对应关系如下 ——

高电平持续时间/ms舵机角度/°
0.50
1.045
1.590
2.0135
2.5180
注意接线的时候 stm32 和 舵机要共地,否则会没有效果。

代码实现

下面代码是一个定时器控制四路舵机的代码 ——
这里就只放一些关键的地方,需要完整代码的可以直接去下载。

Sg90.c

void Sg90_Init(void)
{
	PWM_Init();
}

void Sg90_Reset(void)
{
	PWM_SetCompare1(500);
	PWM_SetCompare2(500);
	PWM_SetCompare3(500);
	PWM_SetCompare4(500);
}

void Sg90_SetAngle1(float Angle)
{
	PWM_SetCompare1(Angle / 180 * 2000 + 500);
	
}
void Sg90_SetAngle2(float Angle)
{
	PWM_SetCompare2(Angle / 180 * 2000 + 500);
	
}
void Sg90_SetAngle3(float Angle)
{
	PWM_SetCompare3(Angle / 180 * 2000 + 500);
	
}
void Sg90_SetAngle4(float Angle)
{
	PWM_SetCompare4(Angle / 180 * 2000 + 500);
	
}

Timer.c 时基单元配置

	/*时基单元初始化*/
	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_TimeBaseInit,配置TIM2的时基单元	

实现效果

这里放了OC1 和 OC4的效果,其它的大家可以自己看看效果。

sg90演示视频1

sg90演示视频2

MG90s

下面对MG90s的介绍主要就说一下他们的不同点。

控制方式

mg90s是不能控制转动的角度,因此它的占空比是用来控制舵机转动的速度和方向。

脉冲周砌(20ms)速度
0.5ms
1.0ms
1.5ms停止
2.0ms
2.5ms

1.5ms是一个分界线,方向会在再此发送改变,距离1.5ms这个阈值越近,舵机转动速度越慢,反之越快。但上限2.5ms 下限是0.5ms ,超过阈值舵机将不工作。

接线

这个比较重要,虽然和sg90一样但也说一下。
它也有三个接口也就是三根线 —— 信号线、电源正极、地线

红色线 —— 电源线(VCC)
棕色线 —— 地线 (GND)
黄色线 —— 信号线

电源在 3 ~ 6V,不能超过6V,会烧掉的,最好是在5V左右,3V可能转不起来。

代码实现

Mg90s.c

#include "stm32f10x.h"                  // Device header
#include "PWM.h"

void Mg90s_Init(void)
{
	PWM_Init();
}

void Mg90s_Stop(void)
{
	PWM_SetCompare1(1500);
	PWM_SetCompare2(1500);
	PWM_SetCompare3(1500);
	PWM_SetCompare4(1500);
}

//如果 speed 为 0 就是 stop

//顺时针
//speed 为速度,分为10个等级(1 - 10)
void Mg90s_1_Clockwise(int speed)
{
	PWM_SetCompare1(speed *100 + 1500);
}

void Mg90s_2_Clockwise(int speed)
{
	PWM_SetCompare2(speed *100 + 1500);
}

void Mg90s_3_Clockwise(int speed)
{
	PWM_SetCompare3(speed *100 + 1500);
}

void Mg90s_4_Clockwise(int speed)
{
	PWM_SetCompare4(speed *100 + 1500);
}


//顺时针
//speed 为速度,分为10个等级(1 - 10)
void Mg90s_1_Anticlockwise(int speed)
{
	PWM_SetCompare1(1500 - speed *100);
}

void Mg90s_2_Anticlockwise(int speed)
{
	PWM_SetCompare2(1500 - speed *100);
}

void Mg90s_3_Anticlockwise(int speed)
{
	PWM_SetCompare3(1500 - speed *100);
}

void Mg90s_4_Anticlockwise(int speed)
{
	PWM_SetCompare4(1500 - speed *100);
}

main.c

#include "stm32f10x.h"
#include "Delay.h"
#include "Mg90s.h"

int main()
{
	Mg90s_Init();
	
	while (1)
	{
		Mg90s_1_Clockwise(5);
		Delay_s(2);
		Mg90s_Stop();
		Delay_s(2);
		
		Mg90s_1_Anticlockwise(5);
		Delay_s(2);
		Mg90s_1_Clockwise(0); //相当于 Mg90s_Stop()
		Delay_s(2);
	}
}

实现效果

mg90s演示视频

结尾

先给代码:
链接:小白兔的礼物——舵机代码
提取码:pPYN

OKK,这一期的内容就这么多,主要是说了一些舵机的内容。

感谢大伙观看,别忘了三连支持一下

大家也可以关注一下我的其它专栏,同样精彩喔~

下期见咯~

请添加图片描述

### starRC、LEF DEF 文件的 EDA 工具使用教程 #### 关于 starRC 的使用说明 starRC 是由 Synopsys 开发的一款用于寄生参数提取 (PEX) 的工具,在 detail routing 完成之后被调用,以提供精确的电阻电容延迟分析数据[^2]。该工具能够处理复杂的多层互连结构并支持多种工艺节点。 对于 starRC 的具体操作指南,通常可以从官方文档获取最权威的信息。访问 Synopsys 官方网站的技术资源页面,可以找到最新的产品手册以及应用笔记等资料。此外,还可以通过在线帮助系统获得交互式的指导支持服务。 #### LEF DEF 文件格式解析及其在 Cadence 中的应用 LEF(Library Exchange Format) DEF(Design Exchange Format)是两种广泛应用于集成电路布局布线阶段的标准文件格式之一[^3]。前者主要用于描述标准单元库中的元件几何形状;后者则记录了整个芯片版图的设计信息,包括但不限于各个模块的位置关系、网络连接情况等重要细节。 当涉及到这些文件类型的编辑或读取时,Cadence 提供了一系列强大的平台级解决方案,比如 Virtuoso Layout Editor 就可以直接打开并修改 LEF/DEF 格式的项目工程。为了更好地理解运用这两种文件格式,建议参阅 Cadence 发布的相关培训材料或是参加其举办的专项课程学习活动。 ```bash # 示例命令:查看 LEF 或 DEF 文件内容 cat my_design.lef cat my_design.def ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑不拉几的小白兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值