【STM32 .Net MF开发板学习-09】AD模拟量采集

简介: AD/DA输入输出、PWM及其它底层硬件控制,.Net Micro Framework官方底层驱动代码及上层C#库并没有对这些功能进行封装,所以要想添加这类硬件的控制接口,需要从下到上进行全方位设计。

AD/DA输入输出、PWM及其它底层硬件控制,.Net Micro Framework官方底层驱动代码及上层C#库并没有对这些功能进行封装,所以要想添加这类硬件的控制接口,需要从下到上进行全方位设计。

AD模拟量的采集没有想象的那么简单,从转换方式来说,有单次转换、连续转换之分,从模式来说,有扫描模式和间断模式,而间断模式下又分为规则组和注入组,采集时各通道可以独立采集,也可以批量采集等等。

简单期间,我这里仅封装了间断模式下的规则组独立采集方式(单次转换)。

针对驱动层,我定义了如下函数接口:

BOOL CPU_ADC_Initialize();

void CPU_ADC_Uninitialize();

BOOL CPU_ADC_Start(UINT8 adc);

BOOL CPU_ADC_Stop(UINT8 adc);

BOOL CPU_ADC_Read(UINT8 index,UINT16 *value, UINT32 spm, UINT32 flag );

针对STM32F10xxx系列的芯片,包含ADC0、ADC1、ADC2三个AD控制器,每一个又包含18个采集通道(其中两路是内部通道),其中ADC0的内部通道16、17分别为芯片温度和芯片电压值。

C#上层库的接口定义如下:

    namespace YFSoft.Hardware

{

    public sealed class ADC

    {

        [MethodImplAttribute(MethodImplOptions.InternalCall)]

        public extern static bool Start(byte adc);

        [MethodImplAttribute(MethodImplOptions.InternalCall)]

        public extern static bool Stop(byte adc);

        [MethodImplAttribute(MethodImplOptions.InternalCall)]

        public extern static bool Read(byte channel, out int value, uint spm, uint flag);

    }

}

其中的spm为采样时间,总转换时间TCONV = 采样时间+ 12.5个周期

采样时间的取值(0~7)

000:1.5周期

100:41.5周期

001:7.5周期

101:55.5周期

010:13.5周期

110:71.5周期

011:28.5周期

111:239.5周期

AD的输入时钟为1/8主频。

AD采集的示例代码如下:

using System;

using Microsoft.SPOT;

using YFSoft.Hardware;

using System.TinyGUI;

using System.Threading;

namespace ADCTest

{

    public class Program

    {

        public static void Main()

        {

            int value = 0;                           

            ADC.Start(0); //ADC0

            while (true)

            {

                Graphics.SuspendLayout();

                Graphics.Clear(Color.Black);

                for (int i = 0; i < 18; i++)

                {

                    ADC.Read((byte)i, out value, 2, 0);

                    Graphics.DrawString(10, 10 + i * 15, i.ToString()+" - "+ value.ToString(), Color.White);

                }

                Graphics.ResumeLayout();

                Thread.Sleep(1000);

            }    

            //ADC.Stop(0);

        } 

    }

}

运行结果如下图:

image.png

 

(1)、对应WAKEUP键,按下、松开采集值不同

(2)、可调电阻(红牛板子在蜂鸣器附近,EM-STM3210E在SD卡附近),转动旋钮,值连续变化

(3)、片内温度,奇怪的是在家里EM-STM3210E的值为2~3,红牛的为0,在公司,二者都为0,不知道是否硬件问题。

 

以上AD接口不足以表达AD采集的所有功能,也只是起到抛砖引玉的作用,希望广大网友献言献策,提出更好的意见想法,因为接下来的PWM功能似乎更难封装,更需要大家的意见。


源码下载:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/ADCTest.rar

文章参考: 《.Net Micro Framework 快速入门》

中文讨论组:http://space.cnblogs.com/group/MFSoft/

相关文章
|
数据采集 编解码 算法
STM32采集正弦幅值的研究与实践
STM32采集正弦幅值的研究与实践
1301 0
|
11天前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
81 2
|
5月前
|
数据采集 自然语言处理 Java
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
本文以反面教材形式,剖析了在使用 Playwright 爬取懂车帝车友圈问答数据时常见的配置错误(如未设置代理、Cookie 和 User-Agent),并提供了 Python、Java 和 .NET 三种语言的修复代码示例。通过错误示例 → 问题剖析 → 修复过程 → 总结教训的完整流程,帮助读者掌握如何正确配置爬虫代理及其它必要参数,避免 IP 封禁和反爬检测,实现高效数据采集与分析。
282 3
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
|
6月前
|
数据采集 自然语言处理 JavaScript
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
随着数据采集需求的增加,传统爬虫工具如Selenium、Jsoup等因语言割裂、JS渲染困难及代理兼容性差等问题,难以满足现代网站抓取需求。微软推出的Playwright框架,凭借多语言支持(Python/Java/.NET/Node.js)、统一API接口和优异的JS兼容性,解决了跨语言协作、动态页面解析和身份伪装等痛点。其性能优于Selenium与Puppeteer,在学术数据库(如Scopus)抓取中表现出色。行业应用广泛,涵盖高校科研、大型数据公司及AI初创团队,助力构建高效稳定的爬虫系统。
329 2
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
|
11月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
429 0
|
开发框架 .NET 中间件
C#/.NET快速上手学习资料集(让现在的自己不再迷茫)
C#/.NET快速上手学习资料集(让现在的自己不再迷茫)
389 8
stm32学习 3-2 LED流水灯
stm32学习 3-2 LED流水灯
160 4
stm32学习3-1 LED闪烁
stm32学习3-1 LED闪烁
97 4
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
这篇文章是关于计算机组成原理的王道考研学习笔记,主要介绍了半导体存储器RAM和ROM的相关知识。
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502