陳超鑫 肖林松 周學成 陳崗
(威勝信息技術股份有限公司 湖南省長沙市 410205)
一般情況下,選擇一款MCU 時會從多個方面進行考慮:功能、性能、管腳數、價格、穩定性等。MCU 的功能、管腳數與價格一般都是矛盾的,同一系列MCU 功能豐富管腳數量多的一般價格相對較高。
工程師在選定一款MCU 后,希望此MCU 能用于公司的多款產品,有的公司同一MCU 可能用于多達10 款以上產品。每款產品的功能存在一定的相關性,區別一般不會太大,但是軟硬件上都會存在一定的差異,一般會對每款產品在軟件上進行適配。為了減少軟硬件開發、測試的工作量,降低生產出錯概率,提高產品的穩定性。所以希望多款產品的平臺軟件能為同一版本,編譯一次生成二進制文件后,針對不同產品測試和生產燒錄時均使用同一個二進制文件,減少風險并提高產品穩定性。
硬件設計上一般使用通用GPIO 作為產品ID,比如使用4 個GPIO 共有16 種組合0000-1111,可區分同一MCU 的16 款產品,但是這樣會浪費掉4 個GPIO,形成了硬件資源的浪費。由于很多管腳功能是復用的,作為GPIO 使用后,別的功能就沒法使用,此GPIO 再也不能連接別的外圍電路。滿足不了產品設計及功能需求。
因而傳統的產品ID 識別方法存在不足,有待改進和提高。本方法將系統電壓經過ID 識別器進行處理,連接到MCU ADC 通路,系統上電后對ADC 通路進行初始化,進而獲取設備的ID 電壓,根據ID 電壓判斷是哪一款產品,并設置設備全局標識。通過設備全局標識,初始化不同硬件,運行不同軟件流程,實現不同產品功能。
目前主要使用基于GPIO、基于特征值、基于軟件配置識別方法進行設備ID 識別。
硬件設計上一般使用多個GPIO 作為產品ID,比如使用4 個GPIO 共有16 種組合0000-1111,可區分同一MCU 的16 款產品,但是這樣會浪費掉4 個GPIO 口。對于產品功能需求相對豐富或管腳資源相對緊張的MCU 這是不可接受的。由于很多管腳功能是復用的,作為GPIO 使用后,別的功能就沒法使用,此GPIO 再也不能連接別的外圍電路。滿足不了產品設計及功能需求。
獲取第一電池和第二電池的截止電壓,選擇兩只電池的截止電壓的較小值為安全起始充電電壓,以安全充電電壓為待測電池充電。當待測電池的電壓達到某個電壓特征點時,記錄此時的充電電流值,隨著待測電池電壓升高經過一系列的電壓特征點,記錄一系列對應的充電電流值。選擇與待測電池的充電電流值更匹配的電池的充放電曲線。通過匹配電流值來選擇待測電池的充放電曲線,達到了省去額外電池ID-pin 和節約一路ADC 資源的效果。但是此使用特征值識別方法只能針對電池進行特征值檢測,并不適用于獨立設備的ID 檢測。
采用軟件方式進行配置,給每類設備分配一個約定好的設備ID。系統上電首先讀取此設備ID,根據ID 初始化不同硬件,運行不同軟件流程。此方法依賴人為因素,不可控,批量設置時出錯概率較高。默認參數存在丟失或損壞的風險,一旦獲取的設備ID 出錯,就會導致程序運行混亂,無法實現相關功能。

圖1:MCU 模塊和ID 識別器

圖2:系統總流程圖

圖3:系統硬件設計
因此現有的產品ID 識別方法并不完善,都存在不足,有待改進和提高。
鑒于上述現有技術的不足,本系統提供的一種基于ADC 采樣的設備ID 識別方法,能夠使用一路ADC 接口進行設備類型的識別,節約MCU 的接口資源,設計簡單可靠。如圖1 所示。
本系統采取以下技術方案,設備具有MCU 模塊和ID 識別器,MCU 模塊具有ADC 通路,ID 識別器一端與系統電壓連接,另一端與ADC 通路連接,主要步驟:
S1、系統上電,系統電壓對ID 識別器進行供電,ID 識別器向ADC 通路輸送ID 電壓;
S2、MCU 模塊對ADC 初始化,并通過ADC 通路讀取ID 電壓信號;
S3、MCU 根據ID 電壓信號確定設備類型,進而設置設備的全局標識;
S4、軟件通過設備全局標識,初始化不同硬件,實現不同產品功能。
ID 識別器包括第一識別電阻和第二識別電阻,用于將系統電壓進行分壓后輸出ID 電壓。第一和第二識別電阻的阻值根據設備類型和系統電壓進行確定。第一識別電阻的一端與地相接,另一端與第二識別電阻串接。第二識別電阻的另一端與系統電壓連接,在第一與第二識別電阻之間的鏈路中取一點與ADC 通路連接。ID 電壓與系統電壓之間的關系公式為:

其中,VID為ID 電壓;VXT為系統電壓;R1為第一識別電阻的阻值;R2為第二識別電阻的阻值。
本系統提供一種基于ADC(Analog to Digital Converter,模數轉換器)采樣的設備ID(Identity document,身份證標識號)識別方法,包括MCU(Microcontroller Unit,微控制單元)模塊1 和ID 識別器2。MCU 模塊1 具有ADC 通路,ID 識別器2 兩端與系統電壓連接,輸出端與ADC 通路連接。ID 識別器2 用于根據系統電壓對外輸出ID 電壓信號,MCU 模塊1 通過ADC 通路接收ID 電壓信號,進而判斷設備的具體型號。一般情況下,MCU 為本領域的常用的微處理器,其內部具有一個或多個ADC 通路,每個ADC 通路具有多個引腳以供連接。在本系統運行過程中,只需要將ID 識別器2 與ADC 通路上的一個引腳連接,節約了MCU 的引腳資源,同時還能保證ADC 別的通路的功能的正常使用。
在實際應用中,MCU 模塊1 內具有相應的驅動軟件,對ADC通路初始化,MCU 模塊1 啟動ADC 通路對應的驅動功能,用于讀取ID 識別器2 輸送的ID 電壓信號。本系統提供的識別系統用于多款產品時,平臺軟件只需編譯一次,生成一個二進制文件,只要平臺軟件在不同的產品上測試合格,就可以用于不同的產品。減少工作量,降低生產出錯概率,提高產品的穩定性。
ID 識別器2 包括第一識別電阻R1 和第二識別電阻R2,用于將系統電壓進行分壓后輸出ID 電壓。第一識別電阻R1 的一端與地相接,另一端與第二識別電阻R2 串接,第二識別電阻R2 的另一端與系統電壓連接。在第一識別電阻R1 與第二識別電阻R2 之間的鏈路中取一點與ADC 通路連接,ID 識別器2 與MCU 模塊1 的連接通過引腳PD_ADC 連接。
ID 識別器2 主要的作用是在系統電壓輸入的情況下,對ADC通道輸入ID 電壓信號。需要ID 識別器2 輸出不同的ID 電壓信號,確定設備的類型,因此需要ID 識別器2 能夠根據需要輸出不同的ID 電壓類型,考慮到檢測的穩定性需要,ID 識別中的第一識別電阻R1 和第二識別電阻R2 在單個設備內阻值固定。
第一識別電阻R1 和第二識別電阻R2 的阻值根據設備類型和系統電壓進行確定。ID 電壓與系統電壓之間的關系公式為:

其中,VID為ID 電壓;VXT為系統電壓;R1為第一識別電阻的阻值;R2為第二識別電阻的阻值。

圖4:系統軟件流程
對第一識別電阻R1 和第二識別電阻R2 的阻值不做固定性要求,可以搭配不同阻值進行處理。以系統電壓為3.3V、設備類型總共為10 種類型為例,每種ID 以0.3 為倍數增長,既能夠保證每相鄰的兩個ID 不會出現重疊,又能充分利用AD 的全量程范圍。10 種類型對應的ID 電壓信號值分別為0.15V、0.45V、0.75V、1.05V、1.35V、1.65V、1.95V、2.25V、2.55V、2.85V、3.15V, 當然也可以使用其他的電壓信號值。根據公式,第一識別電阻R1 的阻值與第二識別電阻R2 的阻值的搭配可以為(1:21)、(10:63)、(5:17)、……,此處括號內的數字之間為比例關系,具體的阻值大小,只要適應相應的比例即可。根據設備類型的總數不同,也可以設計更多種搭配。系統電壓的大小,也跟隨每個設備的系統電壓進行設置,不做限定。
系統總流程主要分為如圖2 四個步驟。
選擇最少具有一路10/12BIT ADC 的MCU。根據手冊設置ADC 參考電壓Vref,根據系統核電壓3.3V 通過兩個電阻進行分壓,將分壓處的電阻引腳連接到ADC 采樣管腳。根據產品可能的最大總數量,選擇不同阻值的電阻,產生不同的分壓,作為不同設備的ID 值。
系統硬件設計如圖3 所示。
系統上電運行,根據硬件原理圖進行ADC 配置,主要包括:ADC 時鐘使能、配置GPIO 為模擬功能、初始化ADC 相關功能寄存器、使能ADC、開始ADC 模數轉換、轉換完成后讀取數據寄存器。
根據ADC 數據寄存器值,轉換成對應電平,從而確定是哪種產品類型,并設置gProductID 全局產品類型標識。根據全局設備類型標識及硬件原理,初始化不同的硬件,運行不同軟件流程,實現產品相關功能。
系統軟件流程如圖4 所示。
在終端樣品中Vcc 接3.3V 電源,分別設計[0.0V 0.3V)、[0.3V 0.6V)、[0.6V 0.9V)、 [0.9V 1.2V)、 [1.2V 1.5V)、 [1.5V 1.8V)、 [1.8V 2.1V)、[2.1V 2.4V)、[2.4V 2.7V)、[2.7V 3.0V)、[3.0V 3.3V)共分11檔。我們設計PD_ADC 電壓盡量靠近區間的中間,便于和其它ID進行區分。第一識別電阻R1 和第二識別電阻R2 盡可能合理選擇,因為有些ADC 輸入阻抗只有100K 以下,也就是第一識別電阻R1必須和ADC 地輸入阻抗拉開一定距離,確保采樣準確。
PD_ADC 理論設計值及電阻設計如下:

ADC 讀取并轉換后的電壓值與PD_ADC 理論設計值非常接近,偏差很少。
選擇不同的電阻配置,可以得到不同電壓,根據ADC 采樣讀取到的電壓值設置對應設備ID。實驗證明ADC 讀取到的電壓波動很小,穩定可靠,滿足設備ID 設計需求。
本系統提供一種電子設備,設備ID 識別方法。相對于現有的設備ID 識別技術,本系統提供的電子設備中的MCU 模塊1 能夠節省多個硬件引腳,節省了MCU 模塊1 的硬件資源。在硬件功能需求相對豐富的情況下,節省的MCU 引腳可以用于別的功能。同時ID 識別器2 輸出的設備類型值固定,不會因為軟件的問題造成識別錯誤,實用性強、占用資源少、配置簡單、穩定可靠,進而使電子設備的穩定性得到保障。