天天看點

【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系列的晶片,包含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);

        public extern static bool Stop(byte adc);

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

        } 

運作結果如下圖:

【STM32 .Net MF開發闆學習-09】AD模拟量采集

(1)、對應WAKEUP鍵,按下、松開采集值不同

(2)、可調電阻(紅牛闆子在蜂鳴器附近,EM-STM3210E在SD卡附近),轉動旋鈕,值連續變化

(3)、片内溫度,奇怪的是在家裡EM-STM3210E的值為2~3,紅牛的為0,在公司,二者都為0,不知道是否硬體問題。

   以上AD接口不足以表達AD采集的所有功能,也隻是起到抛磚引玉的作用,希望廣大網友獻言獻策,提出更好的意見想法,因為接下來的PWM功能似乎更難封裝,更需要大家的意見。

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

<a href="http://space.cnblogs.com/group/MFSoft/"></a>