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