新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM的微伏信号在线监测系统设计

基于ARM的微伏信号在线监测系统设计

作者: 时间:2011-07-12 来源:网络 收藏
2.2  数据采集与显示电路

本文引用地址://m.amcfsurvey.com/article/150480.htm

  本中数据采集和显示电路的核心器件采用32位7内核嵌入式处理器S3C44B0X。S3C44B0X内置部件有8通道10位ADC(模数转换器)、8KB cache(高速缓存器)、内置SDRAM(同步动态存储器)、LCD控制器、2通道UART(通用异步收发器)、4通道DMA(直接存储器存取)、71个通用I/O端口等。

  本中使用S3C44B0X完成A/D数据采集、LCD控制液晶显示器、键盘输入和故障报警四个主要功能。经前置放大电路处理完成之后的0~2.5V电压电极性,由S3C44B0X的10位精度片上A/D采集到CPU中。S3C44B0自带LCD控制器,利用DMA控制器从RAM中的显示缓冲区读取显示数据,提供给LCD控制器刷新液晶显示屏。键盘和报警电路利用S3C44B0通用I/O端口进行控制。

  3  软件

  本软件设计μClinux操作系统和MicroWindows图形用户界面。μClinux操作系统是从Linux内核派生而来,在标准的Linux基础上进行了适当的裁剪和优化,具有易配置、体积小、易移植的优点。用MicroWindows图形用户界面实现类似桌面电脑的视窗效果,易于实现人机交互。

  系统软件包括操作系统自带的设备驱动程序、操作系统运行环境、根据用户需要自定义的设备驱动程序、封装了底层驱动的中间层接口程序、高级应用程序几个部分。在本系统软件设计中,分别在驱动层和高级应用层程序中实现,其中高级应用层程序框图如图4所示。

基于ARM的微伏信号在线监测系统设计

  图4 高级应用程序框图

  高级应用程序的设计以控制算法为核心,多个任务为控制服务。系统内核定时将测得的数据通过回调函数传递给高级应用程序。高级应用程序为每个被测通道分配一个数据缓冲区,数据缓冲区是个含有10个无符号整型数的数组,GCC编译器默认无符号整型数长度为16位。测量电路中ADC为10位模数转换器,缓冲区中的每个单元的低10位存储数值,最高位为1表示该数据无效或者已经被处理,为0表示该数据有效并等待处理,第10~14位表示数据编号,用以区分不同通道的数据。内核驱动程序把测量数据按格式准备好后,回调函数把数据传送给高级应用程序。应用程序只要使用“与”、“或”操作就可以提取数据类型、实际数据等信息。

  3.1  自定义设备驱动

  设备驱动程序是操作系统和硬件设备之间的接口,它主要完成对设备初始化、实现内核和应用程序与设备之间的数据交换、检测处理设备错误等功能。在μClinux操作系统使用设备文件的方式来进行设备管理应用,一个具体的物理设备被映射为一个设备文件,用户程序可以像对其它文件一样对此设备文件进行打开、关闭、数据读写等操作。

  系统软件设计中的驱动层部分,除了使用μClinux操作系统自带的设备驱动程序以外,需要对外部设备编写自定义的设备驱动程序,以满足操作系统的要求。以字符设备为ADC为例,主要对其编写自定义的驱动程序。使用结构体file_operations{}作为ADC字符设备的函数接口,内核通过这个函数接口来操作设备。自定义后的file_operations{}结构体如下:

  struct file_operations ADC_fops = {

  read:           ADC_read,   //从设备中读数据操作

  poll:        ADC_poll,   //查询设备

  ioctl:       ADC_ioctl,   //进行读、写以外的IO控制操作

  open:       ADC_open,   //打开设备

  release:      ADC_release, //关闭设备

  ……};

  编写自定义的驱动程序完成后,内核调用相应的函数即对ADC设备文件进行open、ioctl等具体操作。

  3.2  图形用户界面设计

  图形用户界面(GUI)把图形视窗引入到嵌入式平台上,其友好的界面为大多数用户所接受,也得到越来越广泛的应用。本设计采用MicroWindows来实现图形界面,以窗口形式显示测量数据及其它参数。MicroWindows是一个较早出现的、开放源码的嵌入式图形用户界面软件,它提供了比较完整的图形功能,支持多种外部设备输入,具有占用空间小、可移植性好的优点。在μClinux操作系统上使用MicroWindows易于图形程序的开发。

  MicroWindows采用了层次化结构:在底层提供设备的驱动,在中间层通过一个可移植图形引擎实现绘制多边形、区域填充、使用颜色等,在顶层实现多种API以适应不同的应用环境。MicroWindows API 之间采用消息传递的基本通信机制。消息被储存在应用程序的消息队列中,不同消息对应不同的事件,核心的API通过传递对应相应事件的消息来实现各种功能,如窗口的创建、绘制、移动等等。

  在本设计中,编写Microwindows的应用程序,基本结构为初始化、创建窗口与资源、进入消息循环三部分。主程序中相关部分如下所示:

  int WINAPI WinMain()

  {MwRegisterEditControl(NULL);  // 申明不使用控件

  wndclass.style= CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

  wndclass.lpszClassName = szAppName;  // 创建窗口属性的结构体变量

  RegisterClass(wndclass);

  hwnd=CreateWindowEx();  //创建窗口

  while (1)

  {if(PeekMessage(msg,NULL,0,0,PM_REMOVE))  //消息查询

  {TranslateMessage(msg);DispatchMessage(msg);}  //传递消息至窗口处理程序

  ScanKey_function();  //扫描键盘

  RxKeyvalue(hedit_Param);

  ……}}

  在调用窗口创建函数CreateWindowEx()后,系统在内存中创建了一个虚拟的窗口,之后调用窗口显示函数ShowWindow()就可将虚拟窗口显示为可视窗口,成为Windows风格的视窗界面。在本设计中,主程序运行时不断调用提取消息函数PeekMessage(),查看消息队列是否收到任务信息,当有信息产生时,就执行对应的消息处理函数。同时,在消息循环里也反复调用键盘缓冲区查询函数RxKeyvalue (),查看是否有键盘输入,以便随时响应。

  4. 抗干扰措施

  在本设计中,采用低温漂的基准稳压电源为前置放大电路供电,并且在每个元件的电源管脚处加去耦电容。元器件选用高精度、漂移小的精密运算放大器;选用高精度、低温漂的精密电阻;线采用双绞线或屏蔽线。印刷板布线时,尽量缩短前置放大电路的线,并确保了电路接地、屏蔽良好。

  5  结语

  本文创新点在于设计和实现了一种的微伏信号系统,以差动放大方式消除外界对测量信号的干扰,利用S3C44B0X微处理器和μClinux操作系统实现液晶屏显示数据、人机交互和故障自动报警功能,为实现微伏信号提供了一种体积小、功耗低、操作灵活的解决方案。本设计已投入使用,长时间工作稳定。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭