lib/PCI-3340.hh
00001 // PCI-3340入出力クラス
00002 // 2011/02/09 Yuki YOKOKURA
00003 //
00004 // Interface社製PCI-3340のための入出力機能を提供します。
00005 //
00006 // Copyright (C) 2011 Yuki YOKOKURA
00007 // This program is free software;
00008 // you can redistribute it and/or modify it under the terms of the GNU General Public License
00009 // as published by the Free Software Foundation; either version 3 of the License, or any later version.
00010 // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
00011 // without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00012 // See the GNU General Public License for more details <http://www.gnu.org/licenses/>.
00013 // Besides, you can negotiate about other options of licenses instead of GPL.
00014 // If you would like to get other licenses, please contact us<yuki@katsura.sd.keio.ac.jp>.
00015 
00016 #ifndef PCI3340
00017 #define PCI3340
00018 
00019 #include <sys/io.h>
00020 #include <unistd.h>
00021 #include <algorithm>
00022 
00023 namespace ARCS {        // ARCS名前空間
00024         class DAC3340 {
00025                 private:
00026                         static const unsigned int MAX_CH=8;     // チャネル最大値
00027                         unsigned int BaseAddr0;                         // 先頭アドレス0
00028                         double Imax[MAX_CH];                            // 最大電流
00029                         double VperA[MAX_CH];                           // サーボアンプ電圧電流換算ゲイン
00030                         
00031                         void Settings(void);                                                                    // DACの設定を行う関数
00032                         void Output(unsigned short DACdata[MAX_CH]);                    // DACから指定した電圧を出力する関数
00033                         void Zero(void);                                                                                // DACの出力電圧を 0[V] にする関数
00034                         unsigned short IIbyteHi(unsigned short in);                             // 2byteデータの上位1byteを抽出して出力
00035                         unsigned short IIbyteLo(unsigned short in);                             // 2byteデータの下位1byteを抽出して出力
00036                         double CurrentLimitter(double Iref, unsigned int ch);   // 電流リミッタ
00037                         double CurrentToVolt(double Iref, unsigned int ch);             // 電流指令値[A]からDAC出力電圧[V]に変換
00038                         unsigned short VoltToDacData(double Vdac);                              // DAC出力電圧[V]からDACの実際の整数値に変換する
00039                         
00040                 public:
00041                         // コンストラクタ(DAC初期化&設定)
00042                         DAC3340(unsigned int Base0, const double MaxCur[MAX_CH], const double VoltPerAmp[MAX_CH]);
00043                         ~DAC3340();                                                                                     // デストラクタ(DAC終了処理)
00044                         void PutCurrentCmd(volatile double Iref[MAX_CH]);       // 電流指令値をDACから出力
00045         };
00046 }
00047 
00048 #endif
00049 
00050 
00051 
 All Classes Files