PIC adc模块的配置

news/2025/2/19 10:17:43/

PIC adc模块的配置有如下要点:

1. adc模块本身:

注意,Auto-conversion Trigger和ADC的clock是两个概念。

auto-conversion Trigger的频率不得超过ADC采样一次的总时长。而真正的采样率是auto-conversion Trigger的頻率。

采样的过程中,那个TAD,可以认为是ad采样中,一系列流水线工作的节拍。一次AD采样会包括如下环节:

  • 接入检测电路,充电
  • 断开,开始2分法逼近,得到输出digital的各个bit的值。
  • 输出。
  • 放电。

我们的设计目标是100us一次采样即采样率=10ksa/s,所以,46us符合要求。

Positive reference和  Negative Reference是信号进入单片机时,被修正到的峰峰值。ad如果有10位,那么采样值1023对应-Positive Reference那个电压;采样值0,对应Vss那个电压。Vss一般就是0。

左对齐和右对齐的概念,只有对那些高于8bits的AD采样芯片才会有意义。指的是把测量结果对其到16Bits,高低两个字节的左边MSB还是右边LSB。左对齐可以直接很方便地丢弃掉低位测量值,如果电路本身电压基准有抖动,那么直接丢掉低位就行,虽然AD有10bits,12Bits,但是我们只用8Bits.

2.采样频率发生源( CCP)

注意,CCP模块需要设定上述两个属性。第一个属性是指定一个Timer. Timer本身要已经把分频器分好。另外要设置为Autoconversion模式,这样CCP5模块才能真的去连接到Adc那里。

然后注意CCP中断无需打开。因为测量值测完之后,你才能够取走。所以真正的中断源是adc的中断

然后,一个隐藏知识。CCP需要打开高级模式,配置: CCPR*h 和CCPR*L 

它的实际工作模式是这样的:CCP会以使用者的方式去操控那个Timer。注意,和Timer日常工作模式不同,CCP模块此时是个正计时器。从0开始数,数到 CCPR*h-CCPR*l所设定的那个16bits数值时就会触发,触发会,它会去置 adc的开始采样寄存器位:

ADCON0bits.GO_nDONE = 1;

然后adc就会按照自己设定的TAD的节拍,走完所有的节拍,结果生成后:

ADCON0bits.GO_nDONE = 0;

同时生成中断。中断的频率,或者说采样率,要顾及到单片机本身的算力。比如留出1000个指令周期,可能是比较充裕的。这个上限要自己去测。

3.定时器

 定时器的配置要点是:Timer这里的Timer Period的具体设置其实是无效的。因为它会成为一个被动器件,它的TimerPeriod会由CCP模块控制,以正计时的模式运行。这里配置其实全无意义。只有那个Timer Period的下限2us有意义,被用来计算與目標采样率相当的采样点之间的时间差所对应的那个数字应该是几——2us的最小时间刻度,那么100us的采样率就是50 = 100us/2uS.

这里是实际的最终测量波形,信号是工频,一个整周期:

比对示波器图样:

采样值序列要转换为实际的测量值,还需要进行标定。标定主要有两个指标:

1.零点

2.斜率。

所有的一次函数,最关键的指标就是这两个值。一个是整形,一个是 float.


http://www.ppmy.cn/news/102255.html

相关文章

Qt Qml 实现键鼠长时间未操作锁屏

文章目录 摘要实现思路键盘鼠标监控百度到的方法我的自己方法 最后 关键字: Qt、 Qml、 QInputEvent 、 QStandardItem、 eventFilter 摘要 今日需求: 项目中需要实时检测用户是否长时间为操作键盘和鼠标,如果超过预设时间未操作键盘和…

不是说00后已经躺平了吗,怎么还是这么卷.....

都说00后已经躺平了,但是有一说一,该卷的还是卷。 前段时间我们部门就来了个00后,工作都还没两年,跳到我们公司起薪20K,都快接近我了。 后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。最近和…

网络安全大厂面试题合集

注:本套面试题,已整理成pdf文档,但内容还在持续更新中,因为无论如何都不可能覆盖所有的面试问题,更多的还是希望由点达面,查漏补缺。 ​ 某大厂一面整理 1、防范常见的 Web 攻击 2、重要协议分布层 3、ar…

线程的创建和参数传递

一、进程 进程有独立的地址空间; Linux为每个进程创建task_struct; 每个进程都参与内核调度,互不影响; 进程在切换时系统开销大; 很多操作系统引入了轻量级进程LWP; 同一进程中的线程共享相同地址空间…

MSP432学习笔记9:定时器A-----捕获

今日得以继续我的MSP432电赛速通之旅~~~ 目录 基础知识: 相关库函数: 一般配置步骤: 首先定义一个初始化函数: 1.复用引脚: 2.配置连续计数结构体: 3.初始化定时器连续计数: 4.配置捕获结构体: 5.初始化定时器为捕获: …

接口测试--apipost接口断言详解

在做接口测试的时候,会对接口进行断言,一个完整的接口测试,包括:请求->获取响应正文->断言。 一、apipost如何进行断言 apipost的断言设置实在后执行脚本中进行编写的。apipost本身提供了11中断言: apt.asser…

【一次调频】考虑储能电池参与一次调频技术经济模型的容量配置方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

使用docker部署nginx的负载均衡

前言: nginx做负载均衡使用权重轮训方式,1号服务器提供转发服务,2号和3号服务器实际使用。 过程: 创建文件夹: mkdir -pv /lnmp/nginx/nginx_proxy/{data,conf/conf.d,logs} mkdir -pv /lnmp/nginx/nginx_one/{data,conf/conf.d,logs} mk…