新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > 基于GUI軟件配置UCD3138 數字電源PMBUS 命令

        基于GUI軟件配置UCD3138 數字電源PMBUS 命令

        作者: 時間:2013-08-04 來源:網絡 收藏

        ◎ 接收數據處理函數pmbus_write_iout_oc_fault_limit()

        該函數用來接收來自 的數據,并將該數據的格式由Linear Data Format 轉換為浮點型數據,最后強制轉換為整數型賦給模擬比較器。關鍵代碼分析如下:

        上文提到,來自 的數據的首字節是對應的PMBUS 命令代碼。隨后的兩個字節便是Linear Data 格式的數據。將該數據保存在pmbus_dcdc_config 結構體的iout_oc_fault_limit 成員中,如下代碼所示。

        Pmbus_dcdc_config[0].iout_oc_fault_limit = pmbus_buffer[1] + (pmbus_buffer[2] 8);

        下面代碼是調用格式轉換函數linear11_to_float(),將上面接收到的數據轉換為浮點型數據。

        local_variable = linear11_to_float(pmbus_dcdc_config[0].iout_oc_fault_limit);

        由于轉換后的浮點型數據與最終需要賦給模擬比較器閾值的數據存在一定的比例,需要一個轉換系數(scaler)。縮放后存放在pmbus_dcdc_config_tanslated 結構體的iout_oc_fault_limit 成員中。

        pmbus_dcdc_config_translated[0].iout_oc_fault_limit = (int)(local_variable*2.54);

        最終該值賦給模擬比較器的閾值,用來做快速保護。

        FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_B_THRESH=pmbus_dcdc_config_translated[0].iout_oc_fault_limit;

        ◎ 返回數據處理函數pmbus_read_iout_oc_fault_limit

        該函數用來返回UCD3138 軟件接收的數據到 中,以使GUI 將寫入和讀取的數據做比較(比較判斷等操作在GUI 軟件中完成) , 保證數據正確。該函數調用pmbus_read_two_byte_handler() 將保存在Pmbus_dcdc_config[0].iout_oc_fault_limit 的數據返回到GUI。關鍵代碼如下:

        pmbus_read_two_byte_handler(pmbus_dcdc_config[0].iout_oc_fault_limit);

        而在pmbus_read_two_byte_handler()函數中的關鍵代碼為:

        pmbus_buffer[1] = value >> 8;

        pmbus_buffer[0] = value 0xff;

        pmbus_buffer 字節中的數據會最終上傳到GUI 軟件中。

        (4)、數據轉換函數的設計

        ◎ Linear Data Format 數據格式

        上文提到,來自GUI 的數據遵循PMBUS 協議,其格式為Linear Data Format。如圖5,其低11 位為“尾數”,以補碼形式保存;高5 位為“指數”,亦是以補碼形式保存。該數據與實際數據的關系為:X=Y× 2N

        基于GUI軟件配置UCD3138 數字電源PMBUS 命令

        5PMBUS 協議中的Linear Data Format

        ◎ ARM 編譯器中的浮點型數據

        如圖6,為ARM 編譯器中對單精度浮點型數據的存儲格式。其最高位為符號位,接下的8 位為指數,后面的23 位為尾數。在編譯器中定義的浮點數據,將以該格式存儲在硬件存儲空間。

        基于GUI軟件配置UCD3138 數字電源PMBUS 命令

        6ARM 編譯器中的浮點型數據格式

        ◎ 定義結構體和聯合體

        如下, 定義了結構體FLOAT_ELEMENTS , 用以保存上文提到的浮點型數據。還定義了聯合體FLOAT_OPEN,成員包括浮點型數據“all”和結構體類型數據“bit”,用以保存轉換完畢的浮點型數據。

        struct FLOAT_ELEMENTS {

        Uint32 SIGN:1;

        Uint32 EXPONENT:8;

        Uint32 MANTISSA:23;

        };

        union FLOAT_OPEN {

        float all;

        struct FLOAT_ELEMENTS bit;

        Uint32 word;

        };

        ◎ 轉換函數linear11_to_float()

        該函數完成將來自GUI 的Linear Data Format 格式的數據轉換為浮點型數據,并作為返回值返回。包含的關鍵代碼如下。

        定義變量,包括整型“mantissa”和“exponent”及結構體變量“final”。

        int16 mantissa, exponent;

        union FLOAT_OPEN final;

        下面代碼完成對輸入參數的分析,并擴展到16 位。如果輸入參數的尾數是負值,前5 位補1;如果是正值,前5 位補0。

        if(linear11 0x0400)// if mantissa is negative

        { mantissa = linear11 | 0xfc00; //put it in there at minimum mantissa }

        else

        { mantissa = linear11 0x07FF; }

        下面代碼首先是將mantissa 左移16 位(16+16=32),以使其數據長度符合單精度浮點型數據的長度,然后exponent 減去16,保證了原始數據的大小沒有變化。

        final.all = ((int32)mantissa) 16; //set it up for minimum exponent.

        exponent = (linear11 >> 11) - 16; //get exponent to match shifted value

        下面代碼首先判斷單精度浮點型的指數是否為負。如果是負,則改寫其為零,原因是對應的“輸出過流保護點”不會出現負值;如果是正,則將指數信息放置在單精度浮點型數據的指數位置。

        if((final.bit.EXPONENT + exponent) 0)//if it's so low it will wrap

        { final.bit.EXPONENT = 0; }

        else

        { final.bit.EXPONENT = final.bit.EXPONENT + exponent; }

        上述操作完畢后,final.all 中就保存了轉換后的浮點型數據,因此可以作為返回值返回。

        return final.all;

        2.4 操作流程圖

        上述所有操作的流程圖見圖7。

        基于GUI軟件配置UCD3138 數字電源PMBUS 命令

        7UCD3138 接收信息流程圖

        3 刪除GUI 信息欄

        8:刪除GUI 中的信息欄

        此時重新編譯軟件并下載到UCD3138 后,GUI 中將不再會出現該信息欄,見圖4。但UCD3138 軟件中依然保留有對該PMBUS 命令的接收、轉換和處理等函數,亦需要刪除,在此不再贅述。

        4 小結

        通過上文兩個實例的分析可知,用戶在GUI 軟件中可以靈活的添加或刪除PMBUS 命令對應的信息欄,提高了GUI 的靈活性。該操作主要包括PMBUS 命令的使能或屏蔽及UCD3138 軟件添加或刪除相應處理函數等兩大部分。

        5 參考文獻

        1. UCD3138 datasheet, Texas Instruments Inc., 2011

        2. _Specification_Part_I_Rev_1, 2007

        3. _Specification_Part_II_Rev_1, 2010

        4. ARM Optimizing C/C++ Compiler, v4.9, User's Guide, Texas Instruments, 2011

        c++相關文章:c++教程



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 高青县| 钟山县| 邯郸县| 长武县| 卢氏县| 天气| 桦南县| 醴陵市| 彰化市| 颍上县| 息烽县| 延庆县| 廊坊市| 金山区| 桐城市| 开封县| 汤阴县| 德州市| 寻乌县| 子长县| 全州县| 新乡市| 南安市| 多伦县| 延川县| 巴中市| 长汀县| 唐山市| 平南县| 包头市| 理塘县| 获嘉县| 渭南市| 洮南市| 黎平县| 广宗县| 鄂托克前旗| 蒲城县| 秦皇岛市| 石首市| 乐至县|