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

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 JBPM:无法部署进程存档:null   java将一个数组拆分为两个大小相等的数组   java Spring boot验证该字段是否为string类型   JAVA JPA保存到TSV而不是SQL   java PMD报告超过X个违规   java是否支持springdatagremlin中的自定义查询?   java在“for”循环后使用变量   JPQL中默认查询中的java错误列   如何在java中实现不同于线程的进程?   java如何检查字符串是否平衡?   xml使用xalan扩展在XSL中处理java集合   java我试图使用子类/超类重写另一个类的值   转换为JSON时出现java堆栈溢出问题   java考虑定义一个类型为“COM”的bean。实例演示。在您的配置中命令$DefaultIO   java在kubernetes中如何检索转发端口的值?   JavaEclipse,动态web项目,向类路径添加另一个eclipse项目   eclipse的java Spring上下文XML验证器?   Linux下利用MATLAB(Windows)生成Java包   Java:在存储到DDC之前验证属性   java校验字符串