新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機之AD學習筆記

        單片機之AD學習筆記

        作者: 時間:2016-11-26 來源:網絡 收藏
        最近調試了幾個單片機的AD轉換模塊,碰到了一些問題,總結了一下

        AD轉換就是選通道、比較電壓、要采集電壓的端口設置為模擬端口

        本文引用地址:http://www.104case.com/article/201611/322015.htm

        1、選擇參考電壓源

        2、選擇AD轉換時鐘

        3、要采集電壓的端口設置為模擬端口

        4、選擇要采樣的模擬通道

        5、使能AD模塊

        PIC24FJ

        開始看此部分是調試電池電量的時候,是由于電池電量顯示不準確,debug模式下,看ad采集到的電壓被轉換成的數據,發現寄存器ADC1BUF中的數據只有關開機是正確的,以后的值都是不對的好像大多數的值是零,后來發現是由于在主循環中的某個模塊又把原來配置為模擬輸入端口引腳還原成了普通的I/O口了(就是AD1PCFGbits.PCFG0先被配置為0后又被置1,我用的是通道0)。

        A/D代碼初始化實例

        AD1PCFG = 0; // 配置ad端口,配置所有端口為模擬端口,要是作為普通io使用必須置1
        AD1CON1 = 0x2208; // 配置采樣時鐘源
        AD1CON2 = 0; // 配置A/D 比較電壓,轉換在每個采樣結束后開始
        AD1CON3 = 0; // 配置 A/D 轉換時鐘 是Tcy/2
        AD1CHS = 0; // 配置輸入通道,CH0+輸入 AN0,CH0-輸入 Vr- (AVss).
        AD1CSSL = 0; // 輸入掃描被禁止
        IFS0bits.AD1IF = 0; // 清中斷


        IPC3bits.AD1IP2 =1;
        IPC3bits.AD1IP1 =1;

        IPC3bits.AD1IP0 =0; //配置 A/D 中斷優先級


        IEC0bits.AD1IE = 1; //使能 A/D 中斷
        AD1CON1bits.ADON = 1; //打開 A/D
        AD1CON1bits.SAMP = 1; // 開始采樣輸入
        Delay(); //延時,確保開始轉換時,采樣的時間已結束
        AD1CON1bits.SAMP = 0; // A/D采樣結束,開始轉換

        中斷
        void __attribute__ ((__interrupt__)) _ADC1Interrupt(void)
        {
        IFS0bits.AD1IF = 0;
        }
        在pic的數據手冊中有比較詳細的例程,值得參考

        MSP430

        這個單片機的比較電壓可以選擇內部或外部的

        問題:AD轉換,單通道單次轉化和單通道多次轉換有什么區別

        單次轉換是指進行一次轉換前需要你給一次指令。
        連續轉換的話開啟后自動連續進行轉換,轉換的數據連續進行更新。
        如果你采用單次轉換,就需要不斷發送轉換的命令,讀取結果,再發轉換命令,再讀。就是循環啦。
        如果連續轉換開啟的話,就在程序中循環讀就可以了。

        STM32

        在采集電池電壓時遇到了問題,3.9v到4.2v的電壓得到的ad轉換的電壓值的寄存器存儲的電壓值正常,3.9v以下的值不正確,發現是Vref+輸入的比較電壓不穩定造成的。



        關鍵詞: 單片機AD學習筆

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 滦平县| 屯昌县| 和龙市| 灵宝市| 右玉县| 蓝山县| 娱乐| 洛南县| 安平县| 通江县| 永德县| 额敏县| 卫辉市| 洞头县| 福鼎市| 肥东县| 河北省| 前郭尔| 吐鲁番市| 彭泽县| 武邑县| 正安县| 淮南市| 乌拉特前旗| 渭南市| 云和县| 青龙| 潜山县| 囊谦县| 连州市| 泸溪县| 静乐县| 海阳市| 东方市| 基隆市| 灵寿县| 龙门县| 五家渠市| 曲阜市| 海门市| 西华县|