微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于单片机的角度测量仪的设计

基于单片机的角度测量仪的设计

时间:04-30 来源:互联网 点击:

显示驱动器MAX7219. 它能控制8 位共阴级L ED 数码管,具有16 级亮度控制、译码灵活,上电发光二极管全熄、只占用三根单片机I/ O 口线等优点。

  单片机及主要外围电路的原理如图2 所示。

图2 电路原理图

  1. 3 单片机与外围器件的数据通信

  单片机与光电编码器:因为光电编码器获得角度值的速度远大于单片机的工作速度,所以,单片机可以认为光电编码器上的数据总是处于准备好状态,单片机随时可以读取有效数据,16 位的角度值分成高8 位和低8 位两次读取,它们之间的数据是并行无条件传送。

  单片机与MAX7219 :从单片机和MAX7219的工作速度来看,CPU 两次发送数据给MAX7219 的时间间隔,足以保证单片机访问MAX7219 时,MAX7219 总是处于准备好状态。而MAX7219 又是串行L ED 显示驱动器,因此,单片机与MAX7219 的数据传送是串行无条件传送。

  单片机与MAX813 :因为单片机向MAX813发送数据时,MAX813 只等待接收单片机的初始化数据而并无其它的工作其工作速度足够快,可以认为MAX813 总是处于准备好状态。因此,单片机与MAX813 的数据传送也是串行无条件传送。

  2 软件设计原理

  角度测量仪启动工作后,单片机的工作过程是:系统启动后,初始化外部看门狗,初始化显示驱动芯片MAX7219 ,给看门狗计数器赋初值,读取光电编码器获取的角度值,当角度偏差值处在某一特定范围时,单片机发出控制信号点亮与该范围相对应的指示灯,将当前的角度值转换成密位值显示在数码屏,又重新给看门狗计数器赋初值,进入下一个工作循环。主函数的工作流程如图3 所示。

图3 主函数流程图

请注意,流程图中,带双线边的矩形框表示该部分为函数。在本课题的软件设计中,采用了C51 编程语言,因为用C51 编程不仅效率高,而且可读性很强。

  下面给出主函数的源代码。

  void main (void)

  {

  WDI = 0 ; / / 初始化看门狗

  InitMax7219 () ; / / 初始化MAX7219 的函数

  while (1) {

  WDI = 1 ; / /喂狗

  WDI = 0 ; / /喂狗

  GetAngle () ; / / 读角度值的函数

  MachView() ; / / 指示灯匹配显示的函数

  GetMil () ; / / 计算密位值的函数

  DisplayMil () ; / / 显示密位的函数

  }

  }

  在主函数调用的几个函数中,InitMax7219() 的功能是初始化L ED 显示驱动器MAX7219 ,单片机向MAX7219 发送消影控制、亮度、扫描范围、译码方式信息。

  GetAngle () 的功能是从光电编码器读角度值,先读高8 位,再读低8 位,然后将高8 位和低8 位合并,最后舍去最低位(光电编码器的有效数据是15 位) .

  MachView() 的功能是角度偏差指示灯匹配显示,将该角度值与系统预设的角度值比较,判断瞄准的角度值是偏高、偏低还是适中。如果角度值偏高,那么单片机就发出控制命令,使偏高指示灯亮,如果偏低,则令偏低指示灯亮,否则令适中指示灯亮。

  值得注意的是,计算密位值的函数GetMil() 的代码编写,要考虑角度的转换精度,在本课题中,采用了C51 中的long 型变量来分别存放密位的整数和小数部分,并将角度的小数部分放大十万倍后参加运算,保证转换精度。

  DisplayMil( )的功能是驱动MAX7219 显示密位。首先显示密位,判断此角度是否进入预设区,如果是,熄灭符号灯,各位显示0;如果没有,判断角度值是否为负,如果是,显示负号,如果是正,不显示负号,然后将角度值显示在L ED显示屏上。

  由于篇幅所限,程序的源代码没有给出。

  3 结束语

  为了使角度测量仪能在各种可能的恶劣环境下(如高温、低温、振动等环境) 正常工作,在整个设计过程中,要着重考虑的问题是硬件的可靠性和软件的可靠性。设计时的注意事项如下: (1)电源芯片的额定功率选择要留有余量。(2) 元器件选择工业级或军用级产品。(3) 采用硬件看门狗方案,防止单片机程序锁死。本课题设计的样机已处于测试阶段,目前已通过了常温和多种环境试验的测试。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top