Реверс двигателя+замер силы тока.
- Войдите на сайт для отправки комментариев
Добрый день/вечер всем! Осуществляю управление двигателем 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;
Что Вам нужно сделать с двигателем, я так и не понял. Но, возможно, это и не важно.
То, что Вы вычисляете, называется средним арифметическим. На всякий случай напомню, что в математике есть и два другие варианта вычисления средней величины: среднее геометрическое и среднее гармоническое.
Но, на мой взгляд, если сигнал подвержен сильным помехам (например, есть сильные выбросы, которые заметно влияют на результат), лучше пользоваться медианой. Т.е.:
- получаете массив данных,
- сортируете его по возрастанию или убыванию,
- берете величину, оказавшуюся посередине массива.
Возможен и вариант промежуточный между средним арифметическим и медианой:
- получаете массив данных длиной N,
- сортируете его по возрастанию или убыванию,
- отбрасываете крайние K членой с каждой стороны (К < 2*N),
- считаете среднее арифметическое по оставшимся N-2*K членам.
двигатель должен уходить в ресерс при определенной силе тока
Пока давайте поговорим об уменьшении погрешности. ДЛя этого нужно понять ее причину. Для начала хотелось бы снять осциллограмму сигнала, тогда, думаю, будет понятнее, как бороться с погрешностью.
Поставьте датчик тока 712 или хотя-бы просто шунт (если ток не большой)
в цепь блока питания двигателя ( если шунт - то к "земле").
Так вы избавитесь от смены полярности на датчике.
Если 712 - поставьте конденсатор ему на выходе.
Там уже стоит какой-то, но это для измерений переменного тока и по-моему с частотой десятки килогерц (80).
Вам такая частота не нужна, смело вешайте 0.1 или микрофараду для начала
Или читайте на 10 странице пдфа https://www.google.ru/?gws_rd=ssl#newwindow=1&q=acs712
А что известно о двигателе, кроме DC 12В? Вероятно колекторный, 3000 об/мин.? Так он действительно очень много помех накидает. Боротся можно аналоговыми фильтрами на входе (тот самый конденсатор) и цифровой обработкой сигнала. Для цифровой обработки просто среднее - плохой вариант. Сразу неплохо отбросить заведомо неинформативный значения - сильно больше или сильно меньше чем ваше пороговое. Они вызваны коммутацией коллектора и переходными процессами. Далее пробуйте цифровую фильтрацию простейшую, типа
двигатель коллекторный, с редуктором, где то 60 об/мин.
Потому и проблемы. 60 об/мин - это на выходе редуктора, движек точно быстрей. Полезно бы осцилографом глянуть сигнал с датчиком тока. А то в слепую гадать можна долго.
еще можно попробовать не выходу датчика, а по входу электролит повесить, но датчик должен быть включен в разрыв питания, а не мотора