




已阅读5页,还剩149页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章低频数字式相位测量仪的设计 3 1设计任务3 2设计方案论证3 3系统硬件设计 3 4系统软件设计3 5系统设计总结 3 1设计任务 设计一个如图3 1所示的低频数字式相位测量仪 设计基本要求如下 1 频率范围 20Hz 20kHz 2 相位测量仪的输入阻抗 100k 3 允许两路输入正弦信号的峰 峰值可分别在1 5V范围内变化 4 相位测量绝对误差 2 5 具有频率测量及数字显示功能 6 相位差数字显示 相位读数为0 359 9 分辨率为0 1 图3 1相位测量仪 3 2设计方案论证 从功能角度来看 相位测量仪要完成信号频率的测量和相位差的测量 相位测量仪有两路输入信号 也是被测信号 它们是两个同频率的正弦信号 频率范围为20Hz 20kHz 正 好是音频范围 幅度为Up p 1 5 V 可以扩展到0 3 5V 但两者幅度不一定相等 现在来讲解一下相位 相位差的概念 在 电路原理 课程中已介绍过这些概念 不妨令正弦电信号为 A t Amsin t 0 式中 Am称为幅值 最大值 且Am A A称为有效值 t t 0称为相位 0称为初相位 称为角频率 Am 0称为正弦量的三要素 只有两个同频率的 正弦 信号才有相位差的概念 不妨令两个同频率的正弦信号为 A1 t A1msin t 01 A2 t A2msin t 02 则相位差 t 01 t 02 01 02 由此可看出 相位差在数值上等于初相位之差 是一个角度 不妨令 T 式中T 是相位差 对应的时间差 且令T为信号周期 则有比例关系T 360 T 可以推导得到 此式说明 相位差 与T 一一对应 可以通过测量时间差T 及信号周期T 计算而得到相位差 这就是相位差的基本测量原理 由相位差的基本测量原理可知 相位差的测量本质上是时间差T 及信号周期T的测量 也就是时间的测量 而时间的测量不可避免地要用到电子计数器 时间的测量有多种方法 而设计题目关于相位测量仪的技术指标要求会影响到我们对方案的选择 由一般常识可知 MCU应用系统一般能较好地实现各种不同的测量及控制功能 但有时达不到设计要求的技术指标 而因FPGA具有工作速度快 编程方便等特点 往往能满足一些设计要求比较高的技术指标 因此 有人提出 在进行电子系统设计时 可用MCU实现系统功能 用FPGA完成系统指标 3 2 1方案1 以MCU为核心的实现方案 1 框图 以单片机为核心的相位测量仪原理框图如图3 2所示 图3 2以MCU为核心的相位测量仪原理框图 2 测量工作原理 两路待测信号经整形后变成了矩形波信号I V 且可以认为I和V是同频率 不同相位的矩形波 1 频率的测量 MCU对信号频率的测量可以采用直接测频率的方法和测周期的方法 一般是信号频率较高时 采用直接测频率的方法 而信号频率较低时 采用测周期的方法 1 用直接测频率的方法获得信号频率 让定时器 计数器T1对外部事件计数 而让定时器 计数器T0定时1s 只有在这1s内T1启动对外部事件 即信号I 计数 则T1的计数值就是待测信号的频率 2 用测周期的方法获得信号频率 由图3 3可知 对I进行2分频后的信号波形中 高电平宽度正好对应I的周期 我们将此高电平信号作为MCU内部定时器的硬件启动 停止信号 便可测得周期T 再由公式f 1 T 计算得到频率f 图3 3用测周期的方法获得信号频率 2 相位差的测量 鉴相器就是异或门 在鉴相器的输出波形IV中 正脉冲宽度就是要测量的I和V相位差所对应的时间差T 如图3 4所示 图3 4鉴相器的输入 输出波形图 在测量相位差时还应考虑超前 滞后两种情况 图3 4中所示为I超前V 把IV波形中的正脉冲作为门控信号 控制闸门的启闭 即控制MCU内部定时器 计数器的启动 停止 从而达到测量时间差T 的目的 再根据公式 T 计算得到相位差 另外 由图3 4可知 I V信号是I信号的二倍频 I与V同频 由此可见 对于同频不同相的两个信号 经过异或门后可得到二倍频的信号 因此从这个意义上讲 异或门可实现信号的二倍频 3 MCU测量时间差 周期的方法 下面详细谈谈MCU测量时间差 周期的方法 1 工作原理 MCU 51系列单片机的芯片内部集成了两个16bit的硬件定时器 记数器 它们是T0 T1 MCU芯片内部的硬件定时器 计数器有三个特点 定时器 计数器可以与CPU并行工作 定时器 计数器可以采用中断方式与系统协调工作 定时器 计数器可以由软件或硬件控制启动和停止 我们知道 单片机的定时器 计数器受TMOD及TCON的控制 如图3 5所示 图3 5TMOD和TCON 1 若GATE 0 则由TRi控制定时器 计数器的启动和停止 为纯软件控制方式 2 若GATE 1 TRi 1 则由INTi引脚的外部信号控制定时器 计数器的启动和停止 是纯硬件控制方式 3 若GATE 1 则由TRi和INTi引脚的外部信号混合控制定时器 计数器的启动和停止 是软 硬件结合控制方式 我们让定时器 计数器工作在定时工作方式 其计数器对内部机器周期进行加1计数 而定时器 计数器的工作启动 停止采用外部硬件控制 2 具体实现方法 1 电路图如图3 6所示 该电路由单片机 整形电路 门电路等组成 由定时器 计数器T0 T1分别测量周期 时间差 图3 6MCU测量时间差 周期的电路图 2 时序图如图3 7所示 需要说明的是 由软件创建一标志位2FH 1 当输入引脚P3 6 0时 CPU置位标志位2FH 1 而当P3 6 1时 CPU在读取时间差数据后清零标志位2FH 1 图3 7时序图 3 MCU的软件设计 系统连续3次测量时间差和周期 每一次测量时间差和周期占用两个待测信号周期T的时间 MCU在处理数据 数字滤波 计算 送数据显示 键盘处理 期间 使用软件停止定时器工作 显示部分采用UART方式0串行送数据给74LS164 由74LS164驱动LED数码管显示 这样可以减轻CPU的负担 相对于动态扫描而言 键盘处理实际上就是通过按键S1切换显示不同的内容 即显示频率和相位差 系统主程序是一个顺序执行的循环程序 框图如图3 8所示 子程序SUB1完成的功能是 测量3次时间差 周期并保存到内存 子程序SUB1的流程框图如图3 9所示 因为第一次测量时间差 周期的起始时刻有一定的随机性 这是由于软件启动定时器 计数器T0 T1的时刻是随机的 所以 由定时器 计数器T0 T1第一次分别测得的周期 时间差是不准确的 故舍弃之 图3 8主程序流程框图 图3 9测量时间差 周期子程序流程图 4 方案1存在的问题 以上所讨论的单片机系统可以实现对频率的测量和对相位差的测量功能 但是 该系统不一定能满足设计课题所要求的技术指标 而且 在同一个单片机应用系统中实现频率和相位差的测量 程序设计也相当复杂 下面从技术指标的角度讨论这种方案的可行性 根据题目要求 输入信号频率范围是20Hz 20kHz 相位差测量绝对误差不大于2 而采用MCU为核心的解决方案 不妨令MCU的外接晶振为12MHz 则MCU的机器周期为1 s 1 对信号周期的测量 若输入信号频率范围为20Hz 20kHz 则输入信号周期为T 50ms 50 s 最大周期为50ms 即50000 s 定时器 计数器T0工作在定时方式1时为16bit二进制加1计数器 最大计数值为65535 0FFFFH 65535 50000 因此能满足对信号周期的测量要求 2 对信号相位差的测量 要求相位差测量绝对误差 2 如果输入信号频率 f 20kHz 则输入信号周期为T 50 s 可以认为计数器 定时器的计数误差为 1个字 当外接晶振为12MHz时 计数器 定时器T1的计数误差为正负一个机器周期 即 1 s 由此而形成的相位差绝对误差为7 2 计算过程如下 因为有 50 s 360 1 s 则有 同理 若外接晶振为24MHz时 相位差绝对误差 3 6 3 为了解决上面的矛盾可以考虑提高外接晶振的频率 一方面 当外接晶振为24MHz时 相位差绝对误差 3 6 这是不允许的 另一方面 当提高外接晶振的频率后 周期T的最大计时值为65535 0 5 s 32767 s 显然不能满足测量最大周期 T 50ms的 情况 为此 可考虑T0 T1溢出中断 在溢出中断服务程序里利用软件计数器来解决不能测量最大信号周期T 50ms的问题 综上所述 方案1很难满足题目给出的设计要求 3 2 2方案2 MCU与CPLD FPGA相结合的实现方案 1 原理方框图 方框图如图3 10所示 系统主要由FPGA和MCU组成 图3 10方案2方框图 2 设计思路 让FPGA实现数据的采集 即将待测信号的频率f 两路输入信号的相位差所对应的时间差T 分别转换为二进制数据 供MCU读取使用 MCU从FPGA获取数据 并经CPU计算 转换等有关处理后 得到信号的频率和相位差并送LED数码管显示 1 FPGA的工作情况 待测信号1 待测信号2经整形电路处理后 变为矩形波 不妨令其为A B 可以认为A B是两个同频率的有相位差的矩形波 FPGA通过对整形后的信号A B的处理 要获得以二进制数形式表示的信号频率以及相位差对应的时间差 1 频率的测量 对频率的测量采用测周期的方法 即在信号周期T时间内 对时标信号进行计数 设时标信号频率为f0 时标信号周期为T0 对信号A二分频后的信号高电平宽度就是信号周期T 以此高电平宽度作为闸门的控制信号 控制计数器在T时间内对f0进行计数 则有N1 f0 T 被测信号的频率为 上式中N1是计数器的计数值 当f0一定时 它的大小表示信号频率的大小 2 相位差对应的时间差T 的测量 对相位差的测量跟频率测量的方法类似 不过闸门控制信号为AB的高电平宽度 则有 3 f0的确定及FPGA的二进制数据位数的确定 因为相位差测量绝对误差 2 而FPGA在测量T 时有一个字的误差 对待测信号频率f 20kHz而言 下式成立 2 T 360 50 s则有 T 0 278 s 这就是说 FPGA在采集相位差对应的时间差T 时 至少要能分辨出0 278 s的时间间隔 为了兼顾MCU计算的方便和时标信号获得的方便 我们采用T0 0 1 s 即 f0 10MHz的时钟脉冲作为时标信号 当选定f0 10MHz后 就可以确定FPGA采用的二进制数据的位数 对于待测信号频率f 20Hz而言 N1对应取最大值 因为f 20Hz时周期T 50ms 在50ms内对T0计数 计数值为N1 50ms 0 1 s 5 100000 500000 而218 262144 219 524288 所以有218 500000 219 则FPGA的二进制数据位数确定为19bit 2 MCU的工作情况 MCU从FPGA要获得两种数据 这两种数据都是19bit无符号二进制数 一种是被测信号周期T对应的二进制数据 单位是0 1 s 另一种是两个待测信号的相位差对应的时间差T 单位是0 1 s 这样的话 MCU与FPGA之间要设置两个握手信号DSEL FEN 实际上 DSEL和FEN是MCU发给FPGA的控制信号 设置情况如下 1 DSEL 0且FEN 1时 MCU从FPGA读取19bit的周期数据 单位为0 1 s 2 DSEL 1且FEN 1时 MCU从FPGA读取19bit的时间差数据 单位为0 1 s 3 FEN 0时 FPGA内部电路不予理睬 MCU要完成的任务有三个方面 一是从FPGA获得19bit的二进制数据 并控制FPGA的工作 二是对所获得的数据进行处理 完全由软件实现 三是将经过处理后的数据送给LED数码管显示 另外 由于送LED数码管显示的数据有相位差和频率两种 因此应设置一个按键开关 以便实现显示内容的切换 3 3系统硬件设计 3 3 1输入电路的设计 输入电路起到波形变换及整形的功能 由于FPGA对脉冲信号比较敏感 而被测信号是周期相同 幅度和相位不同的两路正弦信号 为了准确地测量出两路正弦信号的相位差及其频率 需要对输入波形进行整形 使输入信号变成矩形波信号 并送给FPGA进行处理 我们设计了两种整形输入电路方案 第一种方案是使用单门限电压比较器来完成 当输入信号电压每通过一次零时单门限电压比较器的输出就要翻转一次 即比较器的输出端将产生一次电压跳变 它的正 负向幅度均受到供电电源的限制 因此 输出电压波形是具有正负极性的方波 这样就完成了电压波形的整形工作 但是 通常情况下 输入信号往往会含有干扰 这对单门限电压比较器尤为不利 由于有干扰信号 导致单门限电压比较器在输入信号过零点时会产生多次触发翻转的现象 这样就会导致FPGA采集数据 计数 不准确 从而使单片机无法计算出正确的被测信号的频率和相位差数值 这种方案的电路图如图3 11所示 图3 11采用单门限电压比较器的整形电路 另外 在相位差测量过程中 不允许两路被测输入信号在整形输入电路中发生相对相移 或者应该使得两路被测信号在整形输入电路中引起的附加相移是相同的 因此 我们对A B两路信号采用了相同的整形电路 为了避免出现被测输入信号在过零点时多次触发翻转的现象 我们设计了第二种整形电路 即使用施密特触发器组成的整形电路 由于施密特触发器在单门限电压比较器的基础上引入了正反馈网络 因为正反馈的作用 它的门限电压随着输出电压Uo的变化而改变 从而使施密特触发器有两个门限电压 所以可以提高输入电路的抗干扰能力 第二种整形电路如图3 12所示 电路中我们使用两个施密特触发器对两路被测输入信号进行整形 在图3 12中 比较器LM339连接成施密特触发器的形式 为了保证输入电路对相位差测量不带来误差 必须保证两个施密特触发器的两个门限电平对应相等 这可以通过调节电位器R8来实现 图3 12由Schmitt触发器构成的整形电路 3 3 2MCU电路的设计 这部分电路由单片机 晶振电路 按键电路等组成 在设计中我们充分利用单片机具有较强的运算能力和控制能力这一特点 使用单片机的P0口 P2口及P1 0 P1 1 P1 2接收FPGA送来的对应于被测输入信号的周期 相位差的19bit二进制数据 并在单片机内部完成对这19bit二进制数据的处理及相关运算 P1口的P1 7 P1 6接入两个轻触按键 结合软件编程实现频率与相位差的显示切换功能 单片机完成对FPGA的控制 使FPGA按照单片机的要求通过19根I O线分别发送与被测输入信号的周期 相位差对应的时间差数据 MCU与FPGA的握手信号为FEN DSEL 分别接在P1 3和P1 5 即4脚和6脚 另外 在设计中使用了单片机串口UART 将待显示信息送给显示模块显示 本设计中 我们使用的单片机是AT89C51 它是美国ATMEL公司生产的8位单片机 它的主要特性有 与MCS 51兼容 内部集成有4KB可编程Flash存储器 128 8位内部RAM 可1000次写 擦循环 数据可保留10年 0 24MHz的全静态工作方式 三级程序存储器锁定 32根可编程I O线 两个16位定时器 计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内含振荡器和时钟电路 因此 它完全可以满足本系统设计的需要 MCU电路图如图3 13所示 为了提高MCU的I O口带负载能力 电路中采用了3个上拉排电阻 图3 13MCU电路图 3 3 3FPGA电路的设计 我们选择ALTERA公司的FPGA 芯片型号为EP1K30TC144 3 该芯片具有如下特点 1 高密度 典型门为30000个 可用门为119000个 逻辑单元为1728个 嵌入式阵列块 EAB 为6个 24576位内部RAM 可用I O为102个 2 低功耗和多电压I O接口 该器件的核心电压为2 5V 功耗小 支持高电压I O接口 引脚可以与2 5V 3 3V 5V电压器件兼容 并且可以进行摆率控制和漏极开路输出 3 增强型嵌入式结构 每个EAB有以256 16 512 8 1024 4 2048 2位任意组合的RAM 可做单口RAM 也可以设计成双口RAM 4 时钟锁定和时钟自举 该器件为设计人员提供了可供选择的时钟锁定 ClockLock 和时钟自举 ClockBoost 电路 这两种电路都含有锁相环 PLL 时钟锁定电路为一个同步的PLL 可减小器件内的时钟延迟和偏移 时钟自举电路提供了一个时钟乘法器 可以很容易地实现时域逻辑乘法并减小对资源的占用 EP1K30TC144 3能够满足多功能 低功耗 低成本 高性能的系统设计要求 FPGA电路的设计我们采用手头已有的FPGA适配板 由湖南长沙三知电子有限公司生产 来实现 该FPGA适配板包含FPGA芯片EP1K30TC144 3 下载电路 FPGA配置存储器 FPGA内核电源模块等 当给FPGA配置存储器下载配置文件后 该FPGA适配板只要接入 5V电源就可以正常工作于用户应用系统中 嵌入用户系统中 FPGA与单片机的连接框图如图3 14所示 本部分设计充分利用了FPGA可编程资源多 速度快 口线多 实时采样性好等特点 对整形后的输入信号进行数据采集 FPGA的时钟信号clk采用40MHz四引脚石英晶体多谐振荡器信号源 由FPGA对40MHz信号进行四分频 得到10MHz的信号 将此10MHz的信号作为数据采样用的时标信号 采样周期为0 1 s 图3 14FPGA与单片机的连接框图 FPGA配置存储器选用EPC1441 EPC1441是OTP OneTimeProgram 型串行PROM 采用PDIP8封装 有440800 1位 3 3V 5V供电 EPC1441在编程时 要在其2脚和5脚之间接一个300pF的电容器 3 3 4显示模块的设计 系统硬件电路中MCU与FPGA进行数据交换时占用了P0口 P2口和P1 0 P1 1 P1 2 因此 我们采用LED数码管静态显示的方式 显示电路由8个共阴极7段LED数码管和8片串入 并出的移位寄存器74LS164芯片组成 这种显示方式不仅可以得到较为简单的硬件电路 而且可以得到稳定的数据输出显示 不仅占用单片机端口少 而且可以充分利用单片机芯片内部的串行口资源 容易掌握其编程规律 简化软件编程 试验证明 这种显示模块具有较高的可靠性 设计出的显示模块电路图如图3 15所示 图3 15显示模块电路图 共阴极7段LED数码管的段码编码如表3 1所示 表3 1共阴极7段LED数码管的段码表 3 3 5相位测量仪整体电路 综合上面的设计过程 相位测量仪整体电路图如图3 16所示 图中省略了直流电源的设计 图3 16相位测量仪整体电路图 3 4系统软件设计 3 4 1FPGA的VHDL程序设计及源程序 1 FPGA完成的任务 由前面的叙述可知 在系统中 FPGA对整形后的两路待测信号 clkaa clkbb 进行数据采集 1 对输入的40MHz时钟脉冲clk进行4分频 得到系统所需要的10MHz时标信号clkf 2 19bit的加1计数器da 完成对clkf的计数 以便分别得到与相位差对应的时间差数据datab和待测信号的周期数据dataa 由前面的分析可知 datab和dataa都是19bit的二进制数据 时间单位为0 1 s 3 为了实现第 2 点的功能 应该要产生 计数器清零信号 计数器使能信号 其他控制信号的逻辑电路 4 根据系统设计方案可知 FPGA与MCU之间的数据传送采用19根I O口线 19bit 而dataa及datab均是19bit的二进制数据 因此 应该设计一个二选一的数据选择器 以便有选择地将dataa或者datab送到FPGA的输出端口data 显然 该二选一数据选择器的选择信号应该是来自FPGA与MCU之间的握手信号 fen和dsel 这实际上表明FPGA的工作受控于MCU MCU往往是系统中的控制中心和数据处理中心 为了实现这一功能 应该设计3个19bit的数据寄存器分别存放dataa datab data 5 利用D触发器的特点实现clkaa与clkbb信号的超前 滞后检测 设置pre为输出端口信号 当pre 1时表示clkaa超前clkbb 当pre 0时表示clkaa滞后clkbb 2 FPGA的工作时序 FPGA的工作时序如图3 17所示 由时序图可以看出 FPGA在待测输入信号的相邻两个周期内获取数据一次 在待测输入信号的第一个周期内完成数据采集 而在后接的下一个待测输入信号周期内完成数据传送及清零功能 在设计时 采用同步信号 脉冲上升沿 rising edge 实现同步清零和同步传送数据 这样可以增强系统的抗干扰能力 提高系统的可靠性 图3 17FPGA的工作时序 3 FPGA芯片内部电路框图 根据对 FPGA完成的任务 及 FPGA的工作时序 的讨论 不难画出FPGA芯片内部的逻辑电路框图 如图3 18所示 图3 18FPGA芯片内部的逻辑电路框图 4 FPGA的VHDL源程序 FPGA的开发是在MAX plus 开发软件平台下及EDA实验开发装置上完成的 其VHDL源程序代码如下 PhasemeasuringmeterVHDLprogram modifiedbyOU Weimingon2004 11 15 libraryieee useieee std logic 1164 all useieee std logic unsigned all entitytest2is port dsel instd logic choosethedisplay clk instd logic the40MHz clkaa instd logic clkbb instd logic fen instd logic pre outstd logic data outstd logic vector 18downto0 thedataformcu end architectureartoftest2is signalclka std logic signalclkb std logic signalclkf std logic signaldataa std logic vector 18downto0 dataoftheregister signaldatab std logic vector 18downto0 dataoftheregister signalcla clb std logic twodividefrequencysignalsoftheclkaorclkb signalda std logic vector 18downto0 variableofthefrequency signalclr std logic thesignalofclearingdacounter signalena std logic thesignalofenable begin clka clkaaand 1 clka clkaa clkb clkbband 1 clkb clkbb ena cla clr notclka and notena u1 process clk fourdividefrequency variabletemp integerrange0to4 variablecl std logic begin ifrising edge clk then iftemp 3then temp 0 cl 1 else temp temp 1 cl 0 endif endif clkf cl endprocess u2 process clka claistwodividefrequencyofclka begin ifrising edge clka then cla notcla endif endprocess u3 process clkb clbistwodividefrequencyofclkb begin ifrising edge clkb then clb notclb endif endprocess u4 process clkb frontorbackdetecter begin ifrising edge clkb then pre cla endif endprocess u5 process clr clkf ena counterhas19bit begin ifrising edge clkf then ifclr 1 then da 0000000000000000000 elsifena 1 then da da 1 endif endif endprocess u6 process clkb transportphasedata begin ifrising edge clkb then ifena 1 then datab da endif endif endprocess u7 process clka transportperioddata begin ifrising edge clka then ifclr 0 then dataa da endif endif endprocess u8 process fen dsel selectphaseorperioddatatooutputport begin iffen 1 then casedselis when 0 data data null endcase endif endprocess endart 5 FPGA的配置 1 CPLD基于EEPROM 电可擦除存储器 或Flash技术 它被编程后改变了其内部的电可擦除存储单元中的信息 掉电后可保持编程信息 2 大部分FPGA基于SRAM 动态随机存储器 查找表的编程单元 FPGA被编程后 编程信息保存在SRAM中 所以FPGA在掉电后编程信息立即丢失 在下次上电后 还需要重新载入编程信息 因此 对于FPGA的编程一般称为配置 configuration 3 由系统硬件设计可知 FPGA芯片EP1K30TC144 3选用的上电自动配置芯片为EPC1441 配置芯片的编程是由普通编程器将 POF文件烧进配置芯片EPC1441里来实现的 而 POF文件是VHDL设计的源文件在编译过程中由开发平台自动产生的 配置芯片中的编程信息一般称为配置信息 FPGA上电后 可主动从配置芯片中获得配置信息 3 4 2MCU的汇编语言程序设计及源程序 1 MCU完成的任务 MCU完成的任务有三个方面 归纳为以下四点 1 从FPGA获取数据 MCU从FPGA获取两种数据 一是待测信号的周期T 单位是0 1 s 为19bit无符号二进制数 二是待测信号的相位差对应的时间差T 单位也是0 1 s 也为19bit无符号二进制数 2 对获取的数据进行处理 按照公式f 10000000 T计算频率 单位是Hz 这是一个多字节除法运算问题 按照公式 T T 3600计算相位差 单位是0 1 这是一个多字节乘法 除法运算问题 3 将计算得到的频率值及相位差值送LED数码管显示 在系统硬件设计时 显示模块中有8个LED数码管 实际需要的LED数码管个数确定方法如下 题目要求相位差显示为0 359 9 分辨率为0 1 则数码管选5个 频率显示20Hz 20kHz 20kHz 20000Hz 则要5个数码管 综合考虑 和 两点 并考虑在显示频率 相位差时分别给出一个标志符号于最右边的数码管上 分别显示 和 H 则选定6个LED数码管作为系统的显示器 这样 显示缓冲区 连续区域 为12Bytes 12个内存单元 为了考虑以后的扩展 实际在软件编程时选用了7个LED数码管 显示缓冲区为14个内存单元 硬件电路中不需要的LED数码管通过软件让其消隐而不显示 6位LED数码管的工作情况为 根据显示选择设置 频率 相位差 CPU从显示缓冲区取数据 通过UART方式0串行输出数据 由74LS164接收数据并驱动6位LED数码管显示 在软件编程时应解决无效数字 0 的消隐问题 以及相位差显示时小数点的显示问题 不需要CPU对LED显示内容定时刷新 与LED动态扫描显示不同 4 为了完成上述步骤 应该有必要的辅助设计 为了有选择地从FPGA分别获取周期T及时间差T 应该由MCU向FPGA提供控制信号FEN DSEL 以便使用19根I O口线完成两个19bit数据的读取 现在约定 FEN 1且DSEL 1时读取时间差数据 FEN 1且DSEL 0时读取周期数据 为了能使6位LED数码管分时显示频率或相位差 并能由人选择控制 需设计一个按键开关S1完成选择 切换 因此 MCU的汇编语言源程序中应包含键盘程序 2 程序流程图 通过分析MCU应完成的任务可知 这些任务可以按顺序执行 没有对时序要求很严格的任务 所以 整个MCU源程序由主程序及若干子程序组成 而主程序是一个循环执行的顺序程序 主程序及主要子程序的程序流程框图如图3 19 图3 24所示 图3 19主程序流程图 图3 20读周期 时间差数据子程序流程图 图3 21计算频率子程序流程图 图3 22计算相位差子程序流程图 图3 23显示子程序流程图 图3 24键盘子程序流程图 3 单片机源程序 用汇编语言编写的单片机源程序如下 ModifiedbyOU Weimingon2004 11 15 18 符号定义 DATALEQU40H 19bit周期T的数据存放内存单元 DATAHEQU41H DATA3EQU42H DATA2LEQU43H 19bit相位差对应的时间差的数据存放内存单元 DATA2HEQU44H DATA33EQU45H 除法占用单元及乘法占用单元 AD0EQU30H 存放被除数 或被乘数 的字节数的单元 AD1EQU31H 存放除数 或乘数 的字节数的单元 AD2EQU32H AD3EQU33H AD4EQU34H AD5EQU35H AD6EQU36H ADAEQU4FH 存放被除数 或被乘数 的末地址 即最低位字节单元地址 ADBEQU5FH 存放除数 或乘数 的末地址 即最低位字节单元地址 ADCEQU4DH ADEEQU5DH DSELBITP1 3 控制FPGA的信号 FENBITP1 5 控制FPGA的信号 KEY1BITP1 7 切换显示的按键S1 KEY2BITP1 6 未使用按键S2 ALABITP3 5 未使用 DISPBITBIT2FH 0 控制显示频率或相位差的标志位 主程序 ORG00H LJMP100H ORG100H MIAN MOV2FH 01H MIAN1 NOP LCALLDUSHUJU 从FPGA读数据 LCALLZHUNBEIZHOUQI 装入频率计算数据 10000000及周期T 分别到 4AH 4FH及5DH 5FH中 CLR2FH 3 JNB2FH 3 DIVDD1 LJMPCHCHU DIVDD1 LCALLDIVD1 调用除法子程序 6字节除以3字节 计算频率 MOV6FH 4FH 二进制形式的频率值在4DH 4EH 4FH中 最高 位在4DH中 MOV6EH 4EH MOV6DH 4DH MOV6CH 4CH MOV35H 4FH MOV34H 4EH MOV33H 4DH MOV32H 4CH LCALLBCDST 将二进制数据转换为BCD码 MOVR0 30H MOVR1 3FH MOVR7 04H MOV30H 0 MOV31H 0 MOV32H 0 MOV33H 0 MOV34H 0 MOV35H 0 MOV36H 0 LCALLBCD 2BCD 将压缩BCD码格式转换成单字节BCD码格式 MOV70H 18 频率值存放在30H 35H中 最低位在30H中 最高 位在35H中 MOV71H 30H 内存单元70H 76H是频率值显示缓冲区 其中70H 是符号位 MOV72H 31H MOV73H 32H MOV74H 33H MOV75H 34H MOV76H 35H MIANWC LCALLX3600 装入相位计算数据 LCALLMULNM 调用乘法子程序求3600乘以时间差 3字节乘以3字节 MOV4AH 5AH 将上述乘积送入除法的被乘数缓冲区 MOV4BH 5BH MOV4CH 5CH MOV4DH 5DH MOV4EH 5EH MOV4FH 5FH MOV5FH DATAL 装入被测周期T的数据 MOV5EH DATAH MOV5DH DATA3 LCALLDIVD1 调用除法子程序计算得到相位差值 MOV35H 4FH 压缩BCD格式的相位差值存放在4FH 4DH中 4FH 中的为最低位 MOV34H 4EH MOV33H 4DH MOV32H 0 LCALLBCDST 将二进制数据转换为压缩格式的BCD码 MOVR0 30H MOVR1 3FH MOVR7 04H MOV30H 0 MOV31H 0 MOV32H 0 MOV33H 0 MOV34H 0 MOV35H 0 MOV36H 0 LCALLBCD 2BCD 由压缩BCD码转换为单字节BCD码 MOV78H 16 相位差值存放在30H 35H中 最低位在30H中 最高位在35H中 MOV79H 30H 内存单元78H 7EH是相位差值显示缓冲区 其中 78H是符号位 MOV7AH 31H MOV7BH 32H MOV7CH 33H MOV7DH 34H MOV7EH 35H CHCHU LCALLDISP调用显示子程序 KEYCOD JBP1 7 MIAN11 查询按键S1 LCALLDELAY1 软件延时消抖 JNBP1 7 等待S1释放 CPL2FH 0 取反标志位2FH 0 LCALLDELAY2 MIAN11 LCALLDELAY1 LCALLDELAY1 LCALLDELAY1 LJMPMIAN1 继续主程序循环 主程序段到此为止 CPU从FPGA读数据到MCU子程序 PROCDUSHUJU DUSHUJU CLRDSEL 先读周期T对应的19bit数据 SETBFEN MOVA P0 MOVDATAL A MOVA P2 MOVDATAH A MOVA P1 ANLA 00000111B 屏蔽掉不需要的高5位 MOVDATA3 A SETBDSEL 准备读时间差对应的19bit数据 NOP NOP NOP MOVA P0 MOVDATA2L A MOVA P2 MOVDATA2H A MOVA P1 ANLA 00000111B 屏蔽掉不需要的高5位 MOVDATA33 A CLRFEN RET NOP PC值出错处理 NOP 空操作 NOP 空操作 LJMPMIAN 重新复位启动 END PROCZHUNBEIZHOUQI 为了计算频率将被除数10000000装入4AH 4FH单元中 ZHUNBEIZHOUQI 将除数 周期T 装入5DH 5FH单元中 2NBYTE NBYTE NBYTE HEREN 3IN31H 4A 4B 4C 4D 4E 4FH 5D 5E 5FH 4D 4E 4FH ZK MOV5FH DATAL MOV5EH DATAH MOV5DH DATA3 MOV4FH 80H 低位 MOV4EH 96H MOV4DH 98H MOV4CH 00H MOV4BH 0H MOV4AH 0H RET NOP PC值出错处理 NOP 空操作 NOP 空操作 LJMPMIAN 重新复位启动 END PROCMULNM 多字节乘法子程序 NBYTESXMBYTES N MBYTESHEREN 3 M 3 4DH 4EH 4FH 5DH 5EH 5FH 5AH 5FH MULNM NOP MOV30H 03H MOV31H 03H MULTT MOVA AD0 MOVR3 AD1 MOVR2 A ADDA R3 INCA MOVAD2 A MOVA ADB CLRC SUBBA R3 MOVAD6 A MOVR1 A SUBBA R2 MOVAD5 A INCR2 MULNMZ MOV R1 00H DECR1 DJNZR2 MULNMZ MULNMB MOVR2 AD0 MOVR1 AD6 MOVR0 ADA CLR00H MULNML MOVA ADB JZMULNMD MOVB R0 MULAB ADDA R1 MOV R1 A JNB00H MULNM1 INCB MULNM1 MOVA B DECR1 ADDCA R1 MOV R1 A MOV00H C DECR0 DJNZR2 MULNML MULNMD MOVR0 AD5 CLRA MOVR2 AD2 MULNMS XCHA R0 INCR0 DJNZR2 MULNMS DJNZR3 MULNMB RET NOP PC值出错处理 NOP 空操作 NOP 空操作 LJMPMIAN 重新复位启动 END PROCX3600 为了计算时间差乘以3600 分别把被乘数 时间差 和乘数 3600 送到4DH 4FH 和5DH 5FH中 X3600 MOV4DH DATA33 MOV4EH DATA2H MOV4FH DATA2L MOV5DH 00H MOV5EH 0EH MOV5FH 10H RET NOP PC值出错处理 NOP 空操作 NOP 空操作 LJMPMIAN 重新复位启动 END PROCBCD 2BCD 功能 将压缩BCD码格式转换成单字节的BCD码格式的子程序 入口参数 R1指向待转换的压缩BCD码的低位字节地址 末地址 R0指向存放结果的低位字节地址 首地址 R7存放压缩BCD码的字节数 作计数器使用 出口参数 无 使用资源 A B PSW R0 R1 R7 存放压缩BCD码及单字节BCD码的存储单元 BCD 2BCD NOP LOOP0 CLRA MOVA R1 MOVB A ANLA 0FH MOV R0 A INCR0 MOVA B SWAPA ANLA 0FH MOV R0 A DECR1 INCR0 DJNZR7 LOOP0 RET NOP PC值出错处理 NOP 空操作 NOP 空操作LJMPMIAN 重新复位启动 END PROCDISP 显示子程序 DISP PUSHACC PUSHPSW PUSHDPH PUSHDPL MOVA 76H 76H单元是频率值显示缓冲区数据最高位 CJNEA 0 NOPB 消隐无效数字0 MOV76H 17 MOVA 75H CJNEA 0 NOPB MOV75H 17 MOVA 74H CJNEA 0 NOPB MOV74H 17 MOVA 73H CJNEA 0 NOPB MOV73H 17 MOVA 72H CJNEA 0 NOPB MOV72H 17 MOVA 71H CJNEA 0 NOPB MOV71H 0 MOVA 70H CJNEA 0 NOPB MOV70H 17 NOPB MOVA 7EH 7EH是相位差值显示缓冲区最高位 CJNEA 0 NOPB1 消隐无效数字0 MOV7EH 17 MOVA 7DH CJNEA 0 NOPB1 MOV7DH 17 MOVA 7CH CJNEA 0 NOPB1 MOV7CH 17 MOVA 7BH CJNEA 0 NOPB1 MOV7BH 17 NOPB1 MOVR1 70H R1指向频率值显示缓冲区首 地址 最低位地址 JNB2FH 0 DISXW JMPDISPP DISXW MOVR1 78H R1指向相位差值显示缓冲区首地址 最低位地址 DISPP MOVR2 7 DISP1 MOVA R1 MOVDPTR TAB MOVCA A DPTR JB2FH 0 OKOK MOVB A MOVA R1 CJNEA 7AH NONO MOVA B ANLA 11110111B 显示相位差时的小数点 JMPOKOK NONO MOVA B OKOK MOVSBUF A 开始发送数据 DL1 JNBTI DL1 等待发送完一帧 8bit 数据CLRTI INCR1 DJNZR2 DISP1 POPDPL POPDPH POPPSW POPACC RET NOP PC值出错处理 NOP 空操作 NOP 空操作 LJMPMIAN 重新复位启动 TAB DB88H 0EBH 04CH 049H 2BH 自制的显示模块的段码表 DB19H 18H 0CBH 08H 09H DB0AH 38H 9CH 68H 1CH 1EH 00FH 0FFH 2AH END PROCDELAY1 DELAY1 软件延时子程序1 CLRALA MOVR6 64H DELAY11 MOVR7 250 DJNZR7 DJNZR6 DELAY11 SETBALA RET NOP PC值出错处理 NOP 空操作 NOP 空操作 LJMPMIAN 重新复位启动 END PROCDELAY2 软件延时子程序2 DELAY2 MOVR6 64H DELAY21 MOVR7 250 DJNZR7 DJNZR6 DELAY21 RET NOP PC值出错处理 NOP 空操作 NOP 空操作 LJMPMIAN 重新复位启动 END PROCDIVD1 多字节除法子程序 2NBYTE NBYTE NBYTE HEREN 3IN31H 4A 4B 4C 4D 4E 4FH 5D 5E 5FH 4D 4E 4FH DIVD1 NOP MOV30H 06H 被除数的字节数为6 AD0 6 MOV31H 03H 除数的字节数为3 DIVPP MOVA AD1 MOVR2 A R2 03H RLA RLA RLA MOVR3 A R3 18H 24D CLR0F0H B 0 0清标志位 寄存器B的字节地址为F0H CLRC C 0 MOVA ADA SUBBA R2 MOVAD3 A AD3 4CH MOVR1 ADB DIVMB2B MOVA R1 JNZDIVM2B DECR1 DJNZR2 DIVMB2B SETBV0F0H RET DIVM2B MOVR2 AD1 MOVR1 ADB MOVR0 AD3 DIVM2L MOVA R0 SUBBA R1 DECR0 DECR1 DJNZR2 DIVM2L JNCDIVM20 DIVM2D LCALLSHIL1 JCDIVM2S DIVM2C MOVR0 AD3 MOVR1 ADB MOVR2 AD1 DIVM2CL MOVA R0 SUBBA R1 DECR0 DEC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 禁毒手机知识培训会课件
- 2025年一二单元试题及答案
- 苏幕遮范仲淹课件
- 2025延安延河职业高中招聘考试参考试题及答案解析
- 2025重庆江津区双福第二中学招聘教师2人备考练习题库及答案解析
- 叉车安全管理规定试题(附答案)
- 2025云南昆明市晋宁区上蒜镇中心幼儿园招聘编外工作人员2人备考练习试题及答案解析
- 检验检测机构资质认定评审准则培训考试卷(附答案)
- 2025年湖南常德市第十三中学教师临聘23人备考练习试题及答案解析
- 全国大学生就业创业知识竞赛题库及答案
- 羊奶的营养价值(课堂PPT)
- 水轮发电机的基本结构课件
- 《空气动力学》配套教学课件
- 技术交流-太钢不锈钢产品介绍
- 完整版医院体检报告范本
- 外研社Join-in-新版五年级上册全册教案
- 彭静山针灸秘验
- 《销售管理实务》ppt课件汇总(完整版)
- 生育服务证办理承诺书空白模板
- 壳寡糖功能课件
- DB31∕T 830-2014 粮食储备仓库技术管理规范
评论
0/150
提交评论