如果这篇看不懂的话,可以先看这篇,更加小白:【记录】香橙派AI Pro|GPIO入门教程,接AM2302(DHT22)温湿度传感器,从接线到识别设备并读取结果-CSDN博客

由于我已经有接第一个设备的经验了,本文主要也就是记录一下SG90的参数以及写的驱动代码,对于具体原理基本上没讲。

基础资源

主要以下三方面:

  1. 官方文档:Orange Pi Download- Orangepi
    在这里插入图片描述

  2. 大模型:我主要问Deepseek(不深度思考版本)。

  3. SG90说明书:这种廉价且常见的元件一般卖家都不会提供说明书,即使提供了也是网上直接搜的,但网上一搜就能搜出来。这里提供一个在线下载地址舵机控制例程_免费高速下载|百度网盘-分享无限制

通过文档搞清楚自己需要了解什么具体概念,比如GPIO、电源和GND引脚,SDA、SCL、UTX、URX、PWM等通信协议,SG90这个工作模块的工作电压、接线要求、传输方案和是否需要并联电阻等。

SG90参数

三个接口:

  1. 电源:5V
  2. 数据:PWM接口
  3. 接地线:GND接口

我选择了这三个(蓝框打勾的):
在这里插入图片描述

接完线的实物图是这样:
在这里插入图片描述

驱动代码

代码说明

主要直接把使用说明丢给大模型让大模型写的,SG90舵机控制程序接口功能说明如下:

功能描述:

  • 本程序通过树莓派GPIO控制SG90舵机,实现精确角度定位和持续时间控制。

输入参数:

  1. 目标角度:-90到90之间的整数,负值为左转,正值为右转
  2. 持续时间:毫秒级持续时间,最小100ms,最大60000ms(1分钟)

输出效果:

  1. 舵机旋转到指定角度
  2. 保持指定毫秒数后停止

技术参数:

  • PWM周期:20ms (50Hz)
  • 脉冲宽度范围:0.5ms(-90°) ~ 2.5ms(90°)
  • 线性映射:角度与脉宽严格线性对应
  • 控制精度:约0.18°/步(180°/1000步)

接线说明:

  • 橙色线(Signal):GPIO19(WiringPi编号)
  • 红色线(VCC):5V
  • 棕色线(GND):接地

代码主体

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define SERVO_PIN 19  // WiringPi编号19,对应PWM3

// 舵机技术参数(根据文档精确设置)
#define PWM_PERIOD_MS 20     // 20ms周期(文档要求)
#define MIN_PULSE_US 500     // 0.5ms最小脉冲(文档图1)
#define MAX_PULSE_US 2500    // 2.5ms最大脉冲
#define NEUTRAL_PULSE_US 1500 // 1.5ms中位脉冲

// 安全限制(防止损坏舵机)
#define MIN_ANGLE -90
#define MAX_ANGLE 90
#define MIN_DURATION_MS 100  // 最小持续时间100ms
#define MAX_DURATION_MS 60000 // 最大持续时间60秒

// 设置舵机角度(带参数校验)
void set_servo_angle(int angle) {
    // 严格限制角度范围(文档第1页)
    if (angle < MIN_ANGLE) angle = MIN_ANGLE;
    if (angle > MAX_ANGLE) angle = MAX_ANGLE;
    
    // 精确脉冲计算(文档公式)
    int pulse_width = NEUTRAL_PULSE_US + angle * (MAX_PULSE_US - MIN_PULSE_US) / 180;
    
    // 生成PWM信号(文档描述的20ms周期)
    digitalWrite(SERVO_PIN, HIGH);
    usleep(pulse_width);
    digitalWrite(SERVO_PIN, LOW);
    usleep(PWM_PERIOD_MS * 1000 - pulse_width);
}

int main(int argc, char *argv[]) {
    // 初始化检查
    if (wiringPiSetup() == -1) {
        fprintf(stderr, "错误: WiringPi初始化失败\n");
        return EXIT_FAILURE;
    }
    
    // 参数验证
    if (argc != 3) {
        printf("用法: %s <角度(-90~90)> <持续时间(ms)>\n", argv[0]);
        printf("示例: %s 45 1500 (45度保持1.5秒)\n", argv[0]);
        return EXIT_FAILURE;
    }
    
    int angle = atoi(argv[1]);
    int duration_ms = atoi(argv[2]);
    
    // 参数范围检查
    if (angle < MIN_ANGLE || angle > MAX_ANGLE) {
        fprintf(stderr, "错误: 角度超出范围(%d到%d度)\n", MIN_ANGLE, MAX_ANGLE);
        return EXIT_FAILURE;
    }
    
    if (duration_ms < MIN_DURATION_MS || duration_ms > MAX_DURATION_MS) {
        fprintf(stderr, "错误: 持续时间超出范围(%d到%d毫秒)\n", 
                MIN_DURATION_MS, MAX_DURATION_MS);
        return EXIT_FAILURE;
    }
    
    // 设置GPIO模式(文档要求的数字控制)
    pinMode(SERVO_PIN, OUTPUT);
    digitalWrite(SERVO_PIN, LOW);
    
    printf("控制参数:\n");
    printf("目标角度: %d度\n", angle);
    printf("持续时间: %d毫秒\n", duration_ms);
    printf("开始控制...\n");
    
    // 计算需要循环的次数(文档建议的20ms周期)
    int loops = duration_ms * 1000 / (PWM_PERIOD_MS * 1000);
    for(int i = 0; i < loops; i++) {
        set_servo_angle(angle);
    }
    
    printf("控制完成\n");
    return EXIT_SUCCESS;
}

编译方式

命令行

gcc -Wall -o sg90 sg90.c -lwiringPi

Makefile

# 编译器设置
CC = gcc
CFLAGS = -Wall
LDFLAGS = -lwiringPi

# 目标文件
TARGETS = sg90

# 源文件
SG90_SRC = sg90.c

all: $(TARGETS)

sg90: $(SG90_SRC)
	$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)

clean:
	rm -f $(TARGETS)

.PHONY: all clean

使用方式

# 转动到45度并保持2秒
./sg90 45 2000

# 回到中立位置(0度)
./sg90 0 1000

总结

本指南详细介绍了如何在Orange Pi开发板上驱动SG90舵机。通过理解PWM控制原理和舵机工作特性,我们实现了一个安全可靠的驱动程序。关键点包括:

硬件连接:正确识别电源、地和信号线,确保5V稳定供电
参数匹配:严格遵循20ms周期和0.5-2.5ms脉宽规范
软件控制:使用wiringPi库实现精确的定时控制
安全设计:多重保护机制防止舵机过载损坏
此方案不仅适用于SG90舵机,也可作为其他PWM设备控制的基础框架。通过调整脉冲参数,可适配不同规格的舵机设备。这种硬件控制方法在机器人、自动化控制等领域有广泛应用前景。

通过本项目的实践,读者可以掌握嵌入式系统中PWM设备控制的核心技术,为更复杂的物联网和自动化项目打下坚实基础。

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/149668157。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐