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

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

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

#21

Сообщение lopezmil » 30.01.2017{, 13:47}

Реле у меня самое обыкновенное, при 1 на входе оно замыкается. Сначала я использовал пин13, чтобы по светодиоду определять его состояние . Позже подумал, что лучше использовать другой пин и реле. На плате реле есть два светодиода: красный, сигнализирующий о наличии питания и зелёный, сигнализирующий о состоянии контактов реле. Так вот с этим скетчем реле у меня постоянно замкнуто. Что самое интересное, с выхода компаратора инвертирую сигнал, а реле всё равно остаётся замкнутым!!! Когда просто выдёргиваю проводок из ардуины, зелёный светодиод гаснет. Для проверки работоспособности этого выхода залил в ардуину программу кнопки. Замыкая контакт, реле на этом пине замыкается и размыкается. Может кто-нибудь посмотрит скетч и даст разумный ответ на это?
Вложения
4236388.flp
(80.17 КБ) 54 скачивания

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

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

#22

Сообщение OlegAn1962 » 30.01.2017{, 13:51}

А у вас есть что-нибудь кроме блока реле для проверки выхода? Вольтметр например?

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 62
Контактная информация:

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

#23

Сообщение Олег » 30.01.2017{, 14:11}

Что-то мне припоминается что компаратор с Float не дружит. Может я и не прав, я обычно integer использую, проверить сейчас не могу.

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

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

#24

Сообщение OlegAn1962 » 30.01.2017{, 14:21}

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



Добавлено (30.01.2017, 14:21)
---------------------------------------------
lopezmil, а вы вообще смотрели, что у вас на входе в компаратор?
Вложения
7465534.png

lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19.01.2017{, 00:41}
Репутация: 0

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

#25

Сообщение lopezmil » 30.01.2017{, 15:03}

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

Добавлено (30.01.2017, 15:03)
---------------------------------------------
картинка

lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19.01.2017{, 00:41}
Репутация: 0

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

#26

Сообщение lopezmil » 30.01.2017{, 15:05}

.
Вложения
4733564.jpg

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 62
Контактная информация:

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

#27

Сообщение Олег » 30.01.2017{, 16:05}

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

Аватара пользователя
slavas
Лейтенант
Сообщения: 587
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

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

#28

Сообщение slavas » 30.01.2017{, 16:34}

lopezmil, у Вас блок работает нормально?
в схеме у Вас условие если вход 2 меньше 600 тогда на выходе 1.

lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19.01.2017{, 00:41}
Репутация: 0

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

#29

Сообщение lopezmil » 30.01.2017{, 16:55}

Подскажите пожалуйста, а на монитор порта вывести эти переменные со входа и выхода можно? Я не совсем представляю себе как это сделать в flprog. Или нужно скомпилировать скетч и уже в скомпилированном добавить SerialPrint  и те переменные, которые нужно вывести на экран?

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

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

#30

Сообщение OlegAn1962 » 30.01.2017{, 17:21}

lopezmil писал(а):а на монитор порта вывести эти переменные со входа и выхода можно?
Элементарно, Ватсон :
СпойлерПоказать
Вложения
3473015.png

Аватара пользователя
slavas
Лейтенант
Сообщения: 587
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

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

#31

Сообщение slavas » 30.01.2017{, 18:57}

Вообще то в этом блоке я не удалял отправку com port и соответственно он в фоновом режиме отправляет туда данные. У меня косяк не понятный на lcd и блок отправки переменной в компорт блок не передаёт данные, либо я в коде накосячил либо последняя версия прги .

lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19.01.2017{, 00:41}
Репутация: 0

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

#32

Сообщение lopezmil » 31.01.2017{, 13:19}

slavas, блок работает прекрасно. Огромное спасибо за помощь. Да, условие такое, только ничего не происходит, ни когда вход 2 меньше 600, ни когда больше. На пин 13 всё время 1. Я уже попробовал вставить после компаратора преобразователь float->int и константу изменял так же int, но и это не помогло.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 62
Контактная информация:

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

#33

Сообщение Олег » 31.01.2017{, 14:47}

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

lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19.01.2017{, 00:41}
Репутация: 0

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

#34

Сообщение lopezmil » 31.01.2017{, 21:18}

Как я проверял?! Скомпилировал проект > загрузил в ардуино > включил монитор порта и наблюдал за показаниями выхода 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
Майор
Сообщения: 1015
Зарегистрирован: 12.07.2016{, 18:04}
Репутация: 58
Откуда: Гондурас

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

#35

Сообщение Dev1 » 31.01.2017{, 21:36}

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

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

if (wire > 600)
   {
      digitalWrite(13, HIGH);
   }
   else
      {
         digitalWrite(13, LOW);
      }
если логику не спутал, особенно не вникал..
Win7-64 FLProg v7.2.2 Portable :fie:

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 62
Контактная информация:

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

#36

Сообщение Олег » 31.01.2017{, 22:40}

Если у вас железо работает, то отсекайте по частям, удалите пользовательский блок, оставьте компаратор с выходом и проверьте. У меня ни разу компаратор нигде не глючил, так что проверяйте. Или что еще лучше сделайте новый проект, сначала проверка выхода с кнопкой, потом к нему подсоедините компаратор - на входах поставьте константы, ну потом пользовательский блок. Ну и смотрите где заткнется.

lopezmil
Рядовой
Сообщения: 26
Зарегистрирован: 19.01.2017{, 00:41}
Репутация: 0

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

#37

Сообщение lopezmil » 31.01.2017{, 23:13}


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

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

Код
if (wire > 600)
   {
      digitalWrite(13, HIGH);
   }
   else
      {
         digitalWrite(13, LOW);
      }
вот так мне компилирует flprog. Я понимаю, что ошибка в компиляции проекта программой, но где она не знаю. Поэтому и выложил уже скомпилированый текст программы. Попробовал ваше исправление, не помогло.

Аватара пользователя
support
Супермодератор
Сообщения: 1838
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 687
Откуда: Астрахань
Имя: Сергей
Контактная информация:

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

#38

Сообщение support » 01.02.2017{, 10:02}

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

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

digitalWrite(13, (600.00) < (wire));
Если wire больше 600 на выход запишется 1 в противном случае  0. Всё правильно, функция digitalWrite позволяет производить расчёты внутри вызова.
Автор программы FLProg.

Аватара пользователя
Dev1
Майор
Сообщения: 1015
Зарегистрирован: 12.07.2016{, 18:04}
Репутация: 58
Откуда: Гондурас

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

#39

Сообщение Dev1 » 01.02.2017{, 10:35}

Просто я первый раз вижу что бы в digitalWrite в значении использовалось условие. Если у вас есть какие то описания можете кинуть ссылку почитать, сам ничего похожего не нашел.
Win7-64 FLProg v7.2.2 Portable :fie:

Аватара пользователя
support
Супермодератор
Сообщения: 1838
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 687
Откуда: Астрахань
Имя: Сергей
Контактная информация:

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

#40

Сообщение support » 01.02.2017{, 10:48}

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

Ответить

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