色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

通過電池電壓測量的例程學習ADC的使用

CHANBAEK ? 來源:魚香ROS ? 作者:小魚 ? 2023-07-03 10:57 ? 次閱讀

你好,我是愛吃魚香ROS的小魚。上面兩節通過LED和按鍵學習了GPIO的輸出和輸入。

但這種輸入和輸出只有兩種狀態HIGH或者LOW,我們稱這種為數字邏輯,這也是輸入輸出函數稱為數字輸入和數字輸出的原因。

但是電池的電壓是一個在一個范圍內不斷變化的值,明顯無法通過HIGHLOW來表示,所以本節我們學習使用ADC,將電壓值這個模擬信號轉換成數字信號

教程所使用硬件平臺為MicroROS學習板V1.0.0,可點擊閱讀原文購買及查看詳情

圖片

一、ADC介紹

ADC(analog to digital converter)模數轉換器是一種非常常見的外設,用于 將電壓等模擬信號轉換為數字形式 ,以便微控制器可以讀取和處理。

ADC在控制和監控應用中非常有用,因為大多數傳感器(例如溫度、壓力、力)都是輸出的模擬電壓,所以我們需要掌握ADC。

與ADC相對應的DAC——用于將數字信號轉換成模擬信號,比如將一段二進制的音樂文件轉換成一段連續的電壓信號播放出來就需要DAC。

二、電池電壓測量原理

在我們的開發板所使用的ESP32單片機上,自帶了ADC模塊,我們只需要將需要測量的模擬電壓接入相應引腳,接著調用ADC相關API即可讀取。

因為ADC原理是采用電壓比較方式進行測量,而我們的單片機的供電電壓為3.3V,所以測量的電壓范圍最大不能超過3.3V,但我們采用的電池電壓和板子的供電電壓分別是12V和5V的。

所以想要使用單片機測量電池電壓,那么就要想辦法將板子測量的電壓按照比例縮小即可,根據初中物理知識,串聯分壓原理,小魚就設計了這樣的電路。

串聯分壓,左邊接電機電壓輸入引腳,右側接地,R18是40.2千歐阻值的電阻,R19是10千歐的,假如此時VMOTOR的輸入電壓為5V,那么ESP_IO34的電壓就是

圖片

那么如果此時通過ADC測量出上的電壓,通過下面的等式就可以算出的電壓值。

圖片

三、Arduino ADC API

了解了原理,我們來看看Arduino為我們提供了哪些API可以直接獲取到引腳上的電壓。

3.1 設置ADC衰減系數(analogReadResolution)

這個函數用來設置ADC讀取時的衰減系數。

輸入到引腳的電壓在輸入到ADC之前可能會衰減。有 4 種可用的衰減選項,衰減越高,可測量的輸入電壓就越高,為了能夠測量到12V以上的電壓,我們采用最高的衰減比-ADC_11db。

typedef enum {
    ADC_0db,
    ADC_2_5db,
    ADC_6db,
    ADC_11db,
} adc_attenuation_t;

3.2 讀取ADC值(analogRead)

此函數用于獲取給定引腳或ADC通道的ADC原始值,默認是12位分辨率,所以這個讀出來的值的范圍就是0-2^12,也就是最大4096。

uint16_t analogRead(uint8_t pin);
  • pin 要讀取ADC值的GPIO 引腳

返回值:ADC原始值

3.3 讀取電壓值(analogReadMillivolts)

此函數用于獲取給定引腳或ADC 通道的 ADC 值(以毫伏為單位)。

uint32_t analogReadMilliVolts(uint8_t pin);
  • pin 要讀取ADC值的GPIO 引腳

返回值:此函數將以毫伏為單位返回模擬值。

四、編寫程序

利用上面的三個API和計算公式就可以實現電壓的測量,新建example04_adc工程,在main.cpp輸入代碼。

/**
 * @file main.cpp
 * @author fishros@foxmail.com
 * @brief 4.電池電壓測量-學會使用ADC
 * @version 0.1
 * @date 2023-01-04
 *
 * @copyright Copyright(c) fishros.com  2023
 *
 */
#include < Arduino.h >

void setup()
{
  Serial.begin(115200);
  pinMode(34, INPUT);
  analogSetAttenuation(ADC_11db);
}

void loop()
{
  int analogValue = analogRead(34);                     // 讀取原始值0-4096
  int analogVolts = analogReadMilliVolts(34);           // 讀取模擬電壓,單位毫伏
  float realVolts = 5.02 * ((float)analogVolts * 1e-3); // 計算實際電壓值

  Serial.printf("ADC analog value = %d\\n", analogValue);
  Serial.printf("ADC millivolts value = %d\\n", analogVolts);
  Serial.printf("realVolts value = %f\\n", realVolts);
  delay(100);
}

五、測試

根據第三節中的原理圖,我們測量的是VMOTOR的電壓,VMOTOR是通過一個跳線帽選擇連接到5V還是12V上的,詳情可以看下面的原理圖。

圖片

對應板子上的位置

圖片

這里我們把跳線帽調整到左側,讓VMOTOR和5V連接,接著打開串口觀察測量到的電壓值。

圖片

可以看到我們成功的測量到了實際的電壓值為5.045V,符合正常電壓值。

如果你有整臺FishBot小車,可以將跳線帽調整到12V的位置,打開電池電源開關,看看是否可以正常測量到12V的電壓。

六、總結

本節我們通過電池電壓測量的例程,學習了ADC的使用,電池電壓測量對我們機器人來說是非常重要的,當電壓低的時候可以進行自動返回充電,然后等充電完成后再繼續工作。

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

    關注

    98

    文章

    6507

    瀏覽量

    544913
  • 電池電壓
    +關注

    關注

    0

    文章

    195

    瀏覽量

    11732
  • GPIO
    +關注

    關注

    16

    文章

    1205

    瀏覽量

    52155
  • ROS
    ROS
    +關注

    關注

    1

    文章

    278

    瀏覽量

    17024
收藏 人收藏

    評論

    相關推薦

    MCU ADC如何測量超過6V的VCC電池電壓呢?

    假設MCU的供電是3.3V,ADC能夠測量電壓范圍是0-3.3V,如果要測量電池電壓6V的這
    的頭像 發表于 04-07 09:04 ?2308次閱讀

    實驗板用鋰電池供電,怎么測量供電電壓?

    我現在用了一個實驗板,通過電池供電,STM32F103的單片機,通18650的圓柱電池,通過升壓達到5V,讓設備工作,怎么測量一下1865
    發表于 04-24 08:27

    請教哪位大俠做過電池內阻測量 求助

    大俠好是這樣的,我現在手上有個案子,測試手機電池的內阻;我一直沒做過電池這塊。查了下資料;交流測量法應該可以滿足這個測試案子;但是就是找不到測試用電路圖;只是原理。還請哪位大俠給個電路參考下;還有就是測試到的
    發表于 12-10 16:19

    STM8L的ADC測量VDD電壓詳解+例程

    為1.225V。 ADC選擇內部參考電壓作為測量通道,可以測量到內部電壓的轉化值Nadc。 此時,已經VDD的轉化值4096,VREFIN
    發表于 07-02 07:33

    測量電池電壓,請問有辦法在發射訊號時,去量測ADC值嗎?

    HI ALL, 目前我有一設備是SLEEP DEVICE ,我在測量電池電壓發現個問題,在發射訊號時,實際電流會很高,會導致輸入電池電壓會被
    發表于 08-09 06:12

    adc測量電壓沒有用到adc引腳和通道

    想要ADC測量電池電壓,參考了半天例程,寫出來也能電壓得到3.3V,但是我最后發現竟然沒有用到
    發表于 11-16 08:50

    怎么使用ADC Delsig來測量系統中車載電池電池容量

    你好,在我的設計中,我試圖使用ADC Delsig來測量系統中車載電池電池容量,通過使用PSoC中的A
    發表于 03-26 16:29

    如何通過電池管理IC提升電池性能?

    或放松狀態的情況下學習容量。溫度測量輸入包括其自己的芯片讀數以及兩個外部熱敏電阻。通過結合所有這些因素,該算法消除了電池接近空電壓以及庫侖計
    發表于 03-16 11:13

    新一代BMS電壓和電流測量

    用于通過電阻抗譜分析來計算充電狀態和運行狀況狀態。通過測量電池電壓、電流和功率來計算電池阻抗,
    發表于 04-28 15:14

    通過電池電壓測量例程學習ADC模數轉換器的使用

    5.045V,符合正常電壓值?! ∪绻阌姓_FishBot小車,可以將跳線帽調整到12V的位置,打開電池電源開關,看看是否可以正常測量到12V的電壓?! ×?、總結  本節我們
    發表于 03-28 14:39

    電池電壓過低及過電流保護電路

    電池電壓過低及過電流保護電路原理圖
    發表于 11-03 11:07 ?2830次閱讀
    <b class='flag-5'>電池</b><b class='flag-5'>電壓</b>過低及<b class='flag-5'>過電</b>流保護電路

    延長電池壽命的微功率浪涌阻斷器過電壓過電流保護

    延長電池壽命的微功率浪涌阻斷器過電壓過電流保護
    發表于 04-20 17:12 ?10次下載
    延長<b class='flag-5'>電池</b>壽命的微功率浪涌阻斷器<b class='flag-5'>過電壓</b>和<b class='flag-5'>過電</b>流保護

    RT1064學習筆記(1)--ADC例程(ADC Demo)

    RT1064之ADC例程Ps:本例程主要作用是,展示如何使用QTIMER模塊來實現正交解碼。主板為:逐飛RT1064 + 母板
    發表于 11-14 17:36 ?17次下載
    RT1064<b class='flag-5'>學習</b>筆記(1)--<b class='flag-5'>ADC</b><b class='flag-5'>例程</b>(<b class='flag-5'>ADC</b> Demo)

    通過電壓測量估算電池剩余容量不準確

    實施電池電量計可以通過多種方式完成,包括使用電壓測量或庫侖計數。雖然使用電壓測量一直是一種流行的
    的頭像 發表于 03-10 10:37 ?2670次閱讀
    僅<b class='flag-5'>通過電壓</b><b class='flag-5'>測量</b>估算<b class='flag-5'>電池</b>剩余容量不準確

    通過電壓電平轉換功能實現智能電池儲能系統

    電子發燒友網站提供《通過電壓電平轉換功能實現智能電池儲能系統.pdf》資料免費下載
    發表于 09-05 09:36 ?0次下載
    <b class='flag-5'>通過電壓</b>電平轉換功能實現智能<b class='flag-5'>電池</b>儲能系統
    主站蜘蛛池模板: 国产亚洲精品A久久777777| 国产精品国产三级国AV在线观看| 青青草国产精品久久| 快播成电影人网址| 精品精品国产自在现拍| 国产亚洲欧洲日韩在线观看| 国产成人精品综合久久久| 成年人免费观看视频网站| av56788成 人影院| china chinese中国人玩| 99久久99久久精品免费看子| 92国产精品午夜免费福利视频| 18禁国产精品久久久久久麻豆| 在教室轮流被澡高H林萌| 一本之道高清在线3线观看| 一本大道手机在线看| 曰本aaaaa毛片午夜网站| 伊人国产精品| 2020国产成人精品视频人| 4388成人| free性欧美xxx狂欢| 苍井空教师BD在线观看全集| 第一会所欧美无码原创| 国产激情文学| 国产亚洲国际精品福利| 精品国产免费人成视频| 久久久久影视| 年轻夫妇韩剧中文版免费观看| 欧美日韩久久久精品A片| 色姐妹久久综合在线av| 无遮挡h肉3d动漫在线观看| 性吧 校园春色| 夜色视频社区| 99久久蜜臀亚洲AV无码精品| 草久热的视频在线观看| 国产成人理在线观看视频| 国产最新精品亚洲2021不卡| 久久国产av偷拍在线| 嗯啊好爽视频| 日韩在线视频www色| 亚洲乱码AV久久久久久久|