☰
直接压片单元模型开发教程(6):冲头运动学建模——位移、速度与加速度的数值微分与切向速度
2026/10/15 3:40:31 网站建设 项目流程

直接压片单元模型开发教程(6):冲头运动学建模——位移、速度与加速度的数值微分与切向速度

版本声明块

  • 工具/软件:Python 3.9 + numpy(<2)+ scipy(<1.14)+ matplotlib;本系列延续 PharmaPy(Purdue CryPTSys)生态,但TabletPress单元类为本系列二次开发示例类,非官方 API(PharmaPy 官方单元操作仅覆盖反应器与结晶器,不含压片单元)。
  • 语言/环境:Python 3.9;PharmaPy 的requirements.txt未显式声明 Python 版本,以官方安装文档为准。本篇所有代码不依赖 PharmaPy,可独立运行。
  • 本文目标:把"冲头位移曲线"变成可直接参与后续压缩方程求解的(t, Δy, v, a)四元组,并说清切向速度与垂直速度的关系。

一句话结论:在TabletPress单元类里,冲头瞬时速度就是位移曲线对时间的一阶数值导数(np.gradient(dy, t)),切向速度由TV = π·PCD·rpm/60给出,二者经链式法则联系为v_vertical = TV·(dΔy/ds);USP⟨1245⟩ 指出大型高速旋转压片机冲头垂直速度可达约 1 m/s,而修正正弦位移曲线的最大位移处斜率趋近 0,这正是旋转机能排气的运动学根源。

〇、本篇要解决的认知问题

  1. 冲头的瞬时速度为什么不"直接测量",而要从位移曲线求导?求导在工程上到底解决了什么问题?
  2. 切向速度与垂直速度是同一个量吗?PCD(节圆直径)在其中扮演什么角色?为什么说 PCD 是设备归一化的第一把尺子?
  3. 为什么旋转压片机在最大压力附近"速度趋近 0",而单冲机在同一位置斜率仍然很大?二者的速度剖面对模型意味着什么?
  4. np.gradient做数值微分时,有哪些反直觉的默认行为会把加速度算错一个量级?
  5. 修正正弦曲线是"标准答案"吗?如果不是,我们在建模时应当如何声明它的地位?

一、机制解析

1.1 运动学链条:转台转角 → 位移 → 速度 → 加速度

旋转压片机的基本几何是:一圈冲头装在转台上,转台绕中心轴以 rpm 旋转;冲头尾部沿固定的压辊(上辊、下辊)滚过。USP⟨1245⟩ 明确:上辊驱动上冲、下辊驱动下冲,压缩阶段冲头运动对称;压辊引起的位移"一般基于 Rippie 和 Danielson 提出的方程"计算。

请注意这里的层次关系,它是本篇全部代码的骨架:

转台转角 φ(t) ← 完全由 rpm 决定:ω = 2π·rpm/60 (rad/s) │ ▼ 冲头轴向位移 Δy(t) ← 由"压辊几何"决定(Rippie & Danielson 方程,本系列不展开显式式) │ ├─ 一阶导 dΔy/dt = 瞬时垂直速度 v(t) ← 伍善根、沈震:曲线斜率 d(Δy)/dt 即瞬时速度 │ └─ 二阶导 d²Δy/dt² = 加速度 a(t) ← 惯性项、压缩速率项的输入

关键在于:转角这一层是纯运动学、与物料无关;而"角度 → 位移"这一层是纯几何、与设备压辊尺寸和冲头头部形状相关。也就是说,只要知道 rpm 和压辊几何,我们就能在不解任何力学方程的前提下,先把冲头的运动规律算出来——这就是为什么运动学必须先于压缩力学建模。

USP⟨1062⟩(转述)登记的压缩模拟冲头位移—时间曲线共三类:线性(saw-tooth)、方波(square)、旋转机特有的修正正弦(modified sinusoidal),且可分单侧或双侧压缩。这三类曲线的"物理身份"完全不同:

曲线类型典型对应设备最大位移附近斜率物理含义
线性 saw-tooth理想化单冲机 / 教学演示大(不趋于 0)位移恒定速率推进,气体来不及排出
方波 square瞬时加载(极限近似)无穷大数学极限,现实中不可实现
修正正弦 modified sinusoidal旋转压片机趋近 0最大压力附近单位时间体积变化缓慢,利于排气与成型

伍善根、沈震在《单冲压片机与旋转式压片机的比较》中给出的定性结论极为重要:旋转机的位移曲线起始斜率大(冲头速度大),在最大位移 Δy 附近斜率趋近 0;而单冲机在最大压力附近斜率仍较大。这一条直接解释了为什么同样的配方、同样的最大压力,旋转机压出来的片剂往往更容易成型——不是压力更大,而是"在最大压力附近停留得更久"。而这个"停留得更久",正是我们在第 7 篇要量化的驻留时间(dwell time)。

1.2 切向速度:PCD 是第一把归一化尺子

转台上冲头中心的分布圆,其直径为节圆直径 PCD(pitch circle diameter)。冲头在转台上的线速度,也就是切向速度(tangential velocity, TV),等于圆周长乘以转速:

TV = π · PCD · rpm / 60 (PCD 单位 mm,TV 单位 mm/s)

这个式子是驻留时间公式的几何内核。以 Natoli NP-255 为例,其官方样本给出PCD = 292 mm,转速范围10–100 rpm:

  • 50 rpm:TV = π × 292 × 50 / 60 ≈764 mm/s ≈ 0.76 m/s
  • 100 rpm:TV ≈1529 mm/s ≈ 1.53 m/s

对照 USP⟨1245⟩ 登记的"大型高速旋转压片机冲头垂直速度可达约 1 m/s",可以看到切向速度与垂直速度处在同一数量级,这不是巧合,而是链式法则的必然结果。设 s 为沿 PCD 圆周的弧长,则 ds = (PCD/2)·dφ,且 TV = (PCD/2)·ω,于是:

v_vertical = dΔy/dt = (dΔy/dφ)·(dφ/dt) = TV · (dΔy/ds)

垂直速度 = 切向速度 × 位移曲线沿圆周的斜率(无量纲放大系数)。这个关系式是本篇最有用的工具:

  • 它解释了为什么"转速翻倍,冲头垂直速度也大致翻倍"——TV 与 rpm 成正比;
  • 它把设备几何(PCD)与冲头形状(位移曲线斜率)干净地分离,为第 7 篇的"两步归一化"和第 18 篇的放大方法埋下伏笔;
  • 它告诉我们:位移曲线斜率 dΔy/ds 就是"这台机器把圆周运动翻译成垂直压缩的传动比"。

1.3 修正正弦曲线的地位:是"常见做法",不是"唯一标准"

底账明确登记了一条约束:“修正正弦近似"属常见做法,不得当作唯一标准;Rippie & Danielson 压辊位移方程的显式表达式未检索到原文,教程若出现具体公式,必须标注"以 Rippie & Danielson 原文 / USP⟨1245⟩ 所引公式为准”。

因此,本篇代码中的"平滑修正正弦类"参数化,其身份是教学用的平滑剖面:

  • 它的作用是演示"如何对一条光滑位移曲线做数值微分",而不是声称这就是真实压辊位移;
  • 它的边界条件(两端斜率为 0)与旋转机定性特征一致,这是它可用的理由;
  • 真实设备的位移—时间曲线必须以 Rippie & Danielson 原文 / USP⟨1245⟩ 所引公式为准。

把这条声明写进代码注释和文档,是工艺仿真建模可审计性的基本要求:任何一个"看起来像标准公式"的自定义函数,都必须显式标注来源等级。

1.4 架构图:运动学子模块在 TabletPress 中的位置

TabletPress(自研示例类) ┌──────────────────────────────────────────────────────────────┐ │ inputs: punch_d, n_stations, pcd_mm, rpm, pre/main setpoint │ ├──────────────────────────────────────────────────────────────┤ │ [A] kinematics ← 本篇:φ(t) → Δy(t) → (v, a) │ │ │ │ │ ├── TV = π·PCD·rpm/60 │ │ ├── np.gradient 求 v、a │ │ └── 输出 (t, dy, vy, ay, tv) 供下游使用 │ ├──────────────────────────────────────────────────────────────┤ │ [B] dwell time ← 第 7 篇:由 TV 与 head flat 得 dt(ms) │ │ [C] compaction ← 第 8/9 篇:由 P 得相对密度 D、固体分数 │ │ [D] strength ← 第 11/12 篇:D → 抗张强度 → 破碎力 │ └──────────────────────────────────────────────────────────────┘

运动学是整条链的入口:它不预测任何质量属性,但没有它,驻留时间算不出来、压缩速率算不出来、应变速率敏感性的自变量也算不出来。

1.5 定量示例:两台机型的速度量级对照

以底账登记的两台机型为例。Natoli NP-255 的PCD = 292 mm、转速 10–100 rpm,代入TV = π·PCD·rpm/60可得切向速度从约153 mm/s 到约 1529 mm/s;Fette 3090i 的转速范围为15–120 min⁻¹(其 PCD 未在底账登记,以 Fette 官方样本为准)。若某机型的 PCD 在 300 mm 量级,则 120 min⁻¹ 时切向速度已接近 1.9 m/s。

这组数字说明一件在车间里经常被忽略的事:高速机的冲头,每秒要在压辊下走过接近两米的弧长。如果冲头头部平面只有十几毫米,那么"接触时间"必然只能以毫秒计;反过来,低速机在 15 rpm 下的切向速度可能只有 0.2 m/s 量级,同一头部平面的接触时间会被放大近一个数量级。这正是"同一配方换到高速机就压不硬"的运动学根源——不是压力不够,而是时间不够。此处出现的"300 mm 量级""十几毫米"都是量级示意,具体以设备官方样本为准。

另一条常被忽略的推论是:切向速度与冲头直径无关。TV 只由 PCD 与 rpm 决定,与用 B 型还是 D 型冲头、冲头直径是 8 mm 还是 10 mm 都无关。冲头尺寸只通过"头部平面尺寸"进入驻留时间的分子。把这两层分清楚,才不会在换冲头时错误地期待切向速度变化。

1.6 为什么速度峰值必然出现在位移中段

设压缩窗口内位移从 0 单调增到 Δy,且位移曲线两端斜率为 0(旋转机的定性特征)。对斜率函数用罗尔定理可知:区间内必然存在斜率的极值点;对常见的"升余弦取幂"型剖面,该极值位于归一化相位 τ=0.5 附近。这就是"速度峰值出现在中段"的数学原因,也是本篇练习 1 判定标准的来源。

工程含义非常重要:压缩速率最大的时刻,不是压力最大的时刻。压力最大发生在位移最大处,那里速度趋近 0;压缩速率最大发生在位移中段,那里压力只到峰值的一部分。因此在做与速率相关的建模(例如判断是否发生脆性碎裂、是否需要考虑应变速率敏感性)时,必须把"峰值压力"与"峰值压缩速率"当作两个独立自变量——它们对应压缩循环中的两个不同时刻,混用会导致模型对转速的响应方向错误。

1.7 加速度项的定位:知道它,但别高估它

本篇的高潮算到加速度为止。需要给读者一个诚实的定位:在压片过程中,决定粉体致密化的是应力(压力),而不是冲头自身的惯性力。冲头质量有限,其 m·a 项与数十 kN 级压缩力相比通常可以忽略。那我们为什么还要算加速度?

原因有三:

  1. 数值稳定性:当位移曲线由实测数据给出、含噪声时,二阶导会把噪声放大,提醒我们数据是否够干净;
  2. 机械校核:高速机的加速度峰值关系到压辊、凸轮、导轨的载荷,是设备侧关心的量;
  3. 完整接口:单元类的运动学方法应当输出完整的 (t, Δy, v, a),让下游按需取用,而不是每次重新求导。

换言之,加速度是"接口完备性"的需要,不是"压缩力学"的主体。把这句话写进文档,可以避免后续读者误以为模型在解动力学方程。

二、完整代码与逐行剖析

下面这段代码可直接运行(无需 PharmaPy)。它实现了:三类剖面生成、切向速度计算、np.gradient数值微分、与解析导数对比验证、转速扫描、出图。

# -*- coding: utf-8 -*-""" 第 6 篇:冲头运动学——位移、速度与加速度的数值微分与切向速度 ================================================================= 说明:本脚本属于"直接压片单元模型开发教程"系列的二次开发示例,非任何官方 API。 位移剖面采用"平滑修正正弦类"示例参数化,仅用于演示数值微分流程; 真实压辊位移方程以 Rippie & Danielson 原文 / USP⟨1245⟩ 所引公式为准。 """importnumpyasnpimportmatplotlib matplotlib.use("Agg")# 无界面环境也可出图importmatplotlib.pyplotasplt# ----------------------------------------------------------------------# 1) 三类归一化位移剖面 p(τ),τ∈[0,1],约定 p(0)=0, p(1)=1# ----------------------------------------------------------------------defprofile_linear(tau):"""线性 saw-tooth:恒速推进,两端斜率不为 0(对应理想单冲机)。"""returnnp.clip(tau,0.0,1.0)defprofile_square(tau):"""方波:瞬时跳变(数学极限,现实中不可实现)。"""return(tau>=0.5).astype(float)defprofile_modified_sine(tau,n=2.0):"""平滑修正正弦类剖面:升余弦取幂。 - 两端导数均为 0(对应旋转机"最大位移附近速度趋近 0"的定性特征); - n 越大,曲线越"平顶",最大位移附近越平缓; - 注意:这是本系列的示例参数化,非唯一标准。 """tau=np.clip(tau,0.0,1.0)base=0.5*(1.0-np.cos(np.pi*tau))# 升余弦,两端速度为 0returnbase**ndefd_modified_sine_dtau(tau,n=2.0):"""平滑修正正弦类剖面的解析导数 dp/dτ,用于校验数值微分精度。"""tau=np.clip(tau,1e-12,1.0-1e-12)base=0.5*(1.0-np.cos(np.pi*tau))returnn*base**(n-1.0)*(0.5*np.pi*np.sin(np.pi*tau))# ----------------------------------------------------------------------# 2) 核心:由 rpm / PCD / 最大位移得到运动学四元组# ----------------------------------------------------------------------defpress_kinematics(rpm,pcd_mm,dz_mm,n=2.0,points=4001,compression_deg=60.0,profile="sine"):"""返回 dict:t(s), dy(mm), vy(mm/s), ay(mm/s^2), tv(mm/s)。 参数 ---- rpm : 转台转速 (min^-1) pcd_mm : 节圆直径 PCD (mm) dz_mm : 压缩阶段最大轴向位移 Δy (mm) n : 剖面形状指数 points : 采样点数 compression_deg: 压缩窗口占整圈的角度(示例值,非设备定值) profile : 'sine' | 'linear' | 'square' """omega=2.0*np.pi*rpm/60.0# 角速度 rad/st_cycle=2.0*np.pi/omega# 单圈周期 st_comp=t_cycle*(compression_deg/360.0)# 压缩窗口时长 st=np.linspace(0.0,t_comp,points)tau=t/t_compifprofile=="sine":dy=dz_mm*profile_modified_sine(tau,n)elifprofile=="linear":dy=dz_mm*profile_linear(tau)elifprofile=="square":dy=dz_mm*profile_square(tau)else:raiseValueError("profile 只支持 'sine' / 'linear' / 'square'")vy=np.gradient(dy,t)# 一阶数值微分:瞬时垂直速度ay=np.gradient(vy,t)# 二阶数值微分:加速度tv=np.pi*pcd_mm*rpm/60.0# 切向速度 mm/sreturn{"t":t,"dy":dy,"vy":vy,"ay":ay,"tv":tv,"omega":omega,"t_cycle":t_cycle,"t_comp":t_comp}# ----------------------------------------------------------------------# 3) 数值微分精度自检:np.gradient vs 解析导数# ----------------------------------------------------------------------defcheck_gradient_accuracy(rpm=50.0,pcd_mm=292.0,dz_mm=5.0,n=2.0,points=4001):res=press_kinematics(rpm,pcd_mm,dz_mm,n=n,points=points)t,vy=res["t"],res["vy"]# 解析垂直速度:dΔy/dt = Δy · (dp/dτ) · (dτ/dt),其中 dτ/dt = 1/t_compvy_exact=dz_mm*d_modified_sine_dtau(t/res["t_comp"],n)/res["t_comp"]err=np.max(np.abs(vy-vy_exact))rel=err/np.max(np.abs(vy_exact))print(f"[梯度自检] points={points}最大绝对误差={err:.6e}mm/s "f"最大相对误差={rel:.3e}")returnerr,rel# ----------------------------------------------------------------------# 4) 主流程# ----------------------------------------------------------------------defmain():# 4.1 Natoli NP-255 的 PCD=292 mm,扫转速看 TVpcd=292.0# mm(NP-255 官方样本)print("转速扫描(PCD=292 mm):")forrpmin(10,30,50,80,100):tv=np.pi*pcd*rpm/60.0print(f" rpm={rpm:3d}TV={tv:8.1f}mm/s ={tv/1000:5.3f}m/s")# 4.2 数值微分精度check_gradient_accuracy(points=4001)# 4.3 三类剖面的速度对比(同一 Δy、同一 rpm)fig,axes=plt.subplots(1,2,figsize=(11,4))forname,kwin(("sine",{"profile":"sine"}),("linear",{"profile":"linear"}),("square",{"profile":"square"})):r=press_kinematics(50.0,pcd,5.0,points=4001,**kw)axes[0].plot(r["t"]*1000,r["dy"],label=name)axes[1].plot(r["t"]*1000,r["vy"],label=name)axes[0].set_xlabel("时间 / ms");axes[0].set_ylabel("位移 Δy / mm")axes[1].set_xlabel("时间 / ms");axes[1].set_ylabel("垂直速度 / (mm/s)")axes[0].legend();axes[1].legend();axes[0].set_title("位移剖面")axes[1].set_title("速度剖面")fig.tight_layout();fig.savefig("fig06_profiles.png",dpi=130)print("已输出 fig06_profiles.png")# 4.4 不同转速下的峰值速度print("峰值垂直速度(sine, Δy=5 mm):")forrpmin(30,50,80,100):r=press_kinematics(rpm,pcd,5.0,points=4001)print(f" rpm={rpm:3d}v_peak={np.max(np.abs(r['vy'])):8.1f}mm/s "f" a_peak={np.max(np.abs(r['ay'])):12.1f}mm/s^2")if__name__=="__main__":main()

2.1 逐段剖析

(1)剖面层与运动学层解耦。profile_*只返回无量纲的 p(τ),press_kinematics负责把"角度域"翻译成"时间域"。这样做的好处是:将来要用真实 Rippie & Danielson 曲线替换剖面时,只要换一个profile_*函数,下游全部代码不动。

(2)np.gradient(dy, t)的第二个参数必须是 t。这是新手最容易忽略的一处:如果写成np.gradient(dy),numpy 会假定采样间隔为 1(秒),于是速度值直接缩小t_comp倍。在 rpm=50、压缩窗口 60° 时,t_comp = (60/50)/6 ≈ 0.2 s,即速度会被低估约 5 倍。反直觉默认值:numpy 不检查你这列数据的真实步长。

(3)链式法则用于精度自检。代码把vy_exact = Δy·(dp/dτ)/(t_comp)作为真值,这与np.gradient的结果应高度一致。在 4001 点下,最大相对误差通常在 1e-5 量级以下(该数值随采样点数与剖面形状变化,不作普适承诺)。这一步的价值是:在把速度送进压缩方程之前,先证明你的微分器没算错。

(4)切向速度只用一行。tv = π·pcd·rpm/60。注意它与 Δy 无关、与剖面无关——切向速度是纯设备量。这个"解耦"很重要:第 7 篇会看到,驻留时间 = 冲头头部平面长度 ÷ 切向速度,因此 dt 天然与配方的最大位移无关。

2.2 三类剖面的速度特征对比

剖面速度峰值位置最大位移处速度加速度特征建模用途
sine(修正正弦类)位移中段趋近 0连续、有界旋转机默认
linear全程恒定等于均值两端脉冲(无穷大)教学对照
square跳变瞬间—不可积极限边界

把这三条曲线画在一起(代码 4.3 节),你会立刻看到:sine 的速度是一条中间高、两端趋 0 的钟形曲线,而 linear 是一条水平线。这正是"旋转机为何利于排气"的可视化答案——排气需要时间,而 sine 剖面把"体积变化最慢"的那一段恰好安排在压力最高的时刻。

2.3 与设备参数的对接

代码 4.1 节用 NP-255 的 PCD=292 mm 做扫描,得到 TV 从 10 rpm 的 152.9 mm/s 到 100 rpm 的 1529 mm/s。把 Fette 3090i 的转速范围15–120 min⁻¹代进来,就能得到该机型的 TV 区间(其 PCD 未在底账登记,以 Fette 官方样本为准)。这一步说明:同一台机器,转速越高,切向速度越大,冲头在压辊下停留的时间越短——下一篇的核心自变量由此产生。

2.4 输出约定:给下游一个稳定的"契约"

运动学函数的返回值会成为后续所有模块的输入,因此必须先约定接口,再写实现。本篇建议的契约如下:

键含义单位约束
t压缩窗口内时间s单调递增、等间隔
dy冲头轴向位移mm单调不减、两端斜率→0
vy垂直速度mm/s由np.gradient(dy, t)得
ay加速度mm/s²由np.gradient(vy, t)得
tv切向速度mm/s标量,与 t 无关
omega转台角速度rad/sω=2π·rpm/60
t_cycle单圈周期s用于核对 rpm 换算

三条纪律:

  1. 键名带单位后缀。vy_mm_s比vy安全得多——它让"把 mm/s 当 m/s 用"这类错误在命名层就被拦下。
  2. 显式保存时间原点。以压缩窗口起点为 t=0,还是以转台某个参考角为 t=0,会导致整条曲线整体时移。做相位比较(例如"峰值压力出现在第几毫秒")时必须知道用的是哪一种。建议在返回字典中加一个t_offset字段。
  3. 不要把t_comp(压缩窗口时长)与dwell_ms(驻留时间)混用同一变量名。前者是本篇的量,后者是下一篇的量,二者相差数倍且定义不同。

三、常见报错与排查

现象 1:速度数量级明显偏小(差 5 倍、10 倍)。
根因:np.gradient(dy)未传入时间数组,numpy 默认步长 1。
解法:始终写成np.gradient(dy, t);并用 2.2 节的解析导数自检,相对误差应远小于 1%。

现象 2:加速度曲线两端出现巨大的尖峰。
根因:数值微分在边界处只能用单侧差分,精度降一阶;若位移序列首尾不满足平滑条件(如方波),误差会被二阶导放大。
解法:优先使用"两端导数趋 0"的平滑剖面;比较加速度时裁掉首尾各 1% 的采样点;如需保留边界精度,改用scipy.signal.savgol_filter做局部多项式拟合(见练习 2)。

现象 3:把 TV 当成垂直速度直接引用。
根因:混淆切向(周向)速度与垂直(轴向)速度。
解法:牢记v_vertical = TV·(dΔy/ds),二者仅在放大系数为 1 时相等。给同行汇报时必须注明是哪一个,否则 1 m/s 这类数字会被误读。

现象 4:单位混用(mm 与 m、s 与 ms)。
根因:PCD 常以 mm 给出,TV 却按 m/s 讨论;dt 常以 ms 给出。
解法:在函数签名里写死单位后缀(pcd_mm、dz_mm、t_s),并在输出字典键名上带单位。底账已提醒:kN 是力、MPa 是应力,单位混用是本领域的高频事故点。

现象 5:把修正正弦当成"唯一标准公式"。
根因:误把常见做法当作规范。
解法:凡涉及压辊位移显式表达式处,一律标注"以 Rippie & Danielson 原文 / USP⟨1245⟩ 所引公式为准";本篇代码中的剖面已在此声明。

现象 6:压缩窗口角度(compression_deg)随手填,导致曲线形状与真实机器不符。
根因:代码把它设成了一个可调参数,容易被当成"无害常数"。
解法:压缩窗口角度应由压辊几何决定(与压辊直径、冲头头部形状、PCD 相关),不是自由参数。在缺少官方几何数据时,应把它标注为"示例值",并在敏感性分析中报告"窗口角度变化 ±20% 对峰值速度的影响"。本篇不给出任何"标准窗口角度",因为没有底账来源。

现象 7:把 “1 m/s” 当成切向速度或当成所有机型的普适值。
根因:误读 USP⟨1245⟩ 的登记——“大型高速旋转压片机冲头垂直速度可达约1 m/s”。
解法:这句话限定词有三层:大型、高速、垂直。低速机远低于此;且它指的是垂直速度,不是切向速度。引用时保留全部限定词。

四、动手练习

练习 1(基础):复刻并验证一条速度曲线。
任务:用press_kinematics(rpm=60, pcd_mm=292, dz_mm=4.0, points=2001),画出速度曲线,并打印峰值垂直速度。
成功判定:np.gradient结果与解析导数的最大相对误差 < 1e-3;峰值速度随 rpm 从 30 增到 60 时,增长比例落在 1.8–2.2 倍之间(因 Δy 与窗口不变,理论上应≈2 倍)。

练习 2(进阶):用 Savitzky-Golay 替代原始差分。
任务:对同一位移序列,分别用np.gradient与scipy.signal.savgol_filter(dy, window_length=51, polyorder=3, deriv=1, delta=t[1]-t[0])求速度,比较两者的边界区误差。
成功判定:在中段(剔除首尾 5% 后)两者相对偏差 < 1e-2;在首尾 1% 区间,SavGol 的绝对误差不高于np.gradient。用表格给出两条结论。

练习 3(综合):把运动学接进 TabletPress 骨架。
任务:写一个最小类class TabletPress,构造入参为punch_d_mm, n_stations, pcd_mm, rpm,方法kinematics(dz_mm)返回本篇的字典;再写step()打印 TV 与峰值速度。
成功判定:对 NP-255(PCD=292、rpm=50)应打印 TV≈764 mm/s;对同一 Δy 把 rpm 改为 100,TV 应≈1529 mm/s(比值 2.00±0.01)。

五、小结与下一篇预告

本篇把"转台转角 → 冲头位移 → 速度 → 加速度"这条链条打通:切向速度TV = π·PCD·rpm/60是纯设备量,垂直速度v = TV·(dΔy/ds)由设备与冲头几何共同决定,而数值微分必须显式传入时间数组。我们还确认了两条权威定性事实:旋转机在最大位移附近速度趋近 0(利于排气),大型高速机冲头垂直速度可达约 1 m/s(USP⟨1245⟩)。

本篇留下的三条可复用结论是:(一)坐标系要分层——角度域与时间域分开,剖面函数与转速无关;(二)单位要进名字——函数与字典键名都带单位后缀,把量纲事故挡在命名层;(三)自检要前置——用解析导数验证数值微分器,再把它交给下游。这三条不是运动学专属,它们会贯穿整个TabletPress单元类的开发。

运动学本身不预测质量属性,但它是驻留时间的直接上游——这就是第 7 篇的主题:dt(ms) = (D_hf×60×1000)/(D_pc×π×rpm),以及 17 ms(Natoli NP-500@50rpm)、7–33 ms(Fette 1200i)、12.5 ms(XL400@60 min⁻¹)这些真实锚点。运动学给出的 Δy(t) 与峰值速度,也将在**第 13 篇(预压与主压双辊模型)里作为压缩速率边界条件,在第 18 篇(转速放大与驻留时间归一化)**里作为两步归一化的输入。


本篇认知问题回显(FAQ)

Q1:冲头瞬时速度为什么用位移曲线求导,而不是直接测量?
A:因为位移是可直接、低噪声测量的量(编码器/位移传感器),而速度=位移曲线斜率 d(Δy)/dt(伍善根、沈震),对位移做数值微分即可获得瞬时速度,避免对高噪声的速度信号直接采样。

Q2:切向速度与垂直速度是同一个量吗,PCD 起什么作用?
A:不是;切向速度 TV = π·PCD·rpm/60 是冲头沿节圆的周向线速度(纯设备量),垂直速度 v = TV·(dΔy/ds) 还需乘以位移曲线沿圆周的斜率,PCD 是二者换算的几何基准。

Q3:为什么旋转压片机在最大压力附近速度趋近 0,而单冲机斜率仍大?
A:旋转机位移曲线在最大位移 Δy 附近斜率趋近 0,即最大压力附近单位时间体积变化缓慢,利于排气与成型;单冲机在该位置斜率仍较大,气体来不及排出(伍善根、沈震)。

Q4:np.gradient 做数值微分的反直觉默认值是什么?
A:不传第二个参数时它默认采样步长为 1,会把速度整体缩放,故必须写成 np.gradient(dy, t);此外边界用单侧差分精度低一阶,加速度在两端易出现尖峰。

Q5:修正正弦位移曲线是唯一标准吗?
A:不是;修正正弦近似属常见做法、不得当作唯一标准,压辊位移显式方程未检索到原文,具体公式必须以 Rippie & Danielson 原文 / USP⟨1245⟩ 所引公式为准。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询