树莓派+二自由度云台制作智能小车(四)——二自由度云台

二自由度云台一、双舵机实现云台运动(1)舵机的运动原理(2)代码实现二、摄像头模块(1)利用MJPG-streamer实现网络监控(2)motion工具实现网络视频监控一、双舵机实现云台运动(1)舵机的运动原理通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的。伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上。伺服电机(舵机)...
摘要由CSDN通过智能技术生成

一、双舵机实现云台运动

(1)舵机的运动原理

通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的。伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上。伺服电机(舵机)有3个输入引脚,GND、VCC和Signal。脉冲宽度调制技术(PWM)被应用于舵机的控制,轴的方向由脉冲的持续时间决定。需要记住的是,舵机转动的方向不是由占空比决定的,而是由脉冲长度 t 决定的。有的舵机使用的PWM频率为 fPWM=50HZ,其对应于的PWM周期 T=20 ms。脉冲长度 t 和转动方向之间的关系是线性的,但也取决于电机和齿轮的配合。下面是一个脉冲长度和转动方向的关系图。
脉冲长度与转动的角度关系
想进一步了解伺服电机的同学:点这里
本文选用的舵机为MG90S,数字电机,下面是一些基本参数:
• 产品类型:MG90S舵机
• 产品扭矩:2.0kg/cm(4.8V),2.8kg/cm(6V)
• 产品速度:0.11秒/60°(4.8V),0.09秒/60°(6V)
• 转动角度:180°
• 工作电压:4.8 ~ 6V
• 齿轮形式:金属齿轮
• 死区设定:5us (微秒)
• 产品重量:12.2g
• 产品尺寸:22.8mm × 12.2mm × 28.5mm

(2)代码实现

在将舵机装进云台支架里时,一定要注意舵机转轴的初始角度,然后要注意竖直方向上的云台运动时是否会卡住,造成舵机损坏。然后2是代表2%,也就是min_angle,12%是max_angle。
下面的是一个舵机角度的测试代码,可以通过这个测试代码,获得转动角度和占空比:

import RPi.GPIO as GPIO
import time

P_SERVO = 16
fPWM = 50    #hz
a = 10
b = 2

def setup():
    global pwm
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(P_SERVO,GPIO.OUT)
    pwm = GPIO.PWM(P_SERVO,fPWM)
    pwm.start(0)
    
def setDirection(direction):
    duty = a / 180 * direction + b
    pwm.ChangeDutyCycle(duty)
    print("direction =%f , duty = %f "%(direction,duty))
    time.sleep(1)
    
print('starting')
setup()
for direction in range(0,181,10):
    setDirection(direction)
direction = 0
setDirection(0)
GPIO.cleanup()
print("done")

接下来就是舵机代码的编写了。steering.py
写代码时要注意舵机的消抖。舵机有一个死区,消抖就是取消发射脉冲,将占空比设置为0。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 云台舵机的代码
import RPi.GPIO as GPIO
import time
import atexit
# ONE servo class

class Steering:
    max_delay = 0.2
    min_delay = 0.04  
    
    def __init__(self,channel,init_position,min_angle,max_angle,speed):
        self.channel = channel
        self.init_position = init_position
        self.position = init_position
        self.min_angle = min_angle
        self.max_angle = max_angle
        self.speed = speed
        
        atexit.register(GPIO.cleanup)
        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False
  • 3
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自由度云台是一种机械结构,由两个旋转自由度的舵机或电机驱动。stm32hal是一种基于STM32的硬件抽象层库,用于方便地编写驱动程序和控制代码。 要控制自由度云台,我们可以使用stm32hal库来控制舵机或电机的驱动。首先,我们需要初始化STM32的GPIO口和定时器,以便与舵机或电机进行通信。然后,我们可以使用PWM信号来控制舵机或电机的转动角度。 对于舵机,我们可以设置PWM信号的占空比来控制转动角度。通过调整占空比的大小,我们可以控制舵机在一定范围内的转动角度。 对于电机,我们可以使用H桥电路进行控制。通过改变H桥电路中驱动电机的电压和极性,我们可以控制电机的转动方向和速度。 在控制自由度云台时,我们可以通过读取传感器数据来实现闭环控制。例如,我们可以连接陀螺仪或加速度计等传感器来获取云台的当前角度信息,并根据目标角度和当前角度之间的差异来调整舵机或电机的角度或速度,以实现云台的稳定控制。 使用stm32hal库可以简化控制自由度云台的编程过程。我们可以使用库提供的函数来设置GPIO口和定时器,并使用PWM输出来控制舵机或电机的转动角度。同时,stm32hal库还提供了其他丰富的功能,如中断处理、时钟控制等,可以更加灵活地进行控制。 总之,通过使用stm32hal库,我们可以方便地控制自由度云台。通过初始化GPIO口和定时器,使用PWM信号来控制舵机或电机的转动,结合传感器数据进行闭环控制,可以实现云台的稳定控制和精准定位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值