Система Антипробуксовки для самодельной багги 4*4

Pik
Offline
Зарегистрирован: 24.11.2016

Хочется реализовать такую систему, датчик вращения на каждом из колес (индуктивный), раздельное торможение каждого из 4-х колес(посредством доработанного блока ABS).

Требуется измерять частоту вращения 4 колес, и если одно колесо имеет большую частоту, выдавать сигнал пропорциональный разнице, для управления тормозом этого колеса.

Насколько я понимаю мне 4 сигнала от датчиков необходимо обработать, затем сравнивать частоту от каждого датчика с 3-мя остальными (усредненные).

Arduino Nano  потянет такие вычисления?  Я не програмист, в тонкостях не силен.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

По скорости вычисления - потянет.

А вот по количеству выводов...

Вам нужно знать направление вращения колеса или Вы его знаете? Если нужно, на каждое колесо по 2 цифровых входа.

Вам нужно управлять направлением вращения колес? А скоростью? На каждое колесо по 2-3 пина.

Это уже 16-20 пинов. Причем, на части из них обязательно должен быть ШИМ.

Вы планируете подключать какие-либо еще датчики или индикаторы?

В прнинципе, все эти проблемы решаются при помаощи дополнительных специализированных микросхем. Но что лучше: Uno+дополнительные микросхемы или Mega - решать Вам.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

есть еще вариант. драйвера все i2c, это всего два пина. плюс 4 пина на прерывания. но просто прерывания без опыта настроить только 2. поэтому можно мультиплексор это 1 прерывание плюс 2 пина управление мультиплексором

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Для энкодеров достаточно удобно использовать PCINT, а этого в 328 на каждой ноге.

А I2C - дополнительная периферия. Один из вариантов "дополнительных специализированных микросхем".

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

удобно, но насколько возможно для тех кто не умеет. с 2 и 3 пином все достаточно просто

хотя возможно просто такие дурацкие примеры, что тяжело понять как это работает

насчет специализированных да, но все относительно проще

Pik
Offline
Зарегистрирован: 24.11.2016

В готовых системах  ABS, ASP для измерения частоты вращения колеса используют по 1му датчику на колесо. Напраление всегда в одну сторону (ну не может 600кг машина ехать вперед а колеса вращать в другую сторону).  Таким образом 4 цифровых входа по идее достаточно.

По выходам, управлять нужно 1м клапаном на колесо(Но импульсно что бы скорость колеса была не нулевой), и мотор - насосом для нагнетания тормозной жидкости. Длительность импульса управления тормозом завистит от времени за которое скорости всех колес выровняются. 

Скажем 1 колесо-частота 300гц, 2е - 300Гц, 3е -300Гц, 4е -400Гц.

Включаем Насос-мотор и одновременно с этим подаем импульсный сигнал на клапан 4 притормаживая его. Как только частота всех колес равна, отключаем насос-мотор и клапан торможения 4.

Следовательно необходимо 4 выхода на клапана и 1 выход для насос-мотора.

Итого нужно 4 цифровых входа и 5 цифровых выходов. 

Если говорю много непонятных терминов извините))

Pik
Offline
Зарегистрирован: 24.11.2016
volatile float time = 0;
volatile float time_last = 0;
volatile int rpm_array[3] = {0,0,0};

void setup()
{
  //Digital Pin 2 Set As An Interrupt
 attachInterrupt(0, wheel1_interrupt, FALLING);
  }

void loop()
{
  int rpm = 0;
  
  while(1){    
  //Update The RPM
  if(time > 0)
  {
    //3 Sample Moving Average To Smooth Out The Data
      rpm_array[0] = rpm_array[1];
      rpm_array[1] = rpm_array[2];     
      rpm_array[2] = 60*(1000000/(time*44));    
    //Last 3 Average RPM Counts Eqauls....
      rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2]) / 3;
  }
 
 }
}

void wheel1_interrupt()
{
   time = (micros() - time_last); 
   time_last = micros();
}

Так измерять частоту будет норм?

Как оптимально создать этот код для 4х Digital Pin?
За основу код взят отсюда http://cxem.net/arduino/arduino66.php
Pik
Offline
Зарегистрирован: 24.11.2016

Мой Nano имеет только 2 пина для внешних прерываний, а мне нужно 4.

Это можно обойти или прийдется брать Mega ? По изначально неверному пути.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Еще есть PCINT. В Nano на любой ноге.