STM32模数转换原理及应用(火焰强度读取)

STM32模数转换

原理结构

  • 每个 ADC 有 12 位、10 位、8 位和 6 位可选,每个 ADC 有 16 个外部通道,还有内部通道,不同的芯片的ADC内部通道连接不相同,可以查看数据手册

  • 独立模式就是仅仅适用三个ADC的其中一个,双重模式就是同时使用ADC1和 ADC2,而三重模式就是三个 ADC 同时使用。

  • ADC结构如下:

    在这里插入图片描述

  • 电压输入范围:V REF- ≤ V IN ≤ V REF+ ,一般把 V SSA 和 V REF- 接地,把 V REF+ 和 V DDA 接 3V3,得到 ADC 的输
    入电压范围为:0~3.3V。

  • 外部的 16 个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有 16 路,注入通道最多有 4 路。

    • 注入通道和中断程序很像,当该通道有输入时,会先进行该通道的转换,之后再去对其他的通道进行操作
转换顺序
  • 规则顺序:

    • 在设置多个通道的转换时,可以通过规则序列寄存器来设置优先级,规则序列寄存器有 3 个,分别为 SQR3、SQR2、SQR1

    • 比如想让第16通道在第7个转换,则在SQR2的SQ7写入16

      在这里插入图片描述

  • 注入序列寄存器 JSQR 只有一个,最多支持 4 个通道,具体多少个由 JSQR 的 JL[1:0] 决定

  • 如果JL的值小于4的话,则JSQR跟SQR决定转换顺序的设置不一样,第一次转换的不是JSQR1[4:0],
    而是 JCQRx[4:0] ,x = (4-JL),跟 SQR 刚好相反。

  • 如果 JL=00(1 个转换),那么转换的顺序是从 JSQR4[4:0] 开始,而不是从 JSQR1[4:0] 开始,

    在这里插入图片描述

触发源
  • ADC 转换可以由 ADC 控制寄存器 2: ADC_CR2 的 ADON 这个位来控制,写 1 的时候开始转换,写 0 的时候停止转换
  • ADC 还支持外部事件触发转换,这个触发包括内部定时器触发和外部 IO 触发
  • 如果使能了外部触发事件,我们还可以通过设置 ADC 控制寄存器 2:ADC_CR2 的 EXTEN[1:0] 和JEXTEN[1:0] 来控制触发极性,可以有 4 种状态,分别是:禁止触发检测、上升沿检测、下降沿检测以及上升沿和下降沿均检测。
转换时间
  • ADC时钟:
    • ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大值是 36MHz,典型值为 30MHz,分频因子由 ADC 通用控制寄存器 ADC_CCR 的 ADCPRE[1:0] 设置
    • ADCADC 需要若干个 ADC_CLK 周期完成对输入的电压进行采样
    • 周期数可通过 ADC 采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0] 位设置,ADC_SMPR2 控制的是通道 0~9,
      ADC_SMPR1 控制的是通道 10~17
    • 每个通道可以分别用不同的时间采样。其中采样周期最小是3 个,即如果我们要达到最快的采样,那么应该设置采样周期为 3 个周期,这里说的周期就是1/ADC_CLK。
    • ADC 的总转换时间跟 ADC 的输入时钟和采样时间有关,公式为:
      Tconv = 采样时间 + 12 个周期
    • 一般我们设置 PCLK2=84MHz,经过 ADC 预分频器能分频到最大的时钟只能是 21M,采样周期设置为 3 个周期,算出最短的转换时间为 0.7142us
数据寄存器
  • 规则组的数据放在 ADC_DR 寄存器,注入组的数据放在 JDRx
  • ADC_DR和 JDRx都是32位寄存器,低16位有效,可以选择数据的对齐方式
  • 通道有很多,但对应的寄存器只有一个,因此当转换完成之后,应立刻将数据取出,可以使用DMA将数据传出去,如果不使用DMA就要使用 ADC 状态寄存器 ADC_SR 获取当前 ADC 转换的进度状态,进而进行程序控制
  • 如果是使用双重或者三重模式那规矩组的数据是存放在通用规矩寄存器 ADC_CDR
电压转换
  • 模拟电压经过 ADC 转换后,是一个 12 位的数字值

  • 如果ADC的电压范围是0~3.3V,ADC 是 12 位的,那么 12 位满量程对应的就是 3.3V,12 位满量程对应的数字值是:2^12。数值 0 对应的就是 0V,那么通过比例关系就可以计算出当前的电压值

  • 例如当前数值是X,外部电压为Y
    X 2 12 = Y 3.3 ; Y = 3.3 ∗ X 2 12 \frac{X}{2^{12}}= \frac{Y}{3.3} ; Y= \frac{3.3*X}{2^{12}} 212X=3.3Y;Y=2123.3X

    实际测试

  • 传感器为火焰强度传感器,通道stm32的AD转换将其输入的模拟信号转化为数字信号,并进行显示

  • 先在CubeMX中进行相关的配置

在这里插入图片描述

  • 主要程序如下:

    #include "Flame_Sensor.h"
    
    uint32_t Flame_Sensor_Get()
    {
    	HAL_ADC_Start(&hadc1);  //轮询转换开启
    	HAL_ADC_PollForConversion(&hadc1,10); //轮询转换
    	
    	return HAL_ADC_GetValue(&hadc1);
    }
    uint32_t temp_val=0;
    uint32_t Flame_Sensor_Get_Val(void)
    {
    	uint8_t t;
    	for(t=0;t<LSENS_READ_TIMES;t++)
    	{
    		temp_val+=Flame_Sensor_Get();	//读取ADC值
    		osDelay(5);
    	}
    	temp_val/=LSENS_READ_TIMES;//得到平均值 
    	if(temp_val>4000)temp_val=4000;
    	//HAL_ADC_Stop(&hadc1);
    	temp_val=(100-(temp_val/40));
    	return temp_val;
    }
    
    //主函数循环部分如下:
    for(;;)
      {
    		Flame_Sensor_Value=0;
    		Flame_Sensor_Value=Flame_Sensor_Get_Val();
    		sprintf(shuchu0,"Strength:%d",Flame_Sensor_Value);
    		for(m=0;shuchu0[m]!='\0';m++)
    		{
    			shuchu1[m]=shuchu0[m];
    		}
    		shuchu1[m]='\0';
    		OLED_CLS();
    		OLED_ShowStr(0,4,shuchu1,2);	
    }
    
  • 部分内容整理自野火

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于ARM Cortex-M3的STM32嵌入式系统是一种高性能、低功耗的嵌入式系统,可广泛应用于各种领域。它的工作原理是基于ARM Cortex-M3内核的芯片,该内核具有较强的计算能力和多重存储器接口。STM32系列芯片结合了低功耗、高性能和丰富的外设功能,能够满足不同的应用需求。 STM32嵌入式系统的应用十分广泛。首先,它可以应用于工业自动化控制领域。通过与各种传感器和执行器的连接,STM32可以实现对温度、湿度、压力等各种参数的实时监测和控制。其低功耗特性也使其适合在长时间运行的智能仪表和机械设备中使用。 其次,STM32嵌入式系统可应用于物联网设备。通过内置的无线通信模块,如Wi-Fi、蓝牙和LoRa等,STM32可以与其他设备进行无线通信,并实现数据的传输和远程控制,适用于智能家居、智能城市等场景。 此外,STM32还可以应用于消费电子产品领域。其丰富的外设接口可以与LCD显示屏、摄像头、音频设备等进行连接,从而实现手机、平板电脑和音频播放器等产品的功能。 总体来说,基于ARM Cortex-M3的STM32嵌入式系统具有高性能、低功耗、丰富的外设接口等特点,可以广泛应用于工业自动化、物联网设备和消费电子等众多领域,为各类产品提供强大的计算和控制能力。 ### 回答2: 基于ARM Cortex-M3的STM32嵌入式系统是一种高性能、低功耗的解决方案。STM32系列微控制器基于ARM Cortex-M3内核,具有丰富的外设和功能,适用于各种嵌入式应用STM32的嵌入式系统原理是基于ARM Cortex-M3内核的运行机制。ARM Cortex-M3是一种32位的低功耗处理器,具有较高的性能和灵活性。STM32通过在芯片上集成了丰富的外设模块(例如通用输入输出、串行通信接口、模数转换器等)以及存储器和时钟管理模块,实现了完整的嵌入式系统功能。 嵌入式系统应用方面,STM32可广泛应用于工控、家电、汽车电子、医疗设备等领域。在工控领域,STM32可用于控制和监测生产过程,实现智能化管理。在家电领域,STM32可用于控制空调、洗衣机等家电设备,提高其性能和用户体验。在汽车电子领域,STM32可用于车载娱乐、导航和车身控制等系统。在医疗设备领域,STM32可用于监测和控制医疗设备,提高诊断和治疗效果。 STM32的优点包括低功耗、高性能、丰富的外设、易于开发和灵活的应用性。低功耗使得STM32在电池供电或移动设备应用中非常适用。高性能和丰富的外设让STM32能够处理复杂的任务和连接多种外部设备。易于开发的特性使得开发者能够快速上手并进行系统开发。灵活的应用性使得STM32能够应对不同的应用需求和系统架构。 总之,基于ARM Cortex-M3的STM32嵌入式系统以其优异的性能和丰富的外设被广泛应用于各种嵌入式系统领域,为各种应用提供了高效、低功耗的解决方案。 ### 回答3: STM32是意法半导体公司推出的一种基于ARM Cortex-M3内核的嵌入式系统。它采用了先进的芯片设计和先进的嵌入式开发技术,具有高性能、低功耗和丰富的外设接口等特点。 基于ARM Cortex-M3的STM32嵌入式系统原理主要包括以下几个方面: 1. ARM Cortex-M3内核:ARM Cortex-M3是一种高性能、低功耗的32位处理器内核。它具有高性能的运算能力和丰富的指令集,能够处理复杂的计算任务。 2. 外设接口:STM32嵌入式系统提供了丰富的外设接口,包括多个GPIO引脚、UART、SPI、I2C、ADC等。这些外设接口可与外部设备进行通信,实现数据的输入和输出。 3. 存储器:STM32嵌入式系统具有不同类型的存储器,包括闪存、RAM和EEPROM。闪存用于存储程序代码和数据,RAM用于临时数据存储,EEPROM用于非易失性数据存储。 4. 中断系统:STM32嵌入式系统具有强大的中断系统,可实现多任务并发执行。通过中断系统,可以及时响应外部事件,并执行相应的任务。 基于ARM Cortex-M3的STM32嵌入式系统应用广泛,主要包括以下几个方面: 1. 工业控制:STM32可以广泛应用于工业自动化领域,用于控制和调节各种设备和系统,如PLC、人机界面等。 2. 智能家居:STM32可以用于智能家居控制系统,实现对家居设备的远程控制和管理,如智能灯光、安防系统等。 3. 汽车电子:STM32可以应用于汽车电子领域,用于发动机控制、车载娱乐系统、导航系统等。 4. 医疗设备:STM32可以应用于医疗设备,如医疗监护仪、心电图仪等,实现对患者的监测和治疗。 总之,基于ARM Cortex-M3的STM32嵌入式系统具有高性能、低功耗和丰富的外设接口等特点,广泛应用于各个行业的嵌入式系统开发。它为开发者提供了强大的功能和丰富的接口选项,可以满足不同领域的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值