精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

零基礎開發小安派-Eyes-S1外設篇——ADC

AIoT行業洞察 ? 來源: AIoT行業洞察 ? 作者: AIoT行業洞察 ? 2024-11-27 16:43 ? 次閱讀

AiPi-Eyes-S1是安信可開源團隊專門為Ai-M61-32S設計的一款開發板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的外設接口,具體包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太網 (EMAC)、SD/MMC(SDH)、SPI、UARTI2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。

AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預留TF卡座,并且引出USB接口,可接入USB攝像頭。

從零開始學習小安派:

1、零基礎開發小安派-Eyes-S1【入門篇】——初識小安派-Eyes-S1

2、零基礎開發小安派-Eyes-S1【入門篇】——安裝VMware與Ubuntu

3、入門篇:零基礎開發小安派-Eyes-S1——新建工程并燒錄調試

4、零基礎開發小安派-Eyes-S1入門篇——Win下SSH連接Linux

5、零基礎開發小安派-Eyes-S1【入門篇】——Samba共享文件夾

6、零基礎開發小安派-Eyes-S1【入門篇】——工程文件架構

7、零基礎開發小安派-Eyes-S1【外設篇】——GPIO 輸入輸出

8、零基礎開發小安派-Eyes-S1【外設篇】——GPIO中斷編程

9、零基礎開發小安派-Eyes-S1【外設篇】——PWM

10、零基礎開發小安派-Eyes-S1【外設篇】——UART

11、零基礎開發小安派-Eyes-S1【外設篇】——I2C

ADC 指的是模數轉換器Analog-to-Digital Converter),它是一種用于將模擬信號轉換為數字信號電子設備或電路。

模擬信號是連續變化的信號,可以取無限個可能的值,而數字信號則是離散的,只能表示有限個數值。ADC 的作用就是將模擬信號轉換為離散的數字信號,以便數字電子系統進行處理、存儲和傳輸。

ADC 的基本工作原理是通過一系列的采樣和量化過程來實現模擬到數字的轉換:

1.采樣(Sampling):ADC 根據一定的時間間隔,從模擬信號中獲取一系列離散的采樣點。采樣率決定了采樣點的密度,較高的采樣率可以更精確地表示原始模擬信號。

2.量化(Quantization):采樣得到的模擬信號樣本通常是連續的,量化則將每個采樣點映射為一個特定的數字值。量化過程將連續的模擬信號離散化,并分配給每個樣本一個數字值。

3.編碼(Encoding):編碼將量化后的數字值表示為二進制形式,以便于數字系統處理。常見的編碼方式包括無符號二進制、補碼和格雷碼等。

總的來說,生活中會有許多“模擬量”,如一段從低音到高音的音頻,在數字信號中,不能簡單的把低音表示 0,高音表示 1,這樣歌曲中間的音頻變化是空的,沒有小數點這些概念來顯示他們從 0 到 0.5 到 1 的過程。所以需要有個模數轉換的過程,稱為 ADC。比如用 12 位精度的 ADC 來表示這段音頻,低音就 0,高音就是 2^12 次也就是 4096,那么在這段音頻中我們就可以通過 0-4096 的過程來判斷音頻的高和低,具體到高到有多高,低到有多低,而 ADC 的精度越高,如 16 位,就可達到 0-65535 的范圍。

一、了解小安派-Eyes-S1 的 ADC

芯片內置一個 12bits 的逐次逼近式模擬數字轉換器 (ADC),支持 12 路外部模擬輸入和若干內部模擬信號選擇。ADC 可以工作在 4 種模式下,轉換結果為 12/14/16bits 左對齊模式。

ADC 擁有深度為 32 字節的 FIFO,支持多種中斷,支持 DMA 操作。ADC 除了用于普通模擬信號測量外,還可以用于測量供電電壓,此外 ADC 還可以通過測量內/外部二極管電壓用于溫度檢測

具有 12 路外部模擬通道,對應的 GPIO 如下:

wKgZO2dG26iAU49WAACKa3-cOIA915.jpg

此外,還具有 2 路 DAC 內部通道,1 路 VBAT/2 通道,1 路 TSEN 通道

adc clock div

對 adc 時鐘再一次進行分頻。分頻后的時鐘必須小于等于 500K。

ADC CLK = CLK_SOURCE/CLK_DIV/adc_clk_div

#define ADC_CLK_DIV_4 1
#define ADC_CLK_DIV_8 2
#define ADC_CLK_DIV_12 3
#define ADC_CLK_DIV_16 4
#define ADC_CLK_DIV_20 5
#define ADC_CLK_DIV_24 6
#define ADC_CLK_DIV_32 7

adc resolution

adc 位數,可以選擇 12B、14B、16B。其中 14B 和 16B 自帶過采樣處理

#define ADC_RESOLUTION_12B 0
#define ADC_RESOLUTION_14B 2
#define ADC_RESOLUTION_16B 4

adc vref

adc 內置參考電壓選擇,可以選擇 2.0 V 或者 3.2V

#define ADC_VREF_3P2V 0
#define ADC_VREF_2P0V 1

二、結構體與 API

struct bflb_adc_config_s

說明:adc 初始化配置結構體。

struct bflb_adc_config_s {
uint8_t clk_div;
uint8_t scan_conv_mode;
uint8_t continuous_conv_mode;
uint8_t differential_mode;
uint8_t resolution;
uint8_t vref;
};

wKgZPGdG26iAYNM8AABcrcIM9Qk711.jpg

掃描模式:可按照用戶指定通道個數和順序逐個轉換,結果推入 ADC 的 FIFO

連續轉換模式:允許 ADC 連續不斷地執行模數轉換,只需要調用一次 ADC 啟動

差分模式:ADC 支持單端輸入模式和差分模式,選擇單端時負極輸入通道選擇 GND

struct bflb_adc_channel_s

說明:配置 adc 通道時使用。

struct bflb_adc_channel_s {
uint8_t pos_chan;
uint8_t neg_chan;
};

wKgZO2dG26iASZCHAAAurtun7TA777.jpg

struct bflb_adc_result_s

說明:adc 標準轉換結果

struct bflb_adc_result_s {
int8_t pos_chan;
int8_t neg_chan;
int32_t value;
int32_t millivolt;
};

wKgZO2dG26mAeiVCAABDhS8-KFE513.jpg

bflb_adc_init

說明: 初始化 adc。adc 使用之前需要開啟 adc ip 時鐘、設置 adc 時鐘源和分頻值、選擇使用的 gpio 為 analog 模式。

void bflb_adc_init(struct bflb_device_s *dev, const struct bflb_adc_config_s *config);

wKgZPGdG26mAB9PzAAAnpLjrPOs269.jpg

bflb_adc_deinit

說明: 反初始化 adc。

void bflb_adc_deinit(struct bflb_device_s *dev);

wKgZO2dG26mAKCvIAAANT31F5oA323.jpg

bflb_adc_link_rxdma

說明: adc dma 功能開關。

void bflb_adc_link_rxdma(struct bflb_device_s *dev, bool enable);

wKgZO2dG26qAIxCyAAAoMn2lOAw772.jpg

bflb_adc_channel_config

說明: 配置 adc 通道。

int bflb_adc_channel_config(struct bflb_device_s *dev, struct bflb_adc_channel_s *chan, uint8_t channels);

wKgZPGdG26qARi9nAAA08zRIwuc521.jpg

bflb_adc_start_conversion

說明: 啟動 adc 轉換。連續轉換模式下只需要調用一次。

void bflb_adc_start_conversion(struct bflb_device_s *dev);

wKgZO2dG26uAXfS2AAAM22C5UR4151.jpg

bflb_adc_stop_conversion

說明: 停止 adc 轉換。

void bflb_adc_stop_conversion(struct bflb_device_s *dev);

wKgZPGdG26uAWVoKAAANMmHi4s4067.jpg

bflb_adc_get_count

說明: 獲取 adc 轉換個數。

uint8_t bflb_adc_get_count(struct bflb_device_s *dev);

wKgZO2dG26yANY1YAAAplaSUgB0901.jpg

bflb_adc_read_raw

說明: 讀取一次 adc 轉換值。

uint32_t bflb_adc_read_raw(struct bflb_device_s *dev);

wKgZPGdG26yACRF0AAAmEHGPOBw679.jpg

bflb_adc_rxint_mask

說明: adc 轉換完成中斷開關。

void bflb_adc_rxint_mask(struct bflb_device_s *dev, bool mask);

wKgZO2dG262AY6o_AAAlqG3F6Qs515.jpg

bflb_adc_errint_mask

說明: adc 錯誤中斷開關。

void bflb_adc_errint_mask(struct bflb_device_s *dev, bool mask);

wKgZPGdG262AXasnAAAni2EgIps897.jpg

bflb_adc_get_intstatus

說明: adc 中斷標志。

uint32_t bflb_adc_get_intstatus(struct bflb_device_s *dev);

wKgZO2dG262AQuYjAAAnUO2VkYY322.jpg

返回值如下:

ADC_INTSTS_NEG_SATURATIONADC_INTSTS_NEG_SATURATION
ADC_INTSTS_FIFO_UNDERRUN
ADC_INTSTS_FIFO_OVERRUN
ADC_INTSTS_ADC_READY

bflb_adc_int_clear

說明: 清除 adc 中斷標志。

void bflb_adc_int_clear(struct bflb_device_s *dev, uint32_t int_clear);

wKgZPGdG266AcCTOAAAnZm9P1Y8718.jpg

int_clear 可以填入以下參數:

ADC_INTCLR_NEG_SATURATIONADC_INTCLR_POS_SATURATION
ADC_INTCLR_FIFO_UNDERRUN
ADC_INTCLR_FIFO_OVERRUN
ADC_INTCLR_ADC_READY

bflb_adc_parse_result

說明: 對 adc 轉換結果進行解析。

void bflb_adc_parse_result(struct bflb_device_s *dev, uint32_t *buffer, struct bflb_adc_result_s *result, uint16_t count);

wKgZO2dG266AB5jeAAA5nrVYQFg218.jpg

bflb_adc_tsen_init

說明: 初始化 adc tsen 模塊。

void bflb_adc_tsen_init(struct bflb_device_s *dev, uint8_t tsen_mod);

wKgZO2dG26-ADmzQAAAn2avgO8E073.jpg

bflb_adc_tsen_get_temp

說明: 獲取 adc tsen 模塊采集的溫度。

float bflb_adc_tsen_get_temp(struct bflb_device_s *dev);

wKgZPGdG26-AV2-kAAAmlqrczkc748.jpg

bflb_adc_vbat_enable

說明: 開啟 vbat 。

void bflb_adc_vbat_enable(struct bflb_device_s *dev);

wKgZO2dG27CAIXlNAAAPDDEZkpU600.jpg

bflb_adc_vbat_disable

說明: 關閉 vbat。

void bflb_adc_vbat_disable(struct bflb_device_s *dev);

wKgZPGdG27CAZ3aiAAAOj1drrTw165.jpg

三、示例——連續讀取 IO 的 ADC 值,ADC 轉換完成中斷

Main

#include "bflb_adc.h"
#include "bflb_mtimer.h"
#include "board.h"
#include "bflb_gpio.h"
//頭文件
struct bflb_device_s *adc;
//外設結構體設置
void My_adc_gpio_init()
{
struct bflb_device_s *gpio;
gpio = bflb_device_get_by_name("gpio");
bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_ANALOG | GPIO_SMT_EN | GPIO_DRV_0);
}
//設置需要AD采集的IO腳,對應的通道和IO要匹配
volatile uint32_t raw_data;
//接收AD值變量
void adc_isr(int irq, void *arg)
{
uint32_t intstatus = bflb_adc_get_intstatus(adc);
if (intstatus & ADC_INTSTS_ADC_READY) {
bflb_adc_int_clear(adc, ADC_INTCLR_ADC_READY);
raw_data= bflb_adc_read_raw(adc);
}
}
//中斷函數,清除中斷標志位,將讀取的AD變量賦給raw_data
int main(void)
{
board_init();
My_adc_gpio_init();
adc = bflb_device_get_by_name("adc");
/* adc clock = XCLK / 2 / 32 */
struct bflb_adc_config_s cfg;
cfg.clk_div = ADC_CLK_DIV_32;
cfg.scan_conv_mode = false;
cfg.continuous_conv_mode = false;
cfg.differential_mode = false;
cfg.resolution = ADC_RESOLUTION_16B;
cfg.vref = ADC_VREF_3P2V;
//adc結構體配置
struct bflb_adc_channel_s chan;
chan.pos_chan = ADC_CHANNEL_9;
chan.neg_chan = ADC_CHANNEL_GND;
//通道配置,單端模式下neg選擇GND,pos注意對應IO口的通道
bflb_adc_init(adc, &cfg);
bflb_adc_channel_config(adc, &chan, 1);
bflb_adc_rxint_mask(adc, false);
bflb_irq_attach(adc->irq_num, adc_isr, NULL);
bflb_irq_enable(adc->irq_num);
//中斷使能配置
while (1) {
struct bflb_adc_result_s result;
bflb_adc_start_conversion(adc);
bflb_adc_parse_result(adc, (uint32_t *)&raw_data, &result, 1);
printf("rnpos chan %drnADC Value = %drnCurrent Voltage = %d mvrn", result.pos_chan, result.value, result.millivolt);
bflb_adc_stop_conversion(adc);
bflb_mtimer_delay_ms(1000);
//主函數讀取AD值并轉化為電壓
}
}

四、效果

wKgZO2dG27CAYVZdAAB9M3wUA7g121.jpg

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    454

    文章

    50444

    瀏覽量

    421922
  • adc
    adc
    +關注

    關注

    98

    文章

    6443

    瀏覽量

    544129
  • 模擬信號
    +關注

    關注

    8

    文章

    1119

    瀏覽量

    52406
  • 開源
    +關注

    關注

    3

    文章

    3256

    瀏覽量

    42412
收藏 人收藏

    評論

    相關推薦

    零基開發小安-Eyes-S1 外設 ——I2C

    。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預留TF卡座,并且引出USB接口,可接入USB攝像頭。 從開始學習小安
    的頭像 發表于 11-27 16:39 ?43次閱讀
    <b class='flag-5'>零基</b>礎<b class='flag-5'>開發</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b> <b class='flag-5'>外設</b><b class='flag-5'>篇</b> ——I2C

    小安 AiPi-Eyes-R2 玩植物大戰僵尸

    - Eyes-R1 帶外置 ES8388 音頻芯片,支持兩路音頻輸入輸出。小安 - Eyes-R2 采用內置 CodeC,支持單路音頻輸入輸出。 如果是編譯帶 8388
    的頭像 發表于 11-06 16:10 ?152次閱讀
    用<b class='flag-5'>小安</b><b class='flag-5'>派</b> AiPi-<b class='flag-5'>Eyes</b>-R2 玩植物大戰僵尸

    零基開發小安-Eyes-S1【入門】——工程文件架構

    -Eyes-S1【入門】——初識小安-Eyes-S12、零基
    的頭像 發表于 11-06 16:10 ?101次閱讀
    <b class='flag-5'>零基</b>礎<b class='flag-5'>開發</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入門<b class='flag-5'>篇</b>】——工程文件架構

    零基開發小安-Eyes-S1外設】——PWM

    】——工程文件架構7、零基開發小安-Eyes-S1外設
    的頭像 發表于 11-06 16:10 ?95次閱讀
    <b class='flag-5'>零基</b>礎<b class='flag-5'>開發</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【<b class='flag-5'>外設</b><b class='flag-5'>篇</b>】——PWM

    零基開發小安-Eyes-S1外設——GPIO中斷編程

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預留TF卡座,并且引出USB接口,可接入USB攝像頭。 產品資料:https://docs.ai-thinker.com/eyes
    的頭像 發表于 10-29 14:56 ?686次閱讀
    <b class='flag-5'>零基</b>礎<b class='flag-5'>開發</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b><b class='flag-5'>外設</b><b class='flag-5'>篇</b>——GPIO中斷編程

    零基開發小安-Eyes-S1外設——GPIO 輸入輸出

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預留TF卡座,并且引出USB接口,可接入USB攝像頭。 從開始學習小安
    的頭像 發表于 10-25 13:50 ?973次閱讀
    <b class='flag-5'>零基</b>礎<b class='flag-5'>開發</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b><b class='flag-5'>外設</b><b class='flag-5'>篇</b>——GPIO 輸入輸出

    開發教程 零基開發小安-Eyes-S1入門——Win下SSH連接Linux

    AiPi-Eyes-S1 是安信可開源團隊專門為Ai-M61-32S設計的一款開發板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的
    的頭像 發表于 09-24 14:31 ?245次閱讀
    <b class='flag-5'>開發</b>教程 <b class='flag-5'>零基</b>礎<b class='flag-5'>開發</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>入門<b class='flag-5'>篇</b>——Win下SSH連接Linux

    功德+1,用小安-Eyes-S1做一個電子木魚

    2024積德累功,心想事成!接下來 看看如何用小安-Eyes-S1做一個電子木魚 。 01、GUI-Guider 頁面設計 先新建一個工程。 直接進入 UI 設計界面,這里用到了兩個組件, 一個是圖片按鈕,一個是文本框 。 先
    的頭像 發表于 01-16 14:33 ?692次閱讀
    功德+<b class='flag-5'>1</b>,用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個電子木魚

    如何用小安-Eyes-S1做一個電子木魚?

    2024年的第一教程來了,本篇學習如何添加LVGL事件,并制作完成一個電子木魚(小美苦苦哀求,我略微出手而已)。祝大家2024積德累功,心想事成!接下來看看如何用小安-Eyes-S1
    的頭像 發表于 01-13 15:18 ?970次閱讀
    如何用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個電子木魚?

    用安信可的小安小安,DIY個簡單的CC表

    本作品由安信可社區用戶 bzhou830 制作 原貼地址:【DIY電子作品】電壓與電流CC表 基于小安AiPi-Eye-S1 匯總 https://bbs.ai-thinker.com
    的頭像 發表于 12-25 17:07 ?655次閱讀
    用安信可的<b class='flag-5'>小安</b><b class='flag-5'>派</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>,DIY個簡單的CC表

    小安DIY個簡單的CC表

    Power-Z 上使用的是 INA226,正好手上有這個芯片。那么搭配小安驚艷的屏幕應該能實現出來一個高顏值的CC表。打開原理圖可以看到S1正好預留了一個I2C的接口,完美
    的頭像 發表于 12-22 18:15 ?1623次閱讀
    用<b class='flag-5'>小安</b><b class='flag-5'>派</b>DIY個簡單的CC表

    入門3:零基開發小安-Eyes-S1——新建工程并燒錄調試

    01 新建工程文件 1、復制helloworld工程 2、將工程移動到AiPi-Open-Kits下 3、修改helloworld文件夾下的Makefile文件 Makefile文件的修改一般只修改
    的頭像 發表于 12-12 16:35 ?541次閱讀
    入門<b class='flag-5'>篇</b>3:<b class='flag-5'>零基</b>礎<b class='flag-5'>開發</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>——新建工程并燒錄調試

    基于小安Eyes-S1開發板新建工程并燒錄調試

    Makefile文件的修改一般只修改編譯路徑,make文件作為建立編譯關系和依賴,我們所有的demo編譯都依賴SDK
    的頭像 發表于 12-11 11:27 ?588次閱讀
    基于<b class='flag-5'>小安</b><b class='flag-5'>派</b><b class='flag-5'>Eyes-S1</b><b class='flag-5'>開發</b>板新建工程并燒錄調試

    小安Arduino開發板 ,全新支持以太網口

    前面幾款小安派出來的時候,經常有粉絲詢問是否支持Arduino?其它款小安也是支持的,大家可以去安信可社區搜索查看,小安-UNO-ET4
    的頭像 發表于 12-06 16:00 ?752次閱讀
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>Arduino<b class='flag-5'>開發</b>板 ,全新支持以太網口

    小安-UNO-ET485 Arduino開發板簡介

    前面幾款小安派出來的時候,經常有粉絲詢問是否支持Arduino?其它款小安也是支持的,大家可以去安信可社區搜索查看,小安-UNO-ET4
    的頭像 發表于 12-03 09:58 ?911次閱讀
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-UNO-ET485 Arduino<b class='flag-5'>開發</b>板簡介