# 八个实验

我们先按顺序完成直线板的实验，再换编码器。前五个实验可以围绕同一套直线平台进行；没有硬件时，先做实验 0。

自己制作板卡时，先按 [嘉立创裸 PCB 下单](PCB-Ordering.md) 补齐并核对制造文件，再下单 HallPos 裸板、备齐电子元件，随后按 [手工焊接](Hand-Soldering.md) 装配和检查。现有 PDF 不能直接下单，Gerber、钻孔及可核对的 BOM 尚未齐备；确认设计前不填写猜测的制板参数。已有成品板可跳过制作，仍需完成实验 1 的检查。

其余材料按 [复刻准备](Replication-Checklist.md) 备齐：Φ10 × 3 mm 轴向充磁磁铁、Φ6 × 3 mm 径向充磁磁铁各一颗和 USB 转 RS485 模块；测试结构可打印机械目录中的 HALLPOS、ENCODER 两个 STEP 模型。

## 实验 0：移动磁铁，看数据变化

在主页选直线模式，把磁铁从 −15 mm 慢慢拖到 +15 mm，观察三路曲线的峰值顺序。停在 0、5、10 mm，比较毫米和米，再运行离线 Python 示例。

这里先用网页里的理想模型观察信号：离磁铁近的传感器通常响应更明显，多个不同位置的传感器能提供更多信息。只留中间一颗时，左右对称位置可能产生相似电压。

试着解释 5 mm = 0.005 m，以及为什么单颗霍尔电压不能唯一决定磁铁在哪一侧。

## 实验 1：直线板第一次上电

自焊板先完成 [焊后检查](Hand-Soldering.md)，不要焊完就直接接电。再对照 [硬件接线](Hardware-Guide.md) 找到 HallPos 上的 U1/U2/U4、U3、U6、U7、U5 和 CN1，按下面顺序首次上电；成品板也从断电查线开始：

1. 断电核对 U5：1=5V、2=GND、3=485_A、4=485_B。按图纸确认插头朝向，固定脚不作通信使用。
2. 用限流电源上电，测量 5 V 输入和 3.3 V 电源，记录实际电流。工程没有可直接采用的整板典型电流值。
3. 先接一块板，用短线和自动收发 USB-RS485 适配器，共用参考地。端接与偏置结合实际总线确认；USB-TTL 的 TX/RX 不能当作 A/B。
4. 空白板或固件不明时，先 [编译与烧录](Build-and-Flash.md)；已有固件后发送 `GET_INFO`，检查应答和 CRC。

记录板卡构型、版次、供电、电流限制、静态电流、转换器型号和接线照片。检查完成后，应能在图纸上指出外部 5 V 怎样变成 MCU 和 ADC 使用的 3.3 V。

## 实验 2：只看三路原码

先固定 PCB，再让磁铁沿导向移动，保持高度和姿态。手持磁铁同时改变几个量，很难判断变化来自哪里。

1. 移远磁铁，记录三路静态 ADC。
2. 用参考尺选几个位置，每处停稳后记录原码；正向、反向各走一次。
3. 改变一次气隙，重测几个点，比较曲线。

三路应有响应且没有明显削顶。一路持续接近 0 或 4095 时，先查接线和磁路。这里的原码仍是 12 位：64 倍过采样后右移 6 位，没有变成 18 位。

## 实验 3：输出毫米

先读 `GET_INFO`。固件默认角度模式，直线 PCB 也要检查类型；切换到 `profile=2` 时会清除旧校准和零点，不必每次采样重复设置。

1. 按 [直线基线](Calibration-and-Measurement.md#直线基线) 拿开磁铁校准，再把磁铁放回固定气隙的工作区。
2. 先以 U2 对应位置作参考原点，在 −10、−5、0、5、10 mm 等位置比较输出。
3. 记录磁铁、气隙和 σ，用一组位置选参数，换另一组位置检查误差。

确认方向和单调性，知道 100 个输出计数代表 1 mm。软件内部限幅约 ±15 mm，实际可用范围要靠参考尺比较；设零点不能修正全行程误差。

若把单个磁铁换成周期磁条，原有高斯比值公式还缺哪些信息才能确定绝对位置？

## 实验 4：通过协议读位置

对照 [协议](Protocol-Reference.md) 看一帧 `GET_DATA`，找到帧头、长度、SRC/DST、状态和 CRC。然后用 [串口示例](../software/examples/README.md) 操作：

1. 记录实际 profile、原始位置整数、米单位和主机接收时间。
2. 固定磁铁，连续读几帧；移到另一处，再观察响应。
3. 拔掉通信线，确认程序报告超时，不把上一帧继续当成新位置。

同一个整数 1000，在直线模式表示 10 mm，在角度模式表示 10°。主机接收时间含通信和调度延迟，20 ms 上报参数也不是 ADC 采样周期。

## 实验 5：改成旋转编码器

先画出 HallPos 的三点直线排列，再对照 [PCB 与机械](PCB-and-Mechanics.md) 看 Encoder 的布局和磁铁安装。保留的是 5 V→3.3 V 供电、MCU、三路采样、DMA、RS485 和上位机；改变的是空间排列、磁铁运动、轴心和气隙要求、计算公式与单位。

换好旋转硬件后：

1. 选择角度 `profile=1`，不接电机，手动慢转，检查三路原码和相位。
2. 发送 `CAL_BEGIN`，保持安装关系并转满至少一圈，再发 `CAL_END`。
3. 检查角度变化和方向，重新设机械零位；不能复用直线基线和零点。

观察一圈中的周期变化，并重复回到零位。如果磁路每机械圈有 p 个电气周期，想一想 p>1 时为什么会产生机械位置歧义。

## 实验 6：回绕和误差

在 0°/360° 附近慢转并记录相邻角度。用最短有符号角差处理，359° 到 1° 是正向 2°，不应变成反向 358°。

然后选几个已知参考角，进行一下正转、反转和重复回零测试。按 [测量方法](Calibration-and-Measurement.md) 分别报告编码单位、参考器具误差、静态噪声、测量误差和重复性。0.01° 是编码单位；曲线光滑也可能有固定偏差。

与直线版对照：直线估计会限幅，角度会周期回绕。主机累计圈数依赖连续采样，丢帧、高速旋转和断电都可能使累计失效。

## 实验 7：对应到机器人机构

按 [机器人接入](Robot-Integration.md)，先记录滑台或夹爪，再记录旋转关节：

- 直线：磁铁在运动件、PCB 在静止件，标明方向、零点和位移与夹爪开口的关系。
- 旋转：说明测在电机轴还是减速器输出端，记录传动比、方向和零点。
- 数据：统一为 m / rad，保留主机接收时间，定义超时与异常状态处理；类型变化后不能混入旧单位数据。

手动走完整个候选行程，检查方向、限位、回绕和数据间隔。让同伴按记录再做一次，再讨论电机控制。ROS 2 节点是后续扩展作业。

## 实验记录

下面字段可复制到 CSV，一行对应一次停稳采集：

```csv
trial,board_revision,profile,magnet,air_gap_mm,reference_value,reference_unit,raw_u1,raw_u2,raw_u4,reported_count,reported_unit,flags,host_receive_time,approach_direction,notes
```

先写测试点、器具、重复次数、允许误差和异常处理，再填数据。保留原码、状态位和未平滑的数据，方便复查。
