日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

esp8266原理图_ESP8266_22基于自身ADC的电压采样

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 esp8266原理图_ESP8266_22基于自身ADC的电压采样 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這一節內容比較簡單,就是電壓采樣,在傳統設計中應用還是比較多的。首先看下支持ADC采樣的管腳,找到你手里模塊的原理圖,我的如下所示:

?????? 如上所示,U1的2腳為ADC管腳,而且整個模塊有且僅有這一個電壓采集管腳。CDS1是一個光敏電阻,它和R1組成一個分壓電路。不同強度的光照在CDS1上時,會導致它的阻值變化,最終導致ADC管腳上的電壓發生變化。

?????? 那么,關于ESP8266的ADC,相關的性能參數有哪些?

?????? 可以打開手冊:2c-esp8266_sdk_api_guide_cn_v1.5.4,在第26頁,有幾個ADC相關的函數,我們截取其中一個,看一下:

?????? 首先是電壓的輸入范圍,也就是ADC的量程:0~1.0V,相比傳統單片機的0~3.3V小了很多。

?????? 然后是分辨率:1/1024V。從這個參數可以知道,這是個10位的AD,只是不知道為何,量程這么小。

?????? 接著是三點注意事項:

?????? 1、ADC讀取管腳電壓時,需確保管腳連接了外部電路,且沒有超過量程。

?????? 這一點很好理解,根據輸入電壓設計相應的分壓電路,接過來就行了。

?????? 2、讀取電壓之前,需要修改esp_init_data_default.bin文件中的第107byte的值,改為VDD3P3管腳3和4上的真實電源電壓值。

?????? 先說修改esp_init_data_default.bin文件,這個其實很簡單,因為這個文件是我們燒錄到ESP8266里面的,所以只要找到文件位置,用修改flash的函數改一下就行。

接下來這句話可能理解起來有點繞,這個VDD3P3管腳3和4是啥?模塊上沒有這兩個管腳啊~

還記得我在前言里面提到過的,ESP8266是樂鑫的芯片,安信可做的模組封裝。所以本文上面的原理圖截圖其實是模塊的管腳分布,并不是真實的芯片管腳。真實的模塊內部的芯片原理圖是什么樣?我這里截取其中一部分,看一下:

?????? 懂?很簡單。

?????? 3、第107byte的值的單位是0.1V,有效取值范圍是18~38.

?????? 這個就很好理解了,第二點已經說了,第107byte寫入的是VDD3P3管腳的電壓。而我們常用的供電電壓是3.3V,所以要寫入的值是33。因為單位是0.1V,33*0.1V得到3.3V。

?????? 接下來看一下這三個函數,system_adc_read() 剛才已經看了,它的功能就是讀取ADC電壓值,很簡單,直接調用讀取就行。

?????? 然后是system_get_vdd33(),我們看一下截圖:

?????? 簡單來說,是用來測量VDD3P3管腳上的電壓的,可以理解為獲取當前的工作電壓。工作前提必須要確保ADC管腳懸空,同時確保esp_init_data_default.bin的第127byte值為0xFF。

還有一個函數,快速高精度的AD采樣,因為篇幅比較長,這里不截圖了,我總結一下。先看函數結構:

system_adc_read_fast(uint16 *adc_addr, uint16 adc_num, uint8 adc_clk_div)

????????注意事項和函數system_get_vdd33()類似,要限制輸入電壓值、修改107byte的值為VDD3P3,不同的地方在于,使用快速采樣函數的時候,要關閉wifi和所有中斷。

????????參數1:uint16 *adc_addr,ADC連續采樣輸出的地址指針

????????參數2:uint16 adc_num,ADC連續采樣的點數,范圍1~65535

????????參數3:uint8 adc_clk_div,ADC工作時鐘=80M/ adc_clk_div,輸入范圍8~32,建議值8.

????????假設我們要連續采樣50次,那么可以定義一個50個元素的數組,把數組首地址給參數1,數組大小給參數2,參數3沒有特殊情況的話默認輸入8.

????????所以,用過帶DMA功能的ADC的童鞋,會發現用法很相似。

????????接下來進入演示部分,以之前的串口程序為模版,增加AD采樣功能,得到的AD值通過串口助手打印輸出。代碼比較簡單,直接看一下主函數部分:

void ICACHE_FLASH_ATTRuser_init(void){ partition_item_t partition_item; uint16 vdd33 = 33; uint32 flash_r_w[1024]; uart_init(BIT_RATE_115200, BIT_RATE_115200); spi_flash_read(0x1fc*4096, flash_r_w, 4096); flash_r_w[107/4] = flash_r_w[107/4] & !(0xff<107% flash_r_w[107/4] = flash_r_w[107/4] | 33; spi_flash_erase_sector(0x1fc); spi_flash_write(0x1fc*4096,flash_r_w,4096); system_init_done_cb(system_done);}>((107%4)*8));\n??? flash_r_w[107/4] = flash_r_w[107/4] | 33;\n??? spi_flash_erase_sector(0x1fc);\n??? spi_flash_write(0x1fc*4096,flash_r_w,4096);\n\n??? system_init_done_cb(system_done);\n}"}">

?????? ??前幾行比較簡單,就是串口初始化。

??????接下來就到了修改esp_init_data_default.bin文件中的地方,該文件的地址為什么是0x1fc?

?????? 第二節講程序燒錄的時候,曾經說過每個文件的地址,如圖:

?????? 我的模塊是16Mbit的,esp_init_data_default.bin文件的起始地址是0x1fc000,0x1000等于10進制的4096,所以0x1fc000=0x1fc*4096。

?????? 而我們要修改的是該文件的第107byte,而讀寫flash必須要4字節對齊,所以后面對107做了一些換算。理解不了的建議看一下第八節。

?????? VDD33是前面定義的變量,值為33,對應3.3V的供電電壓。

?????? 很簡單吧?

?????? 系統初始化完成的回調函數里,我定義了一個軟件定時器,每隔3秒讀取一次ADC的電壓值,并通過串口打印出來:

void system_done(){ wifi_station_disconnect(); os_timer_disarm(&LED_timer); os_timer_setfn(&LED_timer, (os_timer_func_t *)ADC_OUTPUT, NULL); os_timer_arm(&LED_timer, 3000, 1); }void ADC_OUTPUT(){ static adc_value = 0; adc_value = system_adc_read(); os_printf("adc_value is %d\n", adc_value);}

?????? 細心的人會發現定義定時器之前有一行代碼:

wifi_station_disconnect();

?????? 這是因為我的模塊之前保存了某個環境下的wifi賬號、密碼。即便主函數里沒有要求模塊連接wifi,上電后它還是會自動連接,并打印相關信息。所以,加入這一行代碼,讓它不再連接。

?????? 這就完了?是的,so easy!

程序修改完成,保存、清理、編譯、下載一條龍,然后重新上電。這里借助串口助手來查看效果。設備上電之后,效果如下所示:

?????? 如圖所示,上電后開始輸出ADC采集到的電壓值,前面兩個是200多,后面我用手擋住光敏電阻,導致光敏電阻阻值變大,R1分壓得到的電壓變小,只有40多。

?????? 實驗完成。

鏈接:

https://pan.baidu.com/s/1yueZQpULiDklHK22TPqsqA

提取碼:tcfa

ESP8266_前言

ESP8266_01搭建開發環境

ESP8266_02程序的編譯與下載

ESP8266_03 SDK與Makefile的基本用法

ESP8266_04管腳控制與軟件定時器

ESP8266_05 ESP8266有幾個串口?

ESP8266_06硬件定時器與IO中斷

ESP8266_07基于PWM的呼吸燈

ESP8266_08基于flash的數據掉電保護

ESP8266_09基于IIC控制的OLED屏幕

ESP8266_10 ESP8266的STATION模式

ESP8266_11 ESP8266的UDP廣播

ESP8266_12 ESP8266客戶端模式下的TCP通信

ESP8266_13服務器端模式下的TCP通信

ESP8266_14 SOFTAP模式下的服務器端和客戶端ESP8266_15天氣預報之TCP的GET操作ESP8266_16天氣預報之JSON數據的生成與解析ESP8266_17簡單網絡時間協議-SNTP

ESP8266_18 MQTT協議接入ONENET平臺

ESP8266_19 MQTT協議接入ONENET平臺_訂閱主題

ESP8266_20 基于ONENET平臺的數據上傳之TCP的POST操作

ESP8266_21基于ESP8266的一鍵配網

總結

以上是生活随笔為你收集整理的esp8266原理图_ESP8266_22基于自身ADC的电压采样的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。