基于Openmv(MicroPython)控制串行总线舵机

临近电赛,前几天在调舵机,本来翻出一台总线舵机的云台想要调试一下,在网上搜了大半天只搜到寥寥总线舵机的控制资料,看来大家还是大多数喜欢PWM舵机......,但是搜集几天后还是有收获的,现将我搜集到的资料和编写的控制程序分享如下

我使用的云台是双U型梁的二维云台,搭配的是某尔的LD1501串行总线舵机,经过我一天的海搜资源,找到几款由MicroPython和STM32控制总线舵机的程序以及某尔总线舵机的通信协议(这个最重要)

某尔总线舵机是由串口进行驱动,了解过串行总线舵机的都知道,控制多个串行总线舵机只需要三根接线:VCC,GND以及信号线,我使用的这款总线舵机的信号线波特率为115200,额定电压为7.4V,驱动该舵机运行的指令包如下:

需要通信协议的uu我将下载链接放置到末尾,需要的自取。

U1S1,有了通信协议什么都好说,再根据网上的例程一会就可以调试完,以下是我调试使用的代码:

 注:初始化头文件我不再给出,大家自行理解添加吧

#初始化串口3:P4:TXD,P3:RXD
uart = UART(3,115200)   #定义串口3变量
uart.init(115200, bits=8, parity=None, stop=1)
#幻尔舵机通信协议:校检和
def checksum(buf):
    # 计算校验和
    sum = 0x00
    for b in buf:  # 求和
        sum += b # 累加
    sum = sum - 0x55 - 0x55  # 去掉命令开头的两个 0x55
    sum = ~sum  # 取反
    return sum & 0xff  # 取最低的一个字节

#与幻尔总线舵机进行通信:id,位置,时间
def Serial_Move_Servo(id=None,Position=None,Time=None):
    buf = bytearray(b'\x55\x55')
    buf.append(id)
    buf.append(7)
    buf.append(1)
    buf.append(0xff & Position)
    buf.append(0xff & (Position >> 8))
    buf.append(0xff & Time)
    buf.append(0xff & (Time >> 8))
    buf.append(checksum(buf))
    uart.write(buf);

#id在幻尔舵机调试程序已经设置好:x轴舵机为1,y轴舵机为2,也可以通过程序进行设置
def Set_Id_Servo(oldid=None,newid=None):
    buf = bytearray(b'\x55\x55')
    buf.append(oldid)
    buf.append(4)
    buf.append(13)
    buf.append(0xff & newid)
    buf.append(checksum(buf))
    uart.write(buf);

对于我使用的这款串行总线舵机,它出厂的时候每一个ID号都默认是1,所以我一开始调试的时候对ID为1的舵机发送指令云台上的两个舵机都一起动....,因为我一开始在STM32上调试 的并且没有搜到通信协议,就一直没有办法修改ID,后来在某尔的官网搜索到了有总线舵机调试板这个东西,并且都说需要那个调试版才可以修改ID,但是在本人的不懈努力下,找到了修改总线舵机ID的3种方式:

在修改总线舵机ID的时候,注意不要将多个总线舵机的接线连接在一起,仅用串口连接一台总线舵机,一般是使用TXD(发送端)连接舵机的信号线,其余电源线和地线供电6-8v左右,注意电源要和串口共地。

第一种方式,也是我最先发现的方式:使用USB转TTL的TXD直接连接舵机的信号线,然后舵机正常供电,电源和USB转TTL共地,然后在某尔科技的官网下载这么一个软件

然后正常打开串口号设置就可以了,里面的设置界面非常简洁明了,还可以限制角度,供电电压,偏差等等,我就不再叙述了,如有不明白的地方可以s我

第二种方式:使用通信协议,从串口发送数据到舵机:

def Set_Id_Servo(oldid=None,newid=None):
    buf = bytearray(b'\x55\x55')
    buf.append(oldid)
    buf.append(4)
    buf.append(13)
    buf.append(0xff & newid)
    buf.append(checksum(buf))
    uart.write(buf);

这里在刚刚的代码里也有,就不再多说了。

第三种方式:使用某尔科技的调试版

这个不多说了,如果资金充足可以冲(有钱人专享) 

在这款舵机调试的过程中遇到的最大问题就是设置ID了,其控制方式和PWM有点偏差,总体来说感觉比PWM舵机更直接一些(毕竟是使用串口发送数据)

如果有什么问题欢迎大家指出!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值