STM32 AD采样电压计算公式

在使用STM32的ADC进行检测电压时必须回涉及到电压值的计算,为了更高效率的获取电压,现在有以下三种方法:

你得到的结果是你当前AD引脚上的电压值相对于3.3V和4096转换成的数字.
假如你得到的AD结果是ADC_DR这个变量,他们存在以下关系:

ADC_DR/当前电压值 = 4096/3300毫伏如果你反过程想得到当前电压值,可以如下计算:
unsigned long Voltage;
Voltage = ADC_DR;

//---假设你得到的AD结果存放到ADC_DR这个变量中;
Voltage = (Voltage * 3300)/4096;          //----你就得到了正确的电压结果,单位是mV

一般出于效率,我会们自己进行约分:
Voltage = (Voltage * 825)/1024;           //----你就得到了正确的电压结果,单位是mV

而再进一步,效率会更高:
Voltage = (Voltage * 825)>>10;          //----你就得到了正确的电压结果,单位是mV

时间: 2024-08-04 07:06:12

STM32 AD采样电压计算公式的相关文章

STM32 ADC 测电压

1. STM32F103 ADC 本例使用STM32F103芯片的PA1引脚测试模拟输入的电压值. 查看文档<STM32F103X.pdf>第31页,引脚定义图: 得知PA1使用ADC1的通道1. 查看文档<STM32F103X.pdf>第13页,时钟树图: 得知ADC1可2,4,6,8分频,又ADC输入时钟不得超过14MHZ(参见STM32参考手册RM0008第11章ADC). //初始化ADC //这里我们仅以规则通道为例 //我们默认将开启通道0~3 void Adc_Ini

AD采样的平均值滤波

基本问题:单片机ad采样,连续采样十次,对这十次数据取平均值. 注意:最开始的一次就是用当次的数据,以后每更新一个数据就取当前数据加上前九个数据,取平均. 先看代码: static int _filter(int m) { static int flag_first = 0, _buff[10], sum; const int _buff_max = 10; int i; if(flag_first == 0) { flag_first = 1; for(i = 0, sum = 0; i <

关于Stm32定时器+ADC+DMA进行AD采样的实现

Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1.使用定时器中断每隔一定时间进行ADC转换,这样每次都必须读ADC的数据寄存器,非常浪费时间! 2.把ADC设置成连续转换模式,同时对应的DMA通道开启循环模式,这样ADC就一直在进行数据采集然后通过DMA把数据搬运至内存.但是这样做的话还得加一个定时中断,用来定时读取内存中的数据! 3.使用ADC的定时器触发ADC转换的功能,

使用ST-LINK&#160;V2和openocd调试STM32时出现电压过低的问题及解决

转载请贴上原帖地址. 最近项目需要用到STM32,使用GCC+openocd的编译环境调试STM32.出现了个很奇怪的现象,单独使用ST-LINK给STM32供电,会出现触发电压过低的错误,且无法连接上STM32. 其实问题很简单,ST-LINK带有检测目标板电压的功能,如果检测到目标板电压过低,则会报错. 20pin  Jtag的1.2脚为TVCC,这两个引脚就是负责检测目标板的电压. 在openocd中报错信息说target voltage只有0.5V,但测试1.2脚却有1.6V.于是用示波

STM32 可编程电压监测器(PVD)实现数据掉电保存

STM32内部有一个完整的上电复位和掉电复位电路,当供电电压达到2v时系统即能正常工作. STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控.通过电源控制寄存器中的PLS[2:0]位可以用来设定监控电压的阀值,通过对外部电压进行比较来监控电源.当条件触发,需要系统进入特别保护状态,执行紧急关闭任务:对系统的一些数据保存起来,同时对外设进行相应的保护操作. 操作流程:     1).系统启动后启动PVD,并开启相应的中断.     PWR_PVDLevelConfig(PWR_PVD

MSP430 ADC12 AD采样寄存器中文定义

/************************************************************* ADC12   A/D采样寄存器定义************************************************************//*ADC12转换控制类寄存器*/#define ADC12CTL0_          0x0;' /* ADC12 Control 0 */sfrw    ADC12CTL0         = ADC12CTL

AD采样问题总结

说明:来源http://bbs.csdn.net/topics/390899032论坛讨论 一个100HZ的正弦波,我用300HZ的采样率去采样,那么根据香农定律是不是一秒钟就采集到300个点,因为这个波形是100HZ,所以这一秒钟内就有一百个波形经过,那么300个点平均到每个波形上就只有3个点了,也就是一个波形上采集3个点, 采样率一般是Sps为单位,而不是用Hz, 例如300Sps,即300 Samples Per  Second.100Hz的正弦,用300Sps的采样率,则平均每个正弦周期

ad采样后幅度的衰减

adc采集到的信号对低频有一定的衰减.因为要确定衰减的程度.通过da输出到示波器上观察. 数据如下: 输入 输出(enable) 输出(disable) 1v(20hz) 1v 0.88v 1v(10hz) 0.76v 0.76v 1v(8hz) 0.6v 0.68v 1v(5hz) 0.4v 0.5v 1v(3hz) 0.25v 0.35v 1v(2hz) 0.15v 0.25v 1v(1hz) 0.05v 0.12v 在8hz以下还是有比较到的衰减.这是使用示波器观察还是经过dac的于是想直

STM32的AD通道干扰问题

今天调试STM32F103的ADC,使用ADC1单次转换模式进行两通道AD采样,发现两路通道存在烦扰问题.相关AD操作代码如下: void adc_start_convert(uint8_t ch) { ADC1->SMPR2 = (ADC1->SMPR2 & 0XFFFFFFF8) | 7; ADC1->SQR3 = (ADC1->SQR3 & 0XFFFFFFE0) | ch; ADC_SoftwareStartConvCmd(ADC1, ENABLE); }