#机械臂2--树莓派Python 步进电机驱动TB6600 控制步进电机

步进电机驱动和步进电机的连线

一、端口说明

(1)、信号输入端

   PUL+:脉冲信号输入正。
   PUL-:脉冲信号输入负。
   DIR+:电机正、反转控制正。
   DIR-:电机正、反转控制负。
   EN+:电机脱机控制正。
   EN-:电机脱机控制负。

(2)、电机绕组连接

   A+:连接电机绕组A+相。
   A-:连接电机绕组A-相。
   B+:连接电机绕组B+相。
   B-:连接电机绕组B-相。

(3)、电源电压连接

   VCC:电源正端“+
   GND:电源负端“-”
   注意:DC直流范围:9-32V
   不可以超过此范围,否则会无法正常工作甚至损坏驱动器.

(4)、输入端接线说明

   输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信号
DIR+,DIR-③脱机信号EN+,EN-。
   笔者采用共阴极接法:分别将PUL-,DIR-,EN-连接到树莓派的GND口;脉冲输入信号PUL+连接到树莓派的GPIO(笔者为18号口),方向信号DIR+连接到树莓派的GPIO口(笔者为12号口)。
   注:EN端可不接。

(5)、连接完成后如图所示:

二、细分调节

这里笔者将细分调到1600,电流调到1.5.

补充一句:额定电流的设置依据电机而定,电机的额定电流是多久就设置多少。如果发现电机位置不准,则可能是额定电流设置的不对。

三、Python控制实现

import RPi.GPIO as gpio
import time

DIR = 12
PUL = 18

gpio.setmode(gpio.BOARD)
gpio.setup([PUL, DIR], gpio.OUT)

# 别问我这里为什么是2085不是1600,我也很纳闷,试了很久,发现这个频率才刚好转够一圈 > . <
pwmPUL = gpio.PWM(PUL, 2085)  
pwmPUL.start(0)

def rotate(angle, direction):
    """
    旋转操作,需要指定旋转角度和方向
    :param angle: 正整型数据,旋转角度
    :param direction: 字符串数据,旋转方向,取值为:"ccw"或"cw".ccw:逆时针旋转,cw:顺时针旋转
    :return:None
    """
    if direction == "ccw":
        gpio.output(DIR, gpio.LOW)
    elif direction == "cw":
        gpio.output(DIR, gpio.HIGH)
    else:
        return
    pwmPUL.ChangeDutyCycle(50)
    time.sleep(angle / 360)
    pwmPUL.ChangeDutyCycle(0)

time.sleep(4)
rotate(180, "ccw")

pwmPUL.stop()
gpio.cleanup()


### 控制树莓派机械Python代码实例 对于基于Raspberry Pi运行并由Python控制的简单绘图仪BrachioGraph,可以利用其提供的API来实现基本动作[^1]。下面是一个简单的例子,该示例展示了如何定义一个名为`brachiograph.py`文件中的类以及一些基础方法: ```python import RPi.GPIO as GPIO # 导入GPIO库用于硬件口操作 from time import sleep # 导入sleep函数以便延时 class BrachioGraph: """这是一个简化版的机械控制器""" def __init__(self, servo_pins=[2, 3]): self.servo_pins = servo_pins GPIO.setmode(GPIO.BCM) # 设置BCM模式编号方式 for pin in self.servo_pins: GPIO.setup(pin, GPIO.OUT) self.pwm_servos = [] for i in range(len(self.servo_pins)): pwm = GPIO.PWM(servo_pins[i], 50) # 创建PWM对象频率设为50Hz pwm.start(7.5) # 初始化位置 self.pwm_servos.append(pwm) def move_to_angle(self, angles): """ 移动到指定角度 参数angles应该是一个列表形式的角度值, 对应于各个舵机的目标旋转角。 """ duty_cycle = lambda angle: (angle / 18.) + 2. for idx, angle in enumerate(angles): dc = duty_cycle(angle) self.pwm_servos[idx].ChangeDutyCycle(dc) sleep(0.5) # 给予时间让伺服电机完成转动 if __name__ == &#39;__main__&#39;: bg = BrachioGraph() try: while True: command = input(&#39;Enter two comma-separated angles or q to quit:&#39;) if &#39;q&#39; in command.lower(): break try: ang1, ang2 = map(float, command.split(&#39;,&#39;)) bg.move_to_angle([ang1, ang2]) except ValueError: print("Invalid input format.") finally: for pwm in bg.pwm_servos: pwm.stop() # 停止PWM信号发送 GPIO.cleanup() # 清理释放资源 ``` 上述脚本创建了一个模拟两关节机械运动的对象,并允许通过命令行输入两个逗号分隔的角度值来指挥这两个关节移动至特定的位置。 当涉及到更复杂的交互逻辑时,则可能需要用到网络通信协议与远程服务器交换数据,在这种情况下,可能会涉及到了解有关连状态更新机制的内容[^4]。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值