Страница 3 из 3
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Чт июн 11, 2020 17:12:56
BlackKilkennyCat
На всякий случай еще раз напомню об инициализации переменных.
frequency_in_avg+=frequency_in_raw; выполняется сразу, но гарантированное значение frequency_in_avg принимает лишь потом. В самом начале оно неопределено, и значит, может изначально быть неопределенная погрешность.
Почему Вы написали int i=0; ? зачем i здесь присвоен нуль, но переменные выше оставлены без внимания? Пишите так:
Код: Выделить всё
int Htime = 0; // целочисленная переменная для хранения времени высокого логического уровня
int Ltime = 0; // целочисленная переменная для хранения времени низкого логического уровня
int frequency_in_avg = 0; // переменная для хранения частоты входной
и т.д.
Это минимизирует ошибки.
после цикла не нужно i = 0; если она больше нигде не используется, она обнуляется сама в начале цикла.
Если написать так (вынеся первую итерацию цикла в начало):
Код: Выделить всё
void loop()
{
Htime=pulseIn(2,HIGH,100000); // прочитать время высокого логического уровня
Ltime=pulseIn(2,LOW,100000); // прочитать время низкого логического уровня
frequency_in_raw = 1000000/(Htime+Ltime);
frequency_in_avg = frequency_in_raw;
Serial.println(frequency_in_raw);
for(i=0;i<2;i++)
{
Htime=pulseIn(2,HIGH,100000); // прочитать время высокого логического уровня
Ltime=pulseIn(2,LOW,100000); // прочитать время низкого логического уровня
frequency_in_avg += 1000000/(Htime+Ltime);
Serial.println(frequency_in_raw);
}
frequency_in_avg_rez= frequency_in_avg / ( i+1);
Serial.println(frequency_in_avg_rez);
Serial.println(' ');
То это исключит неточность первого измерения из-за начального значения frequency_in_avg и исключит ошибки вычислений среднего, если количество итераций цикла захочется изменить
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Чт июн 11, 2020 19:05:23
ferio
Это какой -то
Не думал, что какой то преобразователь частоты вызовет кучу вопросов.
С ардуино наконец то разобрался. Поставил на выход ОУ полевик, и подтянул к питанию. Тем самым увеличив размах U вых до U пит. Все отлично заработало.
А вот схема с ОУ в реальной установке работать отказалась.
R2=100k
Rкор = 1.5K
напряжение на входе ОУ = пила амплитудой 1В.
на выходе Ноль.
Может Rкор уменьшить до нуля? Проблема тестировать сразу на столе. Тк сперва дома собираю, а затем несу для подключения в машину.
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Чт июн 11, 2020 20:10:40
BlackKilkennyCat
[uquote="ferio",url="/forum/viewtopic.php?p=3853842#p3853842"]Не думал, что какой то преобразователь частоты вызовет кучу вопросов.[/uquote]
можно было просто взять готовое автомобильное решение. их куча, многие просто уже можно в классику записывать.
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Чт июн 11, 2020 20:19:32
ferio
BlackKilkennyCat, дайте хоть одну ссылочку?? я что нашел, то только готовое за деньги.
хотя с другой стороны, уже почти готово. завтра схожу в магазин за подстроечным резистором и попробую с разным порогом сравнения. похоже в реальном включении оно иное, нежели эмулирует протеус.
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Чт июн 11, 2020 20:40:17
BlackKilkennyCat
https://www.drive2.ru/l/8286978/
честно говоря, ща то же что-то немного нашлось, раньше (когда занимался авто-мото) было намного больше.
а вообще, лучше искать по "variable-reluctance sensor interface"
тогда может и такое найтись:
https://www.maximintegrated.com/en/prod ... X9924.html
по приведенной ссылке на драйв2 схема, очень сильно похожа на ту, которая в отечественных блоках управления
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Пт июн 12, 2020 10:52:40
ferio
не спорю, на MAX992* красивое решение.
если не одержу убедительную победу нынешними средствами, возможно и заморочусь)
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Вт июн 30, 2020 21:21:14
GoldenAndy
А вот схема с ОУ в реальной установке работать отказалась.
R2=100k
Rкор = 1.5K
напряжение на входе ОУ = пила амплитудой 1В.
на выходе Ноль.
на выходе Ноль. - Возможно из-за того, что LM358 не Rail-to-Rail ОУ ?
Попробуйте плюсовой вход ОУ подключить к делителю, подключенному к питалову и земле. Так, что бы на входе было порядка 2...2,5 вольт.
А сигнал с индуктивного датчика подать через разделительную емкость.
Добавлено after 1 hour 44 minutes 48 seconds:
Re: Сигнал с индуктивного датчика оборотов(проблема c уровнями)
В продолжение анализа предыдущей схемы.
Когда сигнал с датчика выше нуля (а неинвертирующий вход ОУ "сидит" по схеме на нуле через Rкор) - ОУ пытается на выходе сделать отрицательное напряжение, но не может, ибо минусовое питание ОУ - на земле.
Когда сигнал с датчика становится ниже нуля (и ниже потенциала на неинвертирующем входе) - теоретически ОУ должен выдать на выходе положительное напряжение. но не может, ибо сигнал входной становится ниже минусового питания ОУ.
Решается это дело созданием искусственной средней точки для ОУ и смещением всех сигналов на потенциал этой точки.
Накидал тут в Протеусе малость....
Спойлер

R3R4 - делитель питания, обеспечивает среднюю точку (подтяжку "+" входа ОУ) напряжением порядка 2 вольт.
R1R2 определяют коэффициент усиления ОУ, k = R1/R2 = 100/4.7 = ~21.3 раза.
Соответственно, что бы выходной сигнал имел амплитуду 4 вольта - на вход достаточно подать сигнал порядка 200 милливольт.
Конденсатор С1 - развязка входа по постоянному напряжению.
С2 - для повышения устойчивости ОУ (без него Протеус любит падать на ошибках симуляции)
Если найти стабилитроны D1D2 с напряжением стабилизации порядка 2.2 вольт - то амплитуда сигнала на выходе ОУ будет как раз до 5 вольт и ее можно подавать на вход МК без проблем (при напряжении питания ОУ 9 вольт).
Так же можно уменьшить R3 до 4.7кОм - тогда средняя точка ОУ будет порядка 1.12 вольт, что даст на выходе ОУ максимальное напряжение порядка 5.1 вольт. Но не следует забывать, что средняя точка зависит от напряжения питания 9 вольт и будет "плавать" при изменении этого напряжения, что может привести к напряжению на выходе ОУ, превышающем максимально допустимое входное для МК.
Что бы не иметь таких плясок с бубном - добавлен ограничитель выходного уровня D3R5, обеспечивающий сигнал для МК, не превышающий 4.7 вольт.
Да, еще для стабильности можно добавить конденсатор 0.1 мкф параллельно R3
Ниже - тестирование вышеприведенной схемы на различных частотах и амплитудах входного сигнала.
Желтый сигнал - входной с таходатчика, красный - вход ОУ, зеленый - выход на МК с ограничением напряжения.
Вход 500 мВ, 1 кГц

Вход 1 В, 2 кГц

Вход 4 В, 10 кГц

Кстати, в живом журнале Леонида Ивановича пробегала схема усилителя для таходатчика с кучкой теории и моделирования, настоятельно рекомендую почитать.
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Вт июн 30, 2020 22:51:20
Ivanoff-iv
если уж применен ОУ или компаратор, то проще делать по схеме с плавающим уровнем (я на первой странице рисовал и схему и симуляцию)
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Чт июл 02, 2020 11:02:37
ferio
GoldenAndy, спасибо за ответ.
Преобразователь частоты я все же завершил. Сейчас все работает корректно.
Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Чт июл 02, 2020 11:19:59
GoldenAndy
Ivanoff-iv, Схем можно разных. Я дал рекомендации по той, что не заработала в железе у
ferio.
ferio, Покажите народу схему

Re: Сигнал с индуктивного датчика оборотов(проблема c уровня
Добавлено: Чт июл 02, 2020 11:54:23
ferio
Спойлер

на схеме только стабилитрон D4 развернуть нужно.