Калибровка измерения силы тока на каналах силовых ключей линейки Flash:
Внимание! Не используйте функцию currentWrite() в цикле без условий! Функция currentWrite() записывает значения в энергонезависимую память модуля. Энергонезависимая память имеет ограниченный ресурс. Слишком частая запись в неё может стать причиной неработоспособности функции currentRead() или самого модуля.
Все модули силовых ключей I2C откалиброваны "с завода", однако может возникнуть ситуации, когда их необходимо откалибровать. Для этого необходимо подключить мультиметр последовательно с нагрузкой канала, как показано на рисунке ниже:
Пример, приведённый ниже, калибрует значение шунтирующего резистора на 4 канале.
УКАЗАНИЕ ЗНАЧЕНИЙ ОТЛИЧНЫХ ОТ РЕАЛЬНО ИЗМЕРЕННОЙ СИЛЫ ТОКА ПРИВЕДЁТ К НЕПРАВИЛЬНЫМ РАССЧЁТАМ СИЛЫ ТОКА ФУНКЦИЕЙ currentRead() В ДАЛЬНЕЙШЕМ
Калибровка резистора на 4-м канале:
#include <Wire.h> // * Подключаем библиотеку для работы с аппаратной шиной I2C. #include <iarduino_I2C_Relay.h> // Подключаем библиотеку для работы с реле и силовыми ключами. iarduino_I2C_Relay pwrkey(0x09); // Объявляем объект pwrkey для работы с функциями и методами библиотеки iarduino_I2C_Relay, указывая адрес модуля на шине I2C. // Если объявить объект без указания адреса (iarduino_I2C_Relay pwrkey;), то адрес будет найден автоматически. uint8_t k=4; /* Номер канала для которого выполняется калибровка */ // // void setup(){ // Serial.begin(9600); // while(!Serial){;} // * Ждём завершения инициализации шины UART. delay(500); // * Ждём завершение переходных процессов связанных с подачей питания. // Готовим модуль к работе: // pwrkey.begin(); // Инициируем работу с модулем. pwrkey.digitalWrite(k, HIGH); // Включаем канал «k» модуля. // Выводим подсказку: // Serial.println( (String)"Для калибровки подключите нагрузку к каналу «"+k+"»" ); // Serial.println( "последовательно с амперметром. Желательно (но не обязательно) "); // Serial.println( "подобрать нагрузку с током потребления в районе 800...1200 мА."); // Serial.println( "Введите в монитор последовательного порта силу тока в мА," ); // Serial.println( "которую показывает амперметр и нажмите Enter." ); // Serial.println( "При вводе данных используйте только символы цифр" ); // } // // void loop(){ // if ( Serial.available() ){ float a=0; // Если из монитора последовательного порта отправлены данные, то ... while( Serial.available() ){ char i=Serial.read(); // Читаем данные побайтно в цикле while(). if(i>='0' && i<='9'){ a*=10; a+=i-'0'; } // Составляем значение переменной «a» из символов «i», если они являются цифрами. delay(5); // Устанавливаем задержку для получения всех символов строки (т.к. 9600 это медленная скорость). } a/=1000; pwrkey.currentWrite(k,a); // Преобразуем силу тока «а» из мА в А и выполняем калибровку канала «k» функцией currentWrite() указав реально измеренную силу тока «a». Serial.println( (String) "Rш пересчитано по току в "+a+" А."); // Функция currentWrite() сохраняет значение Rш в энергонезависимую память модуля. } // Значит тезультаты калибровки сохранятся и после отключения питания. if(millis()%200<1){ // Serial.println( (String) "Сила тока "+pwrkey.currentRead(k)+"А."); // Выводим силу тока измеренную модулем на канале «k» в монитор последовательного порта. } // }
Обсуждение