当前位置:网站首页>单片机开发之ADC0808/9信号采集
单片机开发之ADC0808/9信号采集
2022-07-30 10:37:00 【华为云】
一、题目
ADC0808信号采集
二、要求
1、画出实验的流程图
2、编写源程序并进行注释
3、记录实验过程
4、记录程序运行结果截图
三、过程及结果分析
利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。要求信号幅度变化时(满量程的5%—95%),不影响检测到结果。频率检测的结果通过LCD1602的第一行显示出来,信号过零时,能够通过P2.6输出一个脉冲宽度为5μs的脉冲信号。
1. 根据上述实验内容,在Proteus 环境下建立图1所示原理图,并将其保存为ADC0808_self.DSN 文件。
图1:实验电路图
2. 编写源程序,将其保存为ADC0808_self.c,运行Keil开发环境,建立工程ADC0808_self.uV2,CPU 为AT89C51,包含启动文件STARTUP.A51。
3. 将C 语言源程序ADC0808_self.c 加入工程ADC0808_self.uV2,并设置工程ADC0808_self.uV2 属性,将其晶振频率设置为12MHz,选择输出可执行文件,仿真方式为选择硬仿真,并选择其中的“PROTEUS VSM MONITOR 51 DRIVER”仿真器。
4.构造(Build)工程ADC0808_self.uV2。如果输入有误进行修改,直至构造正确,生成可执行程序ADC0808_self.hex 为止。为AT89C51 设置可执行程序ADC0808_self.hex。
5. 运行程序,观察计算结果,并验证其是否正确。改变RV1 的抽头位置,从而改变输入信号的幅值,观察计算结果是否正确。更改信号发射器的频率,再次验证其功能是否正确。(注意:因为是软仿真,所以信号采集的速度受到限制,因此所输入的交流信号频率也不能太高,可以在200Hz以内尝试)。
实验结果如下:
1)将电位器至于满量程的90%,此时信号的幅值就是最大值的90%
图2:电位器调整到满量程的90%
2)将电位器至于满量程的50%,此时信号的幅值为最大值的一半
图3:电位器调整到满量程的50%
3)电位器调整到满量程的10%,此时信号的幅值为最大值的10%
图4:电位器调整到满量程的10%
四、流程图
图5:实验流程图
LCD1602的控制方法按3.7节所示方法进行ADC0808的控制方法按3.8.1所示方法进行。这里主要是过零点的检测方法如何实现。不能采用判断所采集到的数据是否为 0 的方法来实现,因为你的采集时刻不一定能够严格对准过零时刻。但是,我们注意到在 0 点的两边信号的极性是发生变化的,我们可以利用这一特点来实现过零检测。正弦波每个周期有两个过零点,因此,1s 内过零次数除以 2 就是信号的频率。
因此,在程序中可以这样实现。当每次采集到一个新的数据之后都要看一下这个数据是正数还是负数。当这个数大于 128 时是正数,当它小于 128 时是负数。判断当前数据的正负极性和上一个数据的正负极性是否一致,如果不一致,则说明经过了一次过零点,将其记录入次数计数器。
ADC0808 的 CLK 仍然用定时器 T1 来实现,可以将其设置为 50kHz(硬件实现时可以更高,软件仿真再高将难以实现)。利用定时器 T0 实现 50ms 定时,并配合软件实现 1s 钟定时。采用 12M 晶振时,T0 采用方式 1,则处置应为(TH0=0x3C,TL0=0xB0)。
但是,由于中断处理函数需要一定的响应时间,因此这个参数只是理论计算结果,要根据实测情况稍作调整。 同样 T1 理论计算值和实际输出值可能也会有一定的差距,也要进行调整。
五、源代码
边栏推荐
- (BUG record) No module named PIL
- By building a sequence table - teach you to calculate time complexity and space complexity (including recursion)
- 360发布面向未来的EDR,全方位守护政企用户终端安全
- 基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)
- Domino Server SSL Certificate Installation Guide
- Selected System Design | Design of CAN Bus Controller Based on FPGA (with Code)
- Classes and Objects - 6 Default Member Functions
- @RequestBody 和 @ResponseBody 详解
- 自适应控制——仿真实验一 用李雅普诺夫稳定性理论设计自适应规律
- 【HMS core】【FAQ】HMS Toolkit Typical Questions Collection 1
猜你喜欢
Meikle Studio - see the actual combat notes of Hongmeng device development 4 - kernel development
阿里云OSS对象存储
Alibaba Cloud OSS Object Storage
第2章 常用安全工具
死锁的理解
TestNg整合Retry代码
4. yolov5-6.0 ERROR: AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor' solution
还在用Swagger?我推荐这款零代码侵入的接口管理神器
Telerik2022 R2,有效的自动化测试
VLAN实验
随机推荐
PyQt5 - Drawing different types of straight lines
Matplotlib--plot markers
PyQt5 - draw text on window
Nacos configuration in the project of battle
安全提示:Qt中的FreeType
TestNg整合Retry代码
log4j Logger简介说明
【 HMS core 】 【 Analytics Kit] [FAQ] how to solve the payment amount in huawei pay analysis shows zero problem?
鸿湖万联扬帆富设备开发板正式合入OpenHarmony主干
unity3d C#语言基础(继承)
零代码开发入门:快速上手DIY函数公式的5个步骤
[100 Solidity Skills] 1. Contract reentrancy attack
log4js入门
数据库性能系列之索引(上)
【HMS core】【FAQ】HMS Toolkit Typical Questions Collection 1
PL5920 SOT-23-6 21V、2A、600KHz同步降压DC/DC转换器
OC-手动引用计数内存管理
Classes and Objects - 6 Default Member Functions
FPGA刷题——计数器(简易秒表、可置位计数器、加减计数器)
MFCC转音频,效果不要太逗>V<!