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);

}

}

}

运行结果如下图:

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

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

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

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

-----------------------------------------------------------------------------------------

【低价开发板】http://item.taobao.com/item.htm?id=7117999726 
×××:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/ADCTest.rar
文章参考: 《.Net Micro Framework 快速入门》
中文讨论组:http://space.cnblogs.com/group/MFSoft/

转载于:https://blog.51cto.com/yfsoft/353989

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

  1. 【STM32 .Net MF开发板学习-02】GPIO测试

    前段时间我借用市面上现成的Corex-M3开发板,打造了最低价的.Net Micro Framework开发板(参见<免费发放firmwave,打造史上最低价.Net MF开发板>),在此 ...

  2. 【STM32 .Net MF开发板学习-17】Wifi遥控智能小车

    恰好以前购买的一个PDA含Wifi功能,所以与其用PC通过Zigbee控制智能小车,不如用PDA来控制,这样更为方便,不过由于目前.NET MF开发板不直接支持Wifi功能,所以我们也只好间接控制了, ...

  3. 【STM32 .NET MF开发板学习-29】摄像头蓝牙图像远程获取

    目前生产串口摄像头的厂家有很多,每家的通信协议也不同,所以针对不同的摄像头都必须编写相对应的摄像头驱动程序. 最早做医疗项目的时候,开发过一款串口摄像头的驱动,不过是配合TinyIOs而使用,并没有把 ...

  4. 【STM32 .Net MF开发板学习-28】中文显示(WPF方式)

    在<为Cortex-M3打造轻量级TinyGUI>中我们提到.NET MF的官方图形库为WPF,考虑到内存的限制和CPU的性能,所以我们开发了TinyGUI库,并在<TinyGUI绘 ...

  5. 【STM32 Net MF开发板学习-27】GPRS通信实现

    GPRS是General Packet Radio Service(通用分组无线服务技术)的简称,它是GSM移动电话用户可用的一种移动数据业务.GPRS和以往连续在频道传输的方式不同,是以封包(Pac ...

  6. 【STM32 NET MF开发板学习-29】摄像头蓝牙图像远程获取

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 目前生产串口摄像头 ...

  7. 【STM32 .Net MF开发板学习-11】步进电机控制(非PWM模式)

    选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用 uln2003芯片的驱动板,其控制时序图如下: 四相八拍:A->AB->B ->BC - ...

  8. 【STM32 Net MF开发板学习-11】步进电机控制(非PWM模式)

    选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用uln2003芯片的驱动板,其控制时序图如下: 四相八拍:A->AB->B ->BC -& ...

  9. 【STM32 Net MF开发板学习-19】DHT11温湿度传感器通信(上)

    前段时间开发远程医疗系统(Dr.Cloud)就曾用到过温湿度传感器,不过当时考虑到集成难度,选了一个RS485接口的传感器,该传感器实现了Modbus Rtu Slave的功能,只要客户程序实现Mod ...

  10. 【STM32 .Net MF开发板学习-19】DHT11温湿度传感器通信(上)

    前段时间开发远程医疗系统(Dr.Cloud)就曾用到过温湿度传感器,不过当时考虑到集成难度,选了一个RS485接口的传感器,该传感器实现了Modbus Rtu Slave的功能,只要客户程序实现Mod ...

最新文章

  1. 博通收购高通12张PPT深度解析!
  2. EqualLogic控制器算法研究一:基本管理
  3. 用WPS表格轻松设计工资条
  4. 一块网卡设置多个IP地址
  5. leetcode167. 两数之和 II - 输入有序数组(二分查找)
  6. docker 容器安装conposer_docker和php:将依赖项(composer)放入容器中
  7. 作者:徐晔(1964-),男,博士,中国科学院云计算产业技术创新与育成中心公共安全研究院研究员、院长。...
  8. 组织文化运营_组织可以从开放文化和技术中学到什么
  9. ExtJs五(ExtJs Mvc登录优化)
  10. 【Elasticsearch】关于 Analyzers 的一切,第2部分
  11. springMVC ---- 异步调用
  12. mysql与其他数据库的区别_mysql与其他数据库的区别
  13. php三次握手,深入理解TCP协议及其源代码——三次握手(示例代码)
  14. CRMEB多商户1.7.1版本功能更新预告 预计12月更新
  15. 物联网视觉技术及应用
  16. Eclipse创建java web工程
  17. linux系统中XLib在什么位置,什么是glibc?glibc是什么?什么是freetype?freetype是什么?什么是?Xlib是什么?什么是lo...
  18. TexturePacker的用法
  19. 【网络攻防CTF】Crypto 密码学 python循环多次base64解码题目(保姆级图文)
  20. 调用百度人体关键点识别API

热门文章

  1. 决策树系列(五)——CART
  2. 实习踩坑之路:一个诡异的SQL?PageHelper莫名多了一个Limit子句,导致SQL执行错误?
  3. java writer 乱码_Java servlet 使用 PrintWriter 时的编码与乱码
  4. android wifi操作,热点创建
  5. 聊一个不常见的面试题:为什么数据库连接池不采用 IO 多路复用
  6. python中type(12.34)_下面代码的输出结果是
  7. python---windows中的文件路径书写的错误
  8. vbyone接口引脚定义_FMC接口介绍
  9. switch里面变量吗c语言,讨教一下关于switch语句中变量定义的相关问题
  10. android消息通知布局,Android Design