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


Ignore:
Timestamp:
06/22/17 10:54:50 (8 years ago)
Author:
Tetsuya Michikawa
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