# 原理、结构与代码讲解动画

先看直线版的装配，再转一下旋转版的载体，对照三条完整响应曲线。后面的短片继续讲信号怎样变成位置、基线与零点，以及程序怎样处理数据；都可以单独下载，放进项目视频或配合实验来看。

下面 03–08 六段是带画面字幕的无声动画，另附 SRT 和网页使用的 VTT；其中 05、06 是固定与运动关系的功能示意。新版 09、10 使用这次补充的完整装配 STEP，包含 PCB、电子元件和测试结构。代码说明仍依据本仓库 **2026-10-27 的固件快照**；画面中的信号数值是教学示例。

<div id="anatomy"></div>

## 交互讲解：装配模型与完整曲线

三维图使用 `HALLPOS/model` 中提供的两份装配模型，保留原来的形状、孔位、毫米坐标和表面颜色。现在能看到 PCB、三颗霍尔、接口和测试机构。拖动模型换一个方向看，点击 PCB、结构或载体按钮对照部件；“分开看”便于看内部，“原始位置”恢复源文件姿态。

旁边保留磁铁运动示意和三路完整响应曲线。调整滑条、点击曲线或按方向键，载体运动、游标、三个曲线点和读数一起更新。显示的是动画设定位置或角度，**不是串口读数或固件解算结果**。建议通过本地服务打开页面，首次进入时等待模型加载完成。

### 先看直线这款

PCB 和导向底座固定，滑动载体沿真实导向移动。零位取槽中心在 U2 封装中心方向上的投影，便于把结构和信号对起来；它只是几何参考，实际零点仍要装配后设置。

模型保留了槽位与器件之间约 0.30 mm 的横向偏移。动画把滑动范围限制在约 −12.11 到 +15 mm，曲线仍展开 −15 到 +15 mm，便于比较三路响应。这个范围不是经过测试的测量量程。模型槽径约 Φ10.2 mm，与项目 Φ10 × 3 mm 轴向磁铁的规格应结合打印配合再核对。

[打开装配与曲线（浅色）](../media/animation/anatomy/linear/index-light.html) · [深色版](../media/animation/anatomy/linear/index.html) · [模型与使用说明](../media/animation/anatomy/README.md)

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/anatomy/09-linear-anatomy-preview.png" aria-label="直线完整装配与三路理想响应曲线">
<source src="../media/animation/anatomy/09-linear-anatomy.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/anatomy/09-linear-anatomy.vtt" srclang="zh" label="中文讲解" default>
</video>

[20 秒 MP4](../media/animation/anatomy/09-linear-anatomy.mp4) · [配音字幕 SRT](../media/animation/anatomy/09-linear-anatomy.srt) · [结构与生成源](../media/animation/anatomy/linear/README.md)

### 再看旋转这款

固定支架、PCB 和电子元件保持不动，只让中心的转动载体绕轴旋转。和直线版相比，电路仍是三路采样，磁铁安装、运动方式与角度模型发生了变化。

三路曲线按相差 120° 的理想余弦响应显示。载体在源 STEP 中的姿态作为展示起点，不代表已经找到了磁极方向或机械零点。源模型没有独立磁铁实体，Φ6 × 3 mm 径向磁铁还需实际安装，再检查气隙、相位和一圈校准。

[打开装配与曲线（浅色）](../media/animation/anatomy/rotary/index-light.html) · [深色版](../media/animation/anatomy/rotary/index.html) · [模型依据](../media/animation/anatomy/MODEL.md)

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/anatomy/10-rotary-anatomy-preview.png" aria-label="旋转完整装配与三路理想响应曲线">
<source src="../media/animation/anatomy/10-rotary-anatomy.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/anatomy/10-rotary-anatomy.vtt" srclang="zh" label="中文讲解" default>
</video>

[20 秒 MP4](../media/animation/anatomy/10-rotary-anatomy.mp4) · [配音字幕 SRT](../media/animation/anatomy/10-rotary-anatomy.srt) · [结构与生成源](../media/animation/anatomy/rotary/README.md)

## 先看六段合集

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/theory/03-signal-chain-preview.png" aria-label="原理、结构与代码六段讲解合集">
<source src="../media/animation/explainer-collection.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/explainer-collection.vtt" srclang="zh" label="中文讲解">
</video>

[下载合集 MP4](../media/animation/explainer-collection.mp4) · [合集字幕 SRT](../media/animation/explainer-collection.srt) · [章节时间](../media/animation/lesson-chapters.json)

## 03 · 从霍尔电压到位置数据

先看三颗霍尔输出的模拟电压。ADC 顺序扫描三路，DMA 持续更新缓冲区，程序读取后再做位置计算和通信。64 次过采样平均后，输出仍按 12 位使用。图里的数据流是分段讲解，不表示 CPU 按画面依次启动 ADC 和 DMA，也不表示三路是同一瞬间采到的。

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/theory/03-signal-chain-preview.png" aria-label="从霍尔电压到位置数据">
<source src="../media/animation/theory/03-signal-chain.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/theory/03-signal-chain.vtt" srclang="zh" label="中文讲解">
</video>

[MP4](../media/animation/theory/03-signal-chain.mp4) · [SRT](../media/animation/theory/03-signal-chain.srt) · [源码与依据](../media/animation/theory/README.md) · [采样说明](Firmware-Architecture.md)

## 04 · 基线校准和机械零点

直线模式先拿开磁铁，采每一路的无磁场基线；放回磁铁后，分别扣除各自基线。随后选好参考位置，再设置机械零点。基线处理电气偏置，零点改变坐标原点，两者都不能替代全行程的误差测试。

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/theory/04-calibration-zero-preview.png" aria-label="基线校准和机械零点">
<source src="../media/animation/theory/04-calibration-zero.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/theory/04-calibration-zero.vtt" srclang="zh" label="中文讲解">
</video>

[MP4](../media/animation/theory/04-calibration-zero.mp4) · [SRT](../media/animation/theory/04-calibration-zero.srt) · [源码与依据](../media/animation/theory/README.md) · [校准步骤](Calibration-and-Measurement.md)

## 05 · 直线这款，哪些固定、哪些跟着动

PCB 和三颗霍尔固定，磁铁跟着滑块移动。通过导向尽量保持磁铁姿态和气隙不变，再看它怎样经过三个测点。直线版用 Φ10 × 3 mm 轴向充磁磁铁；图中间隙和尺寸比例只是示意，实际打印结构仍以 STEP 和装配检查为准。

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/structure/05-linear-structure-preview.png" aria-label="直线结构固定与运动关系">
<source src="../media/animation/structure/05-linear-structure.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/structure/05-linear-structure.vtt" srclang="zh" label="中文讲解">
</video>

[MP4](../media/animation/structure/05-linear-structure.mp4) · [SRT](../media/animation/structure/05-linear-structure.srt) · [源码与依据](../media/animation/structure/README.md) · [PCB 与机械](PCB-and-Mechanics.md)

## 06 · 旋转这款，对中和气隙怎么安排

再看旋转版：PCB 保持固定，径向充磁磁铁跟着轴一起转。装配时核对旋转中心、磁铁姿态和实际气隙，然后再看三路波形和角度。旋转版用 Φ6 × 3 mm 径向充磁磁铁；动画没有提供公差或保证可用的气隙数值。

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/structure/06-rotary-structure-preview.png" aria-label="旋转结构对中与气隙">
<source src="../media/animation/structure/06-rotary-structure.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/structure/06-rotary-structure.vtt" srclang="zh" label="中文讲解">
</video>

[MP4](../media/animation/structure/06-rotary-structure.mp4) · [SRT](../media/animation/structure/06-rotary-structure.srt) · [源码与依据](../media/animation/structure/README.md) · [机械对比](PCB-and-Mechanics.md)

## 07 · 同一套采样，分成两种解算

这里直接跟着 `main.c` 的真实摘录看：初始化以后，主循环读取当前测量类型，选择直线或角度分支，再处理协议。ADC 和 DMA 初始化后持续工作；主循环不是每转一圈才重新启动采样。高亮按讲解顺序放慢，省略的行会在画面标明。

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/code/07-main-loop-preview.png" aria-label="主循环代码逐步高亮">
<source src="../media/animation/code/07-main-loop.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/code/07-main-loop.vtt" srclang="zh" label="中文讲解">
</video>

[MP4](../media/animation/code/07-main-loop.mp4) · [SRT](../media/animation/code/07-main-loop.srt) · [源文件 SHA 与行号](../media/animation/code/source-references.json) · [主程序](../software/firmware/src/main.c) · [动画源码](../media/animation/code/README.md)

## 08 · 一次 RS485 查询怎么走

主机发出请求，串口中断接收字节并写入缓冲区，主循环再拼帧、校验和处理命令。通过检查且需要应答时，设备切换方向发送，再回到接收。CRC 错误的帧会静默丢弃；合法本机命令中的错误，还要按协议状态码处理，不能把所有错误都理解成同一种行为。

<video class="lesson-video" controls playsinline preload="none" poster="../media/animation/code/08-rs485-query-preview.png" aria-label="RS485 查询应答与错误帧处理">
<source src="../media/animation/code/08-rs485-query.mp4" type="video/mp4">
<track kind="subtitles" src="../media/animation/code/08-rs485-query.vtt" srclang="zh" label="中文讲解">
</video>

[MP4](../media/animation/code/08-rs485-query.mp4) · [SRT](../media/animation/code/08-rs485-query.srt) · [源文件 SHA 与行号](../media/animation/code/source-references.json) · [协议参考](Protocol-Reference.md) · [动画源码](../media/animation/code/README.md)

## 放进自己的视频

实物镜头和这些片段交替使用即可：拍完移动或转动测试，插入对应结构和信号动画；讲程序时再插入主循环和协议流程。SRT 可直接导入剪辑软件，按自己的语速重录旁白，再调整片段长度。前两段简短的运动动画仍保留在 [素材目录](../media/animation/README.md)。

网页用本地 MP4 播放，字幕文字也已绘在新片中。外置 VTT 轨在通过 HTTP 打开的站点使用；直接打开本地文件时，浏览器可能限制外置字幕加载，此时仍能看到片内文字。原生 GitHub Wiki 导出后提供 Pages 播放入口和下载链接。
