首页 > 其他分享 >ADC

ADC

时间:2023-08-27 11:33:41浏览次数:169  
标签:触发 转换 InitStructure ADC ADC1 GPIO

ADC0809

先选择通道,然后通道输入模拟量电压到比较器的一端,DAC通过改变的SAR编码从而用加权电阻网络生成不同的电压,在比较器的另一端,两者对比相同的时候即得到对应的SAR数字量(对比方法:二分法),然后输出给8位锁存缓冲器

Vref+  和- 是参考电压,对应数字量对应的是3.3V还是5V由这个决定

128  64  32 。。。 每一位都是二进制的位权,判断过程就等于对二进制从高位到低位判断是0还是1的过程  (逐次逼近)

 单通道单次转换

void AD_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    RCC_ADCCLKConfig(RCC_PCLK2_Div6); // 分频72/6=12M  这里最大是14M
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  //ADC模拟输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); 
    // ADC1,指定通道,1(规则组的16个序列的1),_55  数值越小越快,越大越稳定
    
    ADC_InitTypeDef ADC_InitStructure;  
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //工作模式选择  独立还是双ADC模式
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据对齐,
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发源选择EXTI_11_15   ,这里使用内部软件触发
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;// 连续转换模式 
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式   (对应4种模式)
    ADC_InitStructure.ADC_NbrOfChannel = 1;// 通道数目  (一般用在扫描模式下,非扫描的话只有第一个序列有效)
    ADC_Init(ADC1, &ADC_InitStructure);
    
    ADC_Cmd(ADC1, ENABLE);
    //中断和模拟看门狗  TODU
    ADC_ResetCalibration(ADC1);  //对ADC进行校准   ADC_CR2 位3 先有软件置1,校准后硬件自动置0
    while (ADC_GetResetCalibrationStatus(ADC1) == SET);  //查看硬件是否置0
    ADC_StartCalibration(ADC1); //启动校准
    while (ADC_GetCalibrationStatus(ADC1) == SET);
}

uint16_t AD_GetValue(void)
{
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);  // 软件触发转换
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //等待转换完成(规则组和注入组共用转换完成标志位)
    return ADC_GetConversionValue(ADC1);//返回数字量  读取ADC  DR寄存器,自动清除EOC标志位
}
View Code

可以采用均值滤波的方式平滑采样,使用施密特触发器的原理稳定控制开灯关灯

一般模式,打开一个通道,ADC转换,输出,关闭通道

注入通道:可以直接搬运4份ADC数据到寄存器,可同时显示(菜单,一次性上4份菜)

规则通道:16选1,对应的寄存只能存一份数据,要想显示多路,可配合DMA数据转运,一个接一个排队展示(菜单,一次只能上1份【避免数据覆盖】,被拿走后上下一份)

转换信号:

1软件触发,区分为规则组触发源和注入组触发源 

每隔1ms转换一次,可使用定时器来申请中断来转换(消耗资源);

2硬件触发

一般可以用定时器的更新事件选择为TRGO输出,在ADC那里选择触发信号为对应的TRGO,这样通过硬件触发ADC(无需中断)

也可以选择外部中断引脚来触发中断

模拟看门狗可用来监测

 C8T6,ADC引脚ADC12_IN0-9 ,ADC1和ADC2公用引脚,ADC1和ADC2可以同时采样双ADC模式,交叉模式,增加采样率

 

转换模式

单次转换非扫描: 一次一个通道,一次转换一个。 触发一次,转换一次。

连续转换非扫描:一次一个通道,连续转换。触发一次,连续转换不停,需要值直接读寄存器就行

单次转换扫描模式:一次触发,对多个通道依次转换,每个通道只转换一次

连续转换扫描模式:一次触发,对多个通道依次转换,每个通道连续转换

 ADC采样电压保持,采样事件长,避免毛刺,稳定;采样时间短,频率快

ADC校准,固定流程,在初始化函数后增加一些代码就行

传感器使用分压原理

 

标签:触发,转换,InitStructure,ADC,ADC1,GPIO
From: https://www.cnblogs.com/liujinmeng/p/17652675.html

相关文章

  • Android零基础入门 | 广播机制 Broadcast
    Android应用可以通过广播从系统或其他App接收或发送消息。类似于订阅-发布设计模式。当某些事件发生时,可以发出广播。系统在某些状态改变时会发出广播,例如开机、充电。App也可发送自定义广播。广播可用于应用间的通讯,是IPC的一种方式。广播的种类广播的种类也可以看成是广播的属性......
  • Sigma-Delta ADC 简介
    本文转自:什么是Sigma-DeltaADC(linkchip.cn) Sigma-DeltaADC是一种目前使用最为普遍的高精度ADC结构,在精度达到20位以上的场合,Sigma-Delta是必选的结构。通过采用过采样、噪声整形以及数字滤波技术,降低对模拟电路的设计要求,实现了其他类型的ADC无法达到的高精度和低功耗。通......
  • 模数转换器(ADC)AD7674ASTZRL、AD7622BCPZ适用于高动态数据采集
    一、AD7674是一款18位、800MSPS、电荷再分配、逐次逼近型寄存器(SAR)全差分模数转换器(ADC),采用5V单电源供电。该器件内置一个18位高速采样ADC、一个内部转换时钟、一个内部基准电压缓冲、纠错电路,以及串行和并行系统接口。器件优势:1、高分辨率、高吞吐量。AD7674是一款800kSPS......
  • MS5182N/MS5189N——16bit、4/8 通道、200KSPS、 SAR 型 ADC
    产品简述MS5182N/MS5189N是4/8通道、16bit、电荷再分配逐次逼近型模数转换器。采用单电源供电。MS5182N/MS5189N内部集成无失码的16位SARADC、低串扰多路复用器、内部低漂移基准电压源(可以选择2.5或4.096V)、温度传感器、可选择的单极点滤波器以及当多通道依次......
  • 雷达中ADC的采样率、采样时间、采样周期
     这一篇记录一下关于雷达采样率、采样时间和采样周期的相关知识,方便后面再用到的时候能够很快的找到。同时也希望能帮助到大家一点。话不多说,进入主题。        本文主要学习三个东西采样率、采样时间和采样周期。分别对三者有一个大概的描述,最后会通过一个例子便于......
  • 浅谈ADC驱动器设计
    引言谈及ADC设计时,必然要了解输入信号是什么、具有什么样的特性及采集系统的指标是什么,所以ADC的输入设计也是采集系统设计的一个难点和重点,需要根据不同的要求设计ADC的前端电路。1.高速ADC模拟输入指标对于高速ADC系统而言,我们必须明确其输入的指标要求,才能更好的发挥出ADC......
  • jmeter: ${__P(THreadCount,)} 。P函数实现命令行变量,改变并发数和执行时间
         /export/apache-jmeter-5.4.1/bin/jmeter.sh-JrunTime300-JTHreadCount10 -n-tpinter_get.jmx-lpinter_test.jtl  ......
  • CH32V003使用ADC八通道转换注意事项
    本文以CH32V003_F4P6(20Pin)为模板 1、PA1、PA2为外部晶振输入引脚,同时也是ADC的CH1与CH0,所以需要先在system_ch32v00x.c文件中更改为内部48M的宏即可。注:CH32V003的ADC数据寄存器为10,通道转换值为[0-1024],精度为VCC/1024,VCC与外部参考电压相同[2.8-5.5]  2、ADC初......
  • RV1126 —— 配置adc并读取adc通道上传感器数值
    1.adc设备树配置一般来说,rk中已经封装好了标准adc的dts参数属性,我们要做的就是添加自己的adc通道,并引用标准接口即可,不同平台,标准dts中的adc节点名有所不同,其配置属性基本一样。例如:1)adc:adc@ff100000{compatible="rockchip,saradc";......
  • [C#] 使用 ReadConsoleInput 所需要注意的问题.
    如果要使用鼠标输入,那么需要:启用鼠标输入,只有启用之后,才能接收到鼠标事件关闭控制台的快速编辑模式,很多人的控制台都启用了快速编辑模式,它会导致鼠标输入无效任何情况下,都需要:不使用除ReadConsoleInput之外的任何输入方法,因为它们会和你争抢ReadConsoleInput的......