如何在STM32F103C8T6中使用ADC?STM32 ADC教程

在本教程中,我将向您展示如何在STM32F103C8T6蓝色药丸板中使用ADC来测量输入模拟电压。我已经向您展示了如何在上一个教程中将16×2 LCD与STM32蓝色药丸接口。我将使用LCD在此项目中显示ADC的结果。

介绍

几乎所有嵌入式应用都需要至少一个传感器与微控制器连接。它可能是温度传感器或位置传感器。如果我们知道有关传感器的一件事,那就是几乎所有传感器(以基本形式)都是类似物本质上的。这意味着传感器从性质(例如温度)读取模拟值并产生模拟电压。

但是,微控制器(无论是STM32F103C8T6还是Arduino)的问题在于它们是数字“ Beings”,无法与模拟值一起使用。因此,我们必须首先转换模拟价值计入数字值在将它们交给微控制器以进行进一步处理或分析之前。对数字转换器的模拟用于此目的。

如果您与之合作8051微控制器,那么您可能使用了像ADC0804 IC这样的外部ADC IC将输入模拟信号转换为数字值。但是,大多数现代的微控制器(如Arduino或STM32F103C8T6)都内置了ADC。因此,我们不需要任何外部组件。我们要做的就是配置内部ADC并将模拟值转换为数字值。

在本项目 /教程中,我将演示如何将电位计连接到可变模拟电压的最简单来源,并配置模拟引脚以读取电压,使用ADC将其转换为数字值并在LCD。

ADC在STM32蓝色药丸中

如果您参考STM32F103C8T6 MCU的数据表,则可以看到STM32F103C8T6 MCU的ADC为12位分辨率,并且是连续的近似类型ADC。MCU最多支持16个外部通道来测量模拟信号。

但是STM32蓝色药丸板中的ADC配置为10个通道,即您可以使用10个模拟输入引脚来测量10个不同的模拟电压。

如何在STM32F103C8T6中使用ADC?

如前所述,STM32蓝色药丸中的ADC分辨率为12位。因此,STM32F103C8T6中ADC值的范围从0到212- 1,即0至4095。根据模拟电压,该值将增加步骤。

可以使用以下公式计算电压 /步骤或分辨率。

电压 /步骤=参考电压 / 212

参考电压通常为3.3 V.因此,可以检测到的电压最小的变化是

电压 /步骤= 3.3 / 4096 = 0.8056 mv / step

现在,输入模拟电压可以计算如下:

输入电压=(ADC值 / ADC分辨率) *参考电压

电路原理图

下图显示了用于在STM32F103C8T6中配置ADC的项目的电路图。

如何在STM32F103C8T6电路图中使用ADC

如果电路图中使用的STM32蓝色药片板的引脚尚不清楚,请使用以下图像作为参考。

STM32F103C8T6引脚

需要组件

  • STM32F103C8T6基于MCU的STM32蓝色药丸板
  • 16×2 LCD显示
  • 10kΩpot x 2
  • USB到UART转换器(如果通过UART进行编程)
  • 连接电线

电路说明

如前所述,STM32蓝色药丸板上有10个模拟输入。它们是PA0至PA7(ADC0至ADC7)和PB0和PB1(ADC8和ADC9)。

您可以使用项目中的任何模拟输入频道。对于此演示,我将使用ADC0,即PA0引脚作为模拟输入引脚。在此引脚上,我连接了10kΩ电位器的中心端子(雨刮器)端子,而锅的其他两个端子连接到3.3 V和GND。

我将16×2 LCD显示器用作输出设备。在“与STM32F103C8T6的16x2 LCD接口”项目中,我已经解释了STM32蓝色药丸板和16×2 LCD之间的连接。我在这里也使用相同的连接。

编程STM32蓝色药丸

如果您已经遵循了我的“通过USB进行的STM32蓝色药丸”教程,那么您不需要USB即可uart转换器,您可以使用车载USB上传程序。

说到该程序,首先将LCD的引脚和模拟输入初始化。然后初始化LCD并显示一些介绍性信息。在“循环”部分中,使用Analogread函数读取模拟输入引脚(PA0)的模拟电压,并将值存储在称为类似物的变量中。

现在,使用上述公式,您可以计算输入电压。使用浮点变量保持计算的输入电压的值。

float Inputwoltage =(((float)类似物) / 4096 * 3.3

在LCD上显示计算出的模拟电压以及计算出的ADC值。您可以连续改变锅,ADC将在STM32F103C8T6中读取相应的模拟电压并计算电压。

代码

/*
* LCD VSS PIN到GND
* LCD VDD引脚至5V
* LCD vo Pin到锅
* LCD RS PIN到数字引脚PB11
* LCD RW PIN到GND
* lcd en pin to Digital Pin PB10
* LCD D0到D3销未使用
* LCD D4引脚到数字引脚PB0
* LCD D5引脚到数字引脚PB1
* LCD D6引脚到数字引脚PA7
* LCD D7引脚到数字引脚PA6
* LCD LED+ PIN至5V
* LCD LED- PIN到GND
*/
#include

const int rs = pb11,en = pb10,d4 = pb0,d5 = pb1,d6 = pa7,d7 = pa6;
LiquidCrystal LCD(RS,EN,D4,D5,D6,D7);

const int actalogInput = pa0;
void setup()
{
lcd.Begin(16,2);
lcd.clear();
lcd.setcursor(0,0);
lcd.print(“伟德亚洲会玩假吗电子中心”);
lcd.setcursor(0,1);
lcd.print(“ STM32”中的ADC);
延迟(2000);
lcd.clear();
}
void loop()
{
int abalogval = aLATERED(类似物);
float Inputwoltage =(float(ailyogval)/4096) * 3.3;
lcd.setcursor(0,0);
lcd.print(“ ADC值:”);
lcd.print(类似物);
lcd.setcursor(0,1);
lcd.print(“电压:”);
lcd.print(输入电压);
}

结论

该项目实施了ADC在STM32F103C8T6 MCU中的STM32蓝色药丸板中ADC工作的简单演示。

发表评论

您的电子邮件地址不会被公开。

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map