最近博主在使用幻尔公司 串行总线舵机时,想使用k210控制,由于官方没有相关例程(树莓派的版本是python版本代码,用不了)特此分享一下控制代码

主要调用函数

a.to_bytes(x,'little'/'big')
#将int型变成byte型
#第一个参数是显示位数,第二个参数为显示顺序:从小到大/从大到小
int.from_bytes(a,'little'/'big')
#将byte型变成int型
#第一个参数是显示位数,第二个参数为显示顺序:从小到大/从大到小

舵机驱动板版本

需要注意波特率为115200

这里计算校验和要逐个byte转成int相加,不是直接把各参数相加
例如servoWriteCmd(1,1,0,1000)
并非是
1+7+1+0+1000
而是化为byte型
0x01+0x07+ 0x01 +0x00 +0x00+ 0xE8 +0x03 = 0xF4 = 244

0xF4取~后超过255因此取最后字节1011即0x0B

故最后的消息为55 55 01 07 01 00 00 E8 03 0B

from machine import UART,Timer
from Maix import GPIO
from fpioa_manager import fm
from ubinascii import *
import time
#映射串口引脚#初始化串口
uart = UART(UART.UART1, 115200, read_buf_len=4096)def servoWriteCmd(id, cmd, par1, par2):fm.register(6, fm.fpioa.UART1_RX, force=True)fm.register(7, fm.fpioa.UART1_TX, force=True)begin = 85   #0x55的十进制buf= begin.to_bytes(1,'little')buf += buftry:len = 7sum = 0a = id.to_bytes(1,'little')b = len.to_bytes(1,'little')c = cmd.to_bytes(1,'little')d = par1.to_bytes(1,'little')dd = par1.to_bytes(1,'big')f = par2.to_bytes(2,'little')ff = par2.to_bytes(2,'big')#print(par2 % 256)sum = int.from_bytes(a,'big')+ int.from_bytes(b,'big')+ int.from_bytes(c,'big')+(par1 % 256)+(par1 // 256)+(par2 % 256)+(par2 // 256)print(sum)sum = ~sum  #取反print(sum.to_bytes(1,'little'))buf += id.to_bytes(1,'little')+ len.to_bytes(1,'little') + cmd.to_bytes(1,'little')+par1.to_bytes(2,'little')+par2.to_bytes(2,'little')+sum.to_bytes(1,'little')uart.write(buf)print(buf)except Exception as e:print(e)def portInit(): #配置用到的IO口fm.register(6, fm.fpioa.GPIO0, force=True)RX = GPIO(GPIO.GPIO0,GPIO.OUT)RX.value(0)fm.register(7, fm.fpioa.GPIO1, force=True)TX = GPIO(GPIO.GPIO1,GPIO.OUT)TX.value(1)def portWrite():  #配置单线串口为输出fm.register(6, fm.fpioa.GPIO0, force=True)RX = GPIO(GPIO.GPIO0,GPIO.OUT)RX.value(0)fm.register(7, fm.fpioa.GPIO1, force=True)TX = GPIO(GPIO.GPIO1,GPIO.OUT)TX.value(1)def portRead():   #配置单线串口为输入fm.register(6, fm.fpioa.GPIO0, force=True)RX = GPIO(GPIO.GPIO0,GPIO.OUT)RX.value(1)fm.register(7, fm.fpioa.GPIO1, force=True)TX = GPIO(GPIO.GPIO1,GPIO.OUT)TX.value(0)portInit()
while True:try:portWrite() #将单线串口配置为输出servoWriteCmd(1,1,0,1000) #发送命令 参数1 舵机id=1, 参数2 命令 = 1, 参数3 位置 = 0, 参数4 时间 = 1000ms  55 55 01 07 01 00 00 E8 03 0Btime.sleep(1.1)servoWriteCmd(1,1,1000,2000)#55 55 01 07 01 E8 03 D0 07 34time.sleep(2.1)except Exception as e:print(e)break

舵机控制板版本

需要注意波特率为9600

控制板的代码相对简单,没有校验和只需要将相应参数转换为byte型即可,这里只写了控制单个舵机的函数,多个舵机控制读者请酌情自行编写

# Untitled - By: lenovo - 周一 8月 1 2022from machine import UART,Timer
from Maix import GPIO
from fpioa_manager import fm
from ubinascii import *
import time
#映射串口引脚#初始化串口
uart = UART(UART.UART1, 9600, read_buf_len=4096)def servoWriteCmd(cmd,count,par1,id,par2):fm.register(6, fm.fpioa.UART1_RX, force=True)fm.register(7, fm.fpioa.UART1_TX, force=True)begin = 85buf= begin.to_bytes(1,'little')buf += buftry:len = count*3+5buf += len.to_bytes(1,'little')+ cmd.to_bytes(1,'little') + count.to_bytes(1,'little')+par1.to_bytes(2,'little')+id.to_bytes(1,'little')+par2.to_bytes(2,'little')uart.write(buf)print(buf)except Exception as e:print(e)#portInit()
while True:try:#portWrite() #将单线串口配置为输出servoWriteCmd(3,1,1000,2,800) #发送命令 参数1 舵机id=1, 参数2 命令 = 1, 参数3 位置 = 0, 参数4 时间 = 1000ms time.sleep(1.1)servoWriteCmd(3,1,1000,2,100)#time.sleep(2.1)except Exception as e:print(e)break

K210、Openmv与串行总线舵机通信(基于micropython)舵机驱动板和舵机控制板代码相关推荐

  1. uart接口_UART串行总线舵机转接板规格、接线说明 amp; 驱动安装

    摘要  UART串行总线舵机需要配合UART串行总线舵机转接板使用,它的作用是将舵机的单线转换为双线TTL接口(Rx接收端,Tx发送端),通过双线TTL串口接口与单片机进行通信.或者通过转接板上的US ...

  2. usb接口驱动_UART串行总线舵机转接板规格、接线说明 amp; 驱动安装

    摘要  UART串行总线舵机需要配合UART串行总线舵机转接板使用,它的作用是将舵机的单线转换为双线TTL接口(Rx接收端,Tx发送端),通过双线TTL串口接口与单片机进行通信.或者通过转接板上的US ...

  3. 高速串行总线设计基础(四)眼图的形成原理

    前言 眼图的形成原理 眼图的参数含义 眼图的模板 眼图的识别依据? 前言 眼图的测量对于高速串行总线的重要性不言而喻,眼图反映了总线通道环境的优劣,信号的好坏等等,正确的识别眼图是一项基础技能,如果具 ...

  4. 4位快速加法器和4位串行加法器相比_使用混合信号示波器调试串行总线系统

    本应用指南面向的读者是数字系统设计师,他们在研发过程中会用到模拟和数字元器件,包括采用串行总线的微控制器和 DSP 系统.本文讨论调试串行总线设计所面临的挑战和新的解决方案,这些串行总线包括控制器局域 ...

  5. SPI、I2C、UART 三种串行总线对比介绍

    转载自https://blog.csdn.net/oqqHuTu12345678/article/details/65445338 参考博客 https://blog.csdn.net/xiaodin ...

  6. SPI、I2C、UART三种串行总线的原理、区别及应用

    SPI协议解析,链接如下 https://blog.csdn.net/weiqifa0/article/details/82765892 I2C协议解析,链接如下 https://blog.csdn. ...

  7. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  8. 串行总线 —— I2C、UART、SPI

    I2C,也叫 IIC,是一种常见的串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息. 0. 电气知识 开漏输出:Open drain output,不输出电压,低电平时接地,高电平时不接地 ...

  9. 三种串行总线协议的区别(SPI、I2C和UART)

    SPI.I2C跟UART三种串行总线协议的区别: (如果想了解SPI和I2C更多详细内容,可看 SPI总线(一):基本原理篇, SPI总线(二):驱动分析篇,SPI总线(三):驱动实例,i2c总线(基 ...

最新文章

  1. opencv mat相关资料整理
  2. Angular-Ui-Router+ocLazyLoad动态加载脚本
  3. 矿泉水功能突破口-丰收节交易会·李喜贵:遵义谋定水产业
  4. PHPstrom怎样设置浏览器
  5. 书评:Just the Computer Essentials(Vista)
  6. java基准测试_微基准测试进入Java 9
  7. 定值保险计算举例_保险公司的“开门红”又要来了!理财险真的值得买吗?
  8. C语言 __FUNCTION__ - C语言零基础入门教程
  9. 回文绝对求下联:亚冠决赛决冠亚
  10. BP(反向传播)神经网络
  11. 章节3.1和3.2----栈的表示、实现和应用
  12. Waves 13:一款专业电子音频制作插件和音频信号处理器插件套装
  13. 【算法设计与分析】如何分析一个算法
  14. 【基金量化研究系列】大类资产配置研究(六)——多资产风险平价策略
  15. 计算机自举过程是什么问题,操作系统原理(一)——自举过程
  16. PS 制作 图片放大镜效果 和 鼠标点击效果
  17. linux 编辑文件命令
  18. 日语流行口语极短句2
  19. MATLAB中Simulink创建与运行
  20. Acitivity的生命周期

热门文章

  1. 操作系统原理_田丽华(5)CPU调度
  2. 了解第三方库函数——curses
  3. python调用ch_python curses使用
  4. 【cuda】Nsight System 下载,安装与使用
  5. windows shell 编程
  6. 怎样从PHP文件中提取特征码,关于判断文件唯一性,怎么提取特征码
  7. android 选择文件路径无效,Android使用MediaMetadataRetriever类获取视频帧时一直无法正确读取路径文件,iamge显示位null...
  8. arduino利用电位器仿真编码器控制舵机转动
  9. C语言编程,给出三角形三个边的边长,判断是否能构成三角形。
  10. 重装系统时提示无法在计算机安装系统文件夹,电脑重装系统提示遇到错误Windows安装无法继续解决方法...