diff --git a/include/ACU_Constants.h b/include/ACU_Constants.h index 815f82d..1ead7d7 100644 --- a/include/ACU_Constants.h +++ b/include/ACU_Constants.h @@ -37,7 +37,6 @@ namespace ACUInterfaces { constexpr int ADC0_CLK = 13; constexpr int ADC0_SPEED = 2000000; // 1 MHz /* ADC Versions*/ - constexpr int MAX114X_VERSION = 8; /* Channels on ADC */ constexpr int ISO_PACK_N_CHANNEL = 0; constexpr int ISO_PACK_P_CHANNEL = 1; @@ -49,14 +48,14 @@ namespace ACUInterfaces { constexpr int PACK_OUT_FILTERED_CHANNEL = 7; /* SCALE/OFFSETS on ADC */ - const float ISO_PACK_N_SCALE = 1; - const float ISO_PACK_P_SCALE = 1; - const float PACK_VOLTAGE_SENSE_SCALE = 1; + const float ISO_PACK_N_SCALE = 0.0656553030302; + const float ISO_PACK_P_SCALE = 0.0656553030302; + const float PACK_VOLTAGE_SENSE_SCALE = 0.0410345643939; const float SHUNT_CURRENT_OUT_SCALE = 0.03125; const float SHUNT_CURRENT_P_SCALE = 0.00025; const float SHUNT_CURRENT_N_SCALE = 0.00025; - const float TS_OUT_FILTERED_SCALE = 1; - const float PACK_OUT_FILTERED_SCALE = 1; + const float TS_OUT_FILTERED_SCALE = 0.0547254764211; + const float PACK_OUT_FILTERED_SCALE = 0.0547254764211; const float ISO_PACK_N_OFFSET = 0; const float ISO_PACK_P_OFFSET = 0; const float PACK_VOLTAGE_SENSE_OFFSET = 0; @@ -93,7 +92,6 @@ namespace ACUConstants constexpr size_t NUM_CHIPS = 12; constexpr size_t NUM_CELL_TEMPS = 48; constexpr size_t NUM_CHIP_SELECTS = 2; - constexpr size_t NUM_MAX1148_CHANNELS = 8; const float VALID_SHDN_OUT_MIN_VOLTAGE_THRESHOLD = 12.0F; const uint32_t MIN_ALLOWED_INVALID_SHDN_OUT_MS = 10; // 10 ms -- requies 100 Hz samp freq. diff --git a/include/ACU_InterfaceTasks.h b/include/ACU_InterfaceTasks.h index 6db6007..b403dff 100644 --- a/include/ACU_InterfaceTasks.h +++ b/include/ACU_InterfaceTasks.h @@ -25,7 +25,7 @@ using chip_type = LTC6811_Type_e; using BMSDriverInstance_t = BMSDriverInstance; using BMSFaultDataManagerInstance_t = BMSFaultDataManagerInstance; -using MAX1148ADCInstance_t = MAX114XInterfaceInstance; +// using MAX1148ADCInstance_t = MAX114XInterfaceInstance; /** * Init Functions - to be called in setup@ */ diff --git a/lib/interfaces/include/ADCInterface.h b/lib/interfaces/include/ADCInterface.h index c9bc494..d441254 100644 --- a/lib/interfaces/include/ADCInterface.h +++ b/lib/interfaces/include/ADCInterface.h @@ -4,6 +4,7 @@ #include #include "SharedFirmwareTypes.h" #include "etl/singleton.h" +#include "MAX114XInterface.h" using pin = size_t; @@ -15,16 +16,27 @@ namespace adc_default_parameters constexpr const uint32_t IMD_STARTUP_TIME = 2000; constexpr const float TEENSY41_MAX_INPUT_VOLTAGE = 3.3F; -} + + constexpr int MAX114X_VERSION = 8; + constexpr size_t NUM_MAX1148_CHANNELS = 8; +}; + struct ADCPinout_s { - pin teensy_imd_ok_pin; + pin teensy_imd_ok_pin; pin teensy_precharge_pin; pin teensy_shdn_out_pin; pin teensy_ts_out_filtered_pin; pin teensy_pack_out_filtered_pin; pin teensy_bspd_current_pin; pin teensy_scaled_24V_pin; + + // MAX114X + pin spiPinCS; + pin spiPinSDI; + pin spiPinSDO; + pin spiPinCLK; + }; struct ADCConversions_s @@ -48,6 +60,51 @@ struct ADCConfigs_s { uint32_t imd_startup_time; float teensy41_max_input_voltage; + int spiSpeed; +}; + +struct ADCChannels_s +{ + int iso_pack_n_channel; + int iso_pack_p_channel; + int pack_voltage_sense_channel; + int shunt_current_out_channel; + int shunt_current_p_channel; + int shunt_current_n_channel; + int ts_out_filtered_channel; + int pack_out_filtered_channel; +}; + +struct ADCScales_s +{ + float iso_pack_n_scale; + float iso_pack_p_scale; + float pack_voltage_sense_scale; + float shunt_current_out_scale; + float shunt_current_p_scale; + float shunt_current_n_scale; + float ts_out_filtered_scale; + float pack_out_filtered_scale; +}; + +struct ADCOffsets_s +{ + float iso_pack_n_offset; + float iso_pack_p_offset; + float pack_voltage_sense_offset; + float shunt_current_out_offset; + float shunt_current_p_offset; + float shunt_current_n_offset; + float ts_out_filtered_offset; + float pack_out_filtered_offset; +}; + +struct MAX114XChannels_s +{ + CHANNEL_TYPE_e channelPair0; + CHANNEL_TYPE_e channelPair1; + CHANNEL_TYPE_e channelPair2; + CHANNEL_TYPE_e channelPair3; }; struct ADCInterfaceParams_s @@ -56,6 +113,11 @@ struct ADCInterfaceParams_s ADCConversions_s conversions; ADCThresholds_s thresholds; ADCConfigs_s configs; + ADCChannels_s channels; + ADCScales_s scales; + ADCOffsets_s offsets; + MAX114XChannels_s pairs; + int spiSpeed; float bit_resolution; }; @@ -64,6 +126,11 @@ class ADCInterface public: ADCInterface(ADCPinout_s pinout, ADCConversions_s conversions, + ADCChannels_s channels, + ADCScales_s scales, + ADCOffsets_s offsets, + MAX114XChannels_s pairs, + int spiSpeed, float bit_resolution, ADCThresholds_s thresholds = { .teensy41_min_digital_read_voltage_thresh = adc_default_parameters::TEENSY41_MIN_DIGITAL_READ_VOLTAGE_THRESH, @@ -87,7 +154,46 @@ class ADCInterface }(), thresholds, configs, - bit_resolution} {} + channels, + scales, + offsets, + pairs, + spiSpeed, + bit_resolution}, + _max114x_instance( + _adc_parameters.pinout.spiPinCS, + _adc_parameters.pinout.spiPinSDI, + _adc_parameters.pinout.spiPinSDO, + _adc_parameters.pinout.spiPinCLK, + _adc_parameters.spiSpeed, + std::array { + _adc_parameters.scales.iso_pack_n_scale, + _adc_parameters.scales.iso_pack_p_scale, + _adc_parameters.scales.pack_voltage_sense_scale, + _adc_parameters.scales.shunt_current_out_scale, + _adc_parameters.scales.shunt_current_p_scale, + _adc_parameters.scales.shunt_current_n_scale, + _adc_parameters.scales.ts_out_filtered_scale, + _adc_parameters.scales.pack_out_filtered_scale, + }.data(), + std::array { + _adc_parameters.offsets.iso_pack_n_offset, + _adc_parameters.offsets.iso_pack_p_offset, + _adc_parameters.offsets.pack_voltage_sense_offset, + _adc_parameters.offsets.shunt_current_out_offset, + _adc_parameters.offsets.shunt_current_p_offset, + _adc_parameters.offsets.shunt_current_n_offset, + _adc_parameters.offsets.ts_out_filtered_offset, + _adc_parameters.offsets.pack_out_filtered_offset, + }.data(), + std::array { + _adc_parameters.pairs.channelPair0, + _adc_parameters.pairs.channelPair1, + _adc_parameters.pairs.channelPair2, + _adc_parameters.pairs.channelPair3 + } + ) + {} /** * @pre constructor called and instance created @@ -95,6 +201,11 @@ class ADCInterface */ void init(uint32_t init_millis); + /** + * Samples from MAX114X adc + */ + void tick(); + /** * @return the state of the IMD, HIGH = NO FAULT */ @@ -144,7 +255,27 @@ class ADCInterface * @return shdn out voltage */ volt read_shdn_out_voltage(); - + + /** + * @return ISO Pack Differential + */ + float read_iso_pack(); + + /** + * @return pack voltage sense + */ + float read_pack_voltage_sense(); + + /** + * @return shunt current single channel + */ + float read_shunt_current(); + + /** + * @return shunt current differential channels + */ + float read_differential_shunt_current(); + /** * @return ADC parameters */ @@ -157,6 +288,7 @@ class ADCInterface private: const ADCInterfaceParams_s _adc_parameters = {}; + MAX114XInterface _max114x_instance; /** * @brief true while within the IMD startup window (set in init()) diff --git a/lib/interfaces/include/MAX114XInterface.h b/lib/interfaces/include/MAX114XInterface.h index edd3861..7c9f3c8 100644 --- a/lib/interfaces/include/MAX114XInterface.h +++ b/lib/interfaces/include/MAX114XInterface.h @@ -2,7 +2,6 @@ #define MAX114XINTERFACE_H #include "AnalogSensorsInterface.h" - #include /** diff --git a/lib/interfaces/src/ADCInterface.cpp b/lib/interfaces/src/ADCInterface.cpp index 81450fe..44f043a 100644 --- a/lib/interfaces/src/ADCInterface.cpp +++ b/lib/interfaces/src/ADCInterface.cpp @@ -14,6 +14,10 @@ void ADCInterface::init(uint32_t init_millis) { _in_imd_startup_period = true; } +void ADCInterface::tick() { + _max114x_instance.tick(); +} + bool ADCInterface::read_imd_ok(uint32_t curr_millis) { if (_in_imd_startup_period) { if ((curr_millis - _init_millis) >= _adc_parameters.configs.imd_startup_time) { // give 2 seconds for IMD to startup @@ -21,7 +25,6 @@ bool ADCInterface::read_imd_ok(uint32_t curr_millis) { } return true; } - // return static_cast(analogRead(_adc_parameters.pinout.teensy_imd_ok_pin)) * (_adc_parameters.configs.teensy41_max_input_voltage / _adc_parameters.bit_resolution) > _adc_parameters.thresholds.teensy41_min_digital_read_voltage_thresh; // idk if this would actually work, like if a LOW is a threshold or smth } @@ -74,6 +77,22 @@ volt ADCInterface::read_global_lv_value() { return data; } +float ADCInterface::read_iso_pack() { + return _max114x_instance.getLastSampleConverted(_adc_parameters.channels.iso_pack_n_channel); +} + +float ADCInterface::read_pack_voltage_sense() { + return _max114x_instance.getLastSampleConverted(_adc_parameters.channels.pack_voltage_sense_channel); +} + +float ADCInterface::read_shunt_current() { + return _max114x_instance.getLastSampleConverted(_adc_parameters.channels.shunt_current_out_channel); +} + +float ADCInterface::read_differential_shunt_current() { + return _max114x_instance.getLastSampleConverted(_adc_parameters.channels.shunt_current_p_channel); +} + const ADCInterfaceParams_s& ADCInterface::get_adc_params() const { return _adc_parameters; } diff --git a/platformio.ini b/platformio.ini index bb64b60..b190d06 100644 --- a/platformio.ini +++ b/platformio.ini @@ -40,7 +40,8 @@ lib_deps = blemasle/MCP23017@^2.0.0 https://github.com/FabioBatSilva/ArduinoFake.git https://github.com/eranpeer/FakeIt.git - + https://github.com/hytech-racing/shared_firmware_interfaces.git#5baf17a0f6d83d0a9d571d6bf56f409d2c8ad98a + [env:teensy41] test_framework=googletest ; including only the current main file for compiling to keep old main still around for now while @@ -97,7 +98,7 @@ build_src_filter = - + + - + build_unflags = -std=gnu++11 build_flags = -std=c++17 diff --git a/src/ACU_InterfaceTasks.cpp b/src/ACU_InterfaceTasks.cpp index c897a56..2636348 100644 --- a/src/ACU_InterfaceTasks.cpp +++ b/src/ACU_InterfaceTasks.cpp @@ -79,53 +79,47 @@ void initialize_all_interfaces() ACUEthernetInterfaceInstance::create(); ACUEthernetInterfaceInstance::instance().init_ethernet_device(); - std::array adc0_scales = { - ACUInterfaces::ISO_PACK_N_SCALE, - ACUInterfaces::ISO_PACK_P_SCALE, - ACUInterfaces::PACK_VOLTAGE_SENSE_SCALE, - ACUInterfaces::SHUNT_CURRENT_OUT_SCALE, - ACUInterfaces::SHUNT_CURRENT_P_SCALE, - ACUInterfaces::SHUNT_CURRENT_N_SCALE, - ACUInterfaces::TS_OUT_FILTERED_SCALE, - ACUInterfaces::PACK_OUT_FILTERED_SCALE, - }; - - std::array adc0_offsets = { - ACUInterfaces::ISO_PACK_N_OFFSET, - ACUInterfaces::ISO_PACK_P_OFFSET, - ACUInterfaces::PACK_VOLTAGE_SENSE_OFFSET, - ACUInterfaces::SHUNT_CURRENT_OUT_OFFSET, - ACUInterfaces::SHUNT_CURRENT_P_OFFSET, - ACUInterfaces::SHUNT_CURRENT_N_OFFSET, - ACUInterfaces::TS_OUT_FILTERED_OFFSET, - ACUInterfaces::PACK_OUT_FILTERED_OFFSET, - }; - - // Each channel type corresponds to a pair of channels (0&1, 2&3, etc.) So length is channels / 2 - std::array adc0_channels = { - CHANNEL_TYPE_e::INV_DIFFERENTIAL, - CHANNEL_TYPE_e::SINGLE, - CHANNEL_TYPE_e::DIFFERENTIAL, - CHANNEL_TYPE_e::SINGLE - }; + // std::array adc0_scales = { + // ACUInterfaces::ISO_PACK_N_SCALE, + // ACUInterfaces::ISO_PACK_P_SCALE, + // ACUInterfaces::PACK_VOLTAGE_SENSE_SCALE, + // ACUInterfaces::SHUNT_CURRENT_OUT_SCALE, + // ACUInterfaces::SHUNT_CURRENT_P_SCALE, + // ACUInterfaces::SHUNT_CURRENT_N_SCALE, + // ACUInterfaces::TS_OUT_FILTERED_SCALE, + // ACUInterfaces::PACK_OUT_FILTERED_SCALE, + // }; + + // std::array adc0_offsets = { + // ACUInterfaces::ISO_PACK_N_OFFSET, + // ACUInterfaces::ISO_PACK_P_OFFSET, + // ACUInterfaces::PACK_VOLTAGE_SENSE_OFFSET, + // ACUInterfaces::SHUNT_CURRENT_OUT_OFFSET, + // ACUInterfaces::SHUNT_CURRENT_P_OFFSET, + // ACUInterfaces::SHUNT_CURRENT_N_OFFSET, + // ACUInterfaces::TS_OUT_FILTERED_OFFSET, + // ACUInterfaces::PACK_OUT_FILTERED_OFFSET, + // }; + + // // Each channel type corresponds to a pair of channels (0&1, 2&3, etc.) So length is channels / 2 // std::array adc0_channels = { + // CHANNEL_TYPE_e::INV_DIFFERENTIAL, // CHANNEL_TYPE_e::SINGLE, - // CHANNEL_TYPE_e::SINGLE, - // CHANNEL_TYPE_e::SINGLE, + // CHANNEL_TYPE_e::DIFFERENTIAL, // CHANNEL_TYPE_e::SINGLE // }; - /* ADC Interface */ - MAX1148ADCInstance_t::create( - ACUInterfaces::ADC0_CS, - ACUInterfaces::ADC0_MISO, - ACUInterfaces::ADC0_MOSI, - ACUInterfaces::ADC0_CLK, - ACUInterfaces::ADC0_SPEED, - adc0_scales.data(), - adc0_offsets.data(), - adc0_channels - ); + // /* ADC Interface */ + // MAX1148ADCInstance_t::create( + // ACUInterfaces::ADC0_CS, + // ACUInterfaces::ADC0_MISO, + // ACUInterfaces::ADC0_MOSI, + // ACUInterfaces::ADC0_CLK, + // ACUInterfaces::ADC0_SPEED, + // adc0_scales.data(), + // adc0_offsets.data(), + // adc0_channels + // ); /* CCU Interface */ CCUInterfaceInstance::create(sys_time::hal_millis()); @@ -143,14 +137,48 @@ void initialize_all_interfaces() ACUInterfaces::TS_OUT_FILTERED_PIN, ACUInterfaces::PACK_OUT_FILTERED_PIN, ACUInterfaces::BSPD_CURRENT_PIN, - ACUInterfaces::SCALED_24V_PIN}, + ACUInterfaces::SCALED_24V_PIN, + ACUInterfaces::ADC0_CS, + ACUInterfaces::ADC0_MOSI, + ACUInterfaces::ADC0_MISO, + ACUInterfaces::ADC0_CLK}, ADCConversions_s {ACUInterfaces::SHUTDOWN_CONV_FACTOR, ACUInterfaces::PRECHARGE_CONV_FACTOR, ACUInterfaces::PACK_AND_TS_OUT_CONV_FACTOR, ACUInterfaces::SHDN_OUT_CONV_FACTOR, ACUInterfaces::BSPD_CURRENT_CONV_FACTOR, ACUInterfaces::GLV_CONV_FACTOR}, - ACUInterfaces::BIT_RESOLUTION); + ADCChannels_s {ACUInterfaces::ISO_PACK_N_CHANNEL, + ACUInterfaces::ISO_PACK_P_CHANNEL, + ACUInterfaces::PACK_VOLTAGE_SENSE_CHANNEL, + ACUInterfaces::SHUNT_CURRENT_OUT_CHANNEL, + ACUInterfaces::SHUNT_CURRENT_P_CHANNEL, + ACUInterfaces::SHUNT_CURRENT_N_CHANNEL, + ACUInterfaces::TS_OUT_FILTERED_CHANNEL, + ACUInterfaces::PACK_OUT_FILTERED_CHANNEL}, + ADCScales_s {ACUInterfaces::ISO_PACK_N_SCALE, + ACUInterfaces::ISO_PACK_P_SCALE, + ACUInterfaces::PACK_VOLTAGE_SENSE_SCALE, + ACUInterfaces::SHUNT_CURRENT_OUT_SCALE, + ACUInterfaces::SHUNT_CURRENT_P_SCALE, + ACUInterfaces::SHUNT_CURRENT_N_SCALE, + ACUInterfaces::TS_OUT_FILTERED_SCALE, + ACUInterfaces::PACK_OUT_FILTERED_SCALE}, + ADCOffsets_s {ACUInterfaces::ISO_PACK_N_OFFSET, + ACUInterfaces::ISO_PACK_P_OFFSET, + ACUInterfaces::PACK_VOLTAGE_SENSE_OFFSET, + ACUInterfaces::SHUNT_CURRENT_OUT_OFFSET, + ACUInterfaces::SHUNT_CURRENT_P_OFFSET, + ACUInterfaces::SHUNT_CURRENT_N_OFFSET, + ACUInterfaces::TS_OUT_FILTERED_OFFSET, + ACUInterfaces::PACK_OUT_FILTERED_OFFSET}, + MAX114XChannels_s {CHANNEL_TYPE_e::INV_DIFFERENTIAL, + CHANNEL_TYPE_e::SINGLE, + CHANNEL_TYPE_e::DIFFERENTIAL, + CHANNEL_TYPE_e::SINGLE}, + ACUInterfaces::ADC0_SPEED, + ACUInterfaces::BIT_RESOLUTION + ); ADCInterfaceInstance::instance().init(sys_time::hal_millis()); /* CAN Interfaces Construct */ @@ -188,7 +216,7 @@ HT_TASK::TaskResponse write_cell_balancing_config(const unsigned long &sysMicros HT_TASK::TaskResponse sample_adc(const unsigned long& sysMicros, const HT_TASK::TaskInfo& taskInfo) { - MAX1148ADCInstance_t::instance().tick(); + ADCInterfaceInstance::instance().tick(); return HT_TASK::TaskResponse::YIELD; } @@ -449,22 +477,40 @@ HT_TASK::TaskResponse debug_print(const unsigned long &sysMicros, const HT_TASK: // } // Serial.println(); - Serial.println("\nMAX114X Output: "); - for (int i = 0; i < ACUConstants::NUM_MAX1148_CHANNELS; i++) { - Serial.print("CH"); - Serial.print(i); - Serial.print(": "); - Serial.print("Raw = "); - Serial.print(MAX1148ADCInstance_t::instance().getLastSampleRaw(i)); - Serial.print(" Converted = "); - Serial.print(MAX1148ADCInstance_t::instance().getLastSampleConverted(i)); - Serial.print('\n'); - // skip other half of differential pair - if (i == 0 || i == 4) { - i++; - } - } - Serial.print('\n'); + //read_iso_pack + //read_pack_voltage_sense + //read_shunt_current + //read_differential_ + // for (int i = 0; i < adc_default_parameters::NUM_MAX1148_CHANNELS; i++) { + // Serial.print("CH"); + // Serial.print(i); + // Serial.print(": "); + // Serial.print("Raw = "); + // Serial.print(ADCInterfaceInstance); + // Serial.print(" Converted = "); + // Serial.print(MAX1148ADCInstance_t::instance().getLastSampleConverted(i)); + // Serial.print('\n'); + // // skip other half of differential pair + // if (i == 0 || i == 4) { + // i++; + // } + // } + // Serial.print('\n'); + Serial.println("\nMAX114X Output:"); + Serial.print(" CH 0&1: "); + Serial.print(ADCInterfaceInstance::instance().read_iso_pack()); + Serial.print(" CH 2: "); + Serial.print(ADCInterfaceInstance::instance().read_pack_voltage_sense()); + Serial.print(" CH 3:"); + Serial.print(ADCInterfaceInstance::instance().read_shunt_current()); + Serial.print(" CH 4&5: "); + Serial.print(ADCInterfaceInstance::instance().read_differential_shunt_current()); + Serial.print(" CH 6: "); + Serial.print(ADCInterfaceInstance::instance().read_ts_out_filtered()); + Serial.print(" CH 7: "); + Serial.print(ADCInterfaceInstance::instance().read_pack_out_filtered()); + Serial.print('/n'); + return HT_TASK::TaskResponse::YIELD; } diff --git a/src/main_spi_test.cpp b/src/main_spi_test.cpp index f1722a2..5947104 100644 --- a/src/main_spi_test.cpp +++ b/src/main_spi_test.cpp @@ -1,6 +1,5 @@ /* ACU Dependent */ #include "ACU_Constants.h" -#include "ACU_Globals.h" #include "SystemTimeInterface.h" #include "ACU_InterfaceTasks.h" #include "ACU_SystemTasks.h" @@ -40,7 +39,7 @@ const std::array addr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // Instantiate BMS Driver Group (non-const so we can call non-const methods) BMSDriverGroup BMSGroup = BMSDriverGroup(cs, cs_per_chip, addr); -std::array chip_invalid_cmd_counts; +std::array::BMSFaultCountData_s, num_chips> chip_invalid_cmd_counts; // Tracking variables for optimized read testing struct ReadGroupStats { diff --git a/test/test_interfaces/test_adc_interface.h b/test/test_interfaces/test_adc_interface.h index 02040bd..028187e 100644 --- a/test/test_interfaces/test_adc_interface.h +++ b/test/test_interfaces/test_adc_interface.h @@ -3,6 +3,8 @@ #include #include "ADCInterface.h" #include "../../lib/interfaces/src/ADCInterface.cpp" +#include +#include using namespace fakeit; @@ -12,7 +14,11 @@ ADCPinout_s pinout = {ACUInterfaces::IMD_OK_PIN, ACUInterfaces::TS_OUT_FILTERED_PIN, ACUInterfaces::PACK_OUT_FILTERED_PIN, ACUInterfaces::BSPD_CURRENT_PIN, - ACUInterfaces::SCALED_24V_PIN}; + ACUInterfaces::SCALED_24V_PIN, + ACUInterfaces::ADC0_CS, + ACUInterfaces::ADC0_MOSI, + ACUInterfaces::ADC0_MISO, + ACUInterfaces::ADC0_CLK}; ADCConversions_s conversions = {ACUInterfaces::SHUTDOWN_CONV_FACTOR, ACUInterfaces::PRECHARGE_CONV_FACTOR, @@ -21,12 +27,51 @@ ADCConversions_s conversions = {ACUInterfaces::SHUTDOWN_CONV_FACTOR, ACUInterfaces::BSPD_CURRENT_CONV_FACTOR, ACUInterfaces::GLV_CONV_FACTOR}; +ADCChannels_s channels = {ACUInterfaces::ISO_PACK_N_CHANNEL, + ACUInterfaces::ISO_PACK_P_CHANNEL, + ACUInterfaces::PACK_VOLTAGE_SENSE_CHANNEL, + ACUInterfaces::SHUNT_CURRENT_OUT_CHANNEL, + ACUInterfaces::SHUNT_CURRENT_P_CHANNEL, + ACUInterfaces::SHUNT_CURRENT_N_CHANNEL, + ACUInterfaces::TS_OUT_FILTERED_CHANNEL, + ACUInterfaces::PACK_OUT_FILTERED_CHANNEL}; + +ADCScales_s scales = {ACUInterfaces::ISO_PACK_N_SCALE, + ACUInterfaces::ISO_PACK_P_SCALE, + ACUInterfaces::PACK_VOLTAGE_SENSE_SCALE, + ACUInterfaces::SHUNT_CURRENT_OUT_SCALE, + ACUInterfaces::SHUNT_CURRENT_P_SCALE, + ACUInterfaces::SHUNT_CURRENT_N_SCALE, + ACUInterfaces::TS_OUT_FILTERED_SCALE, + ACUInterfaces::PACK_OUT_FILTERED_SCALE}; + +ADCOffsets_s offsets = {ACUInterfaces::ISO_PACK_N_OFFSET, + ACUInterfaces::ISO_PACK_P_OFFSET, + ACUInterfaces::PACK_VOLTAGE_SENSE_OFFSET, + ACUInterfaces::SHUNT_CURRENT_OUT_OFFSET, + ACUInterfaces::SHUNT_CURRENT_P_OFFSET, + ACUInterfaces::SHUNT_CURRENT_N_OFFSET, + ACUInterfaces::TS_OUT_FILTERED_OFFSET, + ACUInterfaces::PACK_OUT_FILTERED_OFFSET}; + +MAX114XChannels_s pairs = {CHANNEL_TYPE_e::INV_DIFFERENTIAL, + CHANNEL_TYPE_e::SINGLE, + CHANNEL_TYPE_e::DIFFERENTIAL, + CHANNEL_TYPE_e::SINGLE}; + float bit_res = ACUInterfaces::BIT_RESOLUTION; +int spi_speed = ACUInterfaces::ADC0_SPEED; + +template +void AnalogMultiSensor::_sample() {} + +template +void AnalogMultiSensor::tick() { _sample(); _convert(); } TEST (ADCInterfaceTesting, init) { When(Method(ArduinoFake(), pinMode)).AlwaysReturn(); - ADCInterfaceInstance::create(pinout, conversions, bit_res); + ADCInterfaceInstance::create(pinout, conversions, channels, scales, offsets, pairs, spi_speed, bit_res); ADCInterfaceInstance::instance().init(0); ASSERT_EQ(ADCInterfaceInstance::instance().is_in_imd_startup_period(), true); @@ -44,7 +89,7 @@ TEST (ADCInterfaceTesting, read_imd_ok) { When(Method(ArduinoFake(), pinMode)).AlwaysReturn(); When(Method(ArduinoFake(), analogRead)).AlwaysReturn(0); - ADCInterfaceInstance::create(pinout, conversions, bit_res); + ADCInterfaceInstance::create(pinout, conversions, channels, scales, offsets, pairs, spi_speed, bit_res); ADCInterfaceInstance::instance().init(0); ADCInterfaceInstance::instance().read_imd_ok(1000); @@ -63,7 +108,7 @@ TEST (ADCInterfaceTesting, read_functions) { When(Method(ArduinoFake(), pinMode)).AlwaysReturn(); When(Method(ArduinoFake(), analogRead)).AlwaysReturn(0); - ADCInterfaceInstance::create(pinout, conversions, bit_res); + ADCInterfaceInstance::create(pinout, conversions, channels, scales, offsets, pairs, spi_speed, bit_res); ADCInterfaceInstance::instance().init(3000); ADCInterfaceInstance::instance().read_shdn_voltage(); ADCInterfaceInstance::instance().read_shdn_out_voltage();