资料介绍
曾经的电感电压采集让我心碎的多少次、又让我开心了多少次、但已经成为过去、(软件和硬件都会影响),呵呵、估计有人已经猜到我接下来要介绍什么了、在你们面前、我已无秘密、额、其实标题也直接“表白”了、看到标题,别吓到哈、并不是要用英文写、至于原因是什么、请往下看:好吧、言归正传:STM32的ADC模块,请允许我用如此通俗的语言:普通话来介绍STM32ADC模块的特色1、1MHz转换速率、12位转换结果(12位、记住这个12位哈、因为2^12=4096 ,也请记住4096哈)STM32F103系列:在56MHz时转换时间为:1μs在72MHz时转换时间为:1.17μs2、转换范围:0~3.6V (3.6v---->当你需要将采集的数据用电压来显示的话:设你采集的数据为:x[0~4095],此时的计算公式就为:(x / 4096) * 3.6))3、ADC供电要求:2.4V~3.6 V(可千万别接到 5V 的石榴裙子底下呀)4、ADC输入范围:VREF-≤ VIN ≤VREF+ (VREF+和VREF-只有LQFP100封装才有)5、双重模式(带2个ADC的设备): 8种转换模式6、最多有18个通道:16个外部通道2个内部通道:连接到温度传感器和内部参考电压(VREFINT = 1.2V).....(略,请看参考手册哈,由于篇幅,就不过多的列出来了、、说到略、让我想起了月光宝盒诸葛亮的:略懂略懂、、其实我也是略懂略懂而已、、)12、DMA功能(仅ADC1有)本博客里,由于篇幅、所以就以独立模式下的单次转换为例哈、打开参考手册可以看到这段话:单次转换模式下,ADC只执行一次转换。该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。一旦选择通道的转换完成:● 如果一个规则通道被转换: ─ 转换数据被储存在16位ADC_DR寄存器中 ─EOC(转换结束)标志被设置 ─ 如果设置了EOCIE,则产生中断。● 如果一个注入通道被转换: ─ 转换数据被储存在16位的ADC_DRJ1寄存器中 ─JEOC(注入转换结束)标志被设置 ─ 如果设置了JEOCIE位,则产生中断。然后ADC停止。此图形象的表明了其背后那不为人知的秘密转换关系。。虽然单凭看文字就能想象出来、但是、有图片是不是更加形象呢???对于以上的寄存器、在此我稍微提提:免得寄存器大神们产生怨气:好不容易等到你讲我老大ADC,却不把我这些背后的勤劳者给导出来好了,那就恕小弟容禀:1、ADC状态寄存器(ADC_SR)2、ADC控制寄存器1(ADC_CR1)3、ADC控制寄存器2(ADC_CR2)EXTSEL[2:0]:选择启动规则通道组转换的外部事件 (External event select for regular group)ALIGN:数据对齐 (Data alignment)RSTCAL:复位校准 (Reset calibration)CAL:A/D校准 (A/D Calibration)CONT:连续转换 (Continuous conversion)ADON:开/关A/D转换器 (A/D converter ON / OFF)4、ADC采样时间寄存器1(ADC_SMPR1)SMPx[2:0]:选择通道x的采样时间 (Channel x Sample time selection)5、ADC规则序列寄存器1(ADC_SQR1)L[3:0]:规则通道序列长度 (Regular channel sequence length)SQ1[4:0]:规则序列中的第1个转换 (1st conversion in regular sequence)(ADC规则序列寄存器3(ADC_SQR3))6、ADC规则数据寄存器(ADC_DR)DATA[15:0]:规则转换的数据 (Regular data)(由于寄存器过于多,我们就不在这一一列举了哈、、因为我主要是用库,所以寄存器相关的位都不具体介绍了哈、请大家参照中文手册)在这里,向大家介绍下:数据对齐:ALIGN位用于设置对齐方式:右或左;对于注入通道,转换结果是减去偏移量的值,可以为一个负数,在右对齐时扩展位位符号位。那我们现在要怎么来实现呢??这个问题、相信大家在看了那么多的寄存器之后急迫想要知道的吧、、前面的只是个热身、、接下来步骤如下:1、开启ADC1的时钟,由于ADC1是在PA1上,所以同时也要打开PA的时钟,并进行相关的配置、对于这个配置,要把PA1设置成interwetten与威廉的赔率体系
输入,为什么呢??大家打开中文参考手册可以看到啊哈、、这下子清楚了吧、2、复位ADC1,(本人觉得没必要、为什么,待会我会跟你说,留下悬念先),设置ADC1的分频因子,(记住,这里的ADC的时钟不能超过14MHZ),而且其采样周期长点会好点,ADCCLK---最快可达14MHz, 时钟来自经过分频器的PCLK2(2、4、6、8分频)整个转换时间 = 采样时间 + 12.5个周期(固定时间)在14MHz和采样时间位1.5周期时 转换时间:1μs (14个周期 cycles)当ADCCLK=14MHz和1.5周期的采样时间:TCONV = 1.5 + 12.5 = 14周期 = 14×(1 / (14 × 1000000)) = 1μs其采样周期一览表:涉及到采样周期、这里来看看转换序列:最多达16个转换通道且可以采样不同的顺序排列,不同的采样时间和过采样的可能性。例如:- 转换通道:1、2、8、4、7、3、11- 不同的采样时间;- Oversampling of channel 7。3、初始化ADC1的参数、设置ADC1的工作模式和规则序列的相关信息;大家通过打开"stm32f10.adc.h"可以看到:typedef struct{uint32_t ADC_Mode; //设置ADC模式-->独立模式FunctionalState ADC_ScanConvMode; //设置是否开启扫描模式 --->否FunctionalState ADC_ContinuousConvMode; //设置是否开启连续转换模式 ---->否uint32_t ADC_ExternalTrigConv; //设置启动规则转换组转换模式---->软件触发uint32_t ADC_DataAlign; //设置数据对齐方式----->右对齐uint8_t ADC_NbrOfChannel; //设置规则序列的长度---->顺序进行规则转换的ADC通道数目1}ADC_InitTypeDef;4、使能ADC并校准注:在设置完了以上信息后,使能AD转换器,执行复位校准和AD校准(这两步校准一定要,否则数据将不准)还有记住,每次进行校准之后都要等待校准结束,但是通过什么方式知道校准结束呢?这里是通过获取校准状态来判断是否校准结束,相关的库函数请看代码分别的库函数请看待会的代码。(请用比较老外的方式去看,也就是用英语啦,为什么呢?请看下文)5、读取AD的值当然,这里说读取AD值并不是那么的简单,以上我们只是准备好了AD,还没有设置相关的规则序列通道,采样顺序,以及采样周期,设置完之后启动AD转换就行了、然后才直接读取哈、、相关的库函数请看代码、void Adc_Init(void){ADC_InitTypeDef ADC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;/* Enable ADC1 and GPIOA clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12MHZ/* Configure PA.1 (ADC Channel) as analog input -------------------------*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOA, &GPIO_InitStructure);//ADC_DeInit(ADC1);//在这里复位被我注释掉了、至于为什么,我待会会说/* ADC1 configuration ------------------------------------------------------*/ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//这里对应上面所讲的配置,在这里就不给出注释了ADC_InitStructure.ADC_ScanConvMode = DISABLE;ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel = 1;ADC_Init(ADC1, &ADC_InitStructure);/* Enable ADC1 *///知道我为啥要在上面提醒大家要用老外的方式来看了吧、因为这里的注释都是用英文的//请不要以为我装逼,我这样做是有原因的、、原因我待会会说、你也会明白我最初的标题为何那样写ADC_Cmd(ADC1, ENABLE);
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 基于MATLAB的数值方法英文资料下载 0次下载
- Matlab系列之数组的基本操作资料下载
- Matlab系列之程序调试资料下载
- cortex_m3_stm32嵌入式学习笔记16之ADC资料下载
- 手工焊接步骤资料下载
- ALLEGRO 焊盘制作步骤资料下载
- STM32F30X禁止 ADC 已关闭情况下再次 关闭 ADC资料下载
- STM32进阶之串口环形缓冲区实现资料下载
- STM32之DAC资料下载
- STM32之SRAM调试资料下载
- stm32学习——两轮平衡小车之硬件设计资料下载
- 五个步骤,讲解PCBA成本如何估算资料下载
- STM32之EXTI——外部中断资料下载
- 测量电阻的伏安法步骤资料下载
- 使用PROTEL设计的基本步骤资料免费下载 0次下载
- 基于STM32片内信号的ADC应用演示案例 2612次阅读
- 学习STM32F103的ADC功能 1724次阅读
- STM32进阶之串口环形缓冲区实现 1997次阅读
- STM32之红外遥控信号自学习实现 2869次阅读
- STM32 ADC 的使用说明 3282次阅读
- STM32的ADC实验 1390次阅读
- STM32的多个ADC模块如何同时采样转换详细应用实例说明 3.3w次阅读
- STM32单片机ADC库函数的定义和使用方法 1.7w次阅读
- 如何实现STM32F407单片机的ADC转换 2.6w次阅读
- STM32的ADC编程方法总结 1.2w次阅读
- stm32单片机入门c语言解析 5.4w次阅读
- 最全STM32外设资料汇总 2.8w次阅读
- 如何在STM32中得到最佳的ADC精度 6.2w次阅读
- STM32在IAR的开发步骤 2.3w次阅读
- adc0809中文资料下载 adc0809引脚图封装及应用电路 2w次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1490次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 92次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 10次下载 | 免费
- 6基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
- 7蓝牙设备在嵌入式领域的广泛应用
- 0.63 MB | 3次下载 | 免费
- 89天练会电子电路识图
- 5.91 MB | 3次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537791次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233045次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多