0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用N76E003微控制器ADC讀取模擬電壓

科技觀察員 ? 來源:circuitdigest ? 作者:Sourav Gupta ? 2022-08-10 16:01 ? 次閱讀

模數(shù)轉換器ADC) 是微控制器上最常用的硬件功能。它接收模擬電壓并將其轉換為數(shù)字值。由于微控制器是數(shù)字設備并且使用二進制數(shù)字 1 和 0,它不能直接處理模擬數(shù)據(jù)。因此,ADC 用于接收模擬電壓并將其轉換為微控制器可以理解的等效數(shù)字值。

在本教程中,我們將使用N76E003 微控制器單元的內(nèi)置 ADC 外設,因此讓我們評估此應用需要什么樣的硬件設置。

所需組件和硬件設置

要在 N76E003 上使用 ADC,我們將使用使用電位計的分壓器并讀取 0V-5.0V 范圍內(nèi)的電壓。電壓將顯示在 16x2 字符 LCD 中,如果您是 LCD 和 N76E003 的新手,您可以查看如何將 LCD 與 Nuvoton N76E003 連接。因此,該項目所需的主要組件是 16x2 字符 LCD。對于這個項目,我們將使用以下組件 -

字符 LCD 16x2

1k電阻

50k 電位器或微調(diào)電位器

幾根伯格電線

幾根連接線

面包板

更不用說,除了上述組件,我們還需要基于N76E003 微控制器的開發(fā)板以及Nu-Link 編程器。還需要一個額外的 5V 電源單元,因為 LCD 會消耗編程器無法提供的足夠電流。

Nuvoton N76E003 讀取模擬電壓的電路圖

pYYBAGLzZXiAAuWQAABaHedm9go585.png

正如我們在示意圖中看到的,端口 P0 用于與 LCD 相關的連接。在最左側,顯示了編程接口連接。電位器用作分壓器,由模擬輸入 0 (AN0) 檢測

pYYBAGLzZXSAd0fmAAbIYcZwHgA235.png

N76E003 中有關 GPIO 和模擬引腳的信息

下圖說明了 N76E003AT20 微控制器單元上可用的 GPIO 引腳。但是,在 20 個引腳中,對于 LCD 相關連接,使用端口 P0(P0.0、P0.1、P0.2、P0.4、P0.5、P0.6 和 P0.7)。模擬引腳以紅色突出顯示。

poYBAGLzZW6Aayx3AAGdqhFBJ1w040.png

正如我們所看到的,端口 P0 具有最大的模擬引腳,但這些引腳用于 LCD 相關的通信。因此,P3.0 和 P1.7 可用作模擬輸入引腳 AIN1 和 AIN0。由于這個項目只需要一個模擬引腳,P1.7 是模擬輸入通道 0,用于這個項目。

N76E003 中有關 ADC 外設的信息

N76E003 提供12 位 SAR ADC。N76E003的一個非常好的特點是它具有非常好的ADC分辨率。ADC在單端模式下具有8 通道輸入。連接 ADC 非常簡單明了。

第一步是選擇ADC通道輸入。N76E003 微控制器提供 8 通道輸入。選擇 ADC 輸入或 I/O 引腳后,需要將所有引腳設置為代碼中的方向。用于模擬輸入的所有引腳都是微控制器的輸入引腳,因此所有引腳都需要設置為僅輸入(高阻抗)模式。這些可以使用PxM1 和 PxM2 寄存器進行設置。這兩個寄存器設置 I/O 模式,其中 x 代表端口號(例如,端口 P1.0 寄存器將是 P1M1 和 P1M2,對于 P3.0 它將是 P3M1 和 P3M2 等)配置可以如下圖所示 -

poYBAGLzZWuAIoXKAACfy4XCiaw172.png

ADC 的配置由兩個寄存器ADCCON0和ADCCON1完成。ADCCON0 寄存器描述如下所示。

pYYBAGLzZWeAXYhAAAJXHCQSHLQ134.png

寄存器的前 4 位從位 0 到位 3 用于設置 ADC 通道選擇。由于我們使用的是通道 AIN0,因此這四個位的選擇將為 0000。

第 6 位和第 7 位是重要的位。ADCS需要設置為 1 以啟動 ADC 轉換,ADCF將提供有關 ADC 轉換成功的信息。它需要由固件設置為 0 以啟動 ADC 轉換。下一個寄存器是 ADCCON1-

poYBAGLzZWOASlzOAAbIdXxYeHI272.png

ADCCON1 寄存器主要用于外部觸發(fā)的 ADC 轉換。但是,對于正常的輪詢相關操作,需要將第一位ADCEN設置為 1 以打開 ADC 電路。

接下來,需要在AINDIDS寄存器中控制 ADC 通道的輸入,在該寄存器中可以斷開數(shù)字輸入。

pYYBAGLzZWCAaQTQAAELNdkQwBA377.png

n 代表通道位(例如,AIN0 通道需要使用AINDIDS寄存器的第一位P17DIDS進行控制)。數(shù)字輸入需要使能,否則讀為0。這些都是ADC的基本設置。現(xiàn)在,清除 ADCF 并設置 ADCS,即可開始 ADC 轉換。轉換后的值將在以下寄存器中可用 -

poYBAGLzZVqAEwHeAACzeoqmAjY817.png

pYYBAGLzZVeAMCyTAAFtjlk8cAs867.png

兩個寄存器都是 8 位的。由于 ADC 提供 12 位數(shù)據(jù),所以 ADCRH 用作全量(8 位)而 ADCRL 用作半量(4 位)。

為 ADC 編程 N76E003

每次為特定模塊編碼是一項繁重的工作,因此提供了一個簡單但功能強大的 LCD 庫,對于與 N76E003 連接的 16x2 字符 LCD 接口非常有用。

請擁有該庫(通過克隆或下載)并在您的Keil N76E003 項目中包含lcd.c和LCD.h文件,以便將 16x2 LCD 輕松集成到所需的應用程序或項目中。該庫將提供以下有用的顯示相關功能-

初始化液晶顯示器。

向 LCD 發(fā)送命令。

寫入液晶顯示器。

在 LCD 中輸入一個字符串(16 個字符)。

通過發(fā)送十六進制值打印字符。

滾動超過 16 個字符的長消息。

將整數(shù)直接打印到 LCD 中。

ADC 的編碼很簡單。在設置函數(shù)Enable_ADC_AIN0中;用于將ADC設置為AIN0輸入。這是在文件中定義的。

#define Enable_ADC_AIN0 ADCCON0&=0xF0;P17_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT0;ADCCON1|=SET_BIT0 //P17

因此,上述行將引腳設置為輸入并配置ADCCON0、ADCCON1寄存器以及AINDIDS寄存器。以下函數(shù)將從ADCRH和ADCRL寄存器讀取 ADC,但分辨率為 12 位。

unsigned int ADC_read(void){

register unsigned int adc_value = 0x0000;

clr_ADCF;

設置_ADCS;

而(ADCF == 0);

adc_value = ADCRH;

adc_value 《《= 4;

adc_value |= ADCRL;

返回 adc_value;

}

該位左移 4 次,然后添加到數(shù)據(jù)變量中。在主要功能中,ADC 正在讀取數(shù)據(jù)并直接打印在顯示器上。然而,電壓也使用比率或電壓除以位值之間的關系進行轉換。

一個 12 位 ADC 將在 5.0V 輸入上提供 4095 位。因此除以 5.0V/4095 = 0.0012210012210012V

因此,1 位的位變化將等于 0.001V 的變化(大約)。這是在下面顯示的主函數(shù)中完成的。

void main(void){

int adc_data;

設置();

lcd_com (0x01);

while(1){

lcd_com (0x01);

lcd_com (0x80);

lcd_puts(“ADC數(shù)據(jù):”);

adc_data = ADC_read();

lcd_print_number(adc_data);

電壓 = adc_data * bit_to_voltage_ratio;

sprintf(str_voltage,“電壓:%0.2fV”,電壓);

lcd_com(0xC0);

lcd_puts(str_voltage);

Timer0_Delay1ms(500);

}

}

數(shù)據(jù)從位值轉換為電壓,并使用sprintf函數(shù)將輸出轉換為字符串并發(fā)送到 LCD。

閃爍代碼和輸出

代碼返回 0 warning 和 0 Errors 并且被 Keil 使用默認的刷機方式刷機,你可以看到下面的刷機信息。如果您是 Keil 或 Nuvoton 的新手,請查看Nuvoton 微控制器入門以了解基礎知識以及如何上傳代碼。

重建開始:項目:計時器

重建目標‘目標1’

組裝STARTUP.A51.。.

編譯main.c.。.

編譯lcd.c.。.

編譯Delay.c.。.

鏈接。..

程序大?。簲?shù)據(jù)= 101.3 xdata=0 代碼=4162

從“。\Objects\timer”。..“。\Objects\timer”創(chuàng)建十六進制文件

- 0 個錯誤,0 個警告。

構建時間已用:00:00:02

加載“G:\\n76E003\\Display\\Objects\\timer”

Flash 擦除完成。

Flash 寫入完成:已編程 4162 字節(jié)。

Flash 驗證完成:已驗證 4162 字節(jié)。

閃存加載于 11:56:04 完成

下圖顯示了使用直流適配器連接到電源中的硬件,顯示屏顯示右側電位器設置的電壓輸出。

poYBAGLzZUqAGEUQAAcQBPM9nY8282.png

如果我們轉動電位器,給 ADC 引腳的電壓也會發(fā)生變化,我們可以注意到 LCD 上顯示的 ADC 值和模擬電壓。

#include "N76E003.h"
#include "SFR_Macro.h"
#include "函數(shù)定義.h"
#include "Common.h"
#include "延遲.h"
#包括“l(fā)cd.h”
#define bit_to_voltage_ratio 0.001220703125 // 5.0V 除以 4096 對于 12 位 ADC
無效設置(無效);
無符號整數(shù) ADC_read(void);
浮動電壓;
字符str_電壓[20];
無效的主要(無效){
int adc_data;
設置();
lcd_com (0x01);
而(1){
lcd_com (0x01);
lcd_com (0x80);
lcd_puts("ADC數(shù)據(jù):");
adc_data = ADC_read();
lcd_print_number(adc_data);
電壓 = adc_data * bit_to_voltage_ratio;
sprintf(str_voltage,“電壓:%0.2fV”,電壓);
lcd_com(0xC0);
lcd_puts(str_voltage);
Timer0_Delay1ms(500);
}
}
無效設置(無效){
Set_All_GPIO_Quasi_Mode;
液晶初始化();
啟用_ADC_AIN0;
lcd_com (0x80);
LCD_ScrollMessage("歡迎來到 CircuitDigest.com");
lcd_com (0x80);
lcd_puts("ADC 接口");
lcd_com (0xC0);
lcd_puts("使用 N76E003 單片機");
Timer3_Delay100ms(5);
}
無符號整數(shù) ADC_read(void){
注冊無符號整數(shù) adc_value = 0x0000;
clr_ADCF;
設置_ADCS;
而(ADCF == 0);
adc_value = ADCRH;
adc_value <<= 4;
adc_value |= ADCRL;
返回 adc_value;
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7454

    瀏覽量

    150854
  • 模數(shù)轉換器

    關注

    26

    文章

    3099

    瀏覽量

    126699
  • 模擬電壓
    +關注

    關注

    6

    文章

    64

    瀏覽量

    18278
  • N76E003
    +關注

    關注

    0

    文章

    27

    瀏覽量

    5500
收藏 人收藏

    評論

    相關推薦

    請問如何讀取實際N76E003帶隙電壓?

    如何讀取實際N76E003帶隙電壓
    發(fā)表于 12-22 06:30

    求助,MS51FB9AE和N76E003完全兼容嗎?有BANDGAP嗎?

    MS51FB9AE和N76E003完全兼容嗎?有BANDGAP嗎? 之前用N76E003,需要讀取ADC帶隙電壓來保證供電
    發(fā)表于 06-14 13:03

    N76E003 PWM分辨率是多少?

    有沒有相關的方法,N76E003 ADC采集的電壓轉換為PWM,還有N76E003 PWM分辨率是多少。轉換的精度怎么樣,有沒能大神了解過。
    發(fā)表于 06-19 06:15

    用于實施開放環(huán)BLDC發(fā)動機控制N76E003示例代碼

    應用:這一基于N76E003的示例代碼,用于實施開放環(huán)BLDC發(fā)動機控制 BSP 版本: N76E003_BSP_Keil_C51_V1.0.6 硬件: NuTiny-N76E003
    發(fā)表于 08-23 06:11

    請問如何閱讀實際N76E003帶隙電壓?

    N76E003 ADC 可以選擇內(nèi)部帶寬電壓作為輸入針, 用于獲取 ADC 參考電壓, 以取得更準確的
    發(fā)表于 08-28 06:33

    N76E003 8位8051內(nèi)核微控制器的英文和中文數(shù)據(jù)手冊免費下載

    本文檔的主要內(nèi)容詳細介紹的是N76E003 8位8051內(nèi)核微控制器的英文和中文數(shù)據(jù)手冊免費下載。
    發(fā)表于 11-09 08:00 ?44次下載
    <b class='flag-5'>N76E003</b> 8位8051內(nèi)核<b class='flag-5'>微控制器</b>的英文和中文數(shù)據(jù)手冊免費下載

    N76E003 8位8051內(nèi)核微控制器的中文數(shù)據(jù)手冊免費下載

    N76E003為帶有flash的增強型8位8051內(nèi)核微控制器(1T工作模式),指令集與標準的80C51完全兼容并具備更高效能。
    發(fā)表于 11-09 08:00 ?78次下載
    <b class='flag-5'>N76E003</b> 8位8051內(nèi)核<b class='flag-5'>微控制器</b>的中文數(shù)據(jù)手冊免費下載

    N76E003增強型8位8051內(nèi)核微控制器的數(shù)據(jù)手冊免費下載

    N76E003為帶有flash的增強型8位8051內(nèi)核微控制器(1T工作模式),指令集與標準的80C51完全兼容并具備更高效能。N76E003內(nèi)嵌18K的Flash存儲區(qū),通常稱作APROM,用于
    發(fā)表于 12-11 08:00 ?12次下載
    <b class='flag-5'>N76E003</b>增強型8位8051內(nèi)核<b class='flag-5'>微控制器</b>的數(shù)據(jù)手冊免費下載

    N76E003 8051內(nèi)核微控制器的數(shù)據(jù)手冊免費下載

    N76E003為帶有flash的增強型8位8051內(nèi)核微控制器(1T工作模式),指令集與標準的80C51完全兼容并具備更高效能。
    發(fā)表于 03-04 08:00 ?37次下載
    <b class='flag-5'>N76E003</b> 8051內(nèi)核<b class='flag-5'>微控制器</b>的數(shù)據(jù)手冊免費下載

    N76E003的EEPROM問題解決方案:使用Data Flash模擬EEPROM

    N76E003的EEPROM問題解決方案:使用Data Flash模擬EEPROM(嵌入式開發(fā)與應用專業(yè)開學要買電腦嗎)-N76E003的EEPROM問題解決方案,官方文檔,找了很久才找到。這份文件
    發(fā)表于 07-30 09:28 ?29次下載
    <b class='flag-5'>N76E003</b>的EEPROM問題解決方案:使用Data Flash<b class='flag-5'>模擬</b>EEPROM

    基于Nuvoton 1T 8051的微控制器N76E003數(shù)據(jù)表

    基于Nuvoton 1T 8051的微控制器N76E003數(shù)據(jù)表
    發(fā)表于 11-03 09:43 ?5次下載

    N76E003ADC 多通道采樣

    首先讓我們來看看N76E003單片機的ADC工作方式,從下圖中可以看到ADCHS寄存決定當前使用哪一個通道的寄存。接下來我們再來看看具體的寄存
    發(fā)表于 12-04 11:51 ?30次下載
    <b class='flag-5'>N76E003</b>之<b class='flag-5'>ADC</b> 多通道采樣

    如何使用N76E003微控制器執(zhí)行串行通信

    在本文中,我們將學習如何使用 N76E003 微控制器執(zhí)行串行通信。
    發(fā)表于 08-09 17:34 ?3469次閱讀
    如何使用<b class='flag-5'>N76E003</b><b class='flag-5'>微控制器</b>執(zhí)行串行通信

    N76E003微控制器中文手冊

    N76E003為帶有flash的增強型8位8051內(nèi)核微控制器(1T工作模式),指令集與標準的80C51完全兼容并具備 更高效能。 N76E003內(nèi)嵌18K的Flash存儲區(qū),通常稱作APROM
    發(fā)表于 03-03 10:15 ?8次下載

    N76E003例程介紹

    電子發(fā)燒友網(wǎng)站提供《N76E003例程介紹.zip》資料免費下載
    發(fā)表于 12-21 09:45 ?1次下載