Library to work with the LDC1000 from Texas Instruments

Dependencies:   FastPWM

Dependents:   LDC1000_test

LDC1000

This library was written to interface to Texas Instruments' LDC1000 in order to perform inductance measurement. This libary needs a SPI peripheral on your mbed device to talk to the LDC1000.

Clock

The LDC1000 needs a high speed clock for its internal frequency counter. In order to provide this clock, the FastPWM library is used. This may change the behaviour of other PWM channels, please be aware of that, and read the FastPWM documentation to understand the implications.

Unsupported

Not supported (yet):

  1. Setting the RpMAX and RpMIN values
  2. Setting the interrupt pin functionality
Committer:
hamid567
Date:
Fri May 29 09:28:46 2015 +0000
Revision:
8:b5fb9681869c
Parent:
5:98d4fd07734a
Child:
12:312970050c8c
Working program but with not the right return data from readCounts()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:90873b4e8330 1 #ifndef _LDC1000_H_
vsluiter 0:90873b4e8330 2 #define _LDC1000_H_
vsluiter 0:90873b4e8330 3
hamid567 3:bf6ac5967bd1 4 #include "FastPWM.h"
vsluiter 0:90873b4e8330 5 /**
vsluiter 0:90873b4e8330 6 * @file LDC1000.h
vsluiter 0:90873b4e8330 7 * @brief this header file will contain all required
vsluiter 0:90873b4e8330 8 * definitions for the functions to interface with Texas
vsluiter 0:90873b4e8330 9 * Instruments' LDC1000.
vsluiter 0:90873b4e8330 10 *
vsluiter 0:90873b4e8330 11 * @author Victor Sluiter
vsluiter 0:90873b4e8330 12 *
vsluiter 0:90873b4e8330 13 * @date 2015-04-01
vsluiter 0:90873b4e8330 14 */
vsluiter 0:90873b4e8330 15
vsluiter 0:90873b4e8330 16 #include "mbed.h"
vsluiter 0:90873b4e8330 17
vsluiter 0:90873b4e8330 18 #ifndef PI
vsluiter 0:90873b4e8330 19 #define PI 3.14
vsluiter 0:90873b4e8330 20 #endif
vsluiter 0:90873b4e8330 21
vsluiter 0:90873b4e8330 22 typedef enum { LDC_RESPONSE_192=2,\
hamid567 8:b5fb9681869c 23 LDC_RESPONSE_384= 3, \
vsluiter 0:90873b4e8330 24 LDC_RESPONSE_768, \
vsluiter 0:90873b4e8330 25 LDC_RESPONSE_1536, \
vsluiter 0:90873b4e8330 26 LDC_RESPONSE_3072, \
vsluiter 0:90873b4e8330 27 LDC_RESPONSE_6144} LDC_RESPONSE;
vsluiter 0:90873b4e8330 28
vsluiter 0:90873b4e8330 29 typedef enum { LDC_AMPLITUDE_1V=0,\
vsluiter 0:90873b4e8330 30 LDC_AMPLITUDE_2V, \
vsluiter 0:90873b4e8330 31 LDC_AMPLITUDE_4V} LDC_AMPLITUDE;
vsluiter 0:90873b4e8330 32
hamid567 1:a88df80e7664 33 typedef enum { LDC_MODE_STANDBY = 0, LDC_MODE_ACTIVE = 1} LDC_MODE;
vsluiter 0:90873b4e8330 34
hamid567 5:98d4fd07734a 35 typedef enum { WAKE_UP = 1, COMPARATOR = 2 , ACTIVE = 4} LDC_INTB;
hamid567 5:98d4fd07734a 36
vsluiter 0:90873b4e8330 37
vsluiter 0:90873b4e8330 38 /**
vsluiter 0:90873b4e8330 39 * Class for the LDC1000.
vsluiter 0:90873b4e8330 40 * @author Victor Sluiter
vsluiter 0:90873b4e8330 41 * @date 2015-04-01
vsluiter 0:90873b4e8330 42 */
vsluiter 0:90873b4e8330 43 class LDC1000
vsluiter 0:90873b4e8330 44 {
vsluiter 0:90873b4e8330 45 public:
vsluiter 0:90873b4e8330 46 /**
vsluiter 0:90873b4e8330 47 * @brief Create a new Class to interface to an LDC1000
vsluiter 0:90873b4e8330 48 **/
vsluiter 0:90873b4e8330 49 LDC1000(PinName mosi, PinName miso, PinName sck, PinName cs, float capacitor, float f_external, PinName clock_out=NC);
vsluiter 0:90873b4e8330 50 /**
vsluiter 0:90873b4e8330 51 * @brief Set power mode.
vsluiter 0:90873b4e8330 52 * The constructor sets the LDC1000 in Active mode.
vsluiter 0:90873b4e8330 53 * @param mode choose from LDC_MODE_ACTIVE or LDC_MODE STANDBY
vsluiter 0:90873b4e8330 54 **/
hamid567 1:a88df80e7664 55 void mode(LDC_MODE mode){writeSPI((uint8_t *)(&mode), 0x0B);};
hamid567 5:98d4fd07734a 56 void setINTB(LDC_INTB setINTB){writeSPI((uint8_t *)(&setINTB), 0x0A);};
vsluiter 0:90873b4e8330 57 /**
vsluiter 0:90873b4e8330 58 * @brief get the calculated inductance value
vsluiter 0:90873b4e8330 59 **/
vsluiter 0:90873b4e8330 60 float getInductance(void);
hamid567 8:b5fb9681869c 61
hamid567 8:b5fb9681869c 62
hamid567 8:b5fb9681869c 63 // EXTRA test get variables values to verify (to calculate the induction)
hamid567 8:b5fb9681869c 64 float get_raw_l(void);
hamid567 8:b5fb9681869c 65 float get_fsensor(void);
hamid567 8:b5fb9681869c 66 float get_frequency(void);
hamid567 8:b5fb9681869c 67 float get_responsetime(void);
hamid567 8:b5fb9681869c 68 float get_cap(void);
hamid567 8:b5fb9681869c 69
hamid567 8:b5fb9681869c 70
vsluiter 0:90873b4e8330 71 /**
vsluiter 0:90873b4e8330 72 * @brief Set the value of the external capacitor
vsluiter 0:90873b4e8330 73 * This is needed for the calculation of the inductance.
vsluiter 0:90873b4e8330 74 **/
vsluiter 0:90873b4e8330 75 void setCapacitor(float c){cap = c;};
vsluiter 0:90873b4e8330 76 /**
vsluiter 0:90873b4e8330 77 * @brief set the value of the external clock
vsluiter 0:90873b4e8330 78 * If PWMout is used to generate a clock signal, this will update the output frequency.s
vsluiter 0:90873b4e8330 79 **/
vsluiter 0:90873b4e8330 80 void setFrequency(float frequency);
vsluiter 0:90873b4e8330 81 /**
vsluiter 0:90873b4e8330 82 * @brief Read the raw 24-bit inductance value.
vsluiter 0:90873b4e8330 83 * This is needed for the calculation of the inductance.
vsluiter 0:90873b4e8330 84 **/
vsluiter 0:90873b4e8330 85 uint32_t readRawL(void){_raw_l = readRawCounts(); return _raw_l;};
hamid567 5:98d4fd07734a 86
hamid567 5:98d4fd07734a 87
vsluiter 0:90873b4e8330 88 /**
vsluiter 0:90873b4e8330 89 * @brief Set the Response Time parameters.
vsluiter 0:90873b4e8330 90 * @param responsetime
vsluiter 0:90873b4e8330 91 * Larger value increases accuracy, but slows down the output data rate. Choose one of these values:
vsluiter 0:90873b4e8330 92 * - LDC_RESPONSE_192
vsluiter 0:90873b4e8330 93 * - LDC_RESPONSE_384
vsluiter 0:90873b4e8330 94 * - LDC_RESPONSE_768
vsluiter 0:90873b4e8330 95 * - LDC_RESPONSE_1536
vsluiter 0:90873b4e8330 96 * - LDC_RESPONSE_3072
vsluiter 0:90873b4e8330 97 * - LDC_RESPONSE_6144
vsluiter 0:90873b4e8330 98 **/
vsluiter 0:90873b4e8330 99 void setResponseTime(LDC_RESPONSE responsetime);
vsluiter 0:90873b4e8330 100 /**
vsluiter 0:90873b4e8330 101 * @brief Set the oscilation amplitude.
vsluiter 0:90873b4e8330 102 * Use one of these values:
vsluiter 0:90873b4e8330 103 * - LDC_AMPLITUDE_1V
vsluiter 0:90873b4e8330 104 * - LDC_AMPLITUDE_2V
vsluiter 0:90873b4e8330 105 * - LDC_AMPLITUDE_4V
vsluiter 0:90873b4e8330 106 **/
vsluiter 0:90873b4e8330 107 void setOutputPower(LDC_AMPLITUDE amplitude);
hamid567 2:44b76f6f19d5 108
hamid567 2:44b76f6f19d5 109 /** set Watchdog timer **/
hamid567 2:44b76f6f19d5 110 void setWatchdog(float frequency);
hamid567 2:44b76f6f19d5 111
vsluiter 0:90873b4e8330 112 private:
vsluiter 0:90873b4e8330 113 void readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1);
vsluiter 0:90873b4e8330 114 void writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1);
hamid567 5:98d4fd07734a 115 void writeSPIregister(uint8_t reg, uint8_t value){writeSPI(&value,reg);};
vsluiter 0:90873b4e8330 116 uint32_t readRawCounts(void);
hamid567 5:98d4fd07734a 117 uint32_t readINTB(void); // EXTRA UNTB Read register
vsluiter 0:90873b4e8330 118 LDC_RESPONSE _responsetime;
vsluiter 0:90873b4e8330 119 LDC_AMPLITUDE _amplitude;
vsluiter 0:90873b4e8330 120 float _fsensor;
vsluiter 0:90873b4e8330 121 float _inductance;
vsluiter 0:90873b4e8330 122 float _frequency; //frequency of external clock
vsluiter 0:90873b4e8330 123 float cap;
vsluiter 0:90873b4e8330 124 uint32_t _raw_l;
hamid567 5:98d4fd07734a 125 uint32_t INTB; // extra: read register INTB
vsluiter 0:90873b4e8330 126 SPI _spiport;
vsluiter 0:90873b4e8330 127 DigitalOut _cs_pin;
hamid567 3:bf6ac5967bd1 128 FastPWM _clock;
vsluiter 0:90873b4e8330 129 };
vsluiter 0:90873b4e8330 130
vsluiter 0:90873b4e8330 131 #endif