A library for interfacing the ACS712 Hall Effect Current Sensor module with a microcontroller
ACS712.h@0:c0c26e03d080, 2019-10-10 (annotated)
- Committer:
- JRM1986
- Date:
- Thu Oct 10 11:04:18 2019 +0000
- Revision:
- 0:c0c26e03d080
Pre Publish Commit;
Who changed what in which revision?
User | Revision | Line number | New 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 |