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:
Wed Apr 29 14:57:22 2015 +0000
Revision:
1:a88df80e7664
Parent:
0:90873b4e8330
Child:
2:44b76f6f19d5
Corrected read and write actions

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
vsluiter 0:90873b4e8330 4 /**
vsluiter 0:90873b4e8330 5 * @file LDC1000.h
vsluiter 0:90873b4e8330 6 * @brief this header file will contain all required
vsluiter 0:90873b4e8330 7 * definitions for the functions to interface with Texas
vsluiter 0:90873b4e8330 8 * Instruments' LDC1000.
vsluiter 0:90873b4e8330 9 *
vsluiter 0:90873b4e8330 10 * @author Victor Sluiter
vsluiter 0:90873b4e8330 11 *
vsluiter 0:90873b4e8330 12 * @date 2015-04-01
vsluiter 0:90873b4e8330 13 */
vsluiter 0:90873b4e8330 14
vsluiter 0:90873b4e8330 15 #include "mbed.h"
vsluiter 0:90873b4e8330 16
vsluiter 0:90873b4e8330 17 #ifndef PI
vsluiter 0:90873b4e8330 18 #define PI 3.14
vsluiter 0:90873b4e8330 19 #endif
vsluiter 0:90873b4e8330 20
vsluiter 0:90873b4e8330 21 typedef enum { LDC_RESPONSE_192=2,\
vsluiter 0:90873b4e8330 22 LDC_RESPONSE_384, \
vsluiter 0:90873b4e8330 23 LDC_RESPONSE_768, \
vsluiter 0:90873b4e8330 24 LDC_RESPONSE_1536, \
vsluiter 0:90873b4e8330 25 LDC_RESPONSE_3072, \
vsluiter 0:90873b4e8330 26 LDC_RESPONSE_6144} LDC_RESPONSE;
vsluiter 0:90873b4e8330 27
vsluiter 0:90873b4e8330 28 typedef enum { LDC_AMPLITUDE_1V=0,\
vsluiter 0:90873b4e8330 29 LDC_AMPLITUDE_2V, \
vsluiter 0:90873b4e8330 30 LDC_AMPLITUDE_4V} LDC_AMPLITUDE;
vsluiter 0:90873b4e8330 31
hamid567 1:a88df80e7664 32 typedef enum { LDC_MODE_STANDBY = 0, LDC_MODE_ACTIVE = 1} LDC_MODE;
vsluiter 0:90873b4e8330 33
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);
vsluiter 0:90873b4e8330 57 /**
vsluiter 0:90873b4e8330 58 * @brief Set the value of the external capacitor
vsluiter 0:90873b4e8330 59 * This is needed for the calculation of the inductance.
vsluiter 0:90873b4e8330 60 **/
vsluiter 0:90873b4e8330 61 void setCapacitor(float c){cap = c;};
vsluiter 0:90873b4e8330 62 /**
vsluiter 0:90873b4e8330 63 * @brief set the value of the external clock
vsluiter 0:90873b4e8330 64 * If PWMout is used to generate a clock signal, this will update the output frequency.s
vsluiter 0:90873b4e8330 65 **/
vsluiter 0:90873b4e8330 66 void setFrequency(float frequency);
vsluiter 0:90873b4e8330 67 /**
vsluiter 0:90873b4e8330 68 * @brief Read the raw 24-bit inductance value.
vsluiter 0:90873b4e8330 69 * This is needed for the calculation of the inductance.
vsluiter 0:90873b4e8330 70 **/
vsluiter 0:90873b4e8330 71 uint32_t readRawL(void){_raw_l = readRawCounts(); return _raw_l;};
vsluiter 0:90873b4e8330 72 /**
vsluiter 0:90873b4e8330 73 * @brief Set the Response Time parameters.
vsluiter 0:90873b4e8330 74 * @param responsetime
vsluiter 0:90873b4e8330 75 * Larger value increases accuracy, but slows down the output data rate. Choose one of these values:
vsluiter 0:90873b4e8330 76 * - LDC_RESPONSE_192
vsluiter 0:90873b4e8330 77 * - LDC_RESPONSE_384
vsluiter 0:90873b4e8330 78 * - LDC_RESPONSE_768
vsluiter 0:90873b4e8330 79 * - LDC_RESPONSE_1536
vsluiter 0:90873b4e8330 80 * - LDC_RESPONSE_3072
vsluiter 0:90873b4e8330 81 * - LDC_RESPONSE_6144
vsluiter 0:90873b4e8330 82 **/
vsluiter 0:90873b4e8330 83 void setResponseTime(LDC_RESPONSE responsetime);
vsluiter 0:90873b4e8330 84 /**
vsluiter 0:90873b4e8330 85 * @brief Set the oscilation amplitude.
vsluiter 0:90873b4e8330 86 * Use one of these values:
vsluiter 0:90873b4e8330 87 * - LDC_AMPLITUDE_1V
vsluiter 0:90873b4e8330 88 * - LDC_AMPLITUDE_2V
vsluiter 0:90873b4e8330 89 * - LDC_AMPLITUDE_4V
vsluiter 0:90873b4e8330 90 **/
vsluiter 0:90873b4e8330 91 void setOutputPower(LDC_AMPLITUDE amplitude);
hamid567 1:a88df80e7664 92
vsluiter 0:90873b4e8330 93 private:
vsluiter 0:90873b4e8330 94 void readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1);
vsluiter 0:90873b4e8330 95 void writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1);
vsluiter 0:90873b4e8330 96 uint32_t readRawCounts(void);
vsluiter 0:90873b4e8330 97 LDC_RESPONSE _responsetime;
vsluiter 0:90873b4e8330 98 LDC_AMPLITUDE _amplitude;
vsluiter 0:90873b4e8330 99 float _fsensor;
vsluiter 0:90873b4e8330 100 float _inductance;
vsluiter 0:90873b4e8330 101 float _frequency; //frequency of external clock
vsluiter 0:90873b4e8330 102 float cap;
vsluiter 0:90873b4e8330 103 uint32_t _raw_l;
vsluiter 0:90873b4e8330 104 SPI _spiport;
vsluiter 0:90873b4e8330 105 DigitalOut _cs_pin;
vsluiter 0:90873b4e8330 106 PwmOut _clock;
vsluiter 0:90873b4e8330 107 };
vsluiter 0:90873b4e8330 108
vsluiter 0:90873b4e8330 109 #endif