acs712 ловим скачек тока
- Войдите на сайт для отправки комментариев
Втр, 02/12/2014 - 13:36
Добрый день, подскажите с решением следующего вопроса:
к arduino uno подключен датчик тока acs712, через этот датчик подключен двигатель на 24 в(постоянка),
к механизму двигателя приделана платка с кнопкой. Как только двигатель делает один оборот то механизм на короткое время зажимает кнопку, и по сути получается скачек тока. Проблема в том что исходя из следующего кода с которым я экспирементирую если кноку не зажимать то значение effective_value = 34,7 , при быстром нажатии на кнопку оно равно 56,3 , а далее это значение 1 или 2 цикла равно 0. Как избавиться от нулевого значения?
#define CURRENT_SENSOR A0 // Analog input pin that sensor is attached to float amplitude_current;
float effective_value,amplitude_current;
//effective current
void setup() {
Serial.begin(9600);
pins_init();
}
void loop() {
int sensor_max;
sensor_max = getMaxValue();
Serial.print("sensor_max = ");
Serial.println(sensor_max); //the VCC on the Grove interface of the sensor is 5v
amplitude_current=float(sensor_max-512)/1024*5/185*1000000;
effective_value=amplitude_current/1.414;
//minimum_current=1/1024*5/185*1000000/1.414=18.7(mA)
//Only for sinusoidal alternating current
Serial.println("The amplitude of the current is(in mA)");
Serial.println(amplitude_current,1);//Only one number after the decimal point
Serial.println("The effective value of the current is(in mA)");
Serial.println(effective_value,1);
delay(5000);
}
void pins_init() {
pinMode(CURRENT_SENSOR, INPUT);
}
/*Function: Sample for 1000ms and get the maximum value from the S pin*/
int getMaxValue() {
int sensorValue; //value read from the sensor
int sensorMax = 0;
uint32_t start_time = millis();
while((millis()-start_time) < 1000)//sample for 1000ms
{ sensorValue = analogRead(CURRENT_SENSOR);
if (sensorValue > sensorMax) {
/*record the maximum sensor value*/
sensorMax = sensorValue;
}
}
return sensorMax;
}
какую задачу вы решаете? зачем вообще ток измерять?
у вас делается поиск максимума тока в течении секунды. Датчик вообще-то двунаправленный, нулевой ток соотвествует половине напряжения питания на выходе (у вас в расчете это 512 отсчетов ADC). Но если у вас в схеме с мотором нет диода в обратном включении паралелльно мотору, то будет возникать еще и ток обратной самоиндукции, с обратным направлением. Не исключено, что в те моменты когда вы видите ноль, ток на самом деле отрицательный
задача стоит следующим образом, через реле включить двигатель ровно на один оборот, если его включать на время то выловить это время крайне проблематично т.к. рано или поздно произойдет лишний оборот. Вот поэтому и использую механичекскии вариант ловли обратного сигнала
вам кнопку нажимать?
е усложняйте. Сделайте подпружиненый или не сильно жесткий привод кнопки и давите по времени сгарантированной задержкой
я делал нажатие кнопки сервой с не сильно жестким креплением самой сервы http://arduino.ru/forum/proekty/zhmem-knopku-servoi
я бы рад, но у меня таких двигателей порядка 200 штук))))
это не повод городить огород) Если механика еще не сделана, то проще в механике все реализовать. Мотор не пресс, кнопку не раздавит
есть готовый вендинговый аппарат, матплата с него убрана(ее попросту не было), нужно оживить сие чудо, к каждому двигателю приходит + и -, и больше ничего, данный микрик стоит на каждом движке.
ну так а в чем проблема если мотор отключать по задержке? пожмет немного кнопку, ничего ей не будет
и кстати, почему без механики не нажимать кнопки? реле или оптопары
потомучто рано или поздно пойдет смещение. Это уже проходили.
Подключил амперметр, изменил апарное напряжение, но при срабатывании микрика не получаю достаточно большого разбега по значениям.
код для arduino использую с увеличением скорости на чтение с аналогового входа.
Я бы обратил внимание на сопротивление R1 на вашем месте. На нем, судя по всему, в момент срабатывания микропереключателя весьма заметно меняется напряжение. Осталось только пару раз ткнуть в схему осциллографом для верности , выяснить это U и почитать чтонить про операционник и внешние прерывания на ардуинке...
всем доброго дня, снова оживляю тему, проверка схемы осцилографом выявила - при срабатывании микрика идет падение на 20 мА и почти на 2В, пробовал ловить сие падение через делитель напряжения , но увы тщетно. Сейчас пытаюсь прилепить компаратор с конденсатором(это пока просто для меня теория), вмешиваться в готовую схему не вариант, прошу сильно не пинать.
Вот и хотел бы подумать над решением Вашей задачи, но никак не могу понять, что Вы хотите получить. Нужно каким-то образом знать, что вал мотора (редуктора) "довращался" до какого-то нужного положения? И в этот момент что-то сделать?
В этот момент я выключаю реле которое питает двигатель.
Я так понимаю, что обратная связь от микрика в виде двух отдельных от мотора проводов (или одного, где второй передаёт питание на мотор) не подходит?
на эту плату приходит всего 2 провода + и -, если смотреть работу стандартного аппарата то там все расчитано строго на один оборот, а я делаю свою плату управления
И ещё раз про задачу. По какому-то событию включается электромотор, вращается, и когда какой-то вал достигает нужное положение то мотор нужно обесточить? Нужно делать один полный оборот вала или за один оборот может быть несколько точек остановок?
строго один оборот- без остановок, включаю через ардуино и реле(пытался произвести расчет через время), но если нагрузка будет больше то эта схема не работает(а нагрузка всегда разная)
Т.е. провести хотя бы один дополнительный провод (обратная связь) на вход ардуины не представляется возможным (не желательно конструктивно) ?
в данном аппарате 36 двигателей, для клиента это принципиально (без доп проводов), и тут возникает вопрос по какому принципу это работает на такомже аппарате с его родной матплатой
Вот здесь я не понимаю: "и тут возникает вопрос по какому принципу это работает на такомже аппарате с его родной матплатой" - поподробнее.
на родной матплате идет также 2 провода и все, по ним подается 24 вольта и через один оборот двигатель останавливается, причем специально проверяли скорость вращения (она в зависимости от нагрузки - разная, но через один оборот двигатель отключается
)
Если в оригинальном устройстве используется ТОЛЬКО два провода к мотору, то ничего кроме датчика тока в голову не приходит (пока). Т.е. нужет датчик тока на стороне ардуины. В нужный момент (там где надо обесточить двигатель) нужно создать нагрузку на вал или микриком подключать дополнительный резистор параллельно мотору и отслеживать увеличение потребляемого тока.
датчик тока цеплял, но падение в 20 мА он не ловит, с опорным напряжением тоже игрался, 20 мА вычислили через осцилограф
возможен ли вариант созвона в скайпе или еще какнить, просто я с электроникой на вы)))))
А возможно увидеть схему платы, что на фото в сообщении #10? Я так понимаю, что это плата с микриком, по срабатыванию которого и происходит остановка двигателя? Ещё бы я внимательно изучил схемотехнику на оригинальной плате в той части, где к ней подключаются моторы. Возможно там есть что-то интересное.
Какое напряжение идет на мотор? Какой ток потребления мотором при этом?
Смотрю на плату и не могу рассмотреть, что коммутирует микрик?
Скайп в принципе возможен, только о возможности этого я сообщу дополнительно. Если Вы с Украины, дайте мобильный номер.
я с Казахстана
Жду схему платы, хочу понять задумку разработчика.
видимо мне приидется самостоятельно разбираться, матплаты нет в наличии, есть только куча вот таких двигателей(фото)
Жду ответ на пост #28.
Вот,за время обеда, появилась такая идея. Мотор соединён последовательно с микриком, который замкнут всегда, кроме точки остановки. В точке остановки микрик размыкается и своими контактами подключает последовательно с мотором до этого замкнутый стабилитрон, ну пусть на 12 В. Ток в цепи практически обрывается, мотор останавливается. Такое именение тока возможно "заметить" аппаратно. Мотор ГАРАНТИРОВАННО останавливается. Что бы запустить следующий цикл вращения, на мотор подаётся повышенное (форсажное) напряжение на время, пока мотор провернётся градусов на 30-ть и микрик вновь закоротит стабилитрон (это время можно измерить и учесть в программе). Затем напряжение понижается до номинального до следующей точки остановки.
на двигатель 24 В, 80 мА это потребление при работе
на фото плата которая прикручена к двигателю + там же стоит механизм нажимания на кнопку
Схему платы "в студию".
Если есть возможность, то полезно было бы подключить параллельно мотору на работающем устройстве СТРЕЛОЧНЫЙ вольтметр и прокрутив полный цикл вращения понаблюдать за напряжением на моторе.
В этой теме упоминается датчик тока, может будет лучше чем acs712; http://arduino.ru/forum/apparatnye-voprosy/mini-obzor-monitora-toka-ina2....
схему сегодня скину, а вот по поводу этой микрухи сейчас буду искать ее
Укажите номинал резистора, если есть возможность - то и тип диодов (а друг там стабилитроны?). Судя по схеме, микровыключатель вообще никакой роли не играет - можно выпаять. Это настораживает. Капиталист никогда не будет ставить лишних радиодеталей (вон даже на конденсаторе сэкономили). Если есть возможность, слелайте качественные фото и выложите (только отмойте плату от флюса). Короче - сомневаюсь я в правильности схемы. Кстати, а где в схеме мотор?
Есть некоторые (новые) соображения по принципу слежения за вращенинем мотора. Так по ним (соображениям) АЦП ВООБЩЕ не нужен!
драйвер L298
Ven = H C = H , D = L Forward
Ven = H C = L , D = H Reverse
Ven = L C = D Fast Motor Stop !!!!!!!!!!!!!!!!!!
Ven = L C = X , D = X Free Running Motor Stop
Grigory , http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Топик стартер. Не пропадайте надолго, теряю спортивный интерес. Вашу задачу я решил (теоретически) оригинально: один вывод микроконтроллера - один управляемый мотор. Без АЦП. Необходима Ваша заинтересованность и проверка моих предположений.
добрый день, сегодня купил драйвер L298, сижу разбираюcь с ним
скорее всего R1 и D2 - последовательно ? по фоте плоховидно :)
подаём питание, начинаем измерять ток ( >= 80 mA )........
выходной вал редуктора сделал оборот и нажал микрик - измеряемый ток = 0 - снимаем питание.....
мотор редуктор по инерции останавливается, по ходу успевая освободить микрик - схема в исходном состоянии !
R1 и D2 - гасят самоиндукцию мотора - чёбы быстрее остановился
щас схему переделаю :)
if ( питание_М_подано )
{
while ( ток _М > 10 mA ) { }
выключить_питание_М:
}
Продолжаю ждать качественные фото платы, места подключения микрика должны быть хорошо видны!