17.STM32 ADC:从模数转换原理到光敏电阻电压采集实战

光敏电阻ADC采集+STM32CubeMx配置ADC多通道读取 阅读详情

这篇是我最近学 ADC 的学习总结。前阵子读了一篇讲 ADC 原理与工程选型的深度文章,又结合手上的 STM32F411RET6 开发板做了一个光敏电阻电压采集的小项目,于是把「理论—指标—架构—上机实战」串成了一条线,记录在这里,方便以后回看,也分享给同样在啃模数转换的同学。

一、ADC 到底是什么?

ADC(Analog to Digital Converter,模数转换器)是模拟世界和数字世界之间的桥梁。它要干的事,就是把时间连续、幅值也连续的模拟信号(电信号),转换成时间离散、幅值也离散的数字信号(二进制 0/1),才能被单片机存储和处理。

一个完整的 A/D 过程一般要经过四步:采样 → 保持 → 量化 → 编码。其中前两步(采样、保持)由采样-保持电路完成,后两步(量化、编码)才在 ADC 内部完成。

这里有个容易被忽略但极其关键的点:任何 ADC 都需要一个参考模拟量作为转换标准,最常见的参考标准就是最大可转换信号。输出的数字量本质上表达的是「输入信号相对于参考信号的大小」——换句话说,参考电压稳不稳,直接决定了测量准不准。这一点在我后面做项目时体会很深。

二、看懂 ADC 的几个关键指标

读数据手册和选型时,绕不开下面几个术语:

指标含义工程提醒
采样速率(Sampling Rate)ADC 每秒采集模拟信号的次数,单位常用 Msps按奈奎斯特定理,采样率至少要是信号最高频率的 2 倍
分辨率(Resolution)转换后数字信号的比特数(如 12bit、16bit)决定能区分的最小模拟电平,12bit 对应满量程 4095
信噪比(SNR)信号功率与噪声功率之比,单位 dB实际精度会因温度、时钟抖动等而低于理论值
有效位数(ENOB)实际能达到的「真实精度」位数往往低于标称分辨率,选型时更应看 ENOB

一个很重要的认知:分辨率 ≠ 实际精度。标称 12bit 不代表你真能量到 12bit,噪声、参考电压、PCB 布线都会把有效位数(ENOB)拉下来。ADC 的性能从来不是芯片单独决定的,而是整条信号链决定的。

三、主流 ADC 架构与适用场景

不同架构各有取舍,选型时基本是在「速度」和「精度」之间找平衡:

  • SAR(逐次逼近型):中速、中高精度、功耗低,单片机内置 ADC 大多属于此类,适合通用采集(我这次用的 STM32F411 内置 ADC 就是 SAR)。
  • Sigma-Delta(Σ-Δ):低速、超高分辨率,适合温度、称重、工频电量这类慢信号精密测量。
  • 流水线(Pipeline):高速、中高精度,适合通信、视频等宽带信号。
  • 积分型(双积分):低速、高精度、抗工频干扰强,典型是数字万用表。

选型口诀大致是:信号变化快就拼速度(流水线),信号慢但要抠精度就拼分辨率(Σ-Δ),通用中等需求 SAR 最省心。

四、上机:STM32F411 的 ADC 编程接口

理论落到 STM32 上,先认识 HAL 库里 ADC 的几个核心对象:

  • 数据结构:ADC_HandleTypeDef、ADC_InitTypeDef、ADC_TypeDef、ADC_ChannelConfTypeDef,以及外设实例 ADC1。
  • 核心 HAL 函数(对照 HAL 库函数说明 107–116 页):
函数作用
HAL_ADC_Init(hadc)初始化 ADC
HAL_ADC_MspInit(hadc)MSP 层底层资源(时钟、GPIO)初始化
HAL_ADC_Start(hadc)启动一次转换
HAL_ADC_PollForConversion(hadc, Timeout)轮询等待转换完成
HAL_ADC_GetValue(hadc)读取转换结果

五、实战:用 ADC 测量光敏电阻电压

需求:结合开发板原理图,用 ADC 接口检测板载 5MM 光敏电阻上的电压,并通过串口打印出来。

整体设计:STM32CubeMX 里配置 ADC1 和相关 GPIO,再自己写一层封装代码。代码里把流程拆成了三个函数,思路很清晰:

// 1. 初始化:STM32CubeMX 生成,配置 ADC1 及关联 GPIO(单次采集模式)
void MX_ADC1_Init(void);

// 2. 读取一次原始值:启动 -> 轮询 -> 取值
static uint32_t Read_Light_Sensor(void);
//    ① HAL_ADC_Start(&hadc1)            启动转换
//    ② HAL_ADC_PollForConversion(&hadc1, 10)  等待完成
//    ③ HAL_ADC_GetValue(&hadc1)         取当前转换值

// 3. 原始值 -> 电压值
static float adc_to_voltage(uint32_t adc_value, float vref);
//    转换公式:(adc_value * vref) / 4095.0f

最关键的转换公式:

电压 = (adc_value * vref) / 4095.0f

这里 vref 取 3.3V,4095 是 12 位 ADC 的满量程(2¹²−1)。回到第一节的认知——这个 vref=3.3 就是参考电压,它一抖,所有测量值都会整体漂移。

一个踩过的坑:在 CubeMX 里把 ADC1 配成单次采集模式时,调用 HAL_ADC_GetValue() 读完后会自动结束本次采集,不需要再显式调用 HAL_ADC_Stop()。这一点一开始没注意,重复调用反而让状态机乱掉。

最后用 outputLdrCurData() 把「原始值 → 电压值 → 串口打印」串起来,每 5000ms 采集打印一次,一个最小可用的光照采集就跑了。

六、复盘:信号链比芯片更重要

把这个小项目做下来,最深的体会正好印证了那篇深度文章的核心观点:ADC 的实际性能由整条信号链决定,而不是只看芯片标称位数。 对照来看,常见工程「翻车点」有:

  • 参考电压噪声:vref 不稳,整体测量跟着漂,比分辨率不够更致命;
  • 分压/采样电阻失配:影响比例换算的准确性;
  • 采样时机与干扰:和数字开关、电机、开关电源耦合,会把噪声采进模拟端;
  • DMA 错位 / 采样时机干扰:批量采集时数据错位、串扰。

所以拿到一个测量任务,别一上来纠结「几 bit 的 ADC」,先想清楚:信号多大、变化多快、参考干不干净、线怎么走。

写在最后

从「采样-保持-量化-编码」的原理,到奈奎斯特 / 分辨率 / ENOB 的指标,到 SAR / Σ-Δ / 流水线的架构取舍,再到 STM32 上 Start → PollForConversion → GetValue → (value*vref/4095) 的代码闭环——ADC 这件事,理论和上机一旦打通,理解会深刻很多。

STM32检查光敏电阻的变化控制灯的亮暗(ADC采集,PWM输出) 内容主要是——1、对光敏电阻经行ADC的采集;2、采集的数据用作PWM控制小灯的明暗变化。 第一部分: 1.1对光敏电阻的使用基本了解: 光敏电阻内部就是一个PN结,光的强弱会引起其导通的变化,从而会引起电流的变化;电路设计方面,主要是利用电流的变化,然后在串联一个电阻,就可以转换成电压的变化,然后在利用ADC来采集电压的变化进行处理。同时光线与电压值成反比。 1.2ADC采集: 1,电路上选择某... 阅读详情

相关推荐

【STM32 实战】ADC 全解析:从模拟信号采集到数据处理的完整指南

单通道采集:电位器、传感器等基础应用。多通道扫描 + DMA:高效处理多路模拟信号。抗干扰技巧:校准与滤波提升数据可靠性。未来方向结合 DMA 和定时器,实现周期性多通道采样(如工业数据监控)。搭配 DAC(数模转换器),构建闭环控制系统(如自动温控风扇)。下一篇预告:《STM32 通信实战:USART 串口与物联网模块的互联互通》(关注我,解锁设备联网技能~)互动问题:你在 ADC 采集中遇到过最棘手的干扰问题是什么?欢迎在评论区讨论!🔌。

2503_91866373的博客 3418

STM32CubeMX——光敏电阻检测光照强度

前言 多少事,从来急;天地转,光阴迫。 一万年太久,只争朝夕。 ——毛泽东《满江红·致郭沫若同志》 一、简介 光敏电阻 光敏电阻(photoresistor or light-dependent resistor,后者缩写为ldr)或光导管(photoconductor),常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。 这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔

W_Oilpicture的博客 2万+

STM32+光敏电阻传感器【附整套代码+流程图】

本文介绍了5528型光敏电阻光照检测模块的应用与实现方案。该模块基于光敏电阻特性,通过分压电路将光照强度转换为模拟电压信号,由STM32的ADC采集处理。文章详细说明了模块参数、工作原理、接线方式和程序设计,包括ADC初始化、数据采集和光照强度计算等关键代码。项目采用STM32F103C8T6主控,配合OLED显示和串口输出,实现了环境光照强度的实时检测与显示功能,适用于智能照明、环境监测等应用场景。整套代码工程完整,便于嵌入式开发学习和项目实践。

qq_42936232的博客 3398

STM32CubeMX ADC采集光照和电压

一般来说,光照越强,光敏电阻的电阻值越小,反之,光照越弱,光敏电阻的电阻值就越大。ADC和光照传感器可以组合使用,通过将光照传感器的电阻值转换为数字信号(即经过ADC转换),就可以实现光照度的数字化处理。例如,如果您的光照传感器输出信号连接到 PA0 引脚,就将 PA0 配置为 ADC 输入模式。在“Configuration”选项卡中,点击“ADC”选项卡,并配置 ADC 所需的参数。在 ADC 转换完成后,读取 ADC 数据并转换成光照度,根据需要定期读取 ADC 数据并更新光照度值。

weixin_46286415的博客 4988

100 篇文章精通 STM32F103(第 10 篇):ADC 模数转换原理与多通道采样实战

模拟信号:你的实际身高(比如 175.32cm,连续且精确到小数点后两位);数字值:尺子上的刻度(比如 175cm,离散的整数,精度由尺子最小刻度决定);ADC 分辨率:类似尺子的最小刻度(比如 12 位 ADC 的 “最小刻度” 是 3.3V/4095≈0.8mV,精度越高,“刻度越细”)。ADC 的核心价值:STM32 只能处理数字信号,没有 ADC,就无法读取传感器输出的模拟电压,也就无法实现 “根据环境光调节屏幕亮度”“根据温度控制风扇转速” 等场景。

CGlgq123的博客 1594

我在高职教STM32——ADC电压采集与光敏电阻(4)

本文是《ADC电压采集与光敏电阻》的第四篇,剖析了光敏电阻上电压采集的源码。

gmc832002的博客 924

STM32 ADC原理与驱动详解:从光敏电阻到数字转换(上) | 零基础入门STM32第六十五步

本文系统解析了STM32 ADC模块的工作原理与实战应用,通过结构化的原理说明和可视化图表,帮助开发者快速构建模拟信号采集系统。

i萌依的博客 3835

我在高职教STM32——ADC电压采集与光敏电阻(3)

本文是《ADC电压采集与光敏电阻》的第三篇,针对STM32的ADC配置要点做了解读,并明确的实验目标、工程文件和编程要点。

gmc832002的博客 1080

STM32 proteus + STM32Cubemx仿真教程(第五课ADC光敏电阻采样教程)

本篇文章开始带大家学习如何使用proteus和STM32Cubemx来完成STM32的学习,第五节课我们来学习ADC光敏电阻采样实验。proteus使用8.9版本。STM32Cubemx使用6.3版本。光敏电阻是一种常用的光感测元件,广泛应用于光控开关、亮度调节、光强测量等领域。通过合理的电路设计和使用,可以将光强度信号转换为电压信号,方便后续的处理和应用。在具体应用中,需要考虑光敏电阻的非线性特性、响应时间、温度影响等因素,以实现稳定和准确的光强度检测。本篇文章就讲解到这里,大家有什么疑问都可以留言。

m0_49476241的博客 6319

目标检测中的困难样本挖掘:YOLOv5训练效果提升30%的秘诀

本文深入探讨了目标检测中困难样本挖掘的关键技术,特别是如何通过在线困难样本挖掘(OHEM)策略显著提升YOLOv5模型的性能。文章详细解析了困难样本的分类、识别机制及实战配置,并提供了数据标注策略与增强技巧,最终实现模型性能提升30%的突破。

weixin_30379531的博客 402

在微信小程序中如何引入iconfont

略

sayyy的专栏 4326

STM32 环境监测项目笔记(三):ADC 采样与光敏电阻光照检测实现

本笔记记录了基于STM32的ADC采样与光敏电阻光照检测的实现过程。主要内容包括:ADC基础概念(12位模数转换)、STM32关键参数配置(右对齐、单通道采样);CubeMX工程配置详解(ADC1通道选择、采样时间设置);光敏电阻模块接线指南;核心采样代码实现(单次启动循环采样);实验现象分析(光照强度与采样值的反向关系)。通过调试验证了光照变化对ADC采样值的影响,为后续OLED显示光照数据奠定基础。下一篇将介绍RTC实时时钟的配置与实现。

2502_90552706的博客 2578

基于STM32与ESP8266的MQTT协议实现阿里云物联网平台远程LED控制

本文详细介绍了如何利用STM32单片机与ESP8266 Wi-Fi模块,通过MQTT协议连接阿里云物联网平台,实现远程控制LED灯的完整物联网项目。内容涵盖硬件连接、阿里云平台配置、MQTT协议与AT指令解析、STM32代码实战以及数据解析与调试技巧,为嵌入式开发者提供了一个清晰、实用的物联网入门实践指南。

svm4gardener的博客 793

STM32实战:ADC光敏电阻精准采集与串口动态监测

本文详细介绍了STM32的ADC模块在光敏电阻光照采集中的应用实践。通过硬件电路设计、寄存器配置、校准优化及串口通信等步骤,实现精准的光照强度测量与实时数据监测,为嵌入式光照传感系统开发提供完整解决方案。

devops8pract的博客 760

域格4G网优模块获取

1、获取当前小区信息 接口说明 该命令用于获取当前小区信息。 语法结构 命令类型 格式 返回结果 Execute AT+SCELLINFO +SCELLINFO: <cellMode>,<mcc>,<mnc>,<lac>,<cellId>,<afrcn>,<cpi>,<rxLevel>

自由的幻想 2464

6、深入解析Microsoft 365核心服务对比与迁移策略

本文深入解析了Microsoft 365的核心服务,包括身份和设备管理、现代设备配置体验、Exchange和SharePoint的迁移策略以及Microsoft Teams的协作功能。同时探讨了迁移过程中需要考虑的安全控制措施,为组织规划和实施云迁移项目提供了全面的指导和建议。

k8s6orchestrator的博客 109

STM32光敏电阻传感器实战:从ADC采集到智能光照控制

本文详细介绍了STM32光敏电阻传感器的实战应用,从ADC采集原理到智能光照控制实现。通过分压电路设计、ADC配置优化、光照强度计算与校准,结合PWM调光和PID控制算法,实现精准的智能光照调节。涵盖硬件连接、软件编程及系统调试技巧,为嵌入式开发提供完整解决方案。

i7j8k9l的博客 1093

【python三维深度学习】python三维点云从基础到深度学习

从三维点云基础知识到深度学习,将按照以下目录持续进行更新。更新完成的部分可以在三维点云专栏中查看。含数据与python源码。

叶子的博客 2万+

【STM32 + CubeMX】 ADC 多通道采集配置与代码实现 -- F407篇

本文介绍了基于STM32F4的ADC多通道采集实现方法。通过CubeMX配置ADC模块,采用DMA循环传输模式,实现3路模拟电压信号的自动采集与转换。文章详细讲解了ADC的基本原理、STM32内置ADC的特性(12位分辨率、0-3.3V输入范围、最高2.4MSPS采样率),并给出了CubeMX的具体配置步骤,包括通道选择、DMA参数设置和采样时间调整。代码实现部分重点展示了如何通过数组缓存和HAL_ADC_Start_DMA函数启动转换,以及如何将原始ADC值转换为实际电压值。最后针对调试中常见的悬空引脚读

qq_49053936的博客 7406

LVS 负载均衡面试题及参考答案

什么是 LVS 负载均衡?它的主要作用是什么? LVS(Linux Virtual Server)是一个基于 Linux 内核的开源负载均衡项目。它通过将请求流量按照一定的算法分发到后端的多个真实服务器(Real Server)上,从而实现负载均衡的功能。 从原理上来说,LVS 工作在网络层和传输层之间。当客户端发起请求时,请求首先到达 LVS 服务器,LVS 会根据预先设定的规则和算法,比如轮询(Round - Robin)、加权轮询(Weighted Round - Robin)、最少连

大模型大数据攻城狮的专栏 1469

x2-DFD:A framework for explainable and explainable deepfake detection

该文章提出了X2-DFD框架,用于可解释和可扩展的深度伪造检测。通过评估大型多模态语言模型(MLLMs)在深度伪造检测中的内在能力,发现它们在不同伪造相关特征上的有效性各异。基于此,实施了针对性的微调策略,显著提高了MLLMs的解释能力,并整合了外部深度伪造检测器(EDDs),以结合MLLMs和传统检测器的互补优势,实现更好的检测和解释。

志在山顶的人,不会贪念山腰的风景 510

STM32 ADC光敏电阻实战:从原理到智能光照控制

本文详细介绍了如何使用STM32的ADC模块读取光敏电阻值,实现智能光照控制系统。从光敏电阻工作原理、硬件电路设计到STM32 ADC配置和代码实现,提供了完整的实战指南,帮助开发者快速掌握传感器数据采集和智能控制应用。

pepsi的博客 887

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

光敏电阻与ADC模数转换实战:从原理到单片机应用

本文详细介绍了光敏电阻与ADC模数转换的工作原理及在单片机上的实战应用。从光敏电阻特性、硬件连接到STM32 ADC配置,全面解析光照检测系统的实现方法,包含代码示例和调试技巧,帮助开发者快速掌握智能光照检测技术。

metal的博客 925

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

单片机(STM32-ADC模数转换器)

包含采样时间(ADC转采集输入电压的时间)和转换时间(ADC内部将采样到的模拟信号转换成数字值的时间)。ADC(Analog to Digital Converter,模数转换器)是将模拟信号(如电压)转换为数字信号(如二进制数值)的硬件模块。常见有14位、12位、10位、8位、6位等,12位ADC的输出范围是0~4095。把SAR当前寄存器的内容(数字量)转换成模拟电压,供比较器与输入模拟电压比较。1. SAR先把最高位(D7)设为1,其余为0,DAC输出对应电压。

Zz3528966192的博客 2121

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【STM32开发】ADC采集环境亮度

本文详细介绍了利用STM32微控制器ADC功能采集环境亮度的完整实现过程。从硬件准备(STM32开发板、光敏电阻等)到软件配置(Keil MDK、STM32CubeMX安装),再到ADC参数设置和代码编写,系统讲解了数据采集、转换及处理的每个环节。文章还提供了常见问题解决方案,并展望了自动调光系统、光照监测报警等实际应用场景。通过12位ADC的高精度采样,实现了模拟光信号到数字量的准确转换,为物联网、智能家居等领域的开发提供了实用技术参考。

大雨淅淅的博客 1113

STM32——ADC模数转换器

STM32 ADC模数转换器知识点和ADC单通道,ADC多通道代码编写

zzy_ysn的博客 1977
上一篇: 16. 深入浅出 SPI 通信协议:从移位寄存器到 W25Q256 Flash 读写实战
下一篇: 18.从 IP 到 MQTT:STM32 用 AT 指令驱动 ESP-12F 上云的完整链路(含全套实战代码 + 踩坑清单)
硅基造物主
博客等级 码龄4年 17粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值