2025年STM32F1模拟信号转数字信号---ADC

STM32F1模拟信号转数字信号---ADC顾名思义 本章内容主要讲的就是模数转换 模拟信号是连续性变化的信号 ADC 就是把连续型信号通过线性变换 转换成相应的数字信号保存在寄存器里 MCU 直接读取即可 传感器一般是线性的数据变换 ADC 往简单了讲就是模拟信号转化数字信号 但是其中的门路还有很多的 涉及到的寄存器也比较多

大家好,我是讯享网,很高兴认识大家。

顾名思义,本章内容主要讲的就是模数转换。模拟信号是连续性变化的信号,ADC就是把连续型信号通过线性变换,转换成相应的数字信号保存在寄存器里,MCU直接读取即可。(传感器一般是线性的数据变换)
ADC往简单了讲就是模拟信号转化数字信号,但是其中的门路还有很多的。涉及到的寄存器也比较多。主要含义就是讲模拟的连续信号转变为离散的数字信号的器件。
ADC首先要讲的是ADC的时钟,ADC的时钟首先不可超过14Mhz的,超过之后精确度就会下降。ADC的时钟与它所在的总线有关,一般为72M或者36M,不过可经过分频器之后得到ADCCLK。
ADC的主要特征
1.12位的分辨率
2.单次/连续转换模式
3.通道0-N的扫描
4.自校准(复位校准和AD校准)
5.带内嵌数据一致性的数据对齐
6.采样间隔可按通道分编程
7.外部触发
8.间断模式
9.双重模式
10.供电要求:2.4v-3.6V
11.输入范围:Vref-<=Vin<=Vref+

讲一下单次、连继、扫描模式
ADC单通道:
要求进行一次ADC转换:配置为单次模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,就停止转换。
要求进行连续ADC转换:配置为连续模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,接着进行下一次转换,不断连续。
ADC多通道:必须是扫描模式
要求进行一次ADC转换:配置为单次模式使能,扫描模式使能。这样ADC的多个通道,按照配置的顺序依次转换一次后,就停止转换。
要求进行连续ADC转换:配置为连续模式使能,扫描模式使能。这样ADC的多个通道,按照配置的顺序依次转换一次后,接着进行下一次转换,不断连续。
因此,得出结论:扫描模式只在多通道的条件下有效,来使得各个通道按照配置循序依次转换。而单次模式无论在单通道还是多通道下只对这些或者这个通道进行一次转换,连续模式无论是在单通道还是多通道下都对这些或者这个通道不断进行连续的转换。

ADC时钟
ADC时钟是由ADCCLK时钟和PCLK2同步,RCC为ADC时钟提供了一个专用的可编程分频器。
ADC通道
ADC通道可达18路(内部两路)。规则通道和转换顺序在ADC_SQRx寄存器中选择(注入通道的则在ADC_JSQRx中),规则通道的总数目在ADC_SQR1中的L【3,0】位中(注入通道在ADC_JSQR1【1,0】)。
寄存器方面解释单次、连续、扫描
ADC_CR2寄存器中的ADON位代表给ADC上电,相当于使能ADC,CONT位则代表的是单次模式还是连续模式,CONT置位则代表的是连续模式。扫描的话,则是由ADC_CR2寄存器中的SCAN位控制。
在这里插入图片描述
讯享网
这是间断模式的规则。
数据对齐
数据对其就好解释,因为我们一般用到的ADC都是12位的嘛,但是ADC的数据寄存器DR是32位(双通道各占16位),所以可以选择左右对齐,也就是高12位或者低12位。
采样时间
采样时间是由ADC_SMPR1和ADC_SMPR2两个寄存器控制。转换时间
T转换时间=采样时间=12.5周期(读取时间)
外部触发事件
由ADC_CR2中的EXTSEL位控制
在这里插入图片描述
寄存器表格
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#include "my_adc.h" #include "delay.h" //adc初始化 void MY_ADC_Init(void) { 
    RCC->APB2ENR|=1<<2;//GPIOA时钟初始化 RCC->APB2ENR|=1<<9;//ADC时钟初始化 RCC->APB2RSTR|=1<<9;//ADC时钟复位 RCC->APB2RSTR&=~(1<<9);//ADC时钟复位结束 RCC->CFGR&=~(11<<14);//清空时钟分频器 RCC->CFGR|=10<<14;//6分频 GPIOA->CRL&=0xffffff0f;//复位GPIOA1 其他位保持不变 /*可不写 GPIOA->CRL|=0x00000000;//模拟输入PA0 */ ADC1->CR1&=0XF0FFFF; //工作模式清零 ADC1->CR1|=0x0000<<16;//独立模式 ADC1->CR1&=~(1<<8);//不使用扫描模式 ADC1->CR2&=~(1<<1);//单次转换模式 ADC1->CR2&=~(7<<17); ADC1->CR2|=7<<17;//外部软件触发 ADC1->CR2|=1<<20;//外部触发事件 ADC1->CR2&=~(1<<11);//右对齐 ADC1->SQR1&=~(15<<20);//清除转化数 ADC1->SQR1|=0<<20;//1个转换 ADC1->SMPR2&=~(7<<3);//采样时间清零/通道1 ADC1->SMPR2|=7<<3;//设置采样周期239.5周期/通道1 ADC1->CR2|=1<<0;//ADC转化器开启 即使能ADC ADC1->CR2|=1<<3;//复位校准 while(ADC1->CR2&1<<3);//复位校准结束 //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。  ADC1->CR2|=1<<2;//AD校准 while(ADC1->CR2&1<<2);//AD校准结束 //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。  } //得到ADC的值 u16 Get_ADC_Value(u8 ch) { 
    ADC1->SQR3&=0xffffffe0;//第一个转化 ADC1->SQR3|=ch; ADC1->CR2|=1<<22;//开始规则转换 while(!(ADC1->SR&1<<1));//规则转换结束 return ADC1->DR; } u16 Get_ADC_AVERAGE_Value(u8 ch,u8 time) { 
    u32 temp_val=0; u8 t; for(t=0;t<time;t++) { 
    temp_val+=Get_ADC_Value(ch); delay_ms(5); } return temp_val/time; } 

讯享网

如果对您的问题有帮助的话可以帮忙点个赞,谢谢~: 有问题大家可以一起交流沟通!

小讯
上一篇 2025-03-10 10:03
下一篇 2025-02-16 21:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/124155.html