1、湖北师范学院教育信息与技术学院 2010 级信息工程专业综合课程社稷(一) 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 HUBEI 凌阳, 拇指 凌阳 NORMAL 凌阳, 拇指 凌阳 UNIVERSITY 凌阳, 拇指 凌阳 综合课程设计 凌 阳 , 拇指 凌阳 (一) 凌 阳 , 拇指 凌阳 Integrated 凌阳, 拇指 凌阳 Curriculum 凌阳, 拇指 凌阳 Design( 1) 凌 阳 , 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 所在院系 教育信息与技术学院 专业名称 信息工程 班级 1005 题目 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳
2、, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳 ,拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 基于单片机的数字滤波器 指导教师 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 成员 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳
3、, 拇指 凌阳 完成时间 2013.1.7 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 任务分 工: 凌阳, 拇指 凌阳 尤杉:整体系统设计及编程调试 。 食指 凌阳, 拇指 凌阳 柯俊:进行资料的查询 。 食指 凌阳, 拇指 凌阳 钱德超:辅助编程 , 拇指 及 proteus 电路图的绘制 。 食指 凌阳, 拇指 凌阳 陈小浩:完成 word 文档的编辑 。 食指 凌阳, 拇指 凌阳 1 凌阳, 拇指 凌阳 摘要 I 凌阳, 拇指 凌阳 1 凌阳, 拇指 凌阳 绪论 1 凌阳, 拇指 凌阳 1.1 仿真软件介绍 1 凌阳, 拇指 凌阳 1.2 数字滤波器介绍 1 凌阳, 拇指 凌阳 2 凌阳,
4、 拇指 凌阳 单片机和 AD/DA 相关知识 2 凌阳, 拇指 凌阳 2.1 凌阳, 拇指 凌阳 51 单片机相关知识 2 凌阳, 拇指 凌阳 2.2 凌阳, 拇指 凌阳 AD 转换器相关知识 3 凌阳, 拇指 凌阳 2.3 凌阳, 拇指 凌阳 DA 转换器相关知识 4 凌阳, 拇指 凌阳 3 凌阳, 拇指 凌阳 数字滤波器设计 错误 !未定义书签。 凌阳, 拇指 凌阳 3 数字滤波器系统设计 4 凌阳, 拇指 凌阳 3.1 凌阳, 拇指 凌阳 数字滤波器理论分析设计 5 凌阳, 拇指 凌阳 3.2 凌阳, 拇指 凌阳 单片机电路 6 凌阳, 拇指 凌阳 3.3 凌阳, 拇指 凌阳 数据采集电
5、路 错误 !未定义书签。 凌阳, 拇指 凌阳 3.4 凌阳, 拇指 凌阳 数模转换输出电路 7 凌阳, 拇指 凌阳 3.5 凌阳, 拇指 凌阳 数字电压表系统电路原理图 8 凌阳, 拇指 凌阳 4 凌阳, 拇指 凌阳 程序设计 8 凌阳, 拇指 凌阳 4.1 程序流程图 8 凌阳, 拇指 凌阳 4.2 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 AD 转换器程序 错误 !未定义书签。 凌阳, 拇指 凌阳 4.3 凌阳, 拇指 凌阳 程序代码 9 凌阳, 拇指 凌阳 6 凌阳, 拇指 凌阳 心得与体会 20 凌阳, 拇指 凌阳 参考文献 21 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 1 凌阳, 拇指
6、 凌阳 绪论 凌阳, 拇指 凌阳 1.1 仿真软件 介绍 凌阳, 拇指 凌阳 现代工业控制 系统 中 , 拇指 电路系统越来越复杂 , 拇指 因而带来的相互干扰也越来越强烈 ,拇指 模拟滤波电路已经不能满足要求 , 拇指 数字滤波应运而生 。 食指 数字滤波器的实现过程的实现过程是把输入的模拟信号数字化 , 拇指 也就是由采样器对输入的模拟信号进行周期性的采样 , 拇指 并对每个样本进行量化和编码 , 拇指 即模数转换 。 食指 从 ADC 输出的数字信号送入到数字信号处理器进行处理变化 , 拇指 处理器输出的数字信号再通过数模转换为模拟信号 , 拇指 这个过程要用到 DAC 来转换实现模拟信
7、号的输出 。 食指 凌阳, 拇指 凌阳 1.2 数字滤波器介绍 凌阳, 拇指 凌阳 Proteus 凌阳, 拇指 凌阳 ISIS 是英国 Labcenter 公司开发的电路分析与实物仿真软件 。 食指 它运行于Windows 操作系统上 , 拇指 可以仿真、分析 (SPICE)各种模拟器件和集成电路 , 拇指 该 软件的特点是 :凌阳, 拇指 凌阳 (1)现了单片机仿真和 SPICE 电路仿真相结合 。 食指 具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、 RS232 动态仿真、 I2C 调试器、 SPI 调试器、键盘和 LCD 系统仿真的功能;有各种虚拟仪器 , 拇指
8、如示波器、逻辑分析仪、信号发生器等 。 食指 凌阳, 拇指 凌阳 (2)支持主流单片机系统的仿真 。 食指 目前支持的单片机类型有: 68000 系列、 8051系列、 AVR 系列、 PIC12 系列、 PIC16 系列、 PIC18 系列、 Z80 系列、 HC11 系列以2 及各种外围芯片 。 食指 凌阳, 拇指 凌阳 (3)提供软件调试功能 。 食指 在硬件仿真系统中具有全速、单步、设置断点等调试功能 , 拇指 同时可以观察各个变量、寄存器等的当前状态 , 拇指 因此在该软件仿真系统中 ,拇指 也必须具有这些功能;同时支持第三方的软件编译和调试环境 , 拇指 如 Keil 凌阳, 拇指
9、 凌阳 C51 凌阳, 拇指 凌阳uVision2 等软件 。 食指 凌阳, 拇指 凌阳 (4)具有强大的原理图绘制功能 。 食指 凌阳, 拇指 凌阳 可以仿真 51 系列、 AVR、 PIC、 ARM、等常用主流单片机 。 食指 还可以直接在基于原理图的虚拟原型上编程 , 拇指 再配合显示及输出 , 拇指 能看到运行后输入输 出的效果 。 食指配合系统配置的虚拟逻辑分析仪、示波器等 , 拇指 Proteus 建立了完备的电子设计开发环境 。 食指 凌阳, 拇指 凌阳 在 PROTEUS 绘制好原理图后 , 拇指 调入已编译好的目标代码文件: *.HEX, 拇指 可以在PROTEUS 的原理图
10、中看到模拟的实物运行状态和过程 。 食指 凌阳, 拇指 凌阳 PROTEUS 凌阳, 拇指 凌阳 是单片机课堂教学的先进助手 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 PROTEUS 不仅可将许多单片机实例功能形象化 , 拇指 也可将许多单片机实例运行过程形象化 。 食指 前者可在相当 程度上得到实物演示实验的效果 , 拇指 后者则是实物演示实验难以达到的效果 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 它的元器件、连接线路等却和传统的单片机实验硬件高度对应 。 食指 这在相当程度上替代了传统的单片机实验教学的功能 , 拇指 例:元器件选择、电
11、路连接、电路检测、电路修改、软件调试、运行结果等 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 课程设计、毕业设计是学生走向就业的重要实践环节 。 食指 由于 PROTEUS 提供了实验室无法相比的大量的元器件库 , 拇指 提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表 , 拇指 因而也提供了培养学生实践精神、创造精神的平台 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳,
12、拇指 凌阳 凌阳, 拇指 凌阳 2 凌阳, 拇指 凌阳 单片机和 AD/DA相关知识 凌阳, 拇指 凌阳 2.1 凌 阳, 拇指 凌阳51 单片机相关知识 凌阳, 拇指 凌阳 51 单片机是对目前所有兼容 intel 凌阳, 拇指 凌阳 8031 指令系统的单片机的统称 。 食指 该系列单片机的始祖是 intel 的 8031 单片 机 , 拇指 后来随着技术的发展 , 拇指 成为目前广泛应用的为单片机之一 。 食指 单片机是在一块芯片内集成了 CPU、 RAM、 ROM、 定时器计数器和多功能 I/O 口等计算机所需要的基本功能部件的大规模集成电路 , 拇指 又称为3 MCU。 食指 51
13、系列单片机内包含以下几个部件: 凌阳, 拇指 凌阳 一个位 CPU;一个片内振荡器及时钟电路; 凌阳, 拇指 凌阳 4KB 的 ROM 程序存储器; 凌阳, 拇指 凌阳 一个 128B 的 RAM 数据存储器; 凌阳, 拇指 凌阳 寻址 64KB 外部数据存储器和 64KB 外部程序存储空间的控制电路; 凌阳, 拇指 凌阳 32 条可编程的 I/O 口线; 凌阳, 拇指 凌阳 两个 16 位定时计数器; 凌阳, 拇指 凌阳 一个可编程全双工串行口; 凌阳, 拇指 凌阳 个中断源、两个优先级嵌套中断结构 。 食指 51 系列单片机如下图: 凌阳, 拇指 凌阳 P1.01P1.12P1.23P1.
14、34P1.45P1.56P1.67P1.78RST9P3.0/RxD10P3.1/TxD11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR16P3.7/RD17XTAL218XTAL119VSS20P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P2.7/A1528PSEN29ALE30EA/VPP31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40U189S52凌阳, 拇指 凌阳 图 1 凌阳, 拇指
15、 凌阳 51 单片机引脚图 凌阳, 拇指 凌阳 2.2 凌 阳, 拇指 凌阳AD 转换器相关知识 凌阳, 拇指 凌阳 ADC0808 是美国国家半导体公司生产的 CMOS 工艺 8 通道 , 拇指 8 位逐次逼近式 转换器 。 食指 其内部有一个 8 通道多路开关 , 拇指 它可以根据地址码锁存译码后的信号 ,拇指 只选通 8 路模拟输入信号中的一个进行 A/D 转换 。 食指 凌阳, 拇指 凌阳 ( 1) 主要特性 : 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 1) 8 路输入通道 , 拇指 8 位 A/D 转换器 , 拇指 即分辨率为 8 位 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳
16、凌阳, 拇指 凌阳 2)具有转换起停控制端 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 3)转换时间为 100s(时钟为 640kHz 时 ), 拇指 130s(时钟为 500kHz 时) 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 4)单个 +5V 电源供电 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 5)模拟输入电压范围 0 +5V, 拇指 不需零点和满刻度校准 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 6)工作温度范围为 -40 +85 摄氏度 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 7)低功
17、耗 , 拇指 约 15mW。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 ( 2) 内部结构 凌阳, 拇指 凌阳 ADC0808 是 CMOS 单片型逐次逼近式 A/D 转换器 , 拇指 内部结构如图 13 22 所示 ,拇指 它由 8 路模拟开关、地址锁存与译码器、比较器、 8 位开关树型 A/D 转换器、逐次逼近寄存器、逻辑控制和定时电路组成 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 4 IN31IN42IN53IN64IN75START6EOC7D38OE9CLK10VCC11REF+12GND13D114D215REF-16D017D418D519D620D721ALE22ADD
18、 C23ADD B24ADD A25IN026IN127IN228U?ADC0809N凌阳, 拇指 凌阳 图 2 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 ADC0808 引脚 凌阳, 拇指 凌阳 2.3 凌 阳, 拇指 凌阳DA 转换器相关知识 凌阳, 拇指 凌阳 根据对 DAC0832 的数据锁存器和 DAC 寄存器的不同的控制方式 , 拇指 DAC0832 有三种工作方式:直通方式、单缓冲方式和双缓冲方式 。 食指 主要性能如下: 凌 阳, 拇指 凌阳 ( 1) 分辨率为 8 位; 凌 阳, 拇指 凌阳凌阳, 拇指 凌阳 凌 阳, 拇指 凌阳 凌阳, 拇指 凌阳 ( 2) 电流稳定时间 1
19、us; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 ( 3) 凌 阳, 拇指 凌阳 可单缓冲、双缓冲或直接数字 输入; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 ( 4) 凌 阳, 拇指 凌阳 只需在满量程下调整其线性度; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 ( 5) 单一电源供电( +5V +15V); 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 ( 6) 凌 阳, 拇指 凌阳 低功耗 , 拇指 20mW。 食指 凌 阳, 拇指 凌阳凌阳, 拇指 凌阳 DAC0832 引脚功能电路应用原理图 DAC0832 是采样频率为八位的 D/A 转换芯片 , 拇指 集成电路内有两级输入寄存器 , 拇指 使 DAC0
20、832 芯片具备双缓冲、单缓冲和直通三种输入方式 , 拇指 以便适于各种电路的需要 (如要求多路 D/A 异步输入、 同步转换等 )。 食指 所以这个芯片的应用很广泛 ,关于 DAC0832 应用的一些重要资料见下图: 凌阳, 拇指 凌阳 D/A 转换结果采用电流形式输出 。 食指 若需要相应的模拟电压信号 , 拇指可通过一个高输入阻抗的线性运算放大器实现 。 食指 运放的反馈电阻可通过 RFB端引用片内固有电阻 , 拇指 也可外接 。 食指 DAC0832 逻辑输入满足 TTL 电平 , 拇指 可直接与 TTL 电路或微机电路连接 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇
21、指 凌阳 图 2 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 ADC0809 引脚 凌阳, 拇指 凌阳 图 2 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 ADC0809 引脚 凌阳, 拇指 凌阳 图 3 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 DAC0832引脚 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 3 数字滤波器系统设计 凌阳, 拇指 凌阳 5 3.1 凌 阳, 拇指 凌阳数字滤波器理论分析设计 凌阳, 拇指 凌阳 数字滤波方法 有很多种 , 拇指 如中值滤波、算术平均滤波、加权平均滤波 , 拇指 限幅滤波等等 。 食指 本次课程设计我选用的是限幅滤波方法 和中位值滤波法 凌
22、阳, 拇指 凌阳 限幅滤波的基本原理是把两次相邻时刻( n 和 n-1)的采样值 Yn 和 Yn-1 相减 , 拇指求出其差值 , 拇指 以绝对值表示 , 拇指 然后将这个 差值与两次采样允许的最大偏差值 Y比较 , 拇指 如果两次采样值的差值超过了允许的最大偏差值 Y, 拇指 则认为发生了随机干扰 , 拇指 并认为最后一次采样值 Yn 非法 , 拇指 应予剔除 。 食指 剔除 Yn 后 , 拇指 可用 Yn-1 代替Yn;若未超过允许的最大偏差值范围 , 拇指 则认为本次采样值有效 。 食指 可用如下公式表示: 凌阳, 拇指 凌阳 |Yn-Yn-1|Y;则 Yn 有效 凌 阳, 拇指 凌阳
23、|Yn-Yn-1| Y;则 Yn-1 有效 凌 阳, 拇指 凌阳 此算法的样例子程序如下: 凌阳, 拇指 凌阳 #define 凌阳, 拇指 凌阳 A 凌阳, 拇指 凌阳 11 凌阳, 拇指凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /A 值可根据实际情况调整 凌阳, 拇指 凌阳 char 凌阳, 拇指 凌阳 data; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /上一次的数据 凌阳, 拇指 凌阳 char 凌阳, 拇指 凌阳 filter_1()凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 char 凌阳, 拇指 凌阳 datanew; 凌阳, 拇指 凌阳
24、凌阳, 拇指 凌阳 /新数据变量 凌阳, 拇指 凌阳 datanew=get_data(); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /获得新数据 凌阳, 拇指 凌阳 /滤 波算法 凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 filter1() 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 new_value,value;凌阳, 拇指 凌阳 value=get_data(N-2); 凌阳, 拇指 凌阳 /把第十个值给 value 凌阳, 拇指 凌阳 new_value 凌阳, 拇指 凌阳 = 凌阳, 拇指
25、 凌阳 get_data(N-1); 凌阳, 拇指 凌阳 / 凌阳, 拇指 凌阳 第十一个值给 new_value 凌阳, 拇指 凌阳 if 凌阳, 拇指 凌阳 ( 凌阳, 拇指 凌阳 ( 凌阳, 拇指 凌阳 new_value 凌阳, 拇指 凌阳 - 凌阳, 拇指 凌阳 value 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 A 凌阳, 拇指 凌阳 ) 凌阳, 拇指 凌阳 | 凌阳, 拇指 凌阳 ( 凌阳, 拇指 凌阳 value 凌阳, 拇指 凌阳 - 凌阳, 拇指 凌阳 new_value 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 A 凌阳, 拇指 凌阳 ) 凌阳, 拇指 凌阳 ) 凌阳, 拇
26、指 凌阳 凌阳, 拇指 凌阳 /如果差值大于 0.002 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌
27、阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌
28、阳, 拇指 凌阳凌阳, 拇指 凌阳 return 凌阳, 拇指 凌阳 value; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 return 凌阳, 拇指 凌阳 new_value;凌阳, 拇指 凌阳 /中位值滤波算法 凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 filter2()凌阳 ,拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 int 凌阳, 拇指 凌阳 count,i,j; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳,
29、拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /定义存储数据的数组 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 temp; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳
30、, 拇指 凌阳 /定义存储数据的数组 凌阳, 拇指 凌阳 for(count=0;countbufi+1)凌阳, 拇指 凌阳 6 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 temp=bufi;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 bufi=bufi+1;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 bufi+1=temp;凌
31、阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 res=buf(N-1)/2; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /11 个数排序后取中间的数值 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 该算法主要用于处理变化比较缓慢的数据 , 拇指 如温度、物体的位置等 。 食指 使用时关键在于最大偏差值的 y 的选择 , 拇指 通常可根据经验获得 , 拇指 也可按照输出参数可能的最大变化速度 Vmax 及采样周期 T 来决定 Y 的值 , 拇指 即 Y=VmaxT。 食指 凌阳, 拇指 凌阳 3.2 凌阳, 拇指 凌阳 整体框架 凌
32、阳, 拇指 凌阳 整体框架图如下: 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 3.1 单片机最小系统如下: 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 4 凌阳, 拇指 凌阳 单片机最小系统 凌阳, 拇指 凌阳 使用 51 系列单片机 AT89C51, 拇指 利用这个单片机进行编程 , 拇指 实现对输入信号的滤波 。 食指 凌阳, 拇指 凌阳 我使用了 P0 口作为接受 AD 转换的结果的端口 , 拇指 而 P1 口则输出数据到 DA 转换器 。 食指 另外还利用了 P2 作为控制端口 , 拇指 P2.0-P2.2 用来控制 AD 转换器 , 拇指 而 P1.0-P1.3外接
33、四个开关 , 拇指 用来实现滤波方式的选择 。 食指 凌阳, 拇指 凌阳 3.3 数据采集电路 凌阳, 拇指 凌阳 由于 ADC0809 是带地址锁存的模数转换器件 , 拇指 ADDA、 ADDB、 ADDC 为模拟通道7 选择 , 拇指 编码为 000111 分别选中 IN0IN7。 食指 ALE 为地址锁存信号 , 拇指 其上升沿锁存ADDA、 ADDB、 ADDC 的信号 , 拇指 译码后控制模拟开关 , 拇指 接通八路模拟输入中相应的一路 。 食指 CLK 为输入时钟 , 拇指 为 AD 转换器提供转换的时钟信号 , 拇指 典型工作频率为500KHz-600kHZ。 食指 START
34、为 AD 转换启动信号 , 拇指 正脉冲启动 ADDAADDC 选中的一路模拟信号开始转换 。 食指 OE 为输出允许信号 , 拇指 高电平时候打开三态输出缓存器 , 拇指是转换后的数字量从 D0D7 输出 。 食指 EOC 为转换结束信号 , 拇指 启动转换后 EOC 变为低电平 , 拇指 转换完成后 EOC 编程高电平 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 5 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 ADC 模数转换 凌阳, 拇指 凌阳 3.4 数模转换输出 电路 凌阳, 拇指 凌阳 这里我用了 DA0832 来进行数模转换 。 食指 DA0832 的引脚图如下图所示:凌阳
35、, 拇指 凌阳 图 6 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 DAC 数模转换 凌阳, 拇指 凌阳 DA0832 有三种数模转换方法 , 拇指 直通方式、单缓冲方式、双缓冲方式 , 拇指 因为单片机输出后可以直接进行数模转换 , 拇指 所以这里我采用了不需要单片机控制的最为简单的直通方式 , 拇指 但是 DA0832 若用于直通方式 。 食指 凌阳, 拇指 凌阳 若用于直通方式下 , 拇指 则 GND 均接地 , 拇指 而 VCC 和 ILE 则接正电源 。 食指 VREF 是参考电源 。 食指 IOUT1、 IOUT2 是两个输出端 。 食指 DA0832 输出的是电流 , 拇指 要利用运
36、算放大器转8 换成电压 信号 。 食指 凌阳, 拇指 凌阳 3.5 凌 阳, 拇指 凌阳数字电压表系统电路原理图 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 如下是此次设计仿真的数字滤波器电路总原理图 。 食指 此图总共分为三个部分 ,拇指 分别是采用电路 ADC, 拇指 处理分析部分单片机 , 拇指 调理信号输出部分 DAC。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 8 凌阳, 拇指 凌阳 数字滤波器设计总原理图 凌阳, 拇指 凌阳 4 凌阳, 拇指 凌阳 程序设计 凌阳, 拇指 凌阳 4.1 程序流程图 凌阳, 拇指 凌阳
37、凌阳, 拇指 凌阳 图 9 凌阳, 拇指 凌阳 程序流程图 凌阳, 拇指 凌阳 开始 结束 初始化 AD 采样量化 单片机处理 DA 转换输出 9 4.2 凌阳, 拇指 凌阳程序代码 凌阳, 拇指 凌阳 #include 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 #define 凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 unsigned 凌阳, 拇指 凌阳 char 凌阳, 拇指 凌阳 #define 凌阳, 拇指 凌阳 A 凌阳, 拇指 凌阳 0.002 凌阳, 拇指 凌阳 #define 凌阳, 拇指 凌阳 N 凌阳, 拇指 凌阳 11 凌阳, 拇指 凌阳 sbit 凌阳, 拇指
38、凌阳 con1=P10; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /滤波方法选择 凌阳, 拇指 凌阳 sbit 凌阳, 拇指 凌阳 con2=P11;凌阳, 拇指 凌阳 sbit 凌阳, 拇指 凌阳 key=P14; 凌阳, 拇指 凌阳 /控制是否滤波 凌阳, 拇指 凌阳 sbit 凌阳, 拇指 凌阳 led=P15;凌阳, 拇指 凌阳 sbit 凌阳, 拇指 凌阳 OE=P30;凌阳, 拇指 凌阳 sbit 凌阳, 拇指 凌阳 START=P31;凌阳, 拇指 凌阳 sbit 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 EOC= 凌阳, 拇指 凌阳 P32;凌阳, 拇指 凌阳 sbit 凌阳,
39、拇指 凌阳 凌阳, 拇指 凌阳 CLOCK=P34;凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 a;凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 res;凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 bufN 凌阳, 拇指 凌阳 =0;凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 ADC0808();/模数转换函数声明 凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 change(); 凌阳, 拇指 凌阳 /数值更新函数声明 凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 get_data(n);凌阳, 拇指 凌阳 uchar 凌阳, 拇指 凌阳 filter1(
40、); 凌阳, 拇指 凌阳 / 凌阳, 拇指 凌阳 限幅滤波函数声明 凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 filter2(); 凌阳, 拇指 凌阳 /中值滤波函数声明 凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 delay(uchar 凌阳, 拇指 凌阳 z);凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 inint();凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 main() 凌阳, 拇指 凌阳 /主函数 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 while(1)凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 in
41、int();凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 ADC0808();凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 P2=res;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 ADC0808()凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 START 凌阳, 拇指 凌阳 = 凌阳, 拇指 凌阳 0;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳,
42、 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 START 凌阳, 拇指 凌阳 = 凌阳, 拇指 凌阳 1;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 START 凌阳, 拇指 凌阳 = 凌阳, 拇指 凌阳 0;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 led=0;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 EOC=EOC; /取反负跳变进入外部中断 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 delay(1);凌阳, 拇指 凌阳 if(key=0)凌阳, 拇指 凌阳 凌阳, 拇指 凌阳