嵌入式人工智能(17-基于树莓派4B的电机控制-伺服电机SG90)

news2024/9/20 21:46:55

伺服电机主要适用于角度需要不断变化且可以保持的控制系统,常见的机械臂、多足机器人、遥
控船、摄像头云台等都可以使用伺服电机来实现。

1、简介

伺服电动机又被称为执行电动机、舵机,如图9.4所示,是由直流电机、减速齿轮组、电位器和控制电路组成的,封装在一个便于安装的外壳里,其主要作用是根据输入信号准确地转动到设定的角度。在自动控制系统中,通常用作执行元件,把接收到的电信号转换成电动机轴上的角位移或角速度输出。当给伺服电机地信号零电压时会出现无自转现象,转速随着转矩的增加而匀速下降。
通常情况下,伺服电机有3个输入引脚,GND(棕色、黑色)、VCC(红色)和 Signal(控制线、信号线,一般为橘色),中间的一条通常为电源线。

可以通过树莓派连接控制线,并发送一个PWM信号控制伺服电机转动到一个固定角度。这个PWM信号必须周期性发送,否则伺服电机就会转到一个
任意的角度。通常控制伺服电机的PWM 信号周期为20ms(50Hz),宽度在0.5~2.5ms(对应最小角度0°和最大角度180°),以周期为20ms、最大角度为180°为例的伺服电机为例。

由于RPiGPIO库只提供了控制PWM 信号占空比的功能,所以要将伺服电机旋转到指定的角度
就需要计算出对应的占空比,可以得出一个公式用于计算占空比(duty):

例如:如果转动的角度 direction为36°,代入公式中可得占空比为4.5%。

2、实验代码

控制sg90舵机旋转也比较简单,只需要给它输出PWM波,修改占空比就可以调整角度。这个和直流电机的PWM调制类似,只不过直流电机无法控制旋转的角度,只能控制旋转速度,而伺服电机可以精准的控制旋转的角度。SG90舵机的VCC接3.3V供电不足,要接5V供电引脚。

# 引入RPi.GPIO库
import RPi.GPIO as GPIO

# 指定编号方式为BOARD
GPIO.setmode(GPIO.BOARD)
# 定义接口
signal = 37
# 设置输出模式
GPIO.setup(signal, GPIO.OUT)

# PWM信号频率(1000/周期T)
frequency = 50

# 创建PWM对象,并设置频率为50
pwm = GPIO.PWM(signal, frequency)


def get_duty(direction):
    """计算占空比"""
    # 如果转化为百分数,使用ChangeDutyCycle()方法时还需再转化回来
    duty = (1 / 18) * direction + 2.5
    return duty

if __name__ == '__main__':
    try:
        # 启动PWM,并设置初始占空比0
        pwm.start(0)
        while True:
            # 输入一个角度
            # 应该先判断用户输入是否合法
            # 计算占空比
            direction = float(input("Pleas input a direction between 0 an 180:"))
            duty = get_duty(direction)
            # 改变PWM占空比
            pwm.ChangeDutyCycle(duty)
    except Exception as e:
        print('An exception has happened', e)

    finally:    
        # 停止PWM
        pwm.stop()
        # 结束进程,释放GPIO引脚
        GPIO.cleanup()

3、PCA9685

如果要驱动多个舵机,控制机械臂、摄像头云台等,为了防止占用过多的GPIO端口,可以使用PCA9685模块来驱动多个舵机。

PCA9685是一款基于I²C总线通信的12位精度16通道PWM波输出的芯片,该芯片最初由NXP推出时主要面向LED开关调光,同样可用于控制舵机、电机等任何可以适用PWM控制的电气设备。

利用I²C总线通信的功能特性,使其常用于拓展主控芯片的控制能力,因为其仅需两根线同主机芯片建立I²C通信,即可替代主控芯片的GPIO引脚来输出PWM波,节省主控芯片资源,这项特点在需要控制的设备数量超过主控芯片的可用GPIO引脚数量时将尤为突出。

供电部分
大多数的舵机设计电压都是在5~6V,尤其在多个舵机同时运行时,跟需要有大功率的电源供电。如果直接使用5V或3.3V引脚直接为舵机供电,会出现一些难以预测的问题,所以需要合适的外部电源为驱动板供电。外部电源通常5-7V或稍微高点也可以,接中央部分的绿色V+和GND。

4、安装adafruit_pca9685驱动多个舵机代码

# sudo pip3 install adafruit-blinka
# sudo pip3 install adafruit-circuitpython-pca9685
# sudo pip3 install adafruit-circuitpython-servokit

import time

from adafruit_pca9685 import PCA9685
from board import SCL, SDA
import busio
from adafruit_motor import servo


i2c_bus = busio.I2C(SCL, SDA)
pwm = PCA9685(i2c_bus)                                     # 使用默认地址初始化PWM设备

pwm.frequency = 50                                         # 将频率设置为50 Hz

servo_12 = servo.Servo(pwm.channels[12])                   # 指定第12通道的舵机(从0开始)
servo_15 = servo.Servo(pwm.channels[15])                   # 指定第15通道的舵机


print('Moving servo on channel 0, press Ctrl-C to quit...')
servo_12.angle = 90
servo_15.angle = 90
while True:
    # 伺服电机转动最小角度和最大角度
    servo_12.angle = 0
    servo_15.angle = 0
    time.sleep(1)
    servo_12.angle = 0
    servo_15.angle = 180
    time.sleep(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 | Leetcode C语言题解之第264题丑数II

题目&#xff1a; 题解&#xff1a; int nthUglyNumber(int n) {int dp[n 1];dp[1] 1;int p2 1, p3 1, p5 1;for (int i 2; i < n; i) {int num2 dp[p2] * 2, num3 dp[p3] * 3, num5 dp[p5] * 5;dp[i] fmin(fmin(num2, num3), num5);if (dp[i] num2) {p2;}if (d…

Fastgpt接入ChatTTS本地AI语音合成模型实现语音实时朗读

前言 FastGPT 默认使用了 OpenAI 的 LLM 模型和语音合成模型,如果想要私有化部署的话,可以使用开源TTS项目f封装成兼容open ai的协议兼容的API接口。参考文章 《ChatTTS-一款适用于日常对话的AI生成式语音模型》 FastGPT接入本地AI语音TTS Base Url为你部署本地语音识别web…

Shell程序设计

各位看官&#xff0c;从今天开始&#xff0c;我们进入新的专栏Shell学习&#xff0c;Shell 是操作系统的命令行界面&#xff0c;它允许用户通过输入命令与操作系统交互。常见的 Shell 有 Bash 和 Zsh&#xff0c;它们可以执行用户输入的命令或运行脚本文件。Shell 广泛应用于系…

Google AI加速代码迁移

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

知名的GPU算力租用平台,适合进行大规模深度学习训练

目录 引言 GPU算力租用的重要性 当前市场趋势 选择GPU算力平台的关键因素 知名的GPU算力租用平台&#xff0c;适合进行大规模深度学习训练 引言 在数字时代&#xff0c;计算能力是推动科技创新的核心驱动力&#xff0c;尤其是在人工智能&#xff08;AI&#xff09;、机器学…

【ARM】SMMU系统虚拟化整理

目录 1.MMU的基本介绍 1.1 特点梳理 2.功能 DVM interface PTW interface 2.1 操作流程 2.1.1 StreamID 2.1.2 安全状态&#xff1a; 2.1.3 HUM 2.1.4 可配置的操作特性 Outstanding transactions per TBU QoS 仲裁 2.2 Cache结构 2.2.1 Micro TLB 2.2.2 Macro…

交叉编译ethtool(ubuntu 2018)

参考文章&#xff1a;https://www.cnblogs.com/nazhen/p/16800427.html https://blog.csdn.net/weixin_43128044/article/details/137953913 1、下载相关安装包 //ethtool依赖libmul git clone http://git.netfilter.org/libmnl //ethtool源码 git clone http://git.kernel.or…

go语言Gin框架的学习路线(七)

GORM入门(基于七米老师) 目录 GORM入门 安装 连接数据库 连接MySQL 连接PostgreSQL 连接Sqlite3 连接SQL Server 我们搞一个连接MySQL的例子 创建数据库 GORM操作MySQL GORM是一个流行的Go语言ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它提供了一种方…

Golang | Leetcode Golang题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; var (singles []string{"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}teens []string{&…

高效日志管理系统设计

设计一个高效的日志管理系统&#xff0c;旨在确保日志数据能够被有效收集、存储、分析和检索&#xff0c;同时也要考虑到系统的可扩展性、可靠性和易用性。以下是高效日志管理系统设计的关键要素&#xff1a; 1. 日志收集 自动收集&#xff1a;使用轻量级的日志采集代理&…

windows11 vmware安装记录

注意&#xff1a;windows11不要安装vmware16版本以下的&#xff01;&#xff01;&#xff01;会报错&#xff0c;与内核冲突&#xff0c;只有关闭内核才可以运动&#xff0c;但是这样电脑的安全性得不到保障。 Windows11 中 Vmware Workstations16 安装CentOS 7_windows featu…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 小区小朋友统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

二染色,CF 1594D - The Number of Imposters

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1594D - The Number of Imposters 二、解题报告 1、思路分析 并查集&…

某手某聚星登录算法分析

KS某聚星登录算法分析 某手某聚星登录算法分析第一步&#xff1a;抓包-登录第二步&#xff1a;定位加密入口第三步&#xff1a;分析加密算法第四步&#xff1a;算法实现 某手某聚星登录算法分析 在这篇文章中&#xff0c;我们将详细解析某手某聚星的登录算法&#xff0c;涵盖从…

opencv,连续拍摄多张图像求平均值减少噪点

对于照度低或者相机质量差造成的密集的随机小噪点&#xff0c;可以通过拍摄多张图像求平均值的方法来减少噪点&#xff0c;获得较为清晰的画面。 import cv2 import numpy as npclass FilterCamera:def __init__(self, cap, in_frame, num):self.cap cap # 定义的相机self.n…

n6.Nginx 压缩功能

Nginx 压缩功能 Nginx支持对指定类型的文件进行压缩然后再传输给客户端&#xff0c;而且压缩还可以设置压缩比例&#xff0c;压缩后的 文件大小将比源文件显著变小&#xff0c;这样有助于降低出口带宽的利用率&#xff0c;降低企业的IT支出&#xff0c;不过会占用相 应的CPU资…

科普文:后端性能优化的实战小结

一、背景与效果 ICBU的核心沟通场景有了10年的“积累”&#xff0c;核心场景的界面响应耗时被拉的越来越长&#xff0c;也让性能优化工作提上了日程&#xff0c;先说结论&#xff0c;经过这一波前后端齐心协力的优化努力&#xff0c;两个核心界面90分位的数据&#xff0c;FCP平…

PDF编辑器的秘密:解锁文档处理的无限可能

PDF这个文件因其跨平台兼容性、保持文档格式不变以及易于传输的特性&#xff0c;成为了工作、学习及日常生活中不可或缺的一部分。但是PDF编辑器可不多&#xff0c;我这次就介绍下我用过好用的PDF编辑器吧。 1福昕PDF编辑器 这个软件功能全面&#xff0c;所以软件本身的安装包…

服务攻防-中间件安全(漏洞复现)

一.中间件-IIS-短文件&解析&蓝屏 IIS现在用的也少了&#xff0c;漏洞也基本没啥用 1、短文件&#xff1a;信息收集 2、文件解析&#xff1a;还有点用 3、HTTP.SYS&#xff1a;蓝屏崩溃 没有和权限挂钩 4、CVE-2017-7269 条件过老 windows 2003上面的漏洞 二.中…

游戏常用运行库安装包 Game Runtime Libraries Package

游戏常用运行库安装包&#xff08;Game Runtime Libraries Package&#xff09;是一个整合了多种游戏所需运行库的安装程序&#xff0c;旨在帮助玩家和开发者解决游戏无法正常运行的问题。该安装包支持从Windows XP到Windows 11的系统&#xff0c;并且具备自动检测系统并推荐合…