【STM32】单片机ADC原理详解及应用编程

news2024/10/28 14:30:02

本篇文章主要详细讲述单片机的ADC原理和编程应用,希望我的分享对你有所帮助!

目录

 一、STM32ADC概述

1、ADC(Analog-to-Digital Converter,模数转换器)

2、STM32工作原理  

 二、STM32ADC编程实战

(一)、ADC开发的寄存器库函数

(二)、ADC开发的HAL库

(三)、实战工程 

1、ADC单通道采集

2、ADC多通道采集

三、结语 


一、STM32ADC概述

1、ADC(Analog-to-Digital Converter,模数转换器)

STM32的ADC(Analog-to-Digital Converter,模拟数字转换器)是STM32微控制器系列中集成的一种功能强大的模块,用于将模拟信号转换为数字信号。STM32微控制器广泛应用于嵌入式系统,ADC模块在许多应用场景中都至关重要,例如传感器读取、信号处理和控制系统。

模拟量(Analog Quantity)是指在一个连续范围内可以取任意值的物理量。这种物理量的值可以是任意的实数,通常用来表示那些变化是渐进的、连续的特征,而不是离散的。

  • 模拟量:可以在一个连续的范围内变化,例如温度可以是25.1°C、25.2°C等,具有无限个可能值。
  • 数字量:只能取有限的离散值,例如开关的开(1)和关(0)状态,或者数字传感器读取的值。

在许多应用中,模拟量需要转换为数字量以便进行处理,这通常通过模数转换器(ADC)实现。转换后,计算机或微控制器能够以数字形式读取和处理这些信号。

ADC转换模式: 

  1. 单次转换模式(Single Conversion Mode):ADC在每次触发时只进行一次转换。适用于低速、低功耗的应用。

  2. 连续转换模式(Continuous Conversion Mode):ADC持续进行转换,适用于需要实时监测的应用,如信号处理和实时数据采集。

  3. 扫描模式(Scan Mode):ADC可以在多个通道间进行扫描,每个通道依次进行转换,适合多通道数据采集。

  4. 触发模式(Triggered Mode):转换过程由外部信号触发,可以是定时器、GPIO引脚等,适合需要同步数据采集的场景。

  5. 差分模式(Differential Mode):ADC测量两个输入信号的差值,提供更高的噪声抗性,适用于高精度测量。

  6. 伪差分模式(Pseudo-Differential Mode):其中一个输入端连接到地,另一端测量信号,适合简单的差分测量。

在ADC(模数转换器)的应用中,通道组可以分为规则通道组(Regular Channel Group)和注入通道组(Injected Channel Group)。这两种通道组的主要区别在于它们的工作方式、优先级以及使用场景。 

规则通道组(Regular Channel Group)

  • 定义:规则通道组是ADC的主要通道组,用于常规的信号采集。它通常用于周期性采集的传感器信号。

  • 特点

    • 持续转换:在连续转换模式下,规则通道组可以在多个通道间进行循环采样。
    • 优先级低:相较于注入通道组,规则通道组的优先级较低,通常用于常规数据的采集。
    • 数据存储:转换结果通常存储在一个数据寄存器中,等待主程序读取。
    • 触发方式:可以通过定时器、外部事件等方式触发采样。
  • 适用场景:适用于需要实时采集且对响应时间要求不高的应用,如环境监测、温度传感器等。

注入通道组(Injected Channel Group)

  • 定义:注入通道组用于优先级更高的信号采集,通常用于突发事件或特定条件下的快速采样。

  • 特点

    • 高优先级:注入通道组具有较高的优先级,能够在任何时候中断规则通道组的采样进行数据采集。
    • 快速响应:适合快速响应的应用,如检测瞬时信号变化、故障检测等。
    • 独立触发:可以独立于规则通道组进行触发,支持多种触发源(如外部引脚、内部事件等)。
    • 多个通道:通常可以配置多个注入通道,进行快速的信号采样。
  • 适用场景:适用于需要在特定条件下迅速采集信号的应用,如运动控制、脉冲信号采集等。

2、STM32工作原理  

STM32包含1~3个12位逐次逼近型的模拟数字转换器。每个ADC最多有18个通道,可测量16个外部信号源和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行,有规则通道组注入通道组,每次转换结束可产生中断。转换的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

1)STM32F103C8T6有2个ADC,ADC1和ADC2。记为ADCx。

2)每个ADC有18个通道。16个外部信号源测量通道ADCx_IN0~ADCx_IN15,2个内部信号源测量通道。信号源引脚对应如下:

ADC的工作过程一般包括以下几个步骤:

  1. 采样:在某个时间点上对模拟信号进行测量,获取其电压值。
  2. 量化:将模拟信号的电压值与ADC的参考电压进行比较,将其转换为相应的数字值。
  3. 编码:将量化后的结果编码为二进制形式,输出给后续的数字电路或处理器。

ADC工作原理思维导图概况如下:

STM32F103ADC时钟和采样时间

1、时钟源

  • STM32F103 的 ADC 通常由 APB2 总线时钟提供时钟。ADC 的最大工作频率为 14 MHz
  • 你需要配置 APB2 时钟(通常通过时钟配置寄存器进行配置)以确保 ADC 的工作频率在合适范围内。

2、ADC 时钟设置

  • ADC 时钟的配置可以通过配置系统时钟(HSE、HSI 或 PLL)来实现。通常在系统初始化时设置。
  • 在 ADC 模块中,可以通过寄存器设置 ADC 的预分频系数,以确保 ADC 时钟不超过最大工作频率。

3、采样时间配置

  • STM32F103 的 ADC 允许用户根据输入信号的特性选择不同的采样时间。可选的采样时间设置包括:

    • 1.5 个 ADC 时钟周期
    • 7.5 个 ADC 时钟周期
    • 13.5 个 ADC 时钟周期
    • 28.5 个 ADC 时钟周期
    • 41.5 个 ADC 时钟周期
    • 55.5 个 ADC 时钟周期
    • 71.5 个 ADC 时钟周期
    • 239.5 个 ADC 时钟周期
  • 通过设置 ADC 寄存器中的采样时间字段,可以选择合适的采样时间。例如,对于快速变化的信号,可能选择较短的采样时间;而对于慢变化的信号,较长的采样时间可以提高测量的准确性。

4、采样时间与转换时间的关系

  • 采样时间加上转换时间组成了每次 ADC 转换的总时间。转换时间对于 STM32F103 的 ADC 是固定的,大约为 1.5 个 ADC 时钟周期

  • 因此,总的转换时间公式可以表示为:

    总时间=采样时间+1.5xADC时钟周期

 二、STM32ADC编程实战

在编程实战之前,让我们先来了解一下ADC开发相关的库函数。

(一)、ADC开发的寄存器库函数

1. ADC初始化函数

void ADC_Init(ADC_TypeDef *ADCx, ADC_InitTypeDef *ADC_InitStruct)

  • 功能:初始化指定的ADC外设。

  • 参数

    • ADC_TypeDef *ADCx:指向ADC外设的指针(如ADC1ADC2)。

    • ADC_InitTypeDef *ADC_InitStruct:指向ADC初始化结构的指针,包含ADC配置参数。

  • 用途:设置ADC的基本参数,如分辨率、对齐方式、时钟分频等。

2. 配置ADC通道

void ADC_RegularChannelConfig(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t Rank, uint32_t SamplingTime)

  • 功能:配置ADC的常规通道。

  • 参数

    • ADC_TypeDef *ADCx:指向ADC外设的指针。

    • uint32_t Channel:选择要配置的ADC通道。

    • uint32_t Rank:在转换序列中的排名。

    • uint32_t SamplingTime:采样时间配置。

  • 用途:配置ADC通道以供后续的采样和转换。

3. 启动和停止ADC转换

void ADC_Cmd(ADC_TypeDef *ADCx, FunctionalState NewState)

  • 功能:启用或禁用指定的ADC外设。

  • 参数

    • ADC_TypeDef *ADCx:指向ADC外设的指针。

    • FunctionalState NewState:功能状态,选择ENABLEDISABLE

  • 用途:控制ADC的开启和关闭。

void ADC_StartConversion(ADC_TypeDef *ADCx)

  • 功能:开始ADC的转换。

  • 参数

    • ADC_TypeDef *ADCx:指向ADC外设的指针。

  • 用途:启动ADC转换过程。

4. 读取ADC转换结果

uint16_t ADC_GetConversionValue(ADC_TypeDef *ADCx)

  • 功能:获取ADC的转换结果。

  • 参数

    • ADC_TypeDef *ADCx:指向ADC外设的指针。

  • 返回值:返回ADC转换后的数值。

  • 用途:读取转换完成后的结果。

5. 配置DMA支持

void ADC_DMACmd(ADC_TypeDef *ADCx, FunctionalState NewState)

  • 功能:启用或禁用ADC的DMA功能。

  • 参数

    • ADC_TypeDef *ADCx:指向ADC外设的指针。

    • FunctionalState NewState:功能状态,选择ENABLEDISABLE

  • 用途:在使用DMA传输ADC数据时配置DMA。

6. 中断支持

void ADC_ITConfig(ADC_TypeDef *ADCx, uint32_t ADC_IT, FunctionalState NewState)

  • 功能:启用或禁用ADC中断。

  • 参数

    • ADC_TypeDef *ADCx:指向ADC外设的指针。

    • uint32_t ADC_IT:选择中断源。

    • FunctionalState NewState:功能状态,选择ENABLEDISABLE

  • 用途:控制ADC的中断行为。

7. 中断回调函数

在使用中断时,需要定义回调函数以处理ADC转换完成的事件。

void ADC1_2_IRQHandler(void) {
    if (ADC_GetITStatus(ADC1, ADC_IT_EOC) != RESET) {
        // 处理ADC转换完成
        uint16_t adcValue = ADC_GetConversionValue(ADC1);
        // 清除中断标志
        ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
    }
}

(二)、ADC开发的HAL库

1. ADC初始化函数

HAL_ADC_Init()

  • 功能:初始化ADC外设。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针,结构体中包含ADC的配置参数。

  • 返回值:HAL库返回状态,通常为HAL_OK(成功)或错误代码。

  • 用途:设置ADC的基本参数,如分辨率、对齐方式、扫描模式等。

2. ADC通道配置函数

HAL_ADC_ConfigChannel()

  • 功能:配置指定的ADC通道。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针。

    • ADC_ChannelConfTypeDef *sConfig:指向通道配置结构的指针,包含通道选择、采样时间等。

  • 返回值:HAL库返回状态,通常为HAL_OK(成功)或错误代码。

  • 用途:设置通道的采样时间和输入模式等参数。

3. 启动和停止ADC转换

HAL_ADC_Start()

  • 功能:启动ADC转换。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针。

  • 返回值:HAL库返回状态。

  • 用途:使ADC开始进行转换。

HAL_ADC_Stop()

  • 功能:停止ADC转换。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针。

  • 返回值:HAL库返回状态。

  • 用途:结束ADC转换过程,释放资源。

4. 读取ADC转换结果

HAL_ADC_PollForConversion()

  • 功能:等待ADC转换完成(轮询方式)。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针。

    • uint32_t Timeout:等待超时的时间(单位:毫秒)。

  • 返回值:HAL库返回状态,通常为HAL_OK(成功)或超时错误代码。

  • 用途:在转换过程中进行轮询,直到转换完成。

HAL_ADC_GetValue()

  • 功能:获取ADC转换结果。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针。

  • 返回值:ADC的转换结果。

  • 用途:在转换完成后读取结果值。

5. DMA支持

HAL_ADC_Start_DMA()

  • 功能:启动ADC转换并通过DMA传输数据。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针。

    • uint32_t *pData:指向存储结果的缓冲区指针。

    • uint32_t Length:缓冲区的长度。

  • 返回值:HAL库返回状态。

  • 用途:使用DMA提高数据传输效率。

6. 中断支持

HAL_ADC_Start_IT()

  • 功能:启动ADC转换并使能中断。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针。

  • 返回值:HAL库返回状态。

  • 用途:在需要中断处理的应用中使用。

7. 中断回调函数

HAL_ADC_ConvCpltCallback()

  • 功能:ADC转换完成时的回调函数。

  • 参数:

    • ADC_HandleTypeDef *hadc:指向ADC句柄的指针。

  • 用途:在此函数中处理转换结果。

(三)、实战工程 

1、ADC单通道采集

#include "stm32f10x.h"                  // 引入 STM32F10x 设备头文件,包含特定于设备的定义和功能

// 初始化 ADC (模数转换器)
void AD_Init(void)
{
    // 使能 ADC1 的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    // 使能 GPIOA 的时钟,以便配置 GPIO 引脚
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    // 配置 ADC 时钟为 PCLK2 的 1/6
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    
    // 定义一个 GPIO 初始化结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    // 设置引脚模式为模拟输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    // 设置要配置的引脚为 PA0
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    // 设置 GPIO 引脚的速度为 50MHz
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    // 初始化 GPIOA
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    // 配置 ADC 的常规通道,设置通道为 ADC_Channel_0,序列为 1,采样时间为 55.5 个周期
    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
    
    // 定义一个 ADC 初始化结构体
    ADC_InitTypeDef ADC_InitStructure;
    // 设置 ADC 工作模式为独立模式
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    // 设置数据对齐方式为右对齐
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    // 设置外部触发转换为无
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    // 设置连续转换模式为禁用
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
    // 设置扫描模式为禁用
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    // 设置转换通道数量为 1
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    // 初始化 ADC1
    ADC_Init(ADC1, &ADC_InitStructure);
    
    // 使能 ADC1
    ADC_Cmd(ADC1, ENABLE);
    
    // 复位 ADC 校准寄存器
    ADC_ResetCalibration(ADC1);
    // 等待复位完成
    while (ADC_GetResetCalibrationStatus(ADC1) == SET);
    // 开始 ADC 校准
    ADC_StartCalibration(ADC1);
    // 等待校准完成
    while (ADC_GetCalibrationStatus(ADC1) == SET);
}

// 获取 ADC 转换值的函数
uint16_t AD_GetValue(void)
{
    // 启动软件触发的 ADC 转换
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    // 等待转换完成标志位设置
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
    // 返回 ADC 转换结果
    return ADC_GetConversionValue(ADC1);
}

2、ADC多通道采集

#include "stm32f10x.h"                  // 引入 STM32F10x 设备头文件,包含特定于设备的定义和功能

// 初始化 ADC (模数转换器)
void AD_Init(void)
{
    // 使能 ADC1 的时钟,确保 ADC1 可以正常工作
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    // 使能 GPIOA 的时钟,以便配置 GPIO 引脚用于 ADC
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    // 配置 ADC 时钟为 PCLK2 的 1/6
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    
    // 定义一个 GPIO 初始化结构体,用于设置 GPIO 的模式和速度
    GPIO_InitTypeDef GPIO_InitStructure;
    // 设置 GPIO 模式为模拟输入 (AIN)
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    // 设置要配置的引脚为 PA0, PA1, PA2 和 PA3
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
    // 设置 GPIO 引脚的速度为 50MHz
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    // 初始化 GPIOA,应用上面的配置
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    // 定义一个 ADC 初始化结构体,用于配置 ADC 参数
    ADC_InitTypeDef ADC_InitStructure;
    // 设置 ADC 工作模式为独立模式
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    // 设置数据对齐方式为右对齐
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    // 设置外部触发转换为无(软件触发)
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    // 设置连续转换模式为禁用
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
    // 设置扫描模式为禁用
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    // 设置转换通道数量为 1
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    // 初始化 ADC1,应用上面的配置
    ADC_Init(ADC1, &ADC_InitStructure);
    
    // 使能 ADC1
    ADC_Cmd(ADC1, ENABLE);
    
    // 复位 ADC 校准寄存器
    ADC_ResetCalibration(ADC1);
    // 等待复位完成
    while (ADC_GetResetCalibrationStatus(ADC1) == SET);
    // 开始 ADC 校准
    ADC_StartCalibration(ADC1);
    // 等待校准完成
    while (ADC_GetCalibrationStatus(ADC1) == SET);
}

// 获取指定 ADC 通道的转换值
uint16_t AD_GetValue(uint8_t ADC_Channel)
{
    // 配置 ADC 通道,设置通道、序列和采样时间
    ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_55Cycles5);
    // 启动软件触发的 ADC 转换
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    // 等待转换完成标志位设置
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
    // 返回 ADC 转换结果
    return ADC_GetConversionValue(ADC1);
}

三、结语 

关于STM32单片机的ADC原理及编程实现就分享到此了,希望我的分享对你有所帮助!

关于以上工程的源代码,大家可以私信我,收到后我会第一时间回复!也可以回复“STM32ADC”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2225488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序中设置可拖动区域

官方说明文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/movable-area.htmlhttps://developers.weixin.qq.com/miniprogram/dev/component/movable-view.html demo&#xff1a;浮动控件上下移动交互 .wxmx <movable-area><!-- y"…

python之多任务爬虫——线程、进程、协程的介绍与使用(16)

文章目录 1、什么是多任务?1.1 进程和线程的概念1.2 多线程与多进程的区别1.3 并发和并行2、python中的全局解释器锁3、多线程执行机制4、python中实现多线程(threading模块)4.1 模块介绍4.2 模块的使用5、python实现多进行程(Multiprocessing模块)5.1 导入模块5.2 模块的…

多层感知机的从零实现与softmax的从零实现(真·0000零基础)

今天再读zh.d2l书&#xff08;4.2. 多层感知机的从零开始实现 — 动手学深度学习 2.0.0 documentation&#xff09;&#xff0c; 看了关于多层感知机的从零实现与softmax的从零实现 目录 mlp从零实现&#xff0c; 点击“paddle”的代码 点击“torch”的代码 训练 参数解…

k8s部署使用有状态服务statefulset部署eureka集群,需登录认证

一、构建eureka集群镜像 1、编写dockerfile文件&#xff0c;此处基础镜像为arm版本&#xff0c;eureka目录中文件内容&#xff1a;application-dev.yml、Dockerfile、eureka-server-1.0-SNAPSHOT.jar(添加登录认证模块&#xff0c;文章最后附上下载连接) FROM mdsol/java8-j…

深入探索:深度学习在时间序列预测中的强大应用与实现

引言&#xff1a; 时间序列分析是数据科学和机器学习中一个重要的研究领域&#xff0c;广泛应用于金融市场、天气预报、能源管理、交通预测、健康监控等多个领域。时间序列数据具有顺序相关性&#xff0c;通常展示出时间上较强的依赖性&#xff0c;因此简单的传统回归模型往往…

基于SpringBoot的“社区维修平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“社区维修平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 管理员登录页面 住户管理页面 社区公关管理页面 维…

【JVM】——JVM运行机制、类加载机制、内存划分

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;JVM引入 1&#xff1a;编程语言 2&#xff1a;JAVA运行机制 二&#xff1a;JVM中内存…

EVADC模块多路触发导致AD值波动

前言&#xff1a;最近开发中遇到一个问题&#xff0c;某一路ADC通道采集的AD值波动比较厉害&#xff0c;达到9个hex值波动&#xff0c;对此进行了分析排查...... 1 排除硬件因素 用示波器对电路图上该ADC通道的测试点进行电压测量&#xff0c;发现电压比较稳定&#xff0c;换算…

【计算机网络三】一篇文章详解TCP/IP四层协议簇

目录 TCP/IP四层协议簇 1.应用层 DNS NAT NAPT HTTP/HTTPS 2.传输层 TCP协议 UDP协议 3.网络层 IP协议 4.数据链路层 以太网 ARP协议 TCP/IP四层协议簇 TCP/IP四层协议簇是目前世界上最流行的网络协议分层方式&#xff0c;本篇文章我将带大家从上到下详解四层协议…

开放式蓝牙耳机哪个品牌好用?爆款开放式耳机推荐!

在当今蓝牙耳机市场中&#xff0c;开放式蓝牙耳机以其独特的设计和舒适的佩戴体验&#xff0c;逐渐成为众多消费者的新宠。然而&#xff0c;面对众多品牌和款式的开放式蓝牙耳机&#xff0c;消费者往往陷入选择的困境。究竟哪个品牌的开放式蓝牙耳机真正好用&#xff1f;其性能…

Python实现贝叶斯优化器(Bayes_opt)优化简单循环神经网络回归模型(SimpleRNN回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 贝叶斯优化器 (BayesianOptimization) 是一种黑盒子优化器&#xff0c;用来寻找最优参数。 贝叶斯…

C#使用开源库EasyModbusTCP跟PLC进行通讯开发步骤

使用C#进行非标自动化系统开发一般涉及的知识包含后台、前台、手持终端、客户端软件等功能模块的开发&#xff0c;其中后台程序连接数据库&#xff0c;而前台Vue界面&#xff0c;手持终端Android程序&#xff0c;客户端C#软件都会跟后台接口程序进行数据交换。 本文主要讨论C#客…

基于知识图谱的紧急事故决策辅助系统

现代社会紧急事故频发&#xff0c;而处理这些突发事件的效率直接决定了后续影响的大小。这时候&#xff0c;数据智能的解决方案会显得尤为重要&#xff01;今天为大家分享一个用【知识图谱】技术驱动的紧急事故决策辅助系统&#xff0c;不仅能帮助你快速处理事故信息&#xff0…

当有违法数据时,浏览器不解析,返回了undefined,导致数据不解析

现象&#xff1a;页面上没有看到数据 排查&#xff1a;断点到线上的源码里&#xff1a;1、协议回调确实没有拿到数据是个undefined 2、network里看服务确实响应了数据 3、控制台没有任何报错。 心情&#xff1a;莫名其妙的现象 我本地有json格式化工具&#xff0c;copy进去后&…

STM32硬件平台

STM32 系列是 STMicroelectronics 设计的高度灵活、广泛应用的微控制器&#xff08;MCU&#xff09;系列&#xff0c;支持从低功耗应用到高性能处理的需求&#xff0c;适用于工业、汽车、消费电子和物联网等广泛领域。STM32 系列具有广泛的硬件种类和丰富的功能&#xff0c;以下…

uniapp 引入了uview-ui后,打包错误,主包过大解决方案

原因&#xff1a;由于使用uniapp来设计小程序&#xff0c;使用uview的组件库&#xff0c;导致了主包过大&#xff0c;无法打包 前提条件&#xff1a;已经完成了分包&#xff0c;如果还没有分包的先分包&#xff0c;需要上传代码时用到 1. 通常情况&#xff0c;大多数都是通过点…

VUE3实现古典音乐网站源码模板

文章目录 1.设计来源1.1 网站首页页面1.2 古典音乐页面1.3 著名人物页面1.4 古典乐器页面1.5 历史起源页面1.6 登录页面1.7 注册页面 2.效果和源码2.1 动态效果2.2 目录结构 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xc…

MIT 6.824 Lab1记录

MapReduce论文阅读 1. 编程模型 Map 函数&#xff08;kv -> kv&#xff09; Map 函数将输入的键值对处理为一系列中间值&#xff08;键值对&#xff09;&#xff0c;并将所有的中间结果传递给 Reduce 处理。 map(String key, String value):// key: document name// val…

PHP员工管理系统小程序

&#x1f4bc;高效管理&#xff0c;从“员工管理系统”开始&#x1f4bc; &#x1f4cb;【一键录入&#xff0c;信息整合】&#x1f4cb; 你是否还在为整理员工信息而手忙脚乱&#xff1f;纸质档案易丢失、电子表格易混乱&#xff0c;这些问题在“员工管理系统”面前都将迎刃…

如何使用ssm实现电商扶贫平台网站

TOC 10929ssm电商扶贫平台网站 第1章 绪论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于电商扶贫平台网站 所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;首页、个人中心、商品分类管理、热门商品管理、用户管理、系…