From c6a1e7c00cd2946cef7716b205026a907136778b Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Sun, 12 Jul 2026 18:41:28 +0800
Subject: [PATCH] Add ex1.servo-sg90

---
 ex1.servo-sg90/Board/servo_sg90.h |   62 +++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/ex1.servo-sg90/Board/servo_sg90.h b/ex1.servo-sg90/Board/servo_sg90.h
new file mode 100644
index 0000000..90e11be
--- /dev/null
+++ b/ex1.servo-sg90/Board/servo_sg90.h
@@ -0,0 +1,62 @@
+/**********************************************************************
+*   Copyright: (C)2024 LingYun IoT System Studio
+*      Author: GuoWenxue<guowenxue@gmail.com>
+* Description: SG90 Servo Motor Driver for ISKBoard
+*
+*   ChangeLog:
+*        Version    Date       Author            Description
+*        V1.0.0  2024.08.29    GuoWenxue      Release initial version
+***********************************************************************/
+
+#ifndef __SERVO_SG90_H
+#define __SERVO_SG90_H
+
+/* SG90 的物理行程一般标称 0°~180°,但实际齿轮限位比这个略窄(大概 170°~185°)
+ *  如果你让它往超过物理极限的角度硬顶:
+ *  1. 电机持续出力试图转到不存在的位置
+ *  2. 内部齿轮卡死 -> 长时间堵转
+ *  3. 大电流持续流过线圈 -> 发热、烧线圈、融塑料齿轮
+ * 钳位角度到 1°~180°(更保守 5°~175°)就给机械留了一点余量,避免顶死。
+ */
+
+/* 舵机参数宏定义,方便后期微调 */
+#define SERVO_MIN_ANGLE   5     // 钳位最小角度
+#define SERVO_MAX_ANGLE   175   // 钳位最大角度
+#define SERVO_MIN_PULSE   500   // 0度对应的脉宽(us)
+#define SERVO_MAX_PULSE   2500  // 180度对应的脉宽(us)
+#define SERVO_DEFAULT_ANG 90    // 90度上电瞬间不容易堵转、卡死、发热
+
+/* 通用角度钳位宏 */
+#define CLAMP_ANGLE(angle)                                   \
+    (((angle) < SERVO_MIN_ANGLE) ? SERVO_MIN_ANGLE :         \
+     ((angle) > SERVO_MAX_ANGLE) ? SERVO_MAX_ANGLE :         \
+     (angle))
+
+/**
+ * @brief  初始化舵机, 启动 TIM PWM 输出。
+ */
+void Servo_Init(void);
+
+/**
+ * @brief  设置舵机角度
+ * @param  angle  可传 0 ~ 180,但超出钳位值范围自动钳位
+ */
+void Servo_SetAngle(int angle);
+
+/**
+ * @brief  直接停止 PWM 输出, 立即停止舵机
+ */
+void Servo_Stop(void);
+
+/**
+ * @brief  转到安全角度后,再停止舵机
+ * @param  safe_angle  停止前舵机转到的角度 (超出钳位值范围设置默认角度)
+ */
+void Servo_SafeStop(int safe_angle);
+
+/**
+ * @brief 舵机测试函数
+ */
+void Servo_Test(void);
+
+#endif

--
Gitblit v1.10.0