<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 基于GUI軟件配置UCD3138 數(shù)字電源PMBUS 命令

          基于GUI軟件配置UCD3138 數(shù)字電源PMBUS 命令

          作者: 時(shí)間:2013-08-04 來源:網(wǎng)絡(luò) 收藏

          ◎ 接收數(shù)據(jù)處理函數(shù)pmbus_write_iout_oc_fault_limit()

          該函數(shù)用來接收來自 的數(shù)據(jù),并將該數(shù)據(jù)的格式由Linear Data Format 轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù),最后強(qiáng)制轉(zhuǎn)換為整數(shù)型賦給模擬比較器。關(guān)鍵代碼分析如下:

          上文提到,來自 的數(shù)據(jù)的首字節(jié)是對應(yīng)的PMBUS 命令代碼。隨后的兩個(gè)字節(jié)便是Linear Data 格式的數(shù)據(jù)。將該數(shù)據(jù)保存在pmbus_dcdc_config 結(jié)構(gòu)體的iout_oc_fault_limit 成員中,如下代碼所示。

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

          下面代碼是調(diào)用格式轉(zhuǎn)換函數(shù)linear11_to_float(),將上面接收到的數(shù)據(jù)轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù)。

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

          由于轉(zhuǎn)換后的浮點(diǎn)型數(shù)據(jù)與最終需要賦給模擬比較器閾值的數(shù)據(jù)存在一定的比例,需要一個(gè)轉(zhuǎn)換系數(shù)(scaler)??s放后存放在pmbus_dcdc_config_tanslated 結(jié)構(gòu)體的iout_oc_fault_limit 成員中。

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

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

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

          ◎ 返回?cái)?shù)據(jù)處理函數(shù)pmbus_read_iout_oc_fault_limit

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

          pmbus_read_two_byte_handler(pmbus_dcdc_config[0].iout_oc_fault_limit);

          而在pmbus_read_two_byte_handler()函數(shù)中的關(guān)鍵代碼為:

          pmbus_buffer[1] = value >> 8;

          pmbus_buffer[0] = value 0xff;

          pmbus_buffer 字節(jié)中的數(shù)據(jù)會最終上傳到GUI 軟件中。

          (4)、數(shù)據(jù)轉(zhuǎn)換函數(shù)的設(shè)計(jì)

          ◎ Linear Data Format 數(shù)據(jù)格式

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

          基于GUI軟件配置UCD3138 數(shù)字電源PMBUS 命令

          5PMBUS 協(xié)議中的Linear Data Format

          ◎ ARM 編譯器中的浮點(diǎn)型數(shù)據(jù)

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

          基于GUI軟件配置UCD3138 數(shù)字電源PMBUS 命令

          6ARM 編譯器中的浮點(diǎn)型數(shù)據(jù)格式

          ◎ 定義結(jié)構(gòu)體和聯(lián)合體

          如下, 定義了結(jié)構(gòu)體FLOAT_ELEMENTS , 用以保存上文提到的浮點(diǎn)型數(shù)據(jù)。還定義了聯(lián)合體FLOAT_OPEN,成員包括浮點(diǎn)型數(shù)據(jù)“all”和結(jié)構(gòu)體類型數(shù)據(jù)“bit”,用以保存轉(zhuǎn)換完畢的浮點(diǎn)型數(shù)據(jù)。

          struct FLOAT_ELEMENTS {

          Uint32 SIGN:1;

          Uint32 EXPONENT:8;

          Uint32 MANTISSA:23;

          };

          union FLOAT_OPEN {

          float all;

          struct FLOAT_ELEMENTS bit;

          Uint32 word;

          };

          ◎ 轉(zhuǎn)換函數(shù)linear11_to_float()

          該函數(shù)完成將來自GUI 的Linear Data Format 格式的數(shù)據(jù)轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù),并作為返回值返回。包含的關(guān)鍵代碼如下。

          定義變量,包括整型“mantissa”和“exponent”及結(jié)構(gòu)體變量“final”。

          int16 mantissa, exponent;

          union FLOAT_OPEN final;

          下面代碼完成對輸入?yún)?shù)的分析,并擴(kuò)展到16 位。如果輸入?yún)?shù)的尾數(shù)是負(fù)值,前5 位補(bǔ)1;如果是正值,前5 位補(bǔ)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),以使其數(shù)據(jù)長度符合單精度浮點(diǎn)型數(shù)據(jù)的長度,然后exponent 減去16,保證了原始數(shù)據(jù)的大小沒有變化。

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

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

          下面代碼首先判斷單精度浮點(diǎn)型的指數(shù)是否為負(fù)。如果是負(fù),則改寫其為零,原因是對應(yīng)的“輸出過流保護(hù)點(diǎn)”不會出現(xiàn)負(fù)值;如果是正,則將指數(shù)信息放置在單精度浮點(diǎn)型數(shù)據(jù)的指數(shù)位置。

          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 中就保存了轉(zhuǎn)換后的浮點(diǎn)型數(shù)據(jù),因此可以作為返回值返回。

          return final.all;

          2.4 操作流程圖

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

          基于GUI軟件配置UCD3138 數(shù)字電源PMBUS 命令

          7UCD3138 接收信息流程圖

          3 刪除GUI 信息欄

          8:刪除GUI 中的信息欄

          此時(shí)重新編譯軟件并下載到UCD3138 后,GUI 中將不再會出現(xiàn)該信息欄,見圖4。但UCD3138 軟件中依然保留有對該P(yáng)MBUS 命令的接收、轉(zhuǎn)換和處理等函數(shù),亦需要?jiǎng)h除,在此不再贅述。

          4 小結(jié)

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

          5 參考文獻(xiàn)

          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++相關(guān)文章:c++教程



          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();