Пользовательский блок "измерение переменного тока"

На этом форуме Вы можете задать вопросы знатокам программы и автору.
lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19 янв 2017, 00:41

Пользовательский блок "измерение переменного тока"

Сообщение lopezmil »

Реле у меня самое обыкновенное, при 1 на входе оно замыкается. Сначала я использовал пин13, чтобы по светодиоду определять его состояние . Позже подумал, что лучше использовать другой пин и реле. На плате реле есть два светодиода: красный, сигнализирующий о наличии питания и зелёный, сигнализирующий о состоянии контактов реле. Так вот с этим скетчем реле у меня постоянно замкнуто. Что самое интересное, с выхода компаратора инвертирую сигнал, а реле всё равно остаётся замкнутым!!! Когда просто выдёргиваю проводок из ардуины, зелёный светодиод гаснет. Для проверки работоспособности этого выхода залил в ардуину программу кнопки. Замыкая контакт, реле на этом пине замыкается и размыкается. Может кто-нибудь посмотрит скетч и даст разумный ответ на это?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07 сен 2015, 23:53

Пользовательский блок "измерение переменного тока"

Сообщение OlegAn1962 »

А у вас есть что-нибудь кроме блока реле для проверки выхода? Вольтметр например?
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

Пользовательский блок "измерение переменного тока"

Сообщение Олег »

Что-то мне припоминается что компаратор с Float не дружит. Может я и не прав, я обычно integer использую, проверить сейчас не могу.
OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07 сен 2015, 23:53

Пользовательский блок "измерение переменного тока"

Сообщение OlegAn1962 »

Не знаю, вот кусок моего проекта, прекрасно работает:



Добавлено (30.01.2017, 14:21)
---------------------------------------------
lopezmil, а вы вообще смотрели, что у вас на входе в компаратор?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19 янв 2017, 00:41

Пользовательский блок "измерение переменного тока"

Сообщение lopezmil »

Хоть кто-нибудь,  кроме Slavas ( который сделал этот пользовательский блок ТА12), себе в flprog, прикреплённый мной файл, закидывал, открывал? Я спрашиваю не об абстрактных формах, а о конкретных вещах. В компараторе есть возможность выбора float, значит должен дружить. С выхода wire я получаю реальное значение тока. Отправляю его в компаратор (I2). Сравниваю его с уставкой (I1) в компараторе и на выходе с компаратора должен получить ответ о работоспособности устройства в виде 0 или 1. Вот так должна работать схема. А она мне постоянно выдаёт 1 на выходе компаратора. Вот в чём вопрос!!!$IMAGE1$

Добавлено (30.01.2017, 15:03)
---------------------------------------------
картинка
lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19 янв 2017, 00:41

Пользовательский блок "измерение переменного тока"

Сообщение lopezmil »

.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

Пользовательский блок "измерение переменного тока"

Сообщение Олег »

lopezmil писал(а):Хоть кто-нибудь,  кроме Slavas ( который сделал этот пользовательский блок ТА12), себе в flprog, прикреплённый мной файл, закидывал, открывал?
А с чего-бы  вам про флоат писал? 
Повесьте переменную на входе компаратора и на выходе и смотрите через компорт что у вас там происходит. Я обычно дисплей подключаю в таких случаях - все как на ладони.
Аватара пользователя
slavas
Лейтенант
Сообщения: 596
Зарегистрирован: 14 сен 2015, 22:29
Откуда: Санкт-Петербург

Пользовательский блок "измерение переменного тока"

Сообщение slavas »

lopezmil, у Вас блок работает нормально?
в схеме у Вас условие если вход 2 меньше 600 тогда на выходе 1.
lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19 янв 2017, 00:41

Пользовательский блок "измерение переменного тока"

Сообщение lopezmil »

Подскажите пожалуйста, а на монитор порта вывести эти переменные со входа и выхода можно? Я не совсем представляю себе как это сделать в flprog. Или нужно скомпилировать скетч и уже в скомпилированном добавить SerialPrint  и те переменные, которые нужно вывести на экран?
OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07 сен 2015, 23:53

Пользовательский блок "измерение переменного тока"

Сообщение OlegAn1962 »

lopezmil писал(а):а на монитор порта вывести эти переменные со входа и выхода можно?
Элементарно, Ватсон :

[spoiler=Спойлер][/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
slavas
Лейтенант
Сообщения: 596
Зарегистрирован: 14 сен 2015, 22:29
Откуда: Санкт-Петербург

Пользовательский блок "измерение переменного тока"

Сообщение slavas »

Вообще то в этом блоке я не удалял отправку com port и соответственно он в фоновом режиме отправляет туда данные. У меня косяк не понятный на lcd и блок отправки переменной в компорт блок не передаёт данные, либо я в коде накосячил либо последняя версия прги .
lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19 янв 2017, 00:41

Пользовательский блок "измерение переменного тока"

Сообщение lopezmil »

slavas, блок работает прекрасно. Огромное спасибо за помощь. Да, условие такое, только ничего не происходит, ни когда вход 2 меньше 600, ни когда больше. На пин 13 всё время 1. Я уже попробовал вставить после компаратора преобразователь float->int и константу изменял так же int, но и это не помогло.
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

Пользовательский блок "измерение переменного тока"

Сообщение Олег »

lopezmil писал(а):Да, условие такое, только ничего не происходит, ни когда вход 2 меньше 600, ни когда больше. На пин 13 всё время 1.
Как вы проверяли вы не написали, так что напишу как-бы проверял я в вашей ситуации.
1. Инвертируем выход 13, если на выходе появился низкий, значит вход рабочий и переходим к пункту 2, если не появился, то выход не рабочий и тогда подключаем другой выход или берем другой контроллер.
2. На второй вход компаратора поставим 650, выход 13 возвращаем в исходное состояние. Появился низкий, значит проблема в блоке пользователя и он не дает значение больше 600 (или это из-за датчика), не появился, значит какой-то глюк в программе, что иногда случается. Выручает создание нового проекта с самого начала.
lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19 янв 2017, 00:41

Пользовательский блок "измерение переменного тока"

Сообщение lopezmil »

Как я проверял?! Скомпилировал проект > загрузил в ардуино > включил монитор порта и наблюдал за показаниями выхода wire. Они изменялись в соответствии с изменением нагрузки на реальном вентиляторе. Значит пользовательский блок работает (картинка в посте №26). В посте №21 я уже писал, что выход пробовал инвертировать. В посте №19 писал, что пробовал другие пины. Ничего не помогает. Повторюсь, что пробовал на этих пинах скетч с обычной кнопкой, т.е. на 7 пине кнопка, а пин 13 выход. Замыкаю пин 7 на 13 пине загорается светодиод. Плата исправна!!! Неисправна программа. А в чём неисправность не могу понять???

Добавлено (31.01.2017, 21:18)
---------------------------------------------


Код: Выделить всё

float vpp;
float ncurr;
float rms;
float wire;
int sensorTA12=0; // Analog input pin that sensor is attached to
float nVPP; // Voltage measured across resistor
float nCurrThruResistorPP; // Peak Current Measured Through Resistor
float nCurrThruResistorRMS; // RMS current through Resistor
float nCurrentThruWire; // Actual RMS current in Wire
void setup()
{
pinMode(13, OUTPUT);

Serial.begin(9600); 
pinMode(sensorTA12, INPUT);
}
void loop()
{

   nVPP = getVPP();   
  
   nCurrThruResistorPP = (nVPP/200.0) * 1000.0;   
   
   nCurrThruResistorRMS = nCurrThruResistorPP * 0.707;   
   
   nCurrentThruWire = nCurrThruResistorRMS * 1000;
   
   Serial.print("Volts Peak : ");
   Serial.println(nVPP,3);
   vpp = nVPP ;                    // выход vpp
   
   Serial.print("Current Through Resistor (Peak) : ");
   Serial.print(nCurrThruResistorPP,3);
   Serial.println(" mA Peak to Peak");
    ncurr = nCurrThruResistorPP ;                    // выход ncurr
   
   Serial.print("Current Through Resistor (RMS) : ");
   Serial.print(nCurrThruResistorRMS,3);
   Serial.println(" mA RMS");
    rms = nCurrThruResistorRMS ;                    // выход rms
   
   Serial.print("Current Through Wire : ");
   Serial.print(nCurrentThruWire,3);
   Serial.println(" mA RMS");  
   wire= nCurrentThruWire ;                    // выход wire
   Serial.println();   
 }
 
float getVPP()
{
  float result;
  
int readValue;             //value read from the sensor
  int maxValue = 0;          // store max value here
   uint32_t start_time = millis();
   while((millis()-start_time) < 1000) //sample for 1 Sec
   {
       readValue = analogRead(sensorTA12);
       // see if you have a new maxValue
       if (readValue > maxValue) 
       {
           /*record the maximum sensor value*/
           maxValue = readValue;
       }
   }
   
   // Convert the digital data to a voltage
   result = (maxValue * 5.0)/1024.0;
  
   return result;
digitalWrite(13, (600.00) < (wire));

}
Аватара пользователя
Dev1
Майор
Сообщения: 1045
Зарегистрирован: 12 июл 2016, 18:04
Откуда: Гондурас
Поблагодарили: 3 раза

Пользовательский блок "измерение переменного тока"

Сообщение Dev1 »

Что то новенькое 
lopezmil писал(а):digitalWrite(13, (600.00) < (wire));
Должно быть как то так

Код: Выделить всё

if (wire > 600)
   {
      digitalWrite(13, HIGH);
   }
   else
      {
         digitalWrite(13, LOW);
      }
если логику не спутал, особенно не вникал..
Win10-64 FLProg v8.2.3 Portable IDE 1.8.19, 2,x,x :shok:
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

Пользовательский блок "измерение переменного тока"

Сообщение Олег »

Если у вас железо работает, то отсекайте по частям, удалите пользовательский блок, оставьте компаратор с выходом и проверьте. У меня ни разу компаратор нигде не глючил, так что проверяйте. Или что еще лучше сделайте новый проект, сначала проверка выхода с кнопкой, потом к нему подсоедините компаратор - на входах поставьте константы, ну потом пользовательский блок. Ну и смотрите где заткнется.
lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19 янв 2017, 00:41

Пользовательский блок "измерение переменного тока"

Сообщение lopezmil »


Что то новенькое 
Цитата lopezmil (Изображение)
digitalWrite(13, (600.00) < (wire));

Должно быть как то так

Код
if (wire > 600)
   {
      digitalWrite(13, HIGH);
   }
   else
      {
         digitalWrite(13, LOW);
      }
вот так мне компилирует flprog. Я понимаю, что ошибка в компиляции проекта программой, но где она не знаю. Поэтому и выложил уже скомпилированый текст программы. Попробовал ваше исправление, не помогло.
Аватара пользователя
support
Супермодератор
Сообщения: 1917
Зарегистрирован: 03 янв 2018, 11:45
Откуда: Астрахань
Имя: Сергей
Поблагодарили: 23 раза
Контактная информация:

Пользовательский блок "измерение переменного тока"

Сообщение support »

Dev1 писал(а):Что то новенькое
  А чем вам не нравится запись вида:

Код: Выделить всё

digitalWrite(13, (600.00) < (wire));
Если wire больше 600 на выход запишется 1 в противном случае  0. Всё правильно, функция digitalWrite позволяет производить расчёты внутри вызова.
Автор программы FLProg.
Аватара пользователя
Dev1
Майор
Сообщения: 1045
Зарегистрирован: 12 июл 2016, 18:04
Откуда: Гондурас
Поблагодарили: 3 раза

Пользовательский блок "измерение переменного тока"

Сообщение Dev1 »

Просто я первый раз вижу что бы в digitalWrite в значении использовалось условие. Если у вас есть какие то описания можете кинуть ссылку почитать, сам ничего похожего не нашел.
Win10-64 FLProg v8.2.3 Portable IDE 1.8.19, 2,x,x :shok:
Аватара пользователя
support
Супермодератор
Сообщения: 1917
Зарегистрирован: 03 янв 2018, 11:45
Откуда: Астрахань
Имя: Сергей
Поблагодарили: 23 раза
Контактная информация:

Пользовательский блок "измерение переменного тока"

Сообщение support »

Уже не помню где прочитал, но после проверки опытным путём начал использовать. Да Вы и сами можете проверить, всё работает
Автор программы FLProg.
Ответить

Вернуться в «Спросить у знатоков»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя