首页 > 其他分享 >嵌入式人工智能(17-基于树莓派4B的电机控制-伺服电机SG90)

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

时间:2024-07-22 11:27:49浏览次数:20  
标签:树莓 17 servo 舵机 伺服电机 占空比 GPIO PWM

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

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)

标签:树莓,17,servo,舵机,伺服电机,占空比,GPIO,PWM
From: https://blog.csdn.net/u010152658/article/details/140594348

相关文章

  • 嵌入式人工智能(19-树莓派4B的系统备份与开机自启)
    1、系统备份树莓派操作系统OS是基于DebianLinux的,通过镜像烧录工具balena-etcher、Win32DiskImager等将img系统镜像文件烧录到tf卡里面,然后插入树莓派,树莓派boot程序BootLoader内置启动方式选择从tf卡启动。OS版本查看(1)操作系统加载后,通常会进行系统配置、开发环境配置,各......
  • 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当
    /定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数。例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。/#include<stdio.......
  • CF1720D2
    感觉静下来能想出来?整个思路没有太容易走偏的地方,就最后一段有点难首先看到异或想到01trie和拆位,然后看到要求最长子序列,想到dp。所以目前的想法就是01trie里存dp,然后按照某种方式找到最大的,来更新\(dp_{i}\)。不会了!\(a_{i}\oplusj>a_{j}\oplusi\)怎么搞啊。我们拆位,发现如......
  • 1.17、基于竞争层的竞争学习(matlab)
    1、基于竞争层的竞争学习简介及原理竞争学习是一种无监督学习方法,其中的竞争层神经元之间互相竞争以学习输入模式的表示。竞争学习的一个经典模型是竞争神经网络(CompetitiveNeuralNetwork,简称CNN),其核心部分是竞争层,包含多个竞争神经元,它们通过竞争机制来学习输入数据的特征......
  • SPREAD for Windows Forms 17.0J Crack
    はじめに日頃から格別のお引き立てを賜り、厚く御礼申しあげます。SPREADforWindowsForms17.0J(以下、本製品)は、エンドユーザーにとって親しみのあるMicrosoftExcel®と互換性の高い表計算機能をアプリケーションに提供するコンポーネントです。数式や条件付き書式、チ......
  • 2517. 礼盒的最大甜蜜度
    题目链接:最小化最大值\(\longrightarrow\)二分答案找左性质的右边界,所以最后二分结束后返回的是\(l-1。\)猜一个答案\(x\),两件商品价格相差\(\geqslantx\)表示差距的最小值维持在\(x\),可以选择当前商品。统计选择的商品数量,若商品数量小于\(k\),说明不满足甜蜜度的定义......
  • LeetCode 1788. 最大化花园的美观度
    1788.最大化花园的美观度有一个花园,有 n 朵花,这些花都有一个用整数表示的美观度。这些花被种在一条线上。给定一个长度为 n 的整数类型数组 flowers ,每一个 flowers[i] 表示第 i 朵花的美观度。一个花园满足下列条件时,该花园是有效的。花园中至少包含两朵花。第......
  • SSM城镇居民社区再生资源回收系统-计算机毕业设计源码04175
    摘 要本论文介绍了一个基于SSM(Spring+SpringMVC+MyBatis)技术的城镇居民社区再生资源回收系统的设计与实现。随着社会对环境保护意识的不断提高,再生资源回收成为了一种重要的环保行动。然而,传统的再生资源回收方式存在着信息不对称、流程繁琐等问题,导致回收效率低下。......
  • [0178]基于JAVA的产品配送智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的产品配送智慧管理系统的设计与实现指导老师(一)选题的背景和意义选题背景:随着电子商务和新零售行业的快速发展,产品配送已成为商业运营中不可或缺的重要环节。传统的配送管理模式往往存在信息更......
  • [0175]基于JAVA的产品生产销售智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的产品生产销售智慧管理系统的设计与实现指导老师(一)选题的背景和意义选题背景与意义:随着我国经济的快速发展和信息技术的日新月异,企业经营管理对信息化、智能化的需求愈发强烈。特别是在生产销......