STM32的64pin封装的AD不能加外部基准,也没有内部基准
STM32有一个内部的参考电压,接到了内部的ADCx_IN17通道,它用于提供一个参考的数值但不是基准。根据数据手册,在温度为-40至+105摄氏度范围内,这个参考电压为:最小值=1.16V、典型值=1.20V、最大值=1.24V。
测量这个参考电压的数值可以作为你的实际信号测量的参照。
关于AD测量的准确性问题,请务必把电源滤波做好,你可以参考ST的评估板上的电源部分,这个文档中有电路图:http://www.st.com/stonline/products/literature/um/13472.pdf
STM32的ADC供电是VDDA,参考电压是Vref+和Vref-
Vref+和Vref-只有100脚以上的产品才有独立引脚;64脚以下的产品Vref+在内部与VDDA相连,Vref-在内部与VSSA相连。
如果我设置的VREF正为3.3 那么在ADC换算的时候 代码中的公式:temp=(fload)adcx*(3.3/4096)
stm32的ad参考电压要求>2.4v
我想如果参考电源纹波做的比较好,温飘可以不用考虑,可用内部的参考电压进行校正参考电压。
我做仪表的,不管参考是否移动,出厂校验只要校验的系数能满足准确度就可以。
我想在调试的时候读出当前1.2V的AD值,并记录下来,并且当前一个系数也记录下来
以后运行,我根据采集当前的1.2V AD的值校验,校验系数,使要的参数仍旧能测准确
我的计算原理是4095/V参考电压=采集1.2VAD值/1.2v;
得出:V参考=4095*1.2v/采集1.2VAD值,可以得出每次计算的结果的参考电压只跟当前采集采集1.2V AD值有关系。
这样可以得到:当前的系数于与以前的系数的倍数关系,来求出当前校验所需要的系数,测量的结果仍然是正确的。
可以选择一个通道采样基准电源,然后根据该值对信号的采样值予以修正。可以选择单片机内部的基准源作为参考信号;
对普通信号与基准电源进行扫描模式采样。 扫描顺序为: 基准源 => 普通信号 => …普通信号… => 基准源 对信号采样值的修正,可以按如下公式进行: Ds = (Dso*4095*2)/(Dref1+Dref2) Dref1表示第一次对基准电源的原始采样结果; Dref2表示第二次对基准电源的原始采样结果; Dso表示对普通信号的原始采样结果; Ds表示最终的修正结果; 为防止溢出,使用u32型变量进行计算
关键字:STM32 AD基准
引用地址:
关于STM32的AD基准问题
推荐阅读最新更新时间:2024-03-16 15:15
基于stm32的FSK调制解调器的设计
大致要求:设计一个FSK调制解调器,基带信号码速率为2000B/s,载波速率为4khz和8khz,解调信号要能完整还原基带信号。实现方法多种多样,通信领域内调制解调器的设计大多数用的都是硬件电路,鉴于笔者对编程情有独钟(其实笔者还是懂一点电路设计知识的~),所以最终决定用stm32来设计,纯编程实现。看起来高大上,但实际做起来不难,不过有挺多东西要考虑的。 总的设计思路如下: 首先是基带信号的产生,它也是我们要调制和解调的目标。基带信号由一连串随机的码元序列构成,为了模拟随机的码元序列,笔者用定时器设计8位的PN码序列,码元速率为2000B/s。定时器3定时0.5ms,每进入一次中断,变量num加一,设置一次IO引脚电平,
[单片机]
stm32 USART 串口通信操作寄存器+库函数
串口通信虽然在如今的电脑上使用的越来越少,因为其在通信速率,距离已经不适应pc的要求,取而代之的是USB口。但是在嵌入式领域,USART仍然广泛运用着。 stm32的最多可以提供5路串口,有分数波特率发生器、支持同步单线通信和半双工单线通信、具有DMA等。使用USART时,stm32的I/O口经RS232电平转换电路 和电脑的串口连接。 串口使用只需要开始串口时钟,设置相应的I/O口模式,配置波特率、数据位长度、奇偶校验位等信息就可以使用了。 我使用了三种方式使用串口通信,只可以开启一项: USART通过使用printf()函数发送信息; USART和上位机通信,接收到数据后原数据输出; USART主动发
[单片机]
STM32经验总结(1)
1、STM32启动模式设置接口 如果我们想用串口下载代码,则必须配置BOOT0为1,BOOT1为0,而如果想让STM32一按复位键就开始跑代码,则需要配置BOOT0为0,BOOT1随便设置都可以。 2、使用库函数还是位带操作 使用库函数操作 #define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) 位带操作(基本上只用来进行IO口的输入和输出) #define KEY0 PEin(2) 用库函数的好处是,在各个STM32芯片上面的移植性非常好,不需要修改任何代码。用位带操作的好处是简洁。 3、如何调用模版文件Template 首先,清空OBJ输出文件夹,然后直
[单片机]
浅谈链表对stm32等芯片程序中的提升作用(C语言)
程序中经常面临这样的一个问题,需要创建一定数量的对象,但事前又不知道对象的具体个数,因此新手通常的做法都会为了能处理足够的对象信息,创建一个足够大的空间数组。这里举个简单的例子,某个应用要求管理学生信息,因此设置了这样的一个结构体(类似于面向对象语言里说的成员属性) typedef struct { int num; int age; char *name; }studentInfo; 在不引入链表的情况下,为了能管理尽可能多的学生信息,可能会这样创建这个结构体的实体: studentInfo student ; int studentCnt = 0; //记录已经管理的学生数量 这样的处理方法,理论上能实现需求
[单片机]
谈谈晶振的原理以及晶振和STM32的关系
01 压电效应 压电效应: 某些电介质在沿一定方向上受到外力的作用而变形时,其内部会产生极化现象,同时在它的两个相对表面上出现正负相反的电荷。 正压电效应: 当外力去掉后,电介质又会恢复到不带电的状态。 逆压电效应: 当作用力的方向改变时,电荷的极性也随之改变。相反,当在电介质的极化方向上施加电场,这些电介质也会发生变形,电场去掉后,电介质的变形随之消失。 当在晶体表面上施加机械压力时,与机械压力成比例的电压出现在晶体上。该电压会导致晶体失真,失真的量将与施加的电压成比例,并且还与施加在晶体上的交流电压成正比,从而导致晶体以其固有频率振动。这种压电效应会产生机械振动或振荡,可用来代替以前的振荡器中的标准LC振荡电路。 下图展示了:
[单片机]
STM32学习笔记:【008】IIC通信协议详解
什么是IIC(I2C)? IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司设计出来的一种简单、双向、二线制、同步串行总线。它是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。 那么也就是说,只要收发双方同时接入SDA(双向数据线)、SCL(同步时钟线)便可以进行通信。 I2C总线的工作速度分为 3 种模式(实际上,IIC的通信速率由SCL决定): S(标准模式),测量与控制场合; F(快速模式),速率为 400kb/s;(默认) Hs(高速模
[单片机]
关于LM3S与STM32的粗浅对比
我用过STM32,现在又用LM3S。用后者的原因就是因其集成有网口。通过对比,我发现LM3S有一点不如STM32,就是外设的更新事件。STM32中可以通过更新事件机制实现外设之间直接打交道,而不必打扰CPU,从而大大提高了处理效率。但LM3S中就没这种机制,这是其一大不足。不知TI能否予以改进。 另外,LM3S的网口既然集成了MAC+PHY,为设么不集成协议?还要通过软件实现,耽误事。据我所知,对上述三者全部硬件实现的只有南韩的一款芯片W7100,是51核的。不知TI下一步能否硬件集成协议。
[单片机]
STM32如何高效接收串口数据?
硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 DMA,直接内存存取,可以用它的双手释放CPU的灵魂,所以,本文通过USART3进行串口收发,接受使用DMA的方式,无需CPU进行干预,当接受完成之后,数据可以直接从内存的缓冲区读取,从而减少了CPU的压力。 具体的代码实现如下: usart_driver.h 封装了接口,数据接收回调函数类型,基本数据结构等; usart_driver.c 函数原型实现,中断服务函数实现等; 拷贝这两个文件即可,可以根据目录下的参考用例,进行初始化。 头文件usart_driver.h已经声明了外部函数可能用到的接口; USART3_DR的地
[单片机]