EECSdesignlab7光敏追光机器人:从分压电路到运放设计的完整实践
简介本资源为山东大学崇新学堂EECS design lab7实验报告文档面向修读该课程的学生及对电路设计与仿真感兴趣的初学者。内容围绕机器人头部设计展开涵盖电路原型工具使用、电压分压器与电位器原理、CMax电路仿真工具操作、光敏电阻光传感器电路搭建等核心知识点帮助读者理解如何用基础电路实现光线检测与追踪功能。资源包内含1个docx文档约578KB结构完整便于按实验步骤查阅与复盘。已有97人学习下载适合需要完成同类实验、巩固电路仿真与传感器应用的中低年级学生参考可快速掌握从电路搭建到机器人头部机械结构设计的完整思路。1. 从两只光敏电阻到会追光的机器人头EECSdesignlab7 到底在练什么如果你手头正好有一份 EECSdesignlab7 的实验包打开第一眼大概率会有点懵一边是 CMax 里画出来的电路图一边是面包板上插着的 1K 电阻、5K 电位器和两颗光敏电阻最后还要把这些东西装到一个会转的机器人头上让它自己追着灯走。这不是一门纯理论课也不是纯焊接课它把「电路理论 → 仿真验证 → 实物搭建 → 系统联调」串成了一条完整的链路。整份实验报告的核心目标很明确用一对光敏电阻当「眼睛」用电机当「脖子」让机器人头能检测到光源方向并转过去对准它。前几个步骤看起来只是测电压、算分压但每一步都在为最后的追光策略打地基。适合谁正在上类似嵌入式/电路入门课、需要复现实验报告的人以及想拿一个「传感器 运放前级 电机控制」完整小项目练手的人。它不教你写操作系统但能让你把分压、电位器负载效应、光敏电阻特性和简单的比例控制真正摸一遍。2. 电路原型工具与 CMax 仿真从 15V 电源到 5V 分压的完整走通2.1 原型板供电与万用表测量别急着插芯片实验第一步不是画电路而是把电源和测量工具搭好。用鳄鱼夹把电源的 15V 和 GND 引到独立原型板的电源轨上注意夹子要夹在短于 1 英寸的跳线端不要直接拧电源端子。万用表打到电压档表笔通过鳄鱼夹接到电源轨开机后把正电源调到 10V。这一步看起来简单但很多翻车都发生在这里电源轨没接通、万用表表笔接触不良、或者电源本身限流了。我一般会先不接任何电阻只测电源轨电压确认稳定在 10V 再往下走。# 常见做法在 Linux/macOS 下启动 CMax cd designLab07 python CMax.py启动后先按 CtrlA 确认版本实验报告里写的是 CMax 1.5.2。版本不对可能导致后面打开 mystery.cmax 时元件符号对不上。打开 File Open 加载 mystery.cmax你会看到一个已经画好的分压电路探针接在 GND 和 J42 之间。先别点仿真自己拿纸算一下如果上下两个电阻都是 1K输入 10V那 J42 对地就是 5V。然后 Sim Run Simulation弹窗会打印仿真值。报告里写「Yes, all are 5V」说明理论和仿真对上了。这一步的意义在于建立信心CMax 的仿真结果和手算一致后面才敢用它来验证更复杂的光敏电路。2.2 电压分压器与级联陷阱为什么两个二分压不能直接串电压分压器的公式很简单Vo Vin × R2 / (R1 R2)。实验里用两个 1K 电阻从 10V 分出 2V仿真和实物测量都是 2.0V。但报告里专门问了一个反直觉的问题能不能把两个「除以二」的分压器级联得到「除以四」答案是 No。原因在于第二级分压器的输入阻抗会加载第一级的输出。具体来说第一级输出端对地本来应该是 1K但第二级接上来之后第二级的 R1 和 R2 串联再与第一级的 R2 并联等效负载变了分压比就不再是 1/2。这个坑在实验报告里被明确点出来说明它是课程设计者故意埋的认知陷阱。如果你以后要做多级衰减或传感器信号调理记住分压器级联必须考虑负载效应要么加缓冲器要么重新计算等效电阻。# 分压器计算示例两个 1K 电阻从 10V 分压 Vin 10.0 R1 1000.0 R2 1000.0 Vo Vin * R2 / (R1 R2) print(f单级分压输出: {Vo:.2f}V) # 输出 5.00V # 级联两个二分压器错误做法 # 第二级输入阻抗会并联到第一级输出端 R1_2 1000.0 R2_2 1000.0 R_load R1_2 R2_2 # 第二级对地等效电阻 R2_parallel (R2 * R_load) / (R2 R_load) Vo_cascade Vin * R2_parallel / (R1 R2_parallel) print(f级联后实际输出: {Vo_cascade:.2f}V) # 不是 2.5V上面代码里 R_load 是第二级分压器对地的等效电阻R2_parallel 是第一级下臂电阻与第二级等效电阻的并联值。算出来 Vo_cascade 会明显偏离 2.5V具体数值取决于第二级电阻取值。实验报告里没有给出级联的具体数值但结论是「电压不是均匀分配」。这个结论在后续设计光敏电阻分压电路时同样适用光敏电阻的阻值随光照变化如果你在后面直接接一个低阻抗负载分压点电压会被拉偏。2.3 电位器三端器件与负载效应实测电位器实验是整份报告里最能体现「理论 vs 实物」差距的部分。把 5K 电位器两端接 10V 和地中间抽头对地电压可以从 0 调到接近 10V。报告里实测最大 9.99V最小 0.00V基本满量程。然后调到中间抽头 2.0V对应 α0.2也就是抽头位置在 20% 处。接下来是关键在抽头对地接一个 100Ω 电阻再测电压Vo 从 2.0V 掉到 0.21V。用电路理论算理想值应该是 0.22V实测 0.21V差距很小。但如果你把 100Ω 换成 10KΩVo 变成 1.81V理论值 1.85V差距开始变大。这说明电位器输出端接的负载越重阻值越小分压点被拉低得越厉害。负载电阻实测 Vo理论 Vo偏差无负载2.00V2.00V0100Ω0.21V0.22V0.01V10KΩ1.81V1.85V0.04V这个表格说明一个实用结论如果你用光敏电阻和固定电阻组成分压器后级电路的输入阻抗必须远大于分压电阻否则光敏电阻的变化会被负载「吃掉」。实验报告最后提到「只用电阻很难让电压变化达到 3V」其实就是在暗示后级需要运放做缓冲或放大。这也是为什么很多光传感器电路前面会加一个电压跟随器。3. 光敏电阻「眼睛」电路从阻值测量到 CMax 仿真验证3.1 光敏电阻阻值实测环境光、1 英尺、3 英尺机器人头上装了两颗光敏电阻左右各一颗大致相隔 90°。实验要求先测不同光照下的阻值。报告里给出的数据是环境光下左 3.0K、右 3.3K灯前 1 英尺左 1.2K、右 1.17K灯前 3 英尺左 1.97K、右 2.03K。可以看出光敏电阻在强光下阻值下降弱光下阻值上升而且左右两颗的一致性还不错偏差在 10% 以内。这个数据很重要因为它决定了你后面分压电路的上臂电阻怎么选。如果你选一个 10K 的固定电阻和光敏电阻串联环境光下分压点大概在中间强光下会偏向固定电阻一侧。但报告里要求「亮时输出电压大暗时输出电压小」所以光敏电阻应该放在下臂固定电阻放上臂。# 光敏电阻分压计算固定电阻在上光敏在下 Vcc 10.0 R_fixed 10000.0 # 10K 上臂 # 不同光照下的光敏电阻值 R_photo_ambient 3000.0 # 环境光 R_photo_1ft 1200.0 # 1 英尺 R_photo_3ft 1970.0 # 3 英尺 for label, R_photo in [(环境光, R_photo_ambient), (1英尺, R_photo_1ft), (3英尺, R_photo_3ft)]: Vo Vcc * R_photo / (R_fixed R_photo) print(f{label}: 光敏{R_photo:.0f}Ω, 输出{Vo:.2f}V)运行这段代码你会发现用 10K 上臂时环境光输出约 2.3V1 英尺约 1.07V3 英尺约 1.65V。变化方向是对的但幅度不够 3V。报告里实测的电压是环境光 3.68V、1 英尺 5.93V、3 英尺 4.7V说明他们用的固定电阻值更小可能是 1K 或 2K 级别。你可以反推如果 1 英尺时输出 5.93V光敏 1.2K那么 R_fixed / (R_fixed 1.2K) (10 - 5.93) / 10解出 R_fixed 大约 1.7K。实际实验里可能用了 1.5K 或 2K 标准电阻。这个反推过程本身就是很好的练习从目标电压反推元件参数。3.2 CMax 里搭光敏电路Robot Connector 和 Head ConnectorCMax 里搭建光敏电路时需要从元件库拖出 Robot Connector 和 Head Connector。Robot Connector 接收机器人来的黄色线缆引脚 2 和 4 分别提供电源和地。Head Connector 通过红色线缆连接头部引脚 4、5、6 接两颗光敏电阻。报告里要求用引脚 4、5、6 来引出 VL 和 VR。具体接法常见的是引脚 4 接电源引脚 5 接左光敏分压点引脚 6 接右光敏分压点光敏电阻另一端接地。这样 VL 和 VR 就是两个对地的电压信号。# CMax 仿真脚本 lightTest.py 的典型结构示意 # 实际文件由课程提供这里展示如何加载和运行 # 在 CMax 中File Load Simulation lightTest.py # 然后选择探针测量 VL、VR、VL-VR # 仿真运行三次 # 第一次探针接 VL观察光从左到右移动时的电压变化 # 第二次探针接 VR观察同样过程 # 第三次探针接 VL-VR观察差值变化仿真结果应该显示当光从左边扫到右边时VL 先增大后减小VR 先减小后增大而 VL-VR 会从正变负过零点对应光正对头部中心。这个过零点就是追光策略的关键如果 VL-VR 0说明光偏左机器人应该左转如果 VL-VR 0说明光偏右机器人应该右转。报告里 Check Yourself 5 问「每个测量电压应该如何变化」答案就是上面这个趋势。保存三张截图后面写报告要用。3.3 实物搭建与模拟输入接线VL 接 pin3VR 接 pin5实物搭建时先把第二个 8 针连接器插到面包板上这就是 Robot Connector。按照 CMax 里的布局把电源和地接到引脚 2 和 4。然后把光敏电阻分压电路搭出来VL 和 VR 分别接到 Robot Connector 的模拟输入引脚。报告里写的是 VL 接模拟输入 #2引脚 3VR 接模拟输入 #3引脚 5。接线完成后先用万用表测 VL 和 VR 对地电压用手遮挡不同光敏电阻看电压是否跟着变。如果不变先检查光敏电阻是否插反、分压点是否接对、电源是否到位。确认无误后再把机器人头装到乐高板上接黄色线缆开机器人电源。提示模拟输入引脚编号和物理引脚号容易搞混接线前最好用万用表蜂鸣档确认连接器引脚通断避免把电源误接到模拟输入上烧掉接口。4. 追光策略与 eyeDataBrain 数据采集从曲线到转向逻辑4.1 eyeDataBrain.py 运行流程手动转 90° 再自动转 180°eyeDataBrain.py 是一个数据采集大脑它会控制机器人匀速转 180°同时记录左右光敏电阻的电压并画图。操作步骤是把机器人放在灯前约一米头部对准灯手动顺时针转 90°然后在 soar 里点 Start机器人会自动转 180°转完后点 Stop会弹出三张图左眼亮度、右眼亮度、左右差值。这三张图就是设计追光策略的依据。报告里 Check Yourself 6 问「实测曲线是否和 CMax 仿真一致」答案是趋势一致但实测会有噪声和不对称因为两颗光敏电阻不可能完全一样机械安装也有偏差。# 追光策略伪代码基于 VL 和 VR 的差值 # 实际在 soar 里用 brain 实现这里展示逻辑 def track_light(VL, VR, threshold0.2): diff VL - VR if abs(diff) threshold: return 对准了停止 elif diff 0: return 光偏左左转 else: return 光偏右右转上面代码里 threshold 是死区防止机器人在对准点附近来回抖动。实际调试时这个值要根据电压噪声水平调整常见做法是先采集一段静止数据看 VL-VR 的波动范围然后取波动幅度的 2 到 3 倍作为阈值。如果阈值太小机器人会「玄学抖动」太大则对准精度差。4.2 从 VL-VR 曲线提取转向规则比例控制与死区把 eyeDataBrain 采集到的 VL-VR 曲线拿出来看横轴是角度纵轴是差值。理想情况下这条曲线近似正弦过零点对应光正对头部。但实测曲线可能过零点偏移或者左右不对称。这时候有两种策略一种是简单的「符号控制」只看差值正负正就左转负就右转直到差值进入死区另一种是「比例控制」转速和差值大小成正比差值大转得快差值小转得慢。实验报告里没有要求实现比例控制但 Checkoff 2 问「如何让机器人转向光」符号控制加死区就够用了。如果你想让追踪更平滑可以尝试比例控制但要注意电机最小启动电压差值太小时电机可能转不动。策略优点缺点适用场景符号控制 死区简单可靠不易振荡对准精度受死区限制实验课基础要求比例控制响应快追踪平滑需要调参低速可能堵转进阶调试比例 积分消除稳态误差积分饱和风险高精度追踪4.3 实测与仿真不一致时看什么报告里明确说「实测曲线和 CMax 仿真应该一致吗应该一致但不会完全一样」。如果你发现实测曲线和仿真趋势相反先检查三件事第一光敏电阻分压电路的上臂和下臂是否接反接反会导致亮时电压低第二模拟输入引脚是否接对VL 和 VR 是否互换第三机器人转向方向是否和预期一致有时候电机正反转定义和坐标系相反。如果趋势对但幅度差很多检查光敏电阻是否被遮挡、灯的距离是否和仿真设置一致、电源电压是否稳定在 10V。这些排查步骤在实验报告里没有展开但实际做的时候一定会遇到。5. 避坑与排查光敏追光实验里最容易翻车的五个点5.1 现象CMax 仿真电压和手算对不上原因CMax 里的电阻值可能不是默认的 1K或者探针接错了节点。常见情况是打开 mystery.cmax 后没注意元件参数直接点仿真结果和手算差很多。解决双击每个电阻查看阻值确认探针接在目标节点和地之间重新跑仿真。如果还是不对检查电源电压是否设成了 10V 而不是 15V。5.2 现象实物分压电压被拉低接上万用表就变原因万用表电压档的内阻虽然很高通常 10MΩ但如果分压电阻本身在百 K 级别表的内阻会并联到分压点造成可观测的偏差。更常见的是后级电路输入阻抗低比如直接把分压点接到电机或低阻负载。解决用高输入阻抗的万用表测量或者在后级加电压跟随器。实验报告里 100Ω 负载把 2V 拉到 0.21V就是负载效应的极端例子。5.3 现象光敏电阻在环境光下电压正常一开灯就饱和原因固定电阻选得太小强光下光敏电阻阻值降到很低分压点接近电源电压变化范围被压缩。解决根据实测光敏电阻范围选固定电阻。如果光敏在 1K 到 3K 之间变化固定电阻选 1.5K 到 2K 比较合适这样分压点变化幅度最大。报告里实测 1 英尺输出 5.93V说明他们选的固定电阻让强光下分压点在中高区间。5.4 现象eyeDataBrain 采集的曲线噪声大差值抖动原因光敏电阻本身有噪声电源纹波也会耦合进来机器人电机转动时电流变化还会引入干扰。解决在分压点对地并一个小电容比如 0.1uF做低通滤波软件上对采集数据做滑动平均。如果抖动仍然大检查电源和地线是否接触良好电机电源和信号地是否分开走线。5.5 现象机器人追光时来回振荡停不下来原因死区设得太小或者转向速度太快机器人冲过对准点又往回冲。解决增大死区阈值降低转向速度或者改用比例控制让接近目标时减速。我一般会先让机器人静止记录 VL-VR 的噪声峰峰值然后死区取这个值的 3 倍左右。如果还是振荡检查机械结构是否有回差头部转动是否顺畅。6. 进阶技巧用运放把光敏电压变化拉到 3V 以上实验报告最后提到「只用电阻很难让电压变化达到 3V这也体现了后面使用运放的重要性」。这句话其实是一个伏笔如果你想让追光更灵敏光靠分压器不够需要加一级运放做放大或缓冲。常见做法是用同相放大器把光敏分压点的电压放大 2 到 5 倍或者用差分放大器直接放大 VL-VR 的差值。下面是一个同相放大器的设计示例增益设为 3 倍把 1V 的变化放大到 3V。# 同相放大器增益计算 # 增益 1 Rf / Rg # 目标增益 3选 Rg 10K则 Rf 20K Rg 10000.0 Rf 20000.0 gain 1 Rf / Rg print(f同相放大器增益: {gain:.1f}) # 输出 3.0 # 如果输入变化 1V输出变化 3V Vin_change 1.0 Vout_change Vin_change * gain print(f输入变化 {Vin_change}V输出变化 {Vout_change}V)选运放时注意几点第一供电范围要覆盖 0 到 10V很多通用运放需要双电源单电源运放要选轨到轨型号第二输入偏置电流要小否则光敏电阻的高阻值会引入误差第三输出要能驱动后级模拟输入如果后级输入阻抗低运放输出电流要够。实际搭电路时先在 CMax 里仿真运放电路确认增益和偏置正确再上实物。运放电路比纯电阻分压更容易翻车常见问题是电源没接对、反馈电阻接错、输出饱和。我一般会先用万用表测运放各引脚电压确认电源和地正常再测输入和输出逐级排查。从那以后我每次做光敏或热电偶这类高阻传感器电路都强制先测传感器在不同条件下的实际阻值范围再反推固定电阻和运放增益绝不凭感觉选元件。希望帮到你。本文还有配套的精品资源点击获取