Реверс двигателя+замер силы тока.

KusTO
Offline
Зарегистрирован: 09.07.2015

Добрый день/вечер всем! Осуществляю управление двигателем 12V DC через L293NE/SN754410, и всё прекрасно работает, двигатель крутиться в разные стороны(реверс), когда мне надо. Но, мне нужен принцип работы такой, что при достижении определенной нагрузки на двигателе(изменения силы тока) двигатель начинает крутиться в реверс и так же в реверсе должна проводиться проверка на нагрузку и переходить снова в реверс. Пробую это делать счерез ACS712ELC-05A, результат есть, но какие не применяя формулы усреднения полученных данных, при каждом включии появляется разная погрешность, что не дает прописать четкий, высчитанный наглядно порог, на котором двигатель должен переходить в реверс. Методом делителя напряжения не получиться, так как используется реверс.

Для просчета данных с ACS712ELC-05A, использую такой код:

 

  float reperValue = 0;
  for (int count =0; count < 30; count++) {
    reperValue = reperValue + constrain(analogRead(A0),0,1023);
    delay(1);
  }
    reperValue =  reperValue / 30;
 

 

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

Что Вам нужно сделать с двигателем, я так и не понял. Но, возможно, это и не важно.

То, что Вы вычисляете, называется средним арифметическим. На всякий случай напомню, что в математике есть и два другие варианта вычисления средней величины: среднее геометрическое и среднее гармоническое.

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

- получаете массив данных,

- сортируете его по возрастанию или убыванию,

- берете величину, оказавшуюся посередине массива.

Возможен и вариант промежуточный между средним арифметическим и медианой:

- получаете массив данных длиной N,

- сортируете его по возрастанию или убыванию,

- отбрасываете крайние K членой с каждой стороны (К < 2*N),

- считаете среднее арифметическое по оставшимся N-2*K членам.

KusTO
Offline
Зарегистрирован: 09.07.2015

двигатель должен уходить в ресерс при определенной силе тока

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

Пока давайте поговорим об уменьшении погрешности. ДЛя этого нужно понять ее причину. Для начала хотелось бы снять осциллограмму сигнала, тогда, думаю, будет понятнее, как бороться с погрешностью.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Поставьте датчик тока 712 или хотя-бы просто шунт (если ток не большой)
в цепь блока питания  двигателя ( если шунт - то к "земле").
Так вы избавитесь от смены полярности на датчике.
Если 712 - поставьте конденсатор ему на выходе.
Там уже стоит какой-то, но это для измерений переменного тока и по-моему с частотой десятки килогерц (80).
Вам такая частота не нужна, смело вешайте   0.1 или микрофараду для начала
Или читайте на 10 странице пдфа https://www.google.ru/?gws_rd=ssl#newwindow=1&q=acs712

Logik
Offline
Зарегистрирован: 05.08.2014

А что известно о двигателе, кроме DC 12В? Вероятно колекторный, 3000 об/мин.? Так он действительно очень много помех накидает. Боротся можно аналоговыми фильтрами на входе (тот самый конденсатор) и цифровой обработкой сигнала. Для цифровой обработки просто среднее - плохой вариант. Сразу неплохо отбросить заведомо неинформативный значения - сильно больше или сильно меньше чем ваше пороговое.  Они вызваны коммутацией коллектора и переходными процессами. Далее пробуйте цифровую фильтрацию простейшую, типа 

long integer A=0;
#define Kfiltr 32  //лучше степени 2

//где-то в loop
integer r=analogRead...
if ((r>Rmin) && (r<Rmax))
{
   A=A-(A/Kfiltr)+r;// простейшая цифровая фильтрация
}
 if ((A/Kfiltr) > Iporog) //ток превысил порог
.....
delay(5);// не быстро и не медлено

 

KusTO
Offline
Зарегистрирован: 09.07.2015

двигатель коллекторный, с редуктором, где то 60 об/мин. 

Logik
Offline
Зарегистрирован: 05.08.2014

Потому и проблемы. 60 об/мин - это на выходе редуктора, движек точно быстрей. Полезно бы осцилографом глянуть сигнал с датчиком тока. А то в слепую гадать можна долго.

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

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