Ви не увійшли.
га ваше рассмотрение.эта беда заработает?:
volatile float time = 0;
volatile float time_last = 0;
int rpm = 0; //вводим переменную обороты
int ugol = 0; //вводим переменную угол опережения в зависимости от оборотов
int zader = 0; //вводим переменную для вычисления времени требуемого на градус от оборота в зависимости от частоты вращения
int bah = 0; // вводим переменную для вычисления угла/времени задержки до искры после прохождения отрицательного импульса
void setup()
{
// pinMode(2, INPUT);
pinMode(13, OUTPUT); //настроили пин 5 как выход на коммутатор
attachInterrupt(0, fan_interrupt, FALLING); //прерыватель настроили (надо поднастроить на положительный или отрицательный импульс в зависимости от принципиальной схемы
}
void fan_interrupt()
{
time = (micros() - time_last); //вычисляем время между импульсами
time_last = micros(); //обнуляем time_last
}
void loop()
{
rpm =(60*(1000000/time)); //вычисляем обороты в минуту
ugol = ((75000-(3*rpm))/1000); //вычисляем УОЗ зависимый от оборотов в минуту ("3" или "2" -это разница в градусах между тысячами оборотов)("75"*1000 -это угол от получения отрицательного импульса до ВМТ.)данные параметры надо подгонять.в данный момент эти параметры задают угол от0 до 30 градусов при оборотах от 0 до 10000.
zader = (166000/rpm); //вычисляем время на угол в зависимости от оборотов(166000 или 167000 -время на градус при 1000 об/мин умноженное на 1000 для более точного вычисления "времениградуса" с точностью на каждый оборот в минуту
bah = (ugol*zader);
if ((micros()<= bah) || (micros() >= (bah + 1000))) {
digitalWrite(13,LOW);
}
if ((micros()>= bah) && (micros()<=(bah + 1000))){
digitalWrite(13,HIGH);
}
}
//пример:если время на оборот(time) равно 5000мкс,то частота оборотов (rpm) равна 12000 об/мин.при 12000об/мин угол опережения равен 12000*3=36000, 75000-36000=39000, 39000/1000=39 градусов перед ВМТ должно быть опережение.Время потраченное на прохождение угла равному одному,при 12000об/мин равно(zader)...
// 166000/12000=13,8333333333 мкс/градус(надеюсь округлится до целого числа).и наконец вычисляем (bah)=39*13=507 мкс(время задержки от получения отрицательного импульса до момента отдачи команды на образование искры).
Ото ж.) Та даже в свежих PIC12 достаточно наворотов, не говоря уже о 18-й серии. Уж поболее чем в AVR.)
... а ПИК-и простые.
Были простые! Давным давно. https://www.microchip.com/design-centers/32-bit/pic-32-bit-mcus/pic32mz-da-family Супер. Никто не желает поупражняться?
Ну, насчёт простых я бы не сказал - семейка то большая. А в остальном согласен.)
Вот эти сложные: https://www.st.com/content/st_com/en/products/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus/stm32-high-performance-mcus/stm32h7-series.html, а ПИК-и простые.
Ну, насчёт простых я бы не сказал - семейка то большая. А в остальном согласен.)
... а контролеры PIC это фигня полная, куча возни и оно того не стоит
PIC не Arduino! Это надёжные и простые микроконтроллеры, для определённого круга задач. Эта фигня, между прочим, приобрела Atmel.
Мда.Человек обратился за помощью,а ему какие-то отговорки или подножки(грубо говоря).фигаро,я сам подумываю об этой задумке,тут два варианта:либо ставить датчик холла на угол,которы установлен заводом,но тогда реакция будет приходиться на следующий такт.считаю такая схема будет тупее второго варианта:поставить датчик холла на угол равный максимальным оборотам.тогда судя по оборотам,ардуинка будет расчитывать задержку после импульса.в принципе скетч будет очень похож на тахометр,основанный на прерываниях.но надо учитывать,что чем больше градаций,тем длинее код,а значит тупее ардуинка.возможно есть вариант расчитать хитрую формулу одну на все задержки
я это уже 100500 раз видел
а контролеры PIC это фигня полная, куча возни и оно того не стоит
Тут дело не в конкретной железяке, а в физических принципах работы этого датчика..)) Но, спасибо. За конкретные модели позже спрошу..
один такой не рабочий я продиагностировал спец прибором "молотком" посмотрел что внутри. там плата cmd с кренкой по питанию за ней микруха, увы маркировки не скажу, излишки ускоренного процесса разборки данного устройства
Держи в курсе. Я немного пообщался. Есть сомнения что датчик холла идеально работает..
вот такой он
похож на датчик распредвала
Держи в курсе. Я немного пообщался. Есть сомнения что датчик холла идеально работает..
Вот у меня стоит стоковое зажигания с китайским коммутатором, заводится с пол тыка, средние об. 4000-5500 норм крутит макс. крутящий на 5340 об, 11,4 H/м а дальше просто теряет крутящий момент. Я прорезал крепежные уши на датчике и сместил его в сторону УОЗ. эффект моментальный на лицо, теперь "заводится хорошо но долго " из за раннего зажигания. но крутящий увеличился 5.5 H/м и составляет 16.9 H/м. макс. крутящий сдвинулся на 6500 что очень хорошо и вывод - зажигание ограничивает мощность
все идет четко, сравнивал даже с оптическим тахометром все норм, до 13 000 адекватно считает, а дальше слегка барахлит)) ну и этого хватит