生成电机选择的运动、力和转矩曲线。

pymotor的Python项目详细描述


Pymotor

概述

PYMOTOR是电机选择的工具。它根据描述电机、传动系统和负载的线性运动轮廓和物理参数生成力和扭矩图。

开发状态

pymotor正在使用requirements.txt中描述的包与python 3.7一起开发。

这是alpha阶段的软件。这意味着功能和用法没有得到修复,文档很可能不完整,并且可能存在错误。

此软件包的某些版本已上载到pypi.org,您可以自行承担安装风险,例如:

$ pip install numpy
$ pip install pandas
$ pip install pymotor

物理方程

用于计算力、惯性和扭矩的数学如下所示。注意,下面方程式中的角速度和角加速度分别以rad/s和rad/s2为单位。在内部,软件将这些值存储为赫兹和赫兹/秒。

Equation Image

物理单位

包使用的本机物理单元如下表所示。提供module conversions.py中的函数,以便以其他单位输入参数。

ParameterInternal SymbolUnit
Timets
Lengthxm
Linear Velocityvm/s
Linear Accelerationam/s2
ForcefN
RotationsrevsRevolutions
Angular VelocityhzHz
Angular AccelerationhzpsHz/s
TorquetauN*m
Moment of Inertiajkg*m2
Angleincline_angle°

用法

创建线性运动配置文件

下面显示了导入Pymotor包和配置LineerMotion对象的代码。线性运动轮廓由三个部分创建:从零加速、匀速和从零减速。

fs是f采样,或生成的剖面的采样率(以赫兹为单位)。

加速和减速段可以由它们的时间、距离或加速度来定义。等速段可以用时间或距离来定义。

如果“平滑选项”(Smoothing Options)设置为true,则加速段和减速段使用hann窗口创建平滑的速度剖面。如果设置为false,则使用三角形窗口创建具有恒定加速度的梯形速度剖面。

转换函数ipm()和inch()分别用于将英寸/分钟和英寸转换为本机单位。

importpymotoraspmlm_settings={'fs':10000.0,'max_velocity':pm.ipm(40),'acc_mode':'time','acc_value':0.06,'acc_smooth':True,'con_mode':'distance','con_value':pm.inch(.02),'dec_mode':'acceleration','dec_value':0.25,'dec_smooth':False,}lm=pm.LinearMotion(lm_settings)lm.plot()

Motion Profile Image

转换为线性力分布

linearforce对象以设置字典和linearmotion对象为参数,生成力和速度随时间的曲线图。

此处定义的安全系数也用于角力矩对象。

lf_settings={'safety_factor':2,'moving_mass':100,'preload_force':0.1,'efficiency':0.9,'incline_angle':45,'friction_coef':0.1,'gravity':9.8,}lf=pm.LinearForce(lf_settings,lm)lf.plot()

Force Profile Image

定义运动对象

电机对象包含转矩曲线和转动惯量数据。方法motor.tau(hz)返回给定角速度的插值转矩值,角转矩对象使用该值绘制可用电机转矩与所需转矩的关系。motor.plot()生成可用于验证的扭矩曲线图。

CurvyHZ列表定义曲线的x轴值。值必须是正的、唯一的和升序的。

CurvyTau列表定义曲线的y轴值。值必须为正。

curve_hz=[0,pm.rpm(300),pm.rpm(600),pm.rpm(900),pm.rpm(1200),pm.rpm(1500),pm.rpm(1800),]curve_tau=[2.5,2.2,1.3,0.9,0.7,0.6,0.5,]motor=pm.Motor(curve_hz=curve_hz,curve_tau=curve_tau,j=pm.gcm2(460))motor.plot()

Motor Torque Curve Image

定义其他传动系对象

其他必要的传动系对象在下面的代码中创建。在扭矩产生过程中使用了传动比、传动螺钉导程和惯性矩。转换函数g cm 2()和inch()分别用于将g*cm2和inches转换为本机单位。

coupler=pm.Coupler(j=pm.gcm2(5))gear=pm.Gear(ratio=2,j_in=pm.gcm2(10),j_out=pm.gcm2(15))screw=pm.Screw(lead=pm.inch(.05),j=pm.gcm2(20))

生成扭矩分布

angularTorque对象将linearForce、motor和drivetrain对象作为参数。生成的扭矩分布使用linearforce对象中定义的安全系数。

所需扭矩图包括可用电机扭矩的叠加图。同时绘制了速度剖面图。

at=pm.AngularTorque(lf,motor=motor,coupler=coupler,gear=gear,drivetrain=screw)at.plot()

Torque Profile Image

计划变更

  • []更完整的conversions.py模块。
  • []完成输出配置文件统计信息的功能。
  • []减少熊猫数据帧复制操作。
  • []可配置打印单元。
  • []步进电机工作台和三相电机信号产生。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java什么数据库最类似于Map,每个用户/id存储无限多个“键”和“值”?   java仅使用super pom进行测试   内存不足如何解析java。OutOfMemoryError:Java堆空间在增加堆大小的情况下将意味着延迟OutOfMemoryError   来自另一个类的mysql和java jdbc调用[运行时应用程序]   java通过下拉菜单更改搜索框搜索的内容   JAVAlang.ClassNotFoundException:sun。jdbc。odbc。JdbcOdbcDriver   java Selenium点击链接   JavaSpringHibernate:从唯一值列表中获取对象列表   java Bing广告与桌面身份验证问题   java如何在没有任何外部SDK的情况下从安卓打印到收据打印机?   未调用java菜单片段类   java在IDEA和PyCharm中同时为同一个项目工作   java我们如何为同一个异常提供不同的海关信息   jakarta ee中是否预定义了“请求”和“响应”变量或值?   java更好地解决“之前和之后”难题?   尝试将数据从Excel添加到Java   发送电子邮件的Java代码只适用于一个电子邮件id?   java如何从资产解析XML?