zoukankan      html  css  js  c++  java
  • 【STM32 .Net MF开发板学习09】AD模拟量采集

       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系列的芯片,包含ADC0ADC1ADC2三个AD控制器,每一个又包含18个采集通道(其中两路是内部通道),其中ADC0的内部通道1617分别为芯片温度和芯片电压值。

        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

       0001.5周期

    10041.5周期

    0017.5周期

    10155.5周期

    01013.5周期

    11071.5周期

    01128.5周期

    111239.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-STM3210ESD卡附近),转动旋钮,值连续变化

    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/

  • 相关阅读:
    java properties
    js resource
    script Ruby / Rails / Arachni
    webServer / Apache / apache / apache http server / mod_cluster
    JAVA XML open protocol
    二维数组举例
    二维数组
    二维数组
    二维数组
    二维数组
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/1781810.html
Copyright © 2011-2022 走看看