简介这份山东大学崇新学堂电子电路实验七的报告以机器人头部追光项目为主线面向电子电路入门、嵌入式实验及课程报告撰写者帮助读者理清从基本电路仿真到原型搭建的关键概念。压缩包内含1个docx文档约578KB按实验目标、材料清单、操作步骤与知识点总结组织内容篇幅集中、便于检索。正文涉及电路原型工具、万用表与电源箱的测量调试电压分压器和电位器的设计思路CMax仿真环境的操作流程以及利用一对光敏电阻搭建光传感器“眼睛”的方法并进一步说明机器人头部机械结构与旋转追踪光线的实现逻辑。已有98人学习下载可作为实验预习、报告整理和仿真排错时的参考尤其适合需要对照电路原理与动手环节查漏补缺的学习者也能为同类追光机器人实验提供可复用的分析框架。1. 一个 5kΩ 电位器拧到 2.0V挂个 100Ω 就掉到 0.21V拧到 2.0V万用表也读 2.0V看起来稳如老狗随手并一个 100Ω 电阻到地读数瞬间塌到 0.21V。这不是表坏了是戴维南等效在收账。这份 EECS 实验课 Lab7 的资源就是把这类事逼你亲手量一遍先用 CMax 在屏幕上搭电压分压器再拿真实的 1kΩ 电阻、鳄鱼夹和面包板复刻最后把两只光敏电阻装到机器人头部当眼睛让它转头追光。它面向刚学完基尔霍夫定律、但还没把公式和面包板对上号的人也适合想弄清仿真读数为什么和实物差一截的熟手。整份材料的价值不在标准答案而在每一步都留了算一遍、仿一遍、量一遍的三重校验位——三个数对不上就是你理解出偏差的地方。2. 电压分压器两个二分压级联为什么不是四分压这一章要解决的是 Lab7 前半段最容易被跳过、也最容易埋雷的部分。很多人看到Vo Vin × R2/(R1R2)就觉得懂了然后在 Step 6 的探针读数上和仿真吵起来。真正的问题从来不是公式而是公式成立的前提——输出端不能带载。2.1 从 10V 到 5V先让探针说话CMax 里的mystery.cmax是个现成的例子10V 电源轨、两只等值电阻、探针一头接地一头夹在节点 J42 上。手算很简单上下臂各 1kΩ中点就是输入的一半5V。仿真跑完弹窗给出的也是 5V两边对上说明工具链没问题可以往下走。这里有个细节容易被忽略探针本身不是理想器件。CMax 的探针在多数配置下按高阻处理对 1kΩ 量级的分压网络影响可以忽略但换成兆欧级电阻再测读数就会开始飘这是后面实物测量时要提前有心理准备的事。启动方式上Linux 和 macOS 下进目录跑一行就够cd ~/designLab07 python CMax.pyWindows 下直接在编辑器里打开CMax.py走 Run Module 也行。进去之后第一件事不是画图是按CtrlA看版本弹窗确认是 1.5.2。版本不对会出现元件库对不上、老文件打不开的情况这类问题后面第 5 章还会专门讲。提示mystery.cmax是拿来对答案的不是拿来抄的。先把窗口里的电路自己画一遍原理图再打开文件比对这样才知道自己漏了哪个节点。2.2 面包板上复刻把仿真布局当图纸用实物的接线顺序建议固定成一套流程不要每次凭感觉。第一步把电源箱标着 15V 和 GND 的端子引到面包板两侧的电源轨鳄鱼夹的一只嘴直接插进端子中心不要拧螺丝——拧松了容易掉拧紧了下次拆费劲。第二步用短于一英寸的跳线从电源轨引到实际要用的行线越短接触电阻和天线效应越小。第三步把万用表打到电压挡表笔也通过鳄鱼夹和短线接到电源轨上开机把正电源调到 10V。这套动作看着啰嗦但它保证了后面所有测量的基准是一致的。我见过太多人直接拿 15V 往下做然后抱怨光敏电阻分压出来的电压超出预期——其实是他自己把输入改了。第四步才是插电阻。电阻引脚要剪短让元件贴平面包板不要架空。架空看着清爽实际一碰就松尤其是后面要接机器人线缆、整块板会移动的时候。布局尽量和 CMax 窗口里的样子一致这不是强迫症是为了让你在排查时能一眼看出仿真是这样、实物是那样的差异在哪。2.3 级联的陷阱输出阻抗在偷偷加载Lab7 里最有价值的一问是能不能把两个二分压电路串起来得到一个四分压直觉说能电路理论说不能。原因不复杂——第一级的输出不是理想电压源它带着一个串联的输出电阻。第一级用两只 1kΩ戴维南等效下来开路电压 5V输出电阻是两只并联500Ω。你把第二级同样是 1kΩ 串 1kΩ输入电阻 2kΩ接上去等于给第一级的输出端并了一个 2kΩ 负载。分压比立刻变了500Ω 串 2kΩ输出只剩 4V第二级再对半砍最终 2.0V而不是理想的 2.5V。这段用脚本跑一遍最直观# cascade_divider.py # 验证两级二分压级联后的真实输出对比理想值 def divider(vin, r_top, r_bottom): 基本分压器输出取在下臂两端 return vin * r_bottom / (r_top r_bottom) def cascade(vin, r11e3, r21e3): # 第一级空载输出 v_open divider(vin, r1, r2) # 第一级的戴维南输出电阻r1 与 r2 并联 r_out r1 * r2 / (r1 r2) # 第二级的输入电阻 它的上下臂之和 r_load r1 r2 # 带载后第一级中点的真实电压 v_mid v_open * r_load / (r_out r_load) # 第二级再分一次 return v_mid, divider(v_mid, r1, r2), r_out vin 10.0 vmid, vout, rout cascade(vin) print(f第一级空载输出 : {vin/2:.3f} V) print(f第一级输出电阻 : {rout:.0f} Ω) print(f带载后中点电压 : {vmid:.3f} V) print(f第二级输出 : {vout:.3f} V) print(f理想四分压 : {vin/4:.3f} V)跑出来是 5.000V、500Ω、4.000V、2.000V、2.500V。第一级空载输出没错但一旦挂上第二级中点从 5V 掉到 4V误差 20%最终结果也从 2.5V 变成 2.0V。参数上要抓住三个量r_out决定这一级带得动多少负载r_load决定后级吃多少电流两者比值就是误差来源。经验规则是负载电阻至少是输出电阻的 10 倍误差才能压到 10% 以内要压到 1%得差 100 倍。这条规则在后面电位器那一章会以更极端的形式再出现一次。2.4 2.0V 那一问凑一个 1:5 的分压比Step 7 要求搭一个输出 2.0V 的分压器输入还是 10V。反推分压比是 1:5也就是下臂阻值是上臂的四分之一。手头只有四个 1kΩ 和一个 10kΩ能凑出来的组合是上臂直接用 10kΩ下臂用1k 1k (1k ∥ 1k) 2.5kΩ四个 1kΩ 正好用完。代入公式10 × 2.5 / (10 2.5) 2.0V。仿真给出 2.0V手算也是 2.0V实物万用表读到 2.00V三个数对齐。这里要注意别和上一节的 2.0V 搞混。级联那一节的 2.0V 是想得到 2.5V 却因为加载掉到 2.0V是失败的结果这一节的 2.0V 是设计目标就是 2.0V是成功的结果。数值一样机理完全相反考试和报告里写反了是很扣分的事。| 电路 | 上臂 | 下臂 | 理想输出 | 实际输出 | | 等值分压 | 1kΩ | 1kΩ | 5.00V | 5.00V | | 两级级联 | 1kΩ 1kΩ | 1kΩ 1kΩ | 2.50V | 2.00V | | 1:5 分压 | 10kΩ | 2.5kΩ | 2.00V | 2.00V |表里第三行能成立是因为万用表的输入阻抗在 10MΩ 量级相对 2.5kΩ 的下臂是四千倍加载误差不到 0.03%看不出来。换成下臂只有几百欧、后级又是低阻输入就未必了。3. 电位器与负载效应α0.2 之后发生了什么电位器是 Lab7 里第一个三端器件也是第一个让人产生它能当可调电源用错觉的元件。这一章把它的等效模型拆开用 100Ω 和 10kΩ 两组负载把戴维南等效算穿。3.1 三端器件的等效α 切的是阻值不是电压蓝色 5kΩ 电位器有三个引脚排成三角形底边两个引脚接电源和地顶点那个是中间抽头。转动轴的时候抽头在电阻体上滑动把总阻值 5kΩ 分成上下两段。设抽头位置对应的分压比为 α则下段阻值是α × 5kΩ上段是(1-α) × 5kΩ空载时抽头电压就是α × Vin。α0.2 时抽头对地 1kΩ对电源 4kΩ10V 供电下抽头读数 2.0V。实测最大值 9.99V、最小值 0.00V说明这个电位器的两端接触做得不错能吃到满量程。如果实测最高只到 9.5V 左右通常是引脚接错——把抽头和某一端搞反了等效于串了一个固定电阻进去。注意电位器的三个引脚不是按三角形顶点位置一一对应的不同批次封装可能不同。上电前先用万用表电阻挡量一遍两端之间应该是 5kΩ 固定值抽头到任一端应该是随旋转连续变化的 0 到 5kΩ。量准了再接线。3.2 空载 2.0V带载 0.21V戴维南把话说透了保持 α0.2 不动在抽头和地之间并一个 100Ω 电阻。读数从 2.0V 掉到 0.21V掉了将近十倍。报告里的理论值是 0.22V实测 0.21V差 0.01V属于正常误差范围。这个 0.01V 的差距值得掰开看。理论计算假设电位器总阻精确等于 5kΩ、抽头位置精确对应 α0.2、100Ω 电阻精确等于 100Ω、万用表内阻无穷大。实际每个环节都有偏差碳膜电位器标称 5kΩ 实测可能在 4.7kΩ 到 5.3kΩ 之间α 靠手动旋转根本对不准万用表 10MΩ 内阻并上去会再拉低一点点。这些误差叠加起来0.01V 的偏差完全合理不要去调电路修它。用戴维南等效算更快。抽头空载电压 2.0V输出电阻是上下两段并联4k ∥ 1k 800Ω。接 100Ω 负载2.0 × 100/(800100) 0.222V。接 10kΩ 负载2.0 × 10000/(80010000) 1.852V报告实测 1.81V同样对得上。# pot_load.py # 用戴维南等效预测电位器带不同负载时的抽头电压 def thevenin(vin, alpha, r_pot): 返回 (空载电压, 输出电阻) v_open vin * alpha r_lower alpha * r_pot r_upper (1 - alpha) * r_pot r_out r_upper * r_lower / (r_upper r_lower) return v_open, r_out def with_load(v_open, r_out, r_load): return v_open * r_load / (r_out r_load) vin, alpha, r_pot 10.0, 0.2, 5000.0 v_open, r_out thevenin(vin, alpha, r_pot) print(f空载电压 {v_open:.3f} V, 输出电阻 {r_out:.0f} Ω) for r_load in (100, 10000): print(f接 {r_load:6} Ω - {with_load(v_open, r_out, r_load):.3f} V)输出是 2.000V、800Ω、0.222V、1.852V。三行数把两个实验点全解释了。3.3 输出阻抗随 α 变最坏情况在正中间电位器的输出电阻不是定值它随 α 变化公式是α(1-α) × R_pot。α0 或 α1 时输出电阻为 0因为抽头直接贴在电源或地上α0.5 时最大5kΩ 的四分之一1.25kΩ。这意味着同样一个电位器拧在不同位置时带载能力完全不同。你在 α0.1 附近调好一个电压转轴一动输出电阻变了后级负载一分压读数又跑了。这是用电位器做基准电压源时最头疼的地方。| α | 下段阻值 | 上段阻值 | 输出电阻 | 空载电压 | 接 1kΩ 负载 | | 0.1 | 500Ω | 4.5kΩ | 450Ω | 1.00V | 0.69V | | 0.2 | 1.0kΩ | 4.0kΩ | 800Ω | 2.00V | 1.11V | | 0.5 | 2.5kΩ | 2.5kΩ | 1.25kΩ | 5.00V | 2.22V | | 0.9 | 4.5kΩ | 500Ω | 450Ω | 9.00V | 6.21V |看最后一列空载 5V 的位置接上 1kΩ 只剩 2.22V掉了一半还多。所以电位器后面要么接高阻输入运放的同相端、ADC 的缓冲输入要么就得接受这个衰减把它当成带内阻的可调源来设计而不是当成理想电源。3.4 什么时候可以放心用电位器直连判断标准就一条负载电阻和输出电阻的比值。比值大于 100误差在 1% 以内可以直接连比值在 10 到 100 之间误差 1% 到 10%看你的容差要求比值小于 10基本不能直连必须加缓冲。Lab7 里电位器的用途是让学生看见分压比可调不是真的要驱动什么。真到后面的机器人电路驱动对象换成了电机和 ADC 输入这时候再拿电位器直连就会翻车。这个认知差是很多人做完 Lab7 还是糊里糊涂的地方。4. 光敏电阻“眼睛”把 3kΩ 到 1.2kΩ 变成电压摆幅这一章是整个 Lab7 的核心交付物。目标很明确用两只光敏电阻加若干固定电阻在 10V 供电下让灯在一英尺处开关时输出变化至少 3V。听起来不难实际一做就会发现纯电阻分压根本达不到。4.1 先测再算光敏电阻的极性不能猜光敏电阻的阻值随光照增强而下降这一点必须先用量出来不能靠型号猜。报告给的三组数据是环境光下左 3.0kΩ、右 3.3kΩ一英尺处左 1.2kΩ、右 1.17kΩ三英尺处左 1.97kΩ、右 2.03kΩ。这组数有两个信息。第一左右两只的阻值不完全一致差 5% 到 10%这是器件分散性正常。第二三英尺处的阻值反而比一英尺处大因为距离远了光照弱——这符合平方反比的大致趋势也提醒你机器人追光时距离变化会叠加到角度变化上两条曲线不是纯粹的角度函数。测阻值的操作要点断电测量万用表打电阻挡表笔直接夹在光敏电阻两个引脚上。光敏电阻没有极性正反接都一样。测的时候人别挡光手也别贴在元件上体温会让阻值缓慢漂移读数一直往下走。提示环境光这一组一定要在实验台的实际照明下测不要跑到窗边测完再回工位用。环境光变了固定电阻的选型就全错了。4.2 固定电阻怎么选几何平均给出上限把光敏电阻放在上臂、固定电阻放在下臂输出取在下臂两端。光照增强上臂阻值下降下臂分到的电压上升——这正好满足亮时电压大的要求。公式是Vout Vcc × R_fixed / (R_pr R_fixed)。要让明暗之间的差值最大R_fixed 应该取两个状态下光敏电阻阻值的几何平均R_fixed sqrt(R_amb × R_bright)。左眼代入sqrt(3000 × 1200) 1897Ω。右眼代入sqrt(3300 × 1170) 1965Ω。两者接近取一个折中的 1.75kΩ 到 1.9kΩ 都行。报告里反推出来的固定电阻大约是 1.75kΩ对应左眼环境光 3.68V、一英尺 5.93V右眼 3.46V 和 5.99V和实测一致。1.75kΩ 可以用 1kΩ 串一个 750Ω 凑750Ω 由 1kΩ 并 3kΩ 得到嫌麻烦就直接用 1.8kΩ 标称值读数会差零点几伏不影响趋势判断。4.3 扫一遍参数看 3V 指标到底够不够写个脚本把 R_fixed 从头扫到尾看最大摆幅能到多少import numpy as np # 实测阻值单位欧姆 R_amb_L, R_1ft_L 3.00e3, 1.20e3 R_amb_R, R_1ft_R 3.30e3, 1.17e3 VCC 10.0 def vout(r_fixed, r_pr, vccVCC): 光敏电阻在上臂、固定电阻在下臂 return vcc * r_fixed / (r_pr r_fixed) def best_swing(r_amb, r_bright, lo100, hi20000, n4000): rs np.linspace(lo, hi, n) # 关灯电压 - 开灯电压注意亮时电压更高所以顺序要反过来 d vout(rs, r_bright) - vout(rs, r_amb) i int(d.argmax()) return rs[i], d[i] for name, (a, b) in {左眼: (R_amb_L, R_1ft_L), 右眼: (R_amb_R, R_1ft_R)}.items(): r_opt, d_max best_swing(a, b) r_geo np.sqrt(a * b) print(f{name}: 最优 R_fixed{r_opt:.0f}Ω f最大摆幅{d_max:.2f}V 几何平均{r_geo:.0f}Ω) # 用实际能凑出的 1.8kΩ 复核 for name, (a, b) in {左眼: (R_amb_L, R_1ft_L), 右眼: (R_amb_R, R_1ft_R)}.items(): v_dark, v_bright vout(1800, a), vout(1800, b) print(f{name} 1.8kΩ: 暗{v_dark:.2f}V 亮{v_bright:.2f}V f摆幅{v_bright-v_dark:.2f}V)跑出来左眼最优 1897Ω、摆幅 2.25V右眼最优 1965Ω、摆幅 2.54V换成 1.8kΩ 实测组合左眼 3.75V 到 6.00V摆幅 2.25V右眼 3.52V 到 6.06V摆幅 2.54V。关键结论在这里最大摆幅只有 2.25V 到 2.54V达不到 3V 的设计指标。这不是元件坏了也不是算错了是纯电阻分压这个拓扑在给定阻值范围下的物理上限。想再往上抬只能改条件——提高供电电压被 10V 限制死了、换阻值跨度更大的光敏电阻、或者引入有源器件。报告结尾那句话说的就是这个只靠电阻很难让电压变化达到 3V这体现了后面用运放的重要性。这是整份材料里最诚实的一句也是很多人做实验时不敢写进报告的一句。4.4 达不到指标时的三条退路第一条是改判据。3V 是单端摆幅指标但机器人真正需要的是判断光在哪边用的是左右两路之差。两路各自摆幅 2.25V 和 2.54V做差之后峰峰值可以到 4V 以上方向信息完全够用。把指标从单路摆幅改成差动摆幅问题就不成立了。第二条是加一级同相放大。用运放搭个增益 2 倍的跟随器2.25V 变 4.5V指标轻松满足。代价是要多一路电源、多几个元件、多一层失调和漂移要考虑。Lab7 没要求做但报告里点出来了说明课程设计者知道这是下一步。第三条是提高光敏电阻的工作点。给光敏电阻串一个小的限流电阻再并到固定电阻上改变有效阻值曲线本质上是把几何平均点往更陡的区间挪。这招在小信号场合有用大信号场合收效有限。| 方案 | 单路摆幅 | 元件成本 | 是否引入有源器件 | 适用场景 | | 纯电阻分压 | 2.2~2.5V | 2 个电阻 | 否 | Lab7 本体够用 | | 差动取信号 | 4V 以上 | 不变 | 否 | 方向判断 | | 同相放大 2 倍 | 4.5~5V | 运放 4 电阻 | 是 | 需要绝对幅度 | | 提高工作点 | 2.5~2.8V | 多 2 个电阻 | 否 | 边际改善 |5. 常见问题与排查8-pin 接口、探针读数和曲线对不上这一章把 Lab7 里最容易卡住的几个点集中列出来。每条都按看到什么现象、为什么会这样、怎么改三段写遇到问题直接对号入座。5.1 连接器引脚定义搞混一上电就冒烟现象接好线通电机器人没反应或者某个电阻迅速发烫变色。原因机器人连接器和头部连接器是两套不同的引脚定义长得一样但功能不同。机器人连接器的 pin 2 和 pin 4 分别是电源和地来自机器人的黄色线缆而头部连接器的 pin 4、5、6 是接两只光敏电阻的。把两套定义混着用等于把电源直接短到地或者把 10V 灌进模拟输入。解决接线前先画一张引脚对照表贴在面包板边上接线后、上电前用万用表通断挡逐个确认。别信线缆颜色黄线不一定全是电源。| 连接器 | 引脚 | 用途 | | 机器人连接器 | 2 | 电源正由机器人黄色线缆提供 | | 机器人连接器 | 4 | 地 | | 机器人连接器 | 3 | 模拟输入 #2接 VL | | 机器人连接器 | 5 | 模拟输入 #3接 VR | | 头部连接器 | 4 | 光敏电阻供电端 | | 头部连接器 | 5 | 左眼光敏电阻中点VL | | 头部连接器 | 6 | 右眼光敏电阻中点VR |表里头部连接器的地通常和机器人连接器共地但具体走哪根线要以实际板子的丝印为准不同批次的板子可能改过。5.2 CMax 版本不对老文件打不开或元件错位现象File Open打开mystery.cmax报错或者打开后元件位置全乱、连线断开。原因CMax 的电路文件格式随版本变过。课程用的是 1.5.2如果你机器上装的是别的版本读旧文件时元件坐标和网表对不上。解决启动后第一件事按CtrlA看版本弹窗不是 1.5.2 就换。换完再打开文件如果还是乱把文件删了重新从课程目录拷一份别用自己改过的副本。注意版本弹窗是个独立窗口看完记得关掉不然它会一直挡在画布上面让人以为软件卡死了。5.3 光敏电阻上下臂放反亮的时候电压反而变小现象用手电筒照输出电压不升反降和预期完全相反。原因把光敏电阻放在了下面。光照增强时光敏电阻阻值下降如果它在下臂分到的电压自然变小。解决确认拓扑——光敏电阻在上臂、固定电阻在下臂。快速验证方法是用手遮住光敏电阻输出应该下降松开手输出应该回升。方向不对就调换两个元件的位置。5.4 三条曲线对不上或者差值为零现象跑完eyeDataBrain.py三张图出来了但左右两条曲线几乎重合差值曲线是一条平线。原因通常有三个。一是两路信号接到了同一个模拟输入或者其中一路没接上读数恒定。二是两只光敏电阻的间距不是 90 度装的时候没对准角度分辨力消失。三是机器人起始角度不对光在正前方时两路本来就该相等转 180 度全程都过不了零点。解决先用万用表量 VL 和 VR 的直流值用手电筒从左扫到右看两个数是不是一个升一个降。如果是同升同降说明接错通道了。再检查头部安装角度两只光敏电阻的轴线应该大致垂直。5.5 仿真曲线漂亮实物曲线毛刺多现象CMax 里lightTest.py跑出来的曲线干净得像教科书实物采出来的全是毛刺和台阶。原因仿真是理想光源本文还有配套的精品资源点击获取