前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >odrive入门教程(securecrt使用教程串口)

odrive入门教程(securecrt使用教程串口)

作者头像
全栈程序员站长
发布于 2022-07-31 09:15:25
发布于 2022-07-31 09:15:25
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

ODrive 官方入门指南中,采用的是 USB 连接控制模式(中文翻译版本链接)使用的是 Native Protocol。当我们需要尝试串口通信实现时,需要专程 ASCII 协议来进行串口通信实现相关的命令,结合着入门指南以及 ODrive 中的相关属性方法参数,将流程中用到的相关方法整理如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import serial
import time

ted = serial.Serial(port='/dev/tty.wchusbserial1470', baudrate=115200)

ted.write("r vbus_voltage;ted's words\n".encode('ascii'))
vbus_voltage = float(ted.readline().decode('ascii'))
print("vbus_voltage:",vbus_voltage,type(vbus_voltage))

# Current limit
ted.write("r axis0.motor.config.current_lim\n".encode('ascii'))
axis0_motor_config_current_lim = float(ted.readline().decode('ascii'))
print("axis0.motor.config.current_lim:",axis0_motor_config_current_lim,type(axis0_motor_config_current_lim))

# Velocity limit
ted.write("r axis0.controller.config.vel_limit\n".encode('ascii'))
axis0_controller_config_vel_limit = float(ted.readline().decode('ascii'))
print("axis0.controller.config.vel_limit:",axis0_controller_config_vel_limit,type(axis0_controller_config_vel_limit))

# Calibration current
ted.write("r axis0.motor.config.calibration_current\n".encode('ascii'))
axis0_motor_config_calibration_current = float(ted.readline().decode('ascii'))
print("axis0.motor.config.calibration_current:",axis0_motor_config_calibration_current,type(axis0_motor_config_calibration_current))

# brake_resistance
ted.write("r config.brake_resistance\n".encode('ascii'))
config_brake_resistance = float(ted.readline().decode('ascii'))
print("config.brake_resistance:",config_brake_resistance,type(config_brake_resistance))

# pole_pairs
ted.write("r axis0.motor.config.pole_pairs\n".encode('ascii'))
axis0_motor_config_pole_pairs = int(ted.readline().decode('ascii'))
print("axis0.motor.config.pole_pairs:",axis0_motor_config_pole_pairs,type(axis0_motor_config_pole_pairs))

# motor_type
ted.write("r axis0.motor.config.motor_type\n".encode('ascii'))
axis0_motor_config_motor_type = int(ted.readline().decode('ascii'))
print("axis0.motor.config.motor_type:",axis0_motor_config_motor_type,type(axis0_motor_config_motor_type))

print("~"*20)
# cpr
ted.write("r axis0.encoder.config.cpr\n".encode('ascii'))
axis0_encoder_config_cpr = int(ted.readline().decode('ascii'))
print("axis0.encoder.config.cpr:",axis0_encoder_config_cpr,type(axis0_encoder_config_cpr))

ted.write("w axis0.encoder.config.cpr 4096\n".encode('ascii'))

ted.write("r axis0.encoder.config.cpr\n".encode('ascii'))
axis0_encoder_config_cpr2 = int(ted.readline().decode('ascii'))
print("axis0.encoder.config.cpr modified:",axis0_encoder_config_cpr2,type(axis0_encoder_config_cpr2))

print("~"*20)

# Save configuration
ted.write("ss\n".encode('ascii'))

# Position control
""" AXIS_STATE_UNDEFINED = 0 AXIS_STATE_IDLE = 1 AXIS_STATE_STARTUP_SEQUENCE = 2 AXIS_STATE_FULL_CALIBRATION_SEQUENCE = 3 AXIS_STATE_MOTOR_CALIBRATION = 4 AXIS_STATE_SENSORLESS_CONTROL = 5 AXIS_STATE_ENCODER_INDEX_SEARCH = 6 AXIS_STATE_ENCODER_OFFSET_CALIBRATION = 7 AXIS_STATE_CLOSED_LOOP_CONTROL = 8 AXIS_STATE_LOCKIN_SPIN = 9 AXIS_STATE_ENCODER_DIR_FIND = 10 """
ted.write("r axis0.current_state\n".encode('ascii'))
axis0_current_state = int(ted.readline().decode('ascii'))
print("axis0.current_state:",axis0_current_state,type(axis0_current_state))

# AXIS_STATE_FULL_CALIBRATION_SEQUENCE
ted.write("w axis0.requested_state 3\n".encode('ascii'))
print("校准电机...")
time.sleep(15)
ted.write("r axis0.current_state\n".encode('ascii'))
axis0_current_state2 = int(ted.readline().decode('ascii'))
print("axis0.current_state modified:",axis0_current_state2,type(axis0_current_state2))

# AXIS_STATE_CLOSED_LOOP_CONTROL
ted.write("w axis0.requested_state 8\n".encode('ascii'))

ted.write("r axis0.current_state\n".encode('ascii'))
axis0_current_state3 = int(ted.readline().decode('ascii'))
print("axis0.current_state modified again:",axis0_current_state3,type(axis0_current_state3))

ted.write("w axis0.controller.pos_setpoint 10000\n".encode('ascii'))

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127520.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验