stm32 adc输入电压范围_STM32学习日志——ADC实验(20.07.28)

一、ADC简介:

STM32有1~3个ADC,我使用的STM32F103ZET6有3个ADC,是12位逼近的数字模拟转换器,它有18个通道,包括16个外部通道和2个内部信号源。每个ADC有4种模式:单次、连续、扫描、间断。存储方式分为左对齐或右对齐,一般选择右对齐。ADC将转换分为两个通道组:规则通道与注入通道,规则通道相当于正常执行的程序,注入通道相当于中断。规则通道最多包含16个,注入通道最多位4个。

本次介绍仅介绍规则通道的单次转换,

二、软件配置:

1)开启PA口的时钟和ADC1的时钟,设置PA1为模拟输入;

49a045f1a138f09809b345e23eeef9f0.png

2)复位ADC1,同时设置分频因子;要保证ADC的时钟不超过14MHZ,否则可能不准,而APB2的时钟为72MHZ,所以分频因子选6,ADC的时钟就为12MHZ;

54de66b740e6ca92e8b29aa6353820ff.png

3)初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息;

7a74e786b0c657c18f85b78a7a6949d7.png

4)使能ADC并校准;

156f800ebf4c036653c458d81c4c0fe5.png
ADC_CR2寄存器

d0014d159c26c081946c8de0081d0dff.png

5)读取ADC值;转换完成EOC结束标志位会置1;

9ae954c3966a0e138c00e42c32f3924c.png

d86ab657d74e6e65af30c0860ce754c4.png

三、功能测试:

程序烧写到板子后,PA1接0~3.3V的电压则会被转换成12位的数字信号,切记不能超过3.3V,否则可能会导致ADC烧掉。接着可从OLED上观测到此时的电压。

810172cbe8900b926afb4a73dc361904.png

b6e55df72d7ab784670a795d1dbd3d84.png
方法一:绘制控制图 控制图是用来分析一个过程是否处于可控状态的工具,可用于检测系统误差。我们可以用 Matlab 绘制控制图来判断该测量列中是否存在系统误差。 控制图分为上下两条控制线和一条中心线。在正常情况下,测量值应该在中心线附近波动,并在上下控制线之间。如果测量值超出了上下控制线,则说明存在异常数据,可能存在系统误差。 以下是绘制控制图的 Matlab 代码: ```matlab data = [20.06,20.07,20.06,20.08,20.10,20.12,20.11,20.18,20.18,20.21,20.19]; n = length(data); % 样本数 xbar = mean(data); % 样本均值 s = std(data); % 样本标准差 ucl = xbar + 3*s/sqrt(n); % 上控制线 lcl = xbar - 3*s/sqrt(n); % 下控制线 plot(1:n, data, 'o-', 'LineWidth', 1.5); % 绘制数据点 hold on; plot([1 n], [xbar xbar], 'k--', 'LineWidth', 1.5); % 绘制中心线 plot([1 n], [ucl ucl], 'r--', 'LineWidth', 1.5); % 绘制上控制线 plot([1 n], [lcl lcl], 'r--', 'LineWidth', 1.5); % 绘制下控制线 xlabel('样本编号'); ylabel('测量值'); title('控制图'); if any(data > ucl) || any(data < lcl) disp('存在系统误差'); else disp('不存在系统误差'); end ``` 运行该代码,绘制出的控制图如下所示: ![控制图](https://img-blog.csdnimg.cn/20211008092920105.png) 从控制图中可以看出,所有测量值都在上下控制线之间,因此可以判断该测量列中不存在系统误差。 方法二:计算变异系数 变异系数(Coefficient of Variation,CV)是用来衡量数据变异程度的指标。计算方法为样本标准差除以样本均值,通常以百分数的形式表示。 如果同一测量量的变异系数在不同时间点测量时变化较大,说明可能存在系统误差。 以下是计算变异系数的 Matlab 代码: ```matlab data = [20.06,20.07,20.06,20.08,20.10,20.12,20.11,20.18,20.18,20.21,20.19]; cv = std(data)/mean(data)*100; % 计算变异系数 if cv > 5 % 如果变异系数大于5%,则认为存在系统误差 disp('存在系统误差'); else disp('不存在系统误差'); end ``` 运行该代码,输出结果为“不存在系统误差”,因此可以判断该测量列中不存在系统误差。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值