Transistor Gijutsu, October 2014, Special Features Chapter 8,Software of the thermistor thermometer of 0.001 ° resolution, トランジスタ技術2014年10月号 特集第8章のソフトウェア 0.001℃分解能で気配もキャッチ「超敏感肌温度計」

Dependencies:   USBDevice mbed

Information

tg_201410s8_AD7714 トランジスタ技術 2014年 10月号 第8章のソフトウェア

Program for Section 8 in October. 2014 issue of the Transistor Gijutsu
(Japanese electronics magazine)

概要

このプログラムは、サーミスタの抵抗値変化をAD7714(24bitADC)で測定し、抵抗値を温度値に変換することで、0.001℃程度の分解能で温度変化を測定します。

ファイル

このソフトウエアは、次のファイルから構成されています。

  • AD7714.cpp - AD7714の内部レジスタを設定
  • Thermistor.cpp - サーミスタの抵抗値から温度値に変換
  • ExpAvr.cpp - 指数平均によるソフトウエアLPF
  • main.cpp - main()関数

詳細については、10月号の記事および上記ファイル中のコメントを参照してください。

Committer:
Dance
Date:
Fri Aug 29 08:38:36 2014 +0000
Revision:
0:de885a6da962
Transistor Gijutsu, October 2014, Special Features Chapter 8; ????????2014?10??????8????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dance 0:de885a6da962 1 #ifndef AD7714_H
Dance 0:de885a6da962 2 #define AD7714_H
Dance 0:de885a6da962 3 #include "mbed.h"
Dance 0:de885a6da962 4
Dance 0:de885a6da962 5 /**
Dance 0:de885a6da962 6 * AD7714クラス
Dance 0:de885a6da962 7 *
Dance 0:de885a6da962 8 * AD7714の設定し運用する
Dance 0:de885a6da962 9 * サーミスタ温度計に必要な機能を実装したものなので
Dance 0:de885a6da962 10 * AD7714のすべての機能を制御することはできない
Dance 0:de885a6da962 11 */
Dance 0:de885a6da962 12 class AD7714{
Dance 0:de885a6da962 13 private:
Dance 0:de885a6da962 14
Dance 0:de885a6da962 15 static const int CmdRead = 0x08;
Dance 0:de885a6da962 16 static const int CmdWrite = 0x00;
Dance 0:de885a6da962 17
Dance 0:de885a6da962 18 int channel;
Dance 0:de885a6da962 19 int data;
Dance 0:de885a6da962 20
Dance 0:de885a6da962 21 SPI *spi; ///< SPI通信のインスタンス
Dance 0:de885a6da962 22
Dance 0:de885a6da962 23
Dance 0:de885a6da962 24 public:
Dance 0:de885a6da962 25 static const int FclkIn = 1000000; ///< AD7714へのクロック 1MHz
Dance 0:de885a6da962 26 static const int bits = 24; ///< 変換ビット長
Dance 0:de885a6da962 27 /// 内部レジスタを選択するための数値
Dance 0:de885a6da962 28 static struct CRegister {
Dance 0:de885a6da962 29 static const int Comun = 0x00; ///< コミュニケーションレジスタ
Dance 0:de885a6da962 30 static const int Mode = 0x10; ///< モードレジスタ
Dance 0:de885a6da962 31 static const int FltHi = 0x20; ///< フィルタ上位レジスタ
Dance 0:de885a6da962 32 static const int FltLo = 0x30; ///< フィルタ下位レジスタ
Dance 0:de885a6da962 33 static const int Test = 0x40; ///< 動作テスト、使用禁止
Dance 0:de885a6da962 34 static const int Data = 0x50; ///< データレジスタ
Dance 0:de885a6da962 35 static const int ZeroCal = 0x60; ///< ゼロキャリブレーションレジスタ
Dance 0:de885a6da962 36 static const int FullCal = 0x70; ///< フルスケールキャリブレーションレジスタ
Dance 0:de885a6da962 37 } Reg; ///< レジスタを指定するための構造体
Dance 0:de885a6da962 38 /// 入力チャネルの指定
Dance 0:de885a6da962 39 static struct CCh {
Dance 0:de885a6da962 40 static const int A1A6 = 0; ///< 擬似差動入力 ch1 - ch6
Dance 0:de885a6da962 41 static const int A2A6 = 1; ///< 擬似差動入力 ch2 - ch6
Dance 0:de885a6da962 42 static const int A3A6 = 2; ///< 擬似差動入力 ch3 - ch6
Dance 0:de885a6da962 43 static const int A4A6 = 3; ///< 擬似差動入力 ch4 - ch6
Dance 0:de885a6da962 44 static const int A1A2 = 4; ///< 差動入力 ch1 - ch2
Dance 0:de885a6da962 45 static const int A3A4 = 5; ///< 差動入力 ch3 - ch4
Dance 0:de885a6da962 46 static const int A5A6 = 6; ///< 差動入力 ch5 - ch6
Dance 0:de885a6da962 47 static const int A6A6 = 7; ///< テスト入力 ch6 - ch6
Dance 0:de885a6da962 48 } Ch; ///< 入力チャネルを指定するための構造体
Dance 0:de885a6da962 49
Dance 0:de885a6da962 50
Dance 0:de885a6da962 51 /// 内部レジスタに値を書き込む
Dance 0:de885a6da962 52 void write(int reg, int data);
Dance 0:de885a6da962 53 /// レジスタを読む
Dance 0:de885a6da962 54 int read(int reg);
Dance 0:de885a6da962 55 /// バイトデータを書き込む
Dance 0:de885a6da962 56 int writeByte(int txd);
Dance 0:de885a6da962 57
Dance 0:de885a6da962 58 /// コンストラクタ
Dance 0:de885a6da962 59 AD7714();
Dance 0:de885a6da962 60 /// リセット
Dance 0:de885a6da962 61 void reset(void);
Dance 0:de885a6da962 62 /// ゼロとフルスケールのキャリブレーション
Dance 0:de885a6da962 63 void calib(void);
Dance 0:de885a6da962 64 /// 変換中かどうかの判定 @return ture 変換中
Dance 0:de885a6da962 65 bool isBusy();
Dance 0:de885a6da962 66 /// 入力チャネルを指定する
Dance 0:de885a6da962 67 void setCh(int ch){channel = ch;};
Dance 0:de885a6da962 68 /// デジタルフィルタを設定する
Dance 0:de885a6da962 69 void setFilter(int filter);
Dance 0:de885a6da962 70 /// 変換値を読み出す
Dance 0:de885a6da962 71 int getValue(){return read(CRegister::Data);};
Dance 0:de885a6da962 72 };
Dance 0:de885a6da962 73
Dance 0:de885a6da962 74 /// AD7714によるレシオメトリックにより抵抗値を測定するADCクラス
Dance 0:de885a6da962 75 /// AD7714クラスから派生
Dance 0:de885a6da962 76 class RatioMetric7714 : public AD7714 {
Dance 0:de885a6da962 77 private:
Dance 0:de885a6da962 78 double af;
Dance 0:de885a6da962 79 double rpu;
Dance 0:de885a6da962 80 double rmu;
Dance 0:de885a6da962 81 double rml;
Dance 0:de885a6da962 82 double rru;
Dance 0:de885a6da962 83 double rrl;
Dance 0:de885a6da962 84 public:
Dance 0:de885a6da962 85 /**
Dance 0:de885a6da962 86 * コンストラクタ
Dance 0:de885a6da962 87 */
Dance 0:de885a6da962 88 RatioMetric7714(double Rpu, double Rmu, double Rml, double Rru, double Rrl);
Dance 0:de885a6da962 89 /// 指定されたAD値を抵抗値に変換
Dance 0:de885a6da962 90 double toResistorValue(int adcVal);
Dance 0:de885a6da962 91 /// 現在のAD値を抵抗値に変換して返す
Dance 0:de885a6da962 92 double getResistorValue(void);
Dance 0:de885a6da962 93 };
Dance 0:de885a6da962 94
Dance 0:de885a6da962 95
Dance 0:de885a6da962 96
Dance 0:de885a6da962 97
Dance 0:de885a6da962 98 #endif