Changes between Version 2 and Version 3 of epics/bbb/debian/voltmon


Ignore:
Timestamp:
06/22/17 10:54:50 (2 years ago)
Author:
michkawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/bbb/debian/voltmon

    v2 v3  
    7474== IOC == 
    7575 
    76  
    77  
    78  
    79  
    80  
    81  
    82  
     76IOCはdrvAsynI2Cを使って電圧レジスタを読み込むだけのお手軽仕様で。[[br]] 
     77レジスタマップ等のチップの仕様は[http://www.ti.com/lit/ds/symlink/ina226.pdf TI INA226]から。[[br]] 
     78 
     79とりあえず、積算時間、平均回数はデフォルトのまま変えないで、BusVoltageレジスタを読み込むだけのIOCを作成。[[br]] 
     80 
     81INA226 で通常測定で使用するレジスタは以下のようになっている。詳しくは[http://www.ti.com/lit/ds/symlink/ina226.pdf datesheet]を参照。 
     82 
     83|| POINTER(HEX) || ADDRESS                 || POWER-ON RESET(HEX) || TYPE || 
     84||    00h       || Configuration Register  || 4127 || R/W || 
     85||    01h       || Shunt Voltage Register  || 0000 ||  R  || 
     86||    02h       || Bus Voltage Register    || 0000 ||  R  || 
     87||    03h       || Power Register          || 0000 ||  R  || 
     88||    04h       || Current Register        || 0000 ||  R  || 
     89 
     90 
     91=== configure/RELEASE === 
     92 
     93RELEASEファイルは、使用するドライバサポートを追加。 
     94 
     95{{{ 
     96ASYN       = $(EPICS_BASE)/../modules/soft/asyn/4-31 
     97STREAM     = $(EPICS_BASE)/../modules/soft/stream/2.7.7_I2C 
     98DRVASYNI2C = $(EPICS_BASE)/../modules/instruments/bbb/drvAsynI2C 
     99}}} 
     100 
     101I2Cを使うので対応したものを設定。 
     102 
     103 
     104=== protocol file === 
     105 
     106プロトコルファイルはdrvAsynI2Cの例題にあったものをコピーして使用。 
     107 
     108{{{ 
     109Terminator   = ""; 
     110LockTimeout  = 500; 
     111ReplyTimeout = 100; 
     112ReadTimeout  = 100; 
     113WriteTimeout = 100; 
     114MaxInput     = 2; 
     115ExtraInput   = Error; 
     116 
     117RdReg { 
     118    out ${1} ${2}; 
     119    in  "%02r"; 
     120} 
     121 
     122WtReg { 
     123    out ${1} ${2} "%02r"; 
     124} 
     125}}} 
     126 
     127始めは、実験時にi2cgetで取得できたように、リトルエンディアンのデータが出力されるかと思ったが、データは普通の値として取得できたので、エンディアン変換等の後処理をする必要はなかった。 
     128 
     129=== Db file === 
     130 
     131DBファイルは、streamdeviceでレジスタを読み込んで、電圧変換するだけ。[[br]] 
     132一応、configurationレジスタの設定も作成してあるが、いまのところ使っていない。 
     133 
     134 
     135{{{ 
     136record(longin, "$(USER):INA226:BUS_VOLT:GET:RAW") { 
     137    field(DESC, "INA226 bus registor read") 
     138    field(DTYP, "stream") 
     139    field(INP,  "@INA226.proto RdReg($(I2C_ADDR),2) $(BUS)") 
     140    field(SCAN, "$(SCAN)") 
     141    field(FLNK, "$(USER):INA226:BUS_VOLT:GET") 
     142} 
     143 
     144record(calc, "$(USER):INA226:BUS_VOLT:GET") { 
     145    field(DESC, "convert voltage") 
     146    field(INPA, "$(USER):INA226:BUS_VOLT:GET:RAW") 
     147    field(CALC, "A*0.001*1.25") 
     148    field(EGU,  "V") 
     149    field(PREC, "3") 
     150} 
     151 
     152################################################# 
     153# 
     154# bit 0~2:   operate mode 
     155#     3~5:   shunt voltage conversion time 
     156#     6~8:   bus voltage conversion time 
     157#     9~11:  averaging mode 
     158#     12~14: reserved 
     159#     15:    config reset 
     160# 
     161record(longout, "$(USER):INA226:CONF_REG:SET") { 
     162    field(DESC, "Set config registor") 
     163    field(DTYP, "stream") 
     164    field(OUT,  "@INA226.proto WtReg($(I2C_ADDR),0) $(BUS)") 
     165} 
     166 
     167}}} 
     168 
     169=== src/Makefile === 
     170 
     171src/MakefileにDBDとlibを設定する。 
     172 
     173{{{ 
     174# Include dbd files from all support applications: 
     175presSens_DBD += asyn.dbd 
     176presSens_DBD += stream.dbd 
     177presSens_DBD += drvAsynI2C.dbd 
     178 
     179# Add all the support libraries needed by this IOC 
     180presSens_LIBS += asyn 
     181presSens_LIBS += stream 
     182presSens_LIBS += drvAsynI2C 
     183}}} 
     184 
     185 
     186=== st.cmd === 
     187 
     188st.cmdは、送信先のデバイスを{{{drvAsynI2CConfigure}}}にするだけで、いつものstreamdeviceと時と同じ。 
     189 
     190 
     191{{{ 
     192#!../../bin/linux-arm/presSens 
     193 
     194## You may have to change presSens to something else 
     195## everywhere it appears in this file 
     196 
     197< envPaths 
     198 
     199epicsEnvSet("STREAM_PROTOCOL_PATH", ".:../../presSensApp/Db") 
     200 
     201cd "${TOP}" 
     202 
     203## Register all support components 
     204dbLoadDatabase "dbd/presSens.dbd" 
     205presSens_registerRecordDeviceDriver pdbbase 
     206 
     207drvAsynI2CConfigure("I2C","/dev/i2c-2",1) 
     208 
     209## Load record instances 
     210dbLoadRecords("db/INA226.db","USER=PFaVA:test,I2C_ADDR=0x40,SCAN=1 second,BUS=I2C") 
     211 
     212cd "${TOP}/iocBoot/${IOC}" 
     213iocInit 
     214 
     215#var streamDebug 1 
     216#asynSetTraceMask( "I2C", 0, -1 ) 
     217#asynSetTraceIOMask( "I2C", 0, -1 ) 
     218}}} 
     219 
     220=== 実行 === 
     221 
     222make後にst.cmdを実行するが、I2Cデバイスへのアクセスは通常はrootでしか許可されていないので、IOCの起動はrootで実行する必要がある。[[br]] 
     223もしくは専用のユーザーを作成し、I2Cデバイスへのアクセスを許可する設定をするしかないが、今回はrootで実行する。 
     224 
     225IOCを起動後、cagetしてみる。[[br]] 
     226入力電圧は、3.3V電源。[[br]] 
     227 
     228 
     229{{{ 
     230beaglebone:/opt/epics/app/presSens> caget PFaVA:test:INA226:BUS_VOLT:GET PFaVA:test:INA226:BUS_VOLT:GET:RAW 
     231PFaVA:test:INA226:BUS_VOLT:GET 3.36625 
     232PFaVA:test:INA226:BUS_VOLT:GET:RAW 2693 
     233}}} 
     234 
     235テスタの読み値で3.37Vなのでほぼ同じ。 
     236 
     237