藍牙心率防水運動手環 ——瘋殼·智能穿戴開發系列 電池電量檢測 1 ADC 簡介 ADC(Analog-to-Digital Converter),模/數轉換器或者模數轉換器,是指將連續變化的模擬信號轉換為離散的數字信號的器件。 我們 DA14580 集成一個高速超低功耗的 10 位通用模數轉換器?梢怨ぷ饔趩味四J揭部梢怨ぷ饔诓罘帜J。ADC 模塊有一個 1.2V 的電壓校準器,作為滿量程的參考電壓。 該 ADC 模塊是 10 位動態模數轉換,轉換時間為 65ns;最大的采樣率為3.3MHz;超低功耗(在 100KHz 的采樣速率下典型供電電流為 5uA);有單端與差分兩個輸入比例;有 4 個單端或者 2 個差分輸入通道;電池檢測功能;斬波器功能;偏移和零刻度調整;公共端模式輸入電平調整。 由于電池電壓與其放電時長成負相關關系,我們就可以通過 DA14580 的 ADC測量電池電壓,直接判斷我們所使用的電池剩余電量大小。 2 硬件設計 本次 DA14580 采用 P01 腳直接測量電源電壓。 圖 1 3 軟件設計 軟件開始,第一步要進行的是系統初始化。 由于我們要使用串口打印,就要配置我們要使用的串口。首先,要點調用GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_TX,false) GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false)配置我們使用的串口管腳,然后使用 SetBits16(CLK_PER_REG, UART2_ENABLE,1) 來使能我們要使用的串口 2 , 最后調用uart2_init(UART2_BAUDRATE,UART2_DATALENGTH)初始化串口。完成以上的 3 個流程,就可以通過串口打印信息了。 關于 ADC 采集電壓,主要是調用下邊的函數 在這個函數中, 首先是采用 adc_init(uint16_t mode, uint16_t sign, uint16_tattn),對 ADC 進行初始化。第一個參數 mode 是 ADC 模式選擇,0 表示差分模式,GP_ADC_SE(0x800)表示單端模式,我們采用的是 GP_ADC_SE,單端模式。第二個參數 sign,0 表示默認模式,這里用P_ADC_SIGN(0x0400),選擇通過相反的ADC 符號獲取兩個采樣值來取消內部的偏置電壓。最后的參數 attn 設置輸入最大電壓值,0 對應 1.2v,這里選 GP_ADC_ATTN3X(0x0002)對應 3.6v。 完成 ADC 初始化后,就要使能相關的 ADC 通道。adc_enable_channel(uint16_t input_selection),本次使用的是通道 ADC_CHANNEL_VBAT3V。 完成 ADC 的初始化和通道使能后,就可以調用 adc_get_sample(void)獲取數字電壓。 最后就是通過下面函數將數字電壓轉換為剩余電量百分比。 這是函數采用的分段的形式,這是由于我們的電池電壓與電池剩余電量的關系是一條曲線,通過分段計算,可以提高精度。當然,大家也可以根據自己的實際情況改動上述函數。 4 實驗現象 首先,插好 Jlink 和 USB 轉串口,然后打開打開串口調試助手。 (1)選擇串口號,我們圖中是 COM1,這個根據實際情況選擇。 (2)配置串口參數,波特率為 115200,數據位 8,停止位 1,沒有校驗位和控制流,與下圖一致。 (3)點擊打開串口。 圖 2 配置完串口之后,打開我們提供的代碼。 (1)點擊仿真按鍵。 (2)點擊運行代碼。 圖 4 完成之后,就能看到串口調試助手接收框信息如下。 圖 5 配套資料:https://www.fengke.club/GeekMart/su_fkZyGYgrp.jsp 配套視頻:https://www.fengke.club/GeekMart/su_fTSgUL3y3.jsp 文件下載請點擊: |