A library for interfacing the ACS712 Hall Effect Current Sensor module with a microcontroller

Committer:
JRM1986
Date:
Thu Oct 10 11:04:18 2019 +0000
Revision:
0:c0c26e03d080
Pre Publish Commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JRM1986 0:c0c26e03d080 1 #ifndef ACS712_H
JRM1986 0:c0c26e03d080 2 #define ACS712_H
JRM1986 0:c0c26e03d080 3
JRM1986 0:c0c26e03d080 4 #define WAIT 5.0
JRM1986 0:c0c26e03d080 5 #include "mbed.h"
JRM1986 0:c0c26e03d080 6
JRM1986 0:c0c26e03d080 7 /**
JRM1986 0:c0c26e03d080 8 @file ACS712.h
JRM1986 0:c0c26e03d080 9 * @brief Library for interfacing ACS712 Hall Effect Current sensor
JRM1986 0:c0c26e03d080 10 *
JRM1986 0:c0c26e03d080 11 * @author Josh Marshall
JRM1986 0:c0c26e03d080 12 *
JRM1986 0:c0c26e03d080 13 * @date July 2019
JRM1986 0:c0c26e03d080 14 */
JRM1986 0:c0c26e03d080 15
JRM1986 0:c0c26e03d080 16
JRM1986 0:c0c26e03d080 17 namespace mbed
JRM1986 0:c0c26e03d080 18 {
JRM1986 0:c0c26e03d080 19 class AnalogIn;
JRM1986 0:c0c26e03d080 20 }
JRM1986 0:c0c26e03d080 21
JRM1986 0:c0c26e03d080 22 class ACS712
JRM1986 0:c0c26e03d080 23 {
JRM1986 0:c0c26e03d080 24
JRM1986 0:c0c26e03d080 25 private:
JRM1986 0:c0c26e03d080 26
JRM1986 0:c0c26e03d080 27 mbed::AnalogIn *_aInPin;
JRM1986 0:c0c26e03d080 28
JRM1986 0:c0c26e03d080 29 public:
JRM1986 0:c0c26e03d080 30
JRM1986 0:c0c26e03d080 31 /** Constructor */
JRM1986 0:c0c26e03d080 32 ACS712(PinName const outpin);
JRM1986 0:c0c26e03d080 33
JRM1986 0:c0c26e03d080 34 /** Destructor */
JRM1986 0:c0c26e03d080 35 ~ACS712();
JRM1986 0:c0c26e03d080 36
JRM1986 0:c0c26e03d080 37 /**
JRM1986 0:c0c26e03d080 38 * Initialise all peripherals and configure interrupts
JRM1986 0:c0c26e03d080 39 * @author Josh Marshall
JRM1986 0:c0c26e03d080 40 * @date July 2019
JRM1986 0:c0c26e03d080 41 */
JRM1986 0:c0c26e03d080 42 void init();
JRM1986 0:c0c26e03d080 43
JRM1986 0:c0c26e03d080 44
JRM1986 0:c0c26e03d080 45 /**
JRM1986 0:c0c26e03d080 46 * Reads current sensor
JRM1986 0:c0c26e03d080 47 * @returns current sensor value in range 0.0 to 1.0
JRM1986 0:c0c26e03d080 48 * @author Josh Marshall
JRM1986 0:c0c26e03d080 49 * @date July 2019
JRM1986 0:c0c26e03d080 50 */
JRM1986 0:c0c26e03d080 51 double read_current_sensor();
JRM1986 0:c0c26e03d080 52
JRM1986 0:c0c26e03d080 53
JRM1986 0:c0c26e03d080 54 /**
JRM1986 0:c0c26e03d080 55 * Read current sensor
JRM1986 0:c0c26e03d080 56 * @returns current sensor value in range 0 to 65535 (2^16-1)
JRM1986 0:c0c26e03d080 57 * K64F High‐speed 16‐bit ADC with configurable resolution
JRM1986 0:c0c26e03d080 58 * LPC1768 12-bit Analog-to-Digital Converter (ADC) with input multiplexing among
JRM1986 0:c0c26e03d080 59 * eight pins, conversion rates up to 200 kHz, and multiple result registers.
JRM1986 0:c0c26e03d080 60 * @author Josh Marshall
JRM1986 0:c0c26e03d080 61 * @date July 2019
JRM1986 0:c0c26e03d080 62 */
JRM1986 0:c0c26e03d080 63
JRM1986 0:c0c26e03d080 64
JRM1986 0:c0c26e03d080 65 int read_ain_uint_16();
JRM1986 0:c0c26e03d080 66
JRM1986 0:c0c26e03d080 67 /**
JRM1986 0:c0c26e03d080 68 * Read current sensor and convert to amps
JRM1986 0:c0c26e03d080 69 * @param acs_ffset the value that the current sensor outputs at 0 amps
JRM1986 0:c0c26e03d080 70 * @param gain from potential divider to map 5v out put of sensor onto 3.3v input
JRM1986 0:c0c26e03d080 71 * @param sensor type 5,20, or 30 amp
JRM1986 0:c0c26e03d080 72 * @author Josh Marshall
JRM1986 0:c0c26e03d080 73 * @date July 2019
JRM1986 0:c0c26e03d080 74 */
JRM1986 0:c0c26e03d080 75 void convert_to_amps(float acs_offset, float gain, int type);
JRM1986 0:c0c26e03d080 76
JRM1986 0:c0c26e03d080 77 /**
JRM1986 0:c0c26e03d080 78 * If current spike (>1.1*operating current) from motor is detected it returns true flag
JRM1986 0:c0c26e03d080 79 * @param value of current from ACS712 Hall Effect Current Sensor
JRM1986 0:c0c26e03d080 80 * @prarm typical operating current
JRM1986 0:c0c26e03d080 81 * @author Josh Marshall
JRM1986 0:c0c26e03d080 82 * @date July 2019
JRM1986 0:c0c26e03d080 83 */
JRM1986 0:c0c26e03d080 84
JRM1986 0:c0c26e03d080 85 bool over_current_detection(double operating_current);
JRM1986 0:c0c26e03d080 86
JRM1986 0:c0c26e03d080 87 /**
JRM1986 0:c0c26e03d080 88 * Returns the value frrom the current sensor
JRM1986 0:c0c26e03d080 89 * @author Josh Marshall
JRM1986 0:c0c26e03d080 90 * @date July 2019
JRM1986 0:c0c26e03d080 91 */
JRM1986 0:c0c26e03d080 92
JRM1986 0:c0c26e03d080 93 float get_current_amps();
JRM1986 0:c0c26e03d080 94
JRM1986 0:c0c26e03d080 95 private:
JRM1986 0:c0c26e03d080 96
JRM1986 0:c0c26e03d080 97 double _current;
JRM1986 0:c0c26e03d080 98
JRM1986 0:c0c26e03d080 99 };
JRM1986 0:c0c26e03d080 100
JRM1986 0:c0c26e03d080 101 #endif