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:
Mon Jun 01 08:21:11 2015 +0000
Revision:
12:312970050c8c
Parent:
8:b5fb9681869c
Working example

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
vsluiter 0:90873b4e8330 35 /**
vsluiter 0:90873b4e8330 36 * Class for the LDC1000.
vsluiter 0:90873b4e8330 37 * @author Victor Sluiter
vsluiter 0:90873b4e8330 38 * @date 2015-04-01
vsluiter 0:90873b4e8330 39 */
vsluiter 0:90873b4e8330 40 class LDC1000
vsluiter 0:90873b4e8330 41 {
vsluiter 0:90873b4e8330 42 public:
vsluiter 0:90873b4e8330 43 /**
vsluiter 0:90873b4e8330 44 * @brief Create a new Class to interface to an LDC1000
vsluiter 0:90873b4e8330 45 **/
vsluiter 0:90873b4e8330 46 LDC1000(PinName mosi, PinName miso, PinName sck, PinName cs, float capacitor, float f_external, PinName clock_out=NC);
vsluiter 0:90873b4e8330 47 /**
vsluiter 0:90873b4e8330 48 * @brief Set power mode.
vsluiter 0:90873b4e8330 49 * The constructor sets the LDC1000 in Active mode.
vsluiter 0:90873b4e8330 50 * @param mode choose from LDC_MODE_ACTIVE or LDC_MODE STANDBY
vsluiter 0:90873b4e8330 51 **/
hamid567 1:a88df80e7664 52 void mode(LDC_MODE mode){writeSPI((uint8_t *)(&mode), 0x0B);};
vsluiter 0:90873b4e8330 53 /**
vsluiter 0:90873b4e8330 54 * @brief get the calculated inductance value
vsluiter 0:90873b4e8330 55 **/
vsluiter 0:90873b4e8330 56 float getInductance(void);
hamid567 8:b5fb9681869c 57
hamid567 8:b5fb9681869c 58
hamid567 8:b5fb9681869c 59 // EXTRA test get variables values to verify (to calculate the induction)
hamid567 8:b5fb9681869c 60 float get_raw_l(void);
hamid567 8:b5fb9681869c 61 float get_fsensor(void);
hamid567 8:b5fb9681869c 62 float get_frequency(void);
hamid567 8:b5fb9681869c 63 float get_responsetime(void);
hamid567 8:b5fb9681869c 64 float get_cap(void);
hamid567 8:b5fb9681869c 65
hamid567 8:b5fb9681869c 66
vsluiter 0:90873b4e8330 67 /**
vsluiter 0:90873b4e8330 68 * @brief Set the value of the external capacitor
vsluiter 0:90873b4e8330 69 * This is needed for the calculation of the inductance.
vsluiter 0:90873b4e8330 70 **/
vsluiter 0:90873b4e8330 71 void setCapacitor(float c){cap = c;};
vsluiter 0:90873b4e8330 72 /**
vsluiter 0:90873b4e8330 73 * @brief set the value of the external clock
vsluiter 0:90873b4e8330 74 * If PWMout is used to generate a clock signal, this will update the output frequency.s
vsluiter 0:90873b4e8330 75 **/
vsluiter 0:90873b4e8330 76 void setFrequency(float frequency);
vsluiter 0:90873b4e8330 77 /**
vsluiter 0:90873b4e8330 78 * @brief Read the raw 24-bit inductance value.
vsluiter 0:90873b4e8330 79 * This is needed for the calculation of the inductance.
vsluiter 0:90873b4e8330 80 **/
vsluiter 0:90873b4e8330 81 uint32_t readRawL(void){_raw_l = readRawCounts(); return _raw_l;};
hamid567 5:98d4fd07734a 82
hamid567 5:98d4fd07734a 83
vsluiter 0:90873b4e8330 84 /**
vsluiter 0:90873b4e8330 85 * @brief Set the Response Time parameters.
vsluiter 0:90873b4e8330 86 * @param responsetime
vsluiter 0:90873b4e8330 87 * Larger value increases accuracy, but slows down the output data rate. Choose one of these values:
vsluiter 0:90873b4e8330 88 * - LDC_RESPONSE_192
vsluiter 0:90873b4e8330 89 * - LDC_RESPONSE_384
vsluiter 0:90873b4e8330 90 * - LDC_RESPONSE_768
vsluiter 0:90873b4e8330 91 * - LDC_RESPONSE_1536
vsluiter 0:90873b4e8330 92 * - LDC_RESPONSE_3072
vsluiter 0:90873b4e8330 93 * - LDC_RESPONSE_6144
vsluiter 0:90873b4e8330 94 **/
vsluiter 0:90873b4e8330 95 void setResponseTime(LDC_RESPONSE responsetime);
vsluiter 0:90873b4e8330 96 /**
vsluiter 0:90873b4e8330 97 * @brief Set the oscilation amplitude.
vsluiter 0:90873b4e8330 98 * Use one of these values:
vsluiter 0:90873b4e8330 99 * - LDC_AMPLITUDE_1V
vsluiter 0:90873b4e8330 100 * - LDC_AMPLITUDE_2V
vsluiter 0:90873b4e8330 101 * - LDC_AMPLITUDE_4V
vsluiter 0:90873b4e8330 102 **/
vsluiter 0:90873b4e8330 103 void setOutputPower(LDC_AMPLITUDE amplitude);
hamid567 2:44b76f6f19d5 104
hamid567 2:44b76f6f19d5 105 /** set Watchdog timer **/
hamid567 2:44b76f6f19d5 106 void setWatchdog(float frequency);
hamid567 2:44b76f6f19d5 107
vsluiter 0:90873b4e8330 108 private:
vsluiter 0:90873b4e8330 109 void readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1);
vsluiter 0:90873b4e8330 110 void writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1);
hamid567 5:98d4fd07734a 111 void writeSPIregister(uint8_t reg, uint8_t value){writeSPI(&value,reg);};
vsluiter 0:90873b4e8330 112 uint32_t readRawCounts(void);
hamid567 5:98d4fd07734a 113 uint32_t readINTB(void); // EXTRA UNTB Read register
vsluiter 0:90873b4e8330 114 LDC_RESPONSE _responsetime;
vsluiter 0:90873b4e8330 115 LDC_AMPLITUDE _amplitude;
vsluiter 0:90873b4e8330 116 float _fsensor;
vsluiter 0:90873b4e8330 117 float _inductance;
vsluiter 0:90873b4e8330 118 float _frequency; //frequency of external clock
vsluiter 0:90873b4e8330 119 float cap;
vsluiter 0:90873b4e8330 120 uint32_t _raw_l;
hamid567 5:98d4fd07734a 121 uint32_t INTB; // extra: read register INTB
vsluiter 0:90873b4e8330 122 SPI _spiport;
vsluiter 0:90873b4e8330 123 DigitalOut _cs_pin;
hamid567 3:bf6ac5967bd1 124 FastPWM _clock;
vsluiter 0:90873b4e8330 125 };
vsluiter 0:90873b4e8330 126
vsluiter 0:90873b4e8330 127 #endif