简介:面向电子工程、自动化与机器人入门学习者的山东大学崇新学堂EECSdesignlab7实验报告,围绕为机器人构建可循光并转动颈部追踪光源的头部任务,系统整理电路原理、仿真验证与硬件搭建要点。文档从电路原型工具、万用表与电源箱的使用讲起,延伸到分压器、电位器和电路仿真工具的操作,再结合光敏电阻组成的光感电路,说明机器人“眼睛”的信号采集与转颈追踪思路,并给出机械结构与电路联调的实验记录。压缩包仅含1个docx文档,约578KB,内容集中、便于按实验环节查阅。已有98人学习,适合用作课程实验预习、过程复盘和报告撰写参考,也可帮助读者建立从基础测量、电路仿真到光感系统实现的完整认识,并训练基本的动手能力与工程思维。
1. 一只会追光的机器人头:这套 EECS design lab 真正要交的是什么
如果你拿到的 EECS 入门实验题目是「让机器人头部用两只眼睛找到光,再转过去追它」,第一反应多半是去写控制代码。但真正卡住人的往往不是代码,而是那只眼睛在环境光下只输出 3.68V、灯一照变成 5.93V,中间只有 2.25V 的摆幅,连个像样的阈值都划不出来。这套 design lab 的交付物其实是一条从电路仿真到实物标定的完整链路:先在 CMax 里把分压器、电位器、光敏电阻电路跑通,再在原型板上用万用表逐个节点核对,最后把左右两路电压送进机器人的模拟输入,用旋转扫描出来的数据反推转向策略。它适合正在做电路与传感方向课程设计、需要一份能照着复现的完整流程的人,也适合带实验的助教拿去当检查清单。
2. 实验链路与工具链:从 CMax 仿真到原型板的四段推进
这套实验看着是「搭个电路让机器人追光」,实际上四段之间的产物是层层消费的关系:前一段的读数不准,后一段的曲线就没有解释价值。我一般会先把整条链路的边界画清楚,再去动烙铁和面包板,否则很容易出现「仿真很漂亮、实物一塌糊涂,但不知道从哪一段开始错的」这种局面。
2.1 供电基准与原型板接线:先把 10V 固定下来
第一步不是画电路,是建立供电基准。电源面板上标着 +15V 和 GND 的两个端子,用鳄鱼夹引到独立原型板的两条电源轨上。鳄鱼夹和原型板之间用短于 1 英寸的硬导线过渡,导线拉太长会引入接触电阻,后面测 100 Ω 负载电压时误差就藏在这段线里。电源那一头不用拧螺丝,直接把夹子的一个「颚」插进端子中心孔就行,反复拧端子容易把塑料件拧裂。
万用表打到直流电压档,表笔同样经短导线接到两条电源轨,开机后调正电源旋钮,把读数压到 +10.0V。这个数值不是随便定的,后面所有分压公式的分母都以它为基准,包括光敏电阻电路里期望的 3.68V 和 5.93V。电源飘到 10.3V,所有读数按 3% 等比偏移,你会在两小时后花大量时间去找一个「仿真 5.93V、实测 6.1V」的伪问题。
注意:调完电压后确认旋钮已经锁住,每换一次板子布局就复测一次轨电压。这一步看着多余,但它是后面所有对照表能不能成立的前提。
2.2 CMax 仿真:先拿一个已知答案的样例校准工具
CMax 的启动方式有两种:在带图形界面的环境里打开 CMax.py 直接 Run Module;在 Linux 或 macOS 上进入 CMax.py 所在目录,执行python CMax.py。启动之后先按 Ctrl+A,弹出窗口会显示版本号 1.5.2。看版本这一步不要跳,元件库和探针的默认行为在版本之间会有差异,拿旧界面对照新菜单会浪费很多时间。
然后 File > Open 打开 mystery.cmax,照着窗口里的电路把原理图画一遍,把两个探针分别夹在接地轨和 J42 节点上,再选 Sim > Run Simulation,弹窗会给出这两个节点之间的电压。手算很简单:两个 1 kΩ 电阻串联跨在 10V 上,中点对地就是 5V。仿真给出的也是 5V,两边对上。
这一步的价值不在算对 5V,而在于你先在一个有标准答案的样例上验证了工具本身。CMax 对初学者就是一个黑匣子,你不确认它算得对不对,后面它吐出任何数字你都只有「信」和「不信」两个选项,没有第三个选项叫「知道为什么」。
2.3 四段推进与交付物边界
把整条链路切成四段之后,每一段都有明确的通过标准,出了问题能立刻定位到段,而不是全盘重来。下面这张表是我带这类实验时贴在墙上的版本:
| 阶段 | 主要输入 | 产出 | 通过标准 |
|---|---|---|---|
| A 工具链校准 | 电源、万用表、CMax 1.5.2 | 10.0V 轨电压、mystery.cmax 的 5V 读数 | 手算与仿真差值为 0 |
| B 分压与电位器 | 1 kΩ / 100 Ω / 10 kΩ 电阻、5 kΩ 电位器 | 级联分压实测值、电位器带载对照表 | 实测与理论偏差小于 5% |
| C 光传感设计与布局 | 两只光敏电阻、两个 8 针连接器 | VL、VR、VL−VR 三条仿真曲线 | 曲线随光源横移单调变化 |
| D 实物与数据采集 | 机器人、soar、eyeDataBrain | 三条实测曲线、一套转向策略 | 实测曲线与仿真趋势一致 |
A 段和 B 段是纯电路,失败了可以重来,代价是几分钟。C 段和 D 段牵扯机械安装和机器人通信,失败一次要重新拆装头部,代价是半小时。所以合理的顺序是把所有电路问题在 A、B 段解决干净,C、D 段只留机械和软件的变量。
3. 分压器与电位器:级联失效和负载效应的两笔定量账
分压器是这套实验里唯一一个「公式一行、坑一大堆」的模块。课本上写 Vo = Vin × R2/(R1 + R2),看起来人畜无害,但只要你想把两个分压器串起来用,或者把电位器当成可调电压源去带负载,读数立刻就不听话了。这两件事背后的原因其实是同一个:你把一个有内阻的节点当成了理想电压源。
3.1 二分压级联为什么拿不到四分之一
先用 10V 供电、两个 1 kΩ 电阻做一级分压,中点对地是 5V,这没问题。直觉上再串一组 1 kΩ 和 1 kΩ,就应该得到 2.5V。实际搭出来量一下,是 2.0V。差的那 0.5V 不是万用表坏,是第二级「看见」的不只是 5V,还看见了第一级的输出阻抗。
把第一级从中间节点往左看,等效成一个 5V 电压源串联一个电阻,这个电阻就是两个 1 kΩ 并联的结果,500 Ω。第二级的两个 1 kΩ 串起来挂在中间节点和地之间,输入阻抗是 2 kΩ。500 Ω 对上 2 kΩ,只差 4 倍,远谈不上「远大于」,于是第二级一边取电压一边把第一级的中点往下拽。
# 两级二分压级联的真实输出:验证「不能简单乘 1/4」 V_IN = 10.0 R1 = R2 = R3 = R4 = 1_000.0 # 第一级:R1 在上、R2 在下,取中间节点电压 v_mid = V_IN * R2 / (R1 + R2) # 从中间节点往左看的戴维南等效内阻 = R1 与 R2 并联 r_th = R1 * R2 / (R1 + R2) # 第二级 R3 串 R4 接在中间节点与地之间,注意 r_th 要一起参与分压 v_out = v_mid * R4 / (r_th + R3 + R4) print(f"第一级中点 {v_mid:.2f} V,输出阻抗 {r_th:.0f} Ω,级联后 {v_out:.2f} V") # 输出:第一级中点 5.00 V,输出阻抗 500 Ω,级联后 2.00 V运行结果是 5.00V、500Ω、2.00V。理想情况的四分之一应该是 2.50V,实际偏低 20%,偏差全部来自那 500 Ω 的输出阻抗。这个数字很重要:如果老师问「级联能不能得到四分之一」,答案是不能,而且你能报出偏离多少。
想让级联近似成立,第二级的输入阻抗至少要到第一级输出阻抗的十倍以上,也就是 5 kΩ 起步、50 kΩ 更稳。把电阻全换成 100 kΩ 当然可以,但阻值一大,万用表和板子的漏电流就开始说话。工程上的标准答案是加一级缓冲,用运放做电压跟随器把输出阻抗压到接近零,这就是后面课程里运放登场的前置伏笔。
3.2 电位器的 α 与负载电阻的拉扯
电位器是三端器件,两端分别接 10V 和地,中间抽头对地的电压由轴角决定。设抽头位置比例为 α,那么抽头到地的电阻是 α·R_pot,抽头到电源端的电阻是 (1−α)·R_pot,空载时输出就是 10 × α。手上这只蓝色电位器标称 5 kΩ,把抽头调到对地 2.0V,对应的 α 就是 0.2,此时下半段 1 kΩ、上半段 4 kΩ。
麻烦出现在带负载的时候。保持 α = 0.2 不动,在抽头与地之间挂一个 100 Ω 电阻,量出来的电压只有 0.21V,而不是 2.0V。换成一个 10 kΩ 电阻,读数变成 1.81V,掉得不多但也没回到 2.0V。这两个数字都能用手算复现,关键在于先算戴维南等效内阻:1 kΩ 与 4 kΩ 并联是 800 Ω。
# 电位器带载后的实际输出:先求戴维南等效,再算分压 V_OPEN = 2.0 # 空载时调到的抽头电压 R_LOW = 1_000.0 # 抽头到地:α × 5k,α = 0.2 R_HIGH = 4_000.0 # 抽头到电源端:(1-α) × 5k r_th = R_LOW * R_HIGH / (R_LOW + R_HIGH) # 输出阻抗 = 800 Ω for r_load in (100.0, 10_000.0): v = V_OPEN * r_load / (r_th + r_load) print(f"负载 {r_load:>6.0f} Ω -> 理论 {v:.3f} V") # 负载 100 Ω -> 理论 0.222 V # 负载 10000 Ω -> 理论 1.852 V理论值和实测的对照如下,偏差在 5% 以内,主要来自电位器实际阻值公差和万用表两位小数精度:
| 负载情况 | 理论输出 | 实测输出 | 相对偏差 |
|---|---|---|---|
| 空载 | 2.00 V | 2.00 V | 0 |
| 接 100 Ω | 0.22 V | 0.21 V | 约 -4.5% |
| 接 10 kΩ | 1.85 V | 1.81 V | 约 -2.2% |
100 Ω 那行的塌陷幅度值得多看两眼:负载阻值只有输出阻抗的八分之一,等于把抽头直接短路掉大半。这是电位器最经典的翻车场景——空载调得好好的,一接负载就废。经验规则是负载阻值至少要比输出阻抗大一个数量级,读数才具备参考价值。后面设计光敏电阻电路时,这条规则会反复用到。
4. 光敏电阻眼睛电路:从阻值表到 3V 摆幅的选型、布局与追光策略
前面两章都是单点电路,验证的是你对手算和仿真的信任度。从这一章开始,电路、机械、软件三条线要同时推进:光敏电阻装在头部电机轴上,电路板通过两个 8 针连接器跟机器人对接,采集程序又要在旋转过程中同步记录两路电压。任何一个环节错位,最后那三条曲线都画不出来。
4.1 两轮光照阻值实测:先承认器件的一致性误差
拿到头部之后第一件事不是焊电路,是量电阻。两只光敏电阻已经装在电机轴的支架上,大致成 90 度夹角。把一个 8 针连接器插进空的原型板当转接座,万用表打电阻档,分别在三种光照条件下量左右两只的阻值:
| 光照条件 | 左眼阻值 | 右眼阻值 |
|---|---|---|
| 环境光 | 3.0 kΩ | 3.3 kΩ |
| 灯距近(约 0.3 m) | 1.2 kΩ | 1.17 kΩ |
| 灯距远(约 0.9 m) | 1.97 kΩ | 2.03 kΩ |
数据本身已经说明了光敏电阻的工作方式:光越强,阻值越小。但更值得注意的是两只管子之间的差异——环境光下差了 0.3 kΩ,接近 10%。这不是接错线,是器件离散性,同型号同批次也避免不了。
这个 10% 会一路传到最后的转向策略里。假设分压电阻取 1.75 kΩ,环境光下左眼输出 3.68V、右眼 3.46V,光是对称环境下两路就有 0.22V 的固有偏差。如果追光策略里的死区阈值设得比 0.22V 还小,机器人就会在灯正前方左右横跳,永远停不下来。所以死区阈值的下限不是拍脑袋定的,是从这张阻值表推出来的。
4.2 定值电阻选型:3V 指标能不能靠纯电阻做到
题目要求是:用一只光敏电阻加若干固定电阻,在 10V 供电下做出一个「亮时电压高、暗时电压低」的输出,并且开关灯时输出变化至少 3V。拓扑很直接——光敏电阻接上端、固定电阻接下端,取固定电阻上的压降:
Vo = 10 × R_f / (R_photo + R_f)
亮的时候 R_photo 小,分母小,Vo 大;暗的时候反过来。方向对了,剩下的事就是选 R_f。很多人凭感觉试几个值就交了,其实这一步可以直接扫描出上限:
# 扫描固定电阻取值,看「开关灯」的输出摆幅最大能到多少 V_SUPPLY = 10.0 R_BRIGHT = 1.2e3 # 灯在近处正对时的阻值 R_DARK = 3.0e3 # 环境光下的阻值 def v_out(r_photo, r_fixed): """光敏电阻在上端、固定电阻在下端,取固定电阻上的压降""" return V_SUPPLY * r_fixed / (r_photo + r_fixed) best = max( ((r, v_out(R_BRIGHT, r) - v_out(R_DARK, r)) for r in range(200, 12001, 50)), key=lambda item: item[1], ) print(f"最优固定电阻 {best[0]:.0f} Ω,摆幅 {best[1]:.2f} V") # 输出:最优固定电阻 1900 Ω,摆幅 2.25 V扫描结果是:最优固定电阻约 1.9 kΩ(解析解是 √(1.2k × 3.0k) ≈ 1.9 kΩ),此时暗态 3.88V、亮态 6.13V,摆幅 2.25V。这个 2.25V 不是「还没调好」,而是无源分压的结构性上限——分母里两个电阻相加,光敏电阻的变化量被固定电阻稀释掉了,无论怎么选都突破不了。
实际实验里取的是 1.75 kΩ 附近,对应下面这组期望值:
| 光照条件 | 左眼 R | 左眼 Vo | 右眼 R | 右眼 Vo |
|---|---|---|---|---|
| 环境光 | 3.0 kΩ | 3.68 V | 3.3 kΩ | 3.46 V |
| 灯距近 | 1.2 kΩ | 5.93 V | 1.17 kΩ | 5.99 V |
| 灯距远 | 1.97 kΩ | 4.70 V | 2.03 kΩ | 4.63 V |
手算验证一行就够:左眼近距时 10 × 1.75/(1.2 + 1.75) = 5.93V,和表里一致。左眼摆幅 5.93 − 3.68 = 2.25V,右眼 5.99 − 3.46 = 2.53V,都够不到 3V。
结论必须如实写进报告:纯电阻网络做不到 3V 指标,这是数学上限而不是调试失误。想达标只有两条路——加一级同相放大,增益至少 3/2.25 ≈ 1.34;或者用惠斯通电桥配差分放大。这就是这个 lab 最后为什么要把运放引出来的原因,把「我做不到」变成「我知道为什么做不到、以及下一步该怎么补」,答辩时是完全不同的两种评价。
4.3 CMax 布局与引脚映射:两个连接器不要混
设计定下来之后,先在 CMax 里做布局。布局里要加两个连接器:Robot Connector 接收机器人过来的黄色电缆,提供电源和地;Head Connector 通过红色电缆接头部,把两只光敏电阻引到板子上。规矩很硬:电路板的电源必须从 Robot Connector 取,不许另接一台电源,否则仿真和实物的供电拓扑就分家了。
引脚分配是这套实验最容易串的地方,先列表再接线:
| 连接器 | 引脚 | 信号 | 说明 |
|---|---|---|---|
| 机器人连接器 | 2 |
本文还有配套的精品资源,点击获取