
简介这份PDF实验指导书面向计算机控制技术、自动化及嵌入式相关专业的学生与实验人员围绕A/D转换、D/A转换、步进电机与直流电机调速四类典型实验展开帮助读者理解模数与数模信号转换原理及电机控制方法。资源包内仅含1个PDF文件大小约176KB内容为完整的实验指导文档涵盖实验目的、设备清单、芯片介绍与操作步骤。文档以ADC0809和DAC0832两款芯片为核心详细讲解8位逼近型A/D转换、8通道模拟多路开关、R-2R电阻解码网络等知识点并分别给出在8086系统与51单片机中的接线图与编程要求步进电机与直流电机调速实验则进一步延伸到实际控制场景。目前已有69人学习适合作为课程实验预习、实验报告撰写及芯片应用入门的参考材料便于读者按目录快速定位所需实验模块并对照完成接线与程序调试。1. 从一台 TDN 86/51 实验箱说起这套 A/D-D/A 与电机调速资源到底能干什么如果你手头正好有一台 TDN 86/51 教学实验系统或者正在带计算机控制技术这门课的实验大概率会被同一件事卡住A/D 转换、D/A 转换、步进电机、直流电机调速这四个实验单独看每个都不难但连起来做的时候接线、片选地址、时序、驱动电流这几处总会出问题。这份实验指导书把 ADC0809、DAC0832、35YJ46 四相八拍步进电机和 PWM 直流调速四个实验串成了一条线每个实验都给了芯片内部结构、引脚定义、实验线路图和端口电平步序表。它适合两类人一类是跟着实验箱走流程的学生需要照着接线和步序表把程序跑通另一类是要把 8086 和 8031 两套平台都摸一遍的从业者想搞清楚同一颗芯片在不同总线下的片选逻辑和地址分配差异。下面我按实际动手顺序把这份资源里真正会影响成败的细节拆开讲。2. ADC0809 与 DAC0832地址译码、通道选择与转换时序怎么落地2.1 ADC0809 的 8 通道寻址逻辑与 8086 接线ADC0809 的核心是一个 8 位逐次逼近型 ADC外加 8 通道模拟多路开关和地址锁存译码电路。地址信号 ADDA、ADDB、ADDC 决定当前选中哪个模拟输入通道对应关系是000 选 IN0001 选 IN1依次到 111 选 IN7。在 8086 系统里实验线路用 IOY0 做片选配合 XIOW、XIOR 完成启动转换和读结果。接线时 A、B、C 三根地址线接系统总线的 XA0、XA1、XA2D0 到 D7 接 XD0 到 XD7WR 接 XIOWRD 接 XIORCS 接 IOY0。启动转换的关键动作是先向通道地址写一次产生 ALE 锁存通道号并触发 START然后等待 EOC 变高再读数据。很多同学第一次跑的时候读出来全是 0 或者全是 FF八成是 EOC 没等或者 OE 没给。下面这段 8086 汇编片段展示了标准的启动加读取流程; ADC0809 单通道采集通道号由 AL 传入0~7 ; 端口地址假设为 200HIOY0 译码后 MOV DX, 200H ; ADC0809 基地址 MOV AL, 00H ; 选 IN0 通道 OUT DX, AL ; 写通道号ALE 锁存并启动转换 WAIT_EOC: IN AL, DX ; 读 EOC 状态部分实验箱 EOC 接在数据位 TEST AL, 80H ; 检查最高位是否为 1 JZ WAIT_EOC ; EOC 未变高则继续等待 IN AL, DX ; 读取转换结果 MOV [RESULT], AL ; 存入指定存储单元这段代码里有两个容易忽略的点。第一OUT DX, AL写通道号时ADC0809 的 ALE 和 START 是连在一起的所以写操作同时完成了通道锁存和启动转换。第二EOC 的读取方式取决于实验箱的具体接线有的板子把 EOC 接到数据总线的某一位有的接到中断引脚需要先确认线路图再改TEST指令里的掩码。转换时间取决于 CLOCK 引脚上的时钟频率实验箱一般给 1.19MHz 左右的时钟对应约 100μs 的转换时间等待循环里不需要额外加延时。在 51 单片机平台上地址译码方式变成部分译码片选地址为 7FF8H 到 7FFFH分别对应 8 个通道。接线时 P0 口做数据总线P3.3 接 EOC 或直接查询WR 和 RD 分别接单片机的写读信号。51 的代码结构类似但端口操作从OUT指令变成MOVX指令; 8031 读取 ADC0809 通道 0结果存入 R0 MOV DPTR, #7FF8H ; 通道 0 地址 MOVX DPTR, A ; 启动转换A 内容无关 WAIT: JB P3.3, WAIT ; 等待 EOC 变低再变高视接线而定 MOVX A, DPTR ; 读取结果 MOV R0, A ; 存入 R0注意 51 平台的地址 7FF8H 到 7FFFH 是部分译码的结果实际有效地址位只有低三位参与通道选择高位地址线不参与译码所以写 7FF8H 和写 0000H 可能选中同一个通道具体要看实验箱的译码电路。这一点在调试时经常让人困惑建议先用万用表确认片选信号再写代码。2.2 DAC0832 的三种波形生成与示波器观测DAC0832 是 8 位电流输出型 D/A 转换器内部有输入寄存器和 DAC 寄存器两级锁存可以工作在直通、单缓冲和双缓冲三种模式。实验里产生锯齿波、脉冲波和三角波本质上就是往 D/A 寄存器里按不同规律写数据。在 8086 系统里CS 接 IOY7WR 接 XIOW数据线 D0 到 D7 接 XD0 到 XD7输出端 IOUT1 和 IOUT2 接 LM324 运放转换成电压信号再送到示波器观察。锯齿波的生成逻辑最简单从 0 递增到 255写满后回到 0 重新开始。三角波是先递增到 255 再递减到 0。脉冲波则是写 0 保持一段时间再写 255 保持一段时间。下面这段 8086 汇编展示了锯齿波的生成; DAC0832 锯齿波生成端口地址 300H MOV DX, 300H ; DAC0832 端口 MOV AL, 00H ; 从 0 开始 SAWTOOTH: OUT DX, AL ; 写入 D/A 寄存器 INC AL ; 递增 JMP SAWTOOTH ; 循环AL 溢出后自动回 0这段代码没有加延时输出频率取决于 CPU 执行OUT和INC的速度。如果示波器上看到的波形频率太高或者有毛刺可以在循环里插入NOP或者用循环计数做延时。在 51 平台上产生周期 2ms 的锯齿波需要计算延时假设单片机晶振 12MHz机器周期 1μs256 个数据点每个点延时约 7.8μs用两层循环实现。三角波和阶梯波的代码结构类似区别在于数据变化的方向和步长。注意DAC0832 的参考电压 Vref 接 5V 时输出电压范围是 0 到 -5V因为 IOUT 是电流流出方向如果示波器上看到的波形反相检查运放接法或者把 Vref 改成 -5V。3. 步进电机与直流电机从 8255 端口到驱动板的完整控制链路3.1 35YJ46 四相八拍步序与 8255 端口映射35YJ46 是四相八拍步进电机工作电压 DC12V励磁线圈有 A、B、C、D 四相。八拍步序表在实验指导书里给得很清楚01H、03H、02H、06H、04H、0CH、08H、09H对应 PB3 到 PB0 的电平组合。这个步序的本质是单四拍和双四拍交替单拍时只有一相通电双拍时两相通电这样步距角更小、运行更平稳。在 8086 系统里8255 的 PB 口接电机驱动板的输入端PB0 到 PB3 分别对应 A、B、C、D 四相。8255 的初始化需要设置控制字PB 口输出、PA 口和 PC 口可以不管。控制字 80H 表示 PA、PB、PC 全部输出如果只想让 PB 输出控制字可以设成 80H 或者 88H 取决于具体模式。下面这段代码展示了步进电机连续转动的控制逻辑; 8255 初始化PB 口输出控制字 80H MOV DX, 0FFFEH ; 8255 控制口地址视实验箱译码而定 MOV AL, 80H ; 方式 0PA/PB/PC 全部输出 OUT DX, AL ; 步进电机八拍步序表 MOV SI, OFFSET STEP_TABLE MOV CX, 08H ; 八拍 STEP_LOOP: MOV AL, [SI] ; 取步序值 MOV DX, 0FFFCH ; PB 口地址 OUT DX, AL ; 输出到 PB 口 CALL DELAY ; 延时控制转速 INC SI ; 指向下一个步序 LOOP STEP_LOOP ; 循环八拍 JMP STEP_LOOP ; 连续转动 STEP_TABLE DB 01H, 03H, 02H, 06H, 04H, 0CH, 08H, 09H延时子程序DELAY决定了电机转速。延时越长转速越慢延时太短电机会失步或者发出啸叫声。实验里要求控制电机每转 180° 停 5 秒35YJ46 的步距角是 5.625°/64 步八拍模式下每转 64 步180° 对应 32 步走完 32 步后调用 5 秒延时再继续。在 51 平台上P1.0 到 P1.3 直接接驱动板步序表相同只是端口操作从OUT变成MOV P1, A。3.2 直流电机 PWM 调速占空比、频率与达林顿驱动直流电机调速实验用的是 PWM 方式通过 8031 的 P1.0 端口输出脉冲波经达林顿管驱动电机。PWM 调速的核心参数是占空比和频率占空比决定平均电压从而决定转速频率决定电机运行的平稳度太低会有明显抖动太高则达林顿管开关损耗增加。实验里要求第一个 10 秒慢速转动第二个 10 秒快速转动本质就是改变占空比。下面这段 51 汇编展示了 PWM 输出的基本结构; 8031 P1.0 输出 PWM占空比由 R0 控制0~255 ; R0 越大高电平时间越长转速越快 PWM_LOOP: MOV R1, #00H ; 低电平计数 MOV R2, #00H ; 高电平计数 SETB P1.0 ; 输出高电平 HIGH_LOOP: INC R2 CJNE R2, R0, HIGH_LOOP ; 高电平持续 R0 次 CLR P1.0 ; 输出低电平 LOW_LOOP: INC R1 CJNE R1, #0FFH, LOW_LOOP ; 低电平持续 255-R0 次 JMP PWM_LOOP这段代码里高电平持续时间由 R0 决定低电平持续时间固定为 255 减去 R0总周期约 255 个循环。改变 R0 就改变了占空比。实际调试时如果电机不转或者只发出嗡嗡声先检查达林顿管的基极电阻是否合适再确认电源电压是否达到 12V。达林顿管如 ULN2003的驱动能力有限42 步进电机这类负载需要确认电流是否在芯片承受范围内必要时加散热片。提示PWM 频率建议控制在 1kHz 到 10kHz 之间。低于 1kHz 电机会有明显抖动和噪音高于 10kHz 达林顿管发热会明显增加。实验箱上如果电机转速不稳优先检查电源退耦电容是否接好。4. 避坑与排查接线、时序、驱动电流里最容易翻车的几处4.1 现象A/D 转换结果始终为 0 或 FF原因EOC 信号没有正确等待或者 OE 使能信号没有给到。ADC0809 在转换完成后 EOC 变高如果程序在 EOC 变高之前就读数据读到的就是无效值。另外部分实验箱的 OE 需要外部给高电平才能输出数据如果 OE 接地数据总线始终是高阻态。解决先用万用表测 EOC 引脚在启动转换后的电平变化确认 EOC 确实有从低到高的跳变。然后在代码里加等待循环确保 EOC 变高后再读。如果 OE 需要外部控制检查接线图里 OE 是否接到了译码器的读信号上。4.2 现象D/A 输出波形频率不对或者没有波形原因DAC0832 的 WR 信号没有正确连接或者 CS 片选地址写错。DAC0832 需要 WR 和 CS 同时有效才能锁存数据如果 CS 接错写操作不会生效。另外如果两级寄存器都工作在直通模式数据变化会直接反映到输出但如果 XFER 接错DAC 寄存器可能一直不更新。解决用示波器测 DAC0832 的 WR 和 CS 引脚确认写操作时两个信号都有低电平脉冲。如果 CS 一直是高电平检查译码电路地址是否和代码里的端口地址一致。实验箱上 IOY7 对应的地址需要根据译码器型号计算常见的是 300H 到 307H 或者 380H 到 387H。4.3 现象步进电机不转或者只抖动不连续转动原因步序表顺序错误或者延时太短导致失步。八拍步序 01H、03H、02H、06H、04H、0CH、08H、09H 的顺序不能乱如果写成 01H、02H、04H、08H 这种单四拍顺序电机虽然能转但力矩小、容易失步。延时太短时电机转子来不及跟上磁场变化就会原地抖动。解决先确认步序表顺序和实验指导书一致再用示波器测 PB0 到 PB3 的输出波形确认八拍循环正确。然后逐步增加延时直到电机能平稳连续转动。35YJ46 的响应频率有限延时一般不低于 1ms。4.4 现象直流电机调速时转速不随占空比变化原因PWM 频率太低电机把脉冲当成断续通断而不是平均电压。或者达林顿管驱动能力不足高占空比时管压降太大电机实际得到的电压变化不明显。解决提高 PWM 频率到 1kHz 以上同时检查达林顿管的基极驱动电流是否足够。如果电机额定电流较大考虑用 MOS 管替代达林顿管或者加续流二极管保护驱动管。4.5 现象8086 和 8031 两套平台代码移植后不工作原因两套平台的地址译码方式不同8086 用 IOY0 到 IOY7 做片选地址是 16 位 IO 地址8031 用部分译码地址是 7FF8H 到 7FFFH 这样的存储映射地址。直接把 8086 的端口地址改成 51 的地址片选逻辑可能对不上。解决移植时先确认两套平台的译码电路8086 的 IO 地址和 51 的 MOVX 地址是两套独立的地址空间。51 平台上 P2.7 参与译码时地址高字节决定片选低字节决定通道。建议先在 51 上单独测试一个通道确认地址正确后再移植完整代码。5. 进阶技巧用示波器验证时序、用表格记录转换曲线、用循环延时替代硬件定时器5.1 用示波器抓 A/D 启动和 EOC 时序A/D 转换实验里最值得做的一件事是用示波器双通道同时抓 START 和 EOC 信号。START 是写通道号时产生的窄脉冲EOC 在转换完成后变高。把两个信号放在同一时间轴上可以直接读出转换时间。实验箱的 CLOCK 频率是 1.19MHz理论转换时间约 100μs如果实测偏差超过 20%检查 CLOCK 引脚是否有干扰或者频率漂移。这个验证方法比反复改代码有效得多因为时序问题一旦确认代码里只需要调整等待循环的次数。5.2 用表格记录 W 电位器电压与转换结果实验要求里有一条用万用表测出 W 输入电压记录显示屏上的响应数据列成表格并作出转换图。这个步骤看起来简单但实际做的时候要注意万用表测的是模拟输入电压显示屏显示的是 8 位数字量理论关系是数字量 电压 / 5V * 255。如果实测曲线在中间某一段偏离直线可能是电位器接触不良或者 ADC 的参考电压不稳定。建议至少取 10 个点从 0V 到 5V 均匀分布记录后画成折线图观察线性度。输入电压V理论数字量实测数字量偏差0.00000.52524-11.0515212.0102101-13.015315524.0204203-15.02552550偏差在 ±2LSB 以内属于正常范围ADC0809 的总不可调误差是 ±1LSB加上电位器和万用表的测量误差±2 是可以接受的。如果偏差超过 ±5LSB检查参考电压是否稳定在 5V或者模拟输入是否有噪声。5.3 用循环延时替代硬件定时器做 PWM51 单片机做 PWM 调速时如果不想占用定时器资源可以用循环延时实现。上面第 3 章里的 PWM 代码就是纯循环方式优点是简单、不依赖定时器中断缺点是频率和占空比精度受晶振和指令周期影响。实际调试时我一般会先算出目标频率对应的循环次数再用示波器测实际输出频率微调循环里的NOP数量。比如目标 2kHz周期 500μs12MHz 晶振下约 500 个机器周期高电平和低电平各占一半就是各 250 个周期。循环计数从 0 到 250 对应高电平从 0 到 250 对应低电平总周期 500 个机器周期。如果电机对调速精度要求高还是建议用定时器中断做 PWM循环方式只适合实验验证。从那以后我每次做电机调速实验都会先用示波器确认 PWM 频率和占空比再接电机避免因为频率不对导致电机发热或者驱动管烧毁。希望帮到你。本文还有配套的精品资源点击获取