关于高速公路多车道车辆智能计数系统的设计的论文

关于高速公路多车道车辆智能计数系统的设计的论文,第1张

引言 当前,许多领域越来越多地要求具有高精度A/D转换和实时处理功能。同时,市场对支持更复杂的显示和通信接口的要求也在提高,如环境监测、电表、医疗设备、便携式数据采集以及工业传感器和工业控制等。传统设计方法是应用MCU或DSP通过软件控制数据采集的A/D转换,这样必将码袜频繁中断系统的运行,从而减弱系统的数据运算能力,数据采集的速度也将受到限制。本文采用DSP+FPGA的方案,由硬件控制A/D转换和数据存储,最大限度地提高系统的信号采集和处理能力。 系统结构 整个采集卡包括信号调理、数据采集、数据处理和总线接口设计。本文设计了具有信号衰减、增益放大和滤波等功能的信号调理电路,采用16位精度、最高采样率为500KSPS的A/D转换器AD7676;数字系统设计利用FPGA极其灵活、可编程的特点,选用Altera公司FPGA芯片EP2C8Q208,完成精度校正和逻辑时序控制;DSP采用TI公司的TMS320VC5416,使A/D转换后的数据在传输到上位机之前,进行数据整理、标记、打包以及数据预处理。数据采集卡可同时进行8通道数据采集,通道可进行衰减倍数、采样速度以及放大增益设置。同时提供模拟输出通道,用于实现波形产生和模拟驱动功能。能够进行自动校准,保证数据采集的准确性。PCI总线接口电路采用PLXTechnology公司的PCI总线接口芯片PCI9030,完成数据采集和状态、控制信号的传输。 系统硬件电路设计 数据采集模块设计 从传感器送来的8路模拟输入信号通过多路模拟开关ADG507选择进入模拟通道,如果多通道同时采集,则采用时分复用方式,由FPGA依次控制各通道的通断。模式选择开关ADG509为四选一模拟开关,可分别选择被测模拟信号、标准参考电压值或用于通道校准的、经过DAC转换后的信号进入后级滤波衰减网络电路。送入ADC的信号要先经过低通滤波,以滤除高频噪声。滤波电路设计为二阶阻容低通滤波器,对频率高于50KHz的信号滤波。衰减电路设计为有源衰减,选用Linear公司的差分放大器LTC1992,可完成输入信号极性转换,实现单端信号转差分信号,同时通过由FPGA控制继电器选通不同的电阻网络调整衰减倍数,可实现对不同电压输入范围信号的调整,以满足AD7676的输入电压范围。信号增益可编程放大器LTC6911可通过编程设置以1、2、5步进变化的1V/V~100V/V增益倍数,数据采集过程中通过FPGA内部的比较电路自动调整增益放大器增益倍数,极大提高了对微弱信号的分辨能力。AD7676为差分信号输入,MAX6325基准源提供基准为2.5V的参考电压,采样时钟由晶振提供10MHz时钟信号经FPGA内部分频电路得到,单通道最高采样率为500KSPS。 FPGA电路设计 FPGA芯片也是一种特殊的ASIC芯片,属于可编程逻辑器件,它是在PAL、GAL等逻辑器件的基础上发展起来的。同以往的PAL、GAL等相比,FPGA规模比较大,适合于时序、组帆模薯合等逻辑电路应用。本文选用Altera公司的FPGA芯片EP2C8Q208,完成数据采集卡的时序和地址译码电路设计。由于EP2C8Q208有36个M4KRAM,在FPGA内部设计一个16位宽度、4KB深度的FIFO,态者使用FIFO提高数据采集卡对多通道信号的采集存储能力。FIFO有半满、全满、空标志位,当DSP检测到半满标志位时,FIFO同时读写;全满时只读不写;空时只写不读。A/D采样控制信号由DSP通过FPGA控制;DSP对采集后的数据进行进一步处理,以提高精度,也具有传统CPU或MCU的功能,对时序、触发、DMA中断请求作出相应处理。 DSP电路设计 DSP采用TMS320VC5416,它是16位定点DSP,具有高度的 *** 作灵活性和很高的运行速度,采用改善的哈佛结构(1组程序存储器总线,3组数据存储器总线,4组地址总线),具有专用硬件逻辑的CPU、片内128KB的存储器、片内外设,以及一个效率很高的指令集。 DSP在系统中的作用主要是将A/D转换后的数据在传输到上位机之前,进行数据整理、标记、打包以及数据预处理。数据采集系统所有控制信号都由DSP控制FPGA逻辑电路产生。DSP外挂Flash存放DSP程序及其它配置数据,在上电时,DSP采用并行方式调入DSP内部执行。 校准电路设计 校准电路是本设计的重要环节,数据采集卡的高精度性能不仅取决于高分辨率的ADC,在更大程度上要依靠该数据采集卡优良的自校准和抗噪声能力来实现。 校准时,DSP发出标准值,经D/A和A/D转换后,所采集的数据值与原标准值相比较,取其偏差系数组成去噪方程,以实现数据采集卡的自校准。 PCI总线接口电路设计 PCI总线规范十分复杂,其接口的实现比较困难。数据采集卡采用PCI9030作为用户接口,为PCI总线接口的开发提供了一种简捷的方法,只需设计简单的局部总线接口控制电路即可实现PCI总线的高速数据传输。使用Altera公司的QuartusII,使得硬件实现软件化设计,更新了传统的电路设计和调试方式,大大缩短了开发周期,特别是其设计仿真和定时分析使得设计更加可靠,确保了系统的正确性。 系统软件设计 驱动程序设计 在Windows98/2000/XP环境下,处于Windows用户态的应用程序不能直接对硬件设备进行 *** 作,要实现对数据采集卡的硬件资源(如内存、中断等)的访问,必须编写运行在核心态的设备驱动程序。目前,使用较多的开发工具是GUNGO公司的驱动程序开发组件WinDriver。利用WinDriver开发驱动程序,不需熟悉 *** 作系统的内核知识。整个驱动程序中的所有函数都是工作在用户态的,通过与WinDriver的.VXD和.SYS文件交互来达到驱动硬件的目的。因为WinDriver开发环境提供了针对PLX公司芯片的存储器范围、寄存器和中断处理等模块,所以本文采用了GUNGO公司的WinDriver5.3开发工具,它支持PLX公司的PCI接口芯片,用户无需具有DDK和核心态程序开发经验,调试时可结合PLX公司的PLXmon工具。 *** 作界面设计 采用美国国家仪器公司的LabVIEW软件进行界面设计。LabVIEW是一种图形化编程语言, *** 作界面模拟实际仪器的控制面板,使用户能完成通道选择、模式选择、增益设定、采样率设定等功能, *** 作简单方便。 系统指标分析 ADC误差分析 常用的ADC主要存在量化误差、增益误差和偏置误差。量化误差是任何ADC都存在的,仅仅能通过提高ADC分辨率来减少,为把量化误差减少为±1LSB/2,通常的方法是把变换特性偏移1LSB/2。偏移误差是指对ADC采用零伏差动输入时实际代码与理想代码之间的差异。增益误差是指从负满量程转为 正满量程输入时实际斜率与理想斜率之差。偏移和增益误差通常是ADC中主要的误差源。为了进行偏移校准,本文采用0V或非常小的信号并读取输出代码。如果结果为正,那么转换器就存在正偏移误差,从结果中减去偏移值;如果结果为负,那么转换器就存在负偏移误差,可向结果加上偏移值。通过对ADC施加满量程或近于满量程的信号并测量输出代码来实现增益校准。偏移校准在增益校准之前进行。 模拟开关误差分析 多路开关大体上可分为两种类型,即模拟电子开关和机械触点式开关。模拟开关具有转换速度快、使用寿命长、体积小、成本低、集成度高和无抖动等优点;但也存在一些缺点,如导通电阻较大、存在道间干扰、通道间共地等。 本文所设计的数据采集卡使用ADI公司的ADG507和ADG509,导通电阻Ron100~300Ω,输入信号要通过Ron分压,输出到负载电阻上的电压要下降一些。为此,本设计用OPA2277做成压级跟随器连接到后面的负载电路上,以拉高多路模拟开关的负载阻抗,削弱串联内阻的影响。 精度设计 数据采集卡使用了可编程增益放大器LTC6911,最大可调增益为100V/V,极大提高了采集卡对微弱信号的分辨能力。同时,信号调理部分的电阻衰减网络可完成对信号的1/2、1/4分压,扩大了数据采集卡的动态范围。信号和干扰噪声在时域混合在一起,但是在频域有不同特性,因此,预先设计滤波器对噪声信号进行抑制,避免噪声电平很高,用增益放大器接收这样的信号会导致放大器饱和,使仪器不能正常工作。 电压基准源是A/D或D/A转换电路的重要部件,系统输出精度在很大程度上取决于电压基准源的精度。这里主要考虑输出精度、稳定性和温度漂移系数。MAX6325是低噪声、高精度的掩埋齐纳型基准电压源芯片,其初始输出电压精度高达0.02%,温度系数为0.5ppm/℃。 结语 数据采集卡采用16位精度ADC,模拟信号通道设计考虑了微弱信号检测、噪声抑制、高频滤波、差分放大电路和可编程增益放大电路,数字电路部分设计以EP2C8Q208为核心,利用FPGA的时序严格、速度较快、可编程性好等特点,将可能需要的各种控制和状态信号引入FPGA,利用FPGA的大容量和现场可编程的特性,根据不同的要求进行现场修改,增大了系统设计的成功率和灵活性。同时,DSP对数据的预处理极大地提高了数据的精度。在PCB布线时认真考虑了滤波、接地和合理的信号走线,提高了数据采集卡的可靠性。

当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中唯历断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态枯神的进程的状态有些类似。

内核态与用户态是 *** 作系统的两种运行级别,跟intel cpu没有必然的联系,intel

cpu提供Ring0-Ring3三种级别的运行模式,Ring0级别最高,Ring3最低。Linux使用了Ring3级别运行用户态,Ring0作为内核态,没有使用Ring1和Ring2。Ring3状态不能访问Ring0的地址空间,包括代码和数据。Linux进程的4GB地址空间,3G-4G部分大家是共享的,是内核态的地址空间,这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件 *** 作,网络数据发送等 *** 作,必须通过write,send等系统调用,这些系统调用会调用内核中的代码来完成 *** 作,这时,必须切换到Ring0,然后进入3GB-4GB中的内核地址空间去执行这些代码完成 *** 作,完成后,切换回Ring3,回到用户态。这样,用户态的程序就不能随意 *** 作内核地址空间,具有一定的安全保护作用。

至于说保护指败搜模式,是说通过内存页表 *** 作等机制,保证进程间的地址空间不会互相冲突,一个进程的 *** 作不会修改另一个进程的地址空间中的数据。

在内核态下,CPU可执行任何指令,在用户态下CPU只能执行非特权指令。当CPU处于内核态,可以随意进入用户态;而当CPU处于用户态,只能通过中断的方式进入内核态。一般程序一开始都是运行于用户态,当程序需要使用系统资源时,就必须通过调用软中断进入内核态.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12443677.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存