频率没变,波形为什么变了?

固定重复的节奏,再改变一轮里亮起的部分。从一条可操作的方波出发,把频率、周期和占空比分清楚。

PWM控制原理数学示意

示例创作稿:用于讲解概念,代码和数值为演示,不作为真实开发经历或硬件实测记录。

从固定 100 Hz 的网页实验开始,将占空比从 35% 调到 60%。画面里的高电平部分变宽了,方波却仍然以相同的节奏重复。第一次看这种变化,很容易觉得“信号更快了”;仔细数一数完整周期,才会发现,变的其实是另一件事。

这篇示例文章从网页里的归一化波形讲起,只讨论理想周期信号的数学表达。文中的参数不是舵机、电机或其他器件的推荐驱动条件,也不代表任何板卡已经输出了这些波形。把图看明白,是理解真实系统的起点;真实系统还有自己的边界。

先找一轮,别急着看整张图。

观察周期信号时,先找两个相邻、相同方向的边沿。例如,从一次上升沿到下一次上升沿,这段时间就是一个周期 T。它包括高电平和低电平两部分,不能只把较亮的那一段当成整轮。图形换了颜色、线条变粗,或者画面缩放了,周期的定义都不变。

频率 f 描述单位时间内重复多少次,周期描述一次重复需要多久,两者满足 T = 1 / f。频率以 Hz 表示时,周期先得到秒,再按需要换算成毫秒。100 Hz 对应 0.01 秒,也就是 10 ms;这个例子只是方便心算,和某个硬件的适用范围无关。

0 ms10 ms20 ms30 ms高电平 3.5 ms / 周期 10 ms
数学示意:同一周期中的高、低电平。纵轴使用归一化 0 / 1,不指认硬件电压。

原创观察提示:先指出“一整轮”在哪里,再谈它有多宽、有多快。

写给实践时的自己

占空比,说的是这一轮怎样分配。

占空比 D 是高电平持续时间与完整周期的比值。写成公式,就是 D = t_high / T。输入界面通常用百分数,计算时则常用 0 到 1 的比例。35% 对应 0.35,而不是把 35 直接代入乘法。单位与表达方式先约定好,才能避免看起来合理、数值却差一百倍的错误。

仍以 100 Hz 为例,周期保持 10 ms:35% 对应 3.5 ms 高电平,60% 对应 6 ms 高电平,剩下的部分是低电平。占空比变大,高电平在每轮里占的份额增加;重复次数没有因此变化。反过来,保持 35% 而增加频率,每轮更短,高电平时间也会一起缩短。

javascript
// 纯数学换算。浏览器或 Node.js 中运行,不访问硬件。
function describePwm(frequencyHz, dutyPercent) {
  if (!Number.isFinite(frequencyHz) || frequencyHz <= 0) {
    throw new RangeError('频率必须是大于 0 的有限数值');
  }
  if (!Number.isFinite(dutyPercent) || dutyPercent < 0 || dutyPercent > 100) {
    throw new RangeError('占空比必须在 0% 到 100% 之间');
  }
  const periodMs = 1000 / frequencyHz;
  const highMs = periodMs * dutyPercent / 100;
  return { periodMs, highMs, lowMs: periodMs - highMs };
}

describePwm(100, 35); // { periodMs: 10, highMs: 3.5, lowMs: 6.5 }

一次只改一个量,变化才有方向。

比较两个量时,先固定其中一个会更容易理解。当前网页的 PWM 实验固定 100 Hz,只开放占空比滑块,可以直接比较一轮内部的分配。固定占空比、改变频率则是另一组计算练习:把不同频率代入上面的函数,比较时间尺度。每次计算前,先用一句话预测结果,再核对数字和图形。

比较时还要保持横轴尺度一致。假如界面永远自动铺满两个周期,不同频率可能看起来完全一样;假如时间窗口固定,频率改变时就会出现不同数量的周期。两种画法都可以使用,但必须告诉读者横轴在表示什么。图形怎样排布,也会影响我们怎样理解数据。

  • 在当前 PWM 实验中,把占空比从 35% 改为 60%,核对周期仍为 10 ms。
  • 作为代码计算练习,固定 35%,给函数传入不同频率,比较周期和高电平时间;网页未提供频率滑块。
  • 使用网页复位按钮回到 35%,确认恢复的是演示参数,不是某个真实设备。

边界值,也应该讲清楚。

在理想数学模型中,0% 可以画成始终为低,100% 可以画成始终为高。这时图上没有普通方波的交替边沿,因此不能像中间占空比那样靠数上升沿估计周期。界面仍可保留配置的频率值,但需要分清“参数定义”与“当前画面能观察到的重复边沿”。

绘图还要处理时间和像素的区别。屏幕每秒能显示的画面有限,不能为了表现较高的信号频率,让整块页面按真实频率闪烁。更合适的方式是静态展示周期结构,让扫描线或参数过渡使用舒适的动画节奏。减少动态效果时,停掉扫描,也不应该失去读数与操作能力。

回到项目,图与硬件之间还差几步。

从数学关系到真实输出,仍需要确认定时器或输出模块能力、时钟与分频、分辨率、逻辑电平、输出使能方式,以及连接对象允许的范围。对舵机而言,实际控制条件必须核对具体型号资料和标定结果;不能因为网页里某个滑块可以拖动,就把它当作器件的安全区间。

所以这条小波形先做一件事:帮我们把频率、周期、占空比与脉宽分别说清楚。理解之后,再带着明确的问题读资料、查工程、做测量。TRACE 的简化控制表达和 STRIDE 的控制链路都可以从这里继续,但它们的真实输出仍要由各自的工程条件决定。

写下来,是为了下一次更快找到线索。

返回文章列表

想去哪里?

22 个入口

首页作品作品展厅全部项目文章总览文件夹标签资料归档关于认识 Lan探索路线工具与工作台最近在做InkFeed · 4.2 英寸电子纸信息终端VIBRATION · 柔性振动检测与采集链路TRACE · 航向保持与灰度循迹小车STRIDE · 八自由度四足机器人SCOPE · 固件日志浏览器温度为什么被 AI 改了?FIFO 有半帧,就一定是故障吗?直线守航向,弧线再看黑线。

Tab 选择入口 · Enter 打开 · Esc 关闭