在线时间1853 小时
UID45393
ST金币0
蝴蝶豆82
注册时间2008-5-4
社区小助手
- 最后登录
- 2020-12-9
|
a0a.1 32b0c
Nucleo-L4R5ZI评测5 过采样ADC
STM32L4R5具有12-bit ADC ,通过过采样技术可以达到16-bit 分辨率。官方发布的STM32Cube_FW_L4_V1.10.0固件里的Projects\STM32L4R5ZI-Nucleo\Examples\ADC\ADC_OverSampler已经为我们写好完整代码。演示代码描述了如何配置使用ADC结合过采样技术转换一个外部模拟输入,通过HAL API增加分辨率。这个过采样率设置为ADC_OVERSAMPLING_RATIO_128,因此输出结果最大是0xFFF * 128 = 0x7FF80(19位)。由于ADC_DR是一个16位长的寄存器,所以执行了一个3位右移位只保留16个有用位。
外部模拟输入由一可调电阻连接+3.3V到GND,中心点连接到ADC_CHANNEL_9(Arduino连接器CN7引脚17)。为了方便观察转换结果,我们在开发板上临时配置了一片OLED显示屏,显示转换后的电压。
官方过采样配置
- AdcHandle.Init.Oversampling.Ratio = OVERSAMPLING_RATIO; /* Oversampling ratio */
- AdcHandle.Init.Oversampling.RightBitShift = RIGHTBITSHIFT; /* Right shift of the oversampled summation */
- AdcHandle.Init.Oversampling.TriggeredMode = TRIGGEREDMODE; /* Specifies whether or not a trigger is needed for each sample */
- AdcHandle.Init.Oversampling.OversamplingStopReset = OVERSAMPLINGSTOPRESET; /* Specifies whether or not the oversampling buffer is maintained during injection sequence */
复制代码
部分显示代码
- void To_Dispbuf(void)
- {
- Dispbuf[0]=(uwInputVoltage%10000/1000)+0x30;
- Dispbuf[1]=(uwInputVoltage%1000/100)+0x30;
- Dispbuf[2]=(uwInputVoltage%100/10)+0x30;
- Dispbuf[3]=(uwInputVoltage%10)+0x30;
- Dispbuf[4]='m';
- Dispbuf[5]='V';
- Dispbuf[6]='\0';
- LCD_Print(36, 40,Dispbuf,TYPE16X16,TYPE8X16);
- }
复制代码
main.c
- #include "main.h"
- #include "oled.h"
- int main(void)
- {
- HAL_Init();
- SystemClock_Config();
- LCD_Init();
- LCD_Print(0, 0,"STM32L4R5ZI",TYPE16X16,TYPE8X16);
- LCD_Print(0, 16,"ADC_OverSampler",TYPE16X16,TYPE8X16);
- 以下省略
- }
复制代码
转换结果
3.3V
2.499V
1.023V
1mV
Project_hex.rar
(13.21 KB, 下载次数: 19)
|
|