简介

记录一下, SG90在允许的角度范围实现自由角度转动(按照1°递进)

资料

参考资料

说明

1. 接线

在这里插入图片描述

红色 VCC(4.8~5V), 棕色 GND, 橙色 PWM/脉冲引脚

2. 脉冲/PWM示意

在这里插入图片描述

3. 根据脉冲示意列图如下

角度 脉宽
1ms
90° 1.5ms
180° 2.5ms

4. 任意角度公式

简单的在Excel中列入 角度和脉宽,计算角度跟脉宽的线性关系, 如下图
在这里插入图片描述
并且再拟合校验, 所以公式为 脉宽(ms) = 0.011111111 * 角度 + 0.5

再验证, 9 * n °的精度最高, 如下
在这里插入图片描述

实现

1. 定时器配置

设置为50Hz, 至于预分频和重载配置, 是确保在重载计数65536的计数范围内尽可能的大 及 无小数点
72000000/36 = 2000000 = 0.5us, 1个ccr为0.5us, 2000 个 ccr为 1ms, 对于线性计算小数点多的角度可以提高精度
在这里插入图片描述
根据定时器配置, 修改任意角度 计算公式 设置占空比参数 ccr = (0.5 + 0.0111 * angle)*2000.0;

代码

实现 缓慢转动一周之后归到圆点再进行转动

void sg90_trunAngle(int angle)
{
	int ccrMs = 2000;
	int maxCCR = 2.5 * ccrMs;
	double ccr = (0.5 + 0.0111 * angle)*ccrMs;
	
	if (ccr >= maxCCR)
		ccr = maxCCR;
	
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, ccr);
}

void serveMove2(void)
{
	static int angle = 0;
	
	angle++;
	if (angle > 180)
		angle = 0;
	
	sg90_trunAngle(angle);
	
	HAL_Delay(100);
}
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐