生成电机选择的运动、力和转矩曲线。
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为单位。在内部,软件将这些值存储为赫兹和赫兹/秒。
物理单位
包使用的本机物理单元如下表所示。提供module conversions.py中的函数,以便以其他单位输入参数。
Parameter | Internal Symbol | Unit |
---|---|---|
Time | t | s |
Length | x | m |
Linear Velocity | v | m/s |
Linear Acceleration | a | m/s2 |
Force | f | N |
Rotations | revs | Revolutions |
Angular Velocity | hz | Hz |
Angular Acceleration | hzps | Hz/s |
Torque | tau | N*m |
Moment of Inertia | j | kg*m2 |
Angle | incline_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()
转换为线性力分布
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()
定义运动对象
电机对象包含转矩曲线和转动惯量数据。方法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()
定义其他传动系对象
其他必要的传动系对象在下面的代码中创建。在扭矩产生过程中使用了传动比、传动螺钉导程和惯性矩。转换函数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()
计划变更
- []更完整的conversions.py模块。
- []完成输出配置文件统计信息的功能。
- []减少熊猫数据帧复制操作。
- []可配置打印单元。
- []步进电机工作台和三相电机信号产生。