Официальный сайт компании Arduino по адресу arduino.cc
управление электро двигателем от стиральной машинки с поддержанием оборотов
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 22/02/2018 - 11:36
Доброго времени суток!
В прошлом году отдали мне стиральную машинку, с вышедшим из строя блоком управления.
Я конечно поспешил ее разобрать ( о чем в дальнейшем конечно пожалел а уже было все почикано ;) ).
Так вот при разборке решил сделать из электро двигателя станок или токарный или гончарный.
Остановился на гончарном.... дети ждут не дождутся!
Поскольку в электронике я не особо силен есть некоторые вопросы на счет которых хочу посоветоваться...,
в прогаммировании как оказалось тоже :)
В этой теме будет выложен весь материал по сборке платы управления, каркаса и самого стола с диском, и по прогаммированию.
Надеюсь тема будет итересна и в дальнейшем пригодится не только мне.
TDA1085 - регулировка, стабилизация оборотов и не нужно никаких контроллеров. Не?
и так начнем!!!
натолкнуло меня на монтаж платы одно видео
https://www.youtube.com/watch?v=jvaR1ygWsNk
у автора видео есть свой блог и целая серия видео по регулированию оборотов электро двигателя...
я ему очень благодарен.
за основу взял его первый вариант платы диммера и начал перерабатывать под свои детали имющиеся в наличае. Меня устроил первый минимальный вариант диммера поскольку мне нужно :
тех задание...:
1. включение и выключение электро двигателя на определенной скорости.
2. регулеровка потенциометром скорости враращения
3. подсчет оборотов вращения вала
4. экран на котором можно посмотреть скорость заданную и реальну.
5. в схеме должно быть реле для возможности отключения в случае нештатной ситуации
6. ну и возможно плавный пуск двигателя (без рывка).
что было сделано......
собрана плата управления на основе такой схемы https://yadi.sk/i/wN1BEjGs3SfjfD
вот какая печатка получилась https://yadi.sk/i/QBacz0HS3Sfj8X пока не проверена и лай на нее https://yadi.sk/d/HInSGbS83Sfk3W
добалено реле вот по такой схеме https://yadi.sk/i/2z6E6-js3Sfj99
и предохранитель нашел, тоже в схему добавил.
был преобретен датчик холла который я благполучно спалилне правельным подключением, и приобретен еще один 49А который магнитом проверял, работает :)
дальше настало время прогамировать ардуинку...
теория (поправьте меня если я ошибаюсь)
частота в сети составляет 50 герц вот волна с переходом через ноль https://yadi.sk/i/VE1R1TtD3SfmWz этот бардак у нас творится в сети ;))
так как у нас на плате стоит диодный мост то все отрицательные полупериуды становятся положительными с частотой уже 100 раз в секунду и выглядят вот так https://yadi.sk/i/-clTw4rh3Sfmpz
а на пин ардуинки у нас приходит волна верхняя под названием В https://yadi.sk/i/m_eUm7Kb3SfnFV ну может быть развернутая (насколько я понимаю зависит от подключения оптопары).
дальше в ардуино нано есть 2 пина с внешним прерыванием и функция выполняющаяся при наступлении какого то события, attachInterrupt http://arduino.ru/Reference/AttachInterrupt
1ВОПРОС - так вот 3 параметр в примрах все выбирают по возрастающему фронту (RISING )
почему так делают? ведь на отработку нужно минимальное время и контроллеру и триаку, не правильне ли будет выбрать параметр (FALLING ) по спадающему фронту, ведь все равно это ноль и пока все отработает триак уже будет закрыт и на подеме не будет в начале отрутым?
2 ВОПРОС - пины 2 и 3 поддерживают прерывание , если задать 2 разных прерывания не бдут ли пины мешать друг другу, и как обработается прерывание пина №3 если до него уже сработало прерывание пина 2 но еще не выполнилось?
TDA1085 - регулировка, стабилизация оборотов и не нужно никаких контроллеров. Не?
спасибо за предложение , я конечно понимаю что я написал (не силен в электронике и в программирование) но не до такой степини ))) да и опыт ценнее и еще одно да.. мне это нравится ;).
Так кто может подсказать ответы мне на мои вопросы,?
Это Вы несколько дней ждали, вместо того, что бы на практике определить, по спаду или фронту лучше обработать импульс и затратить несколько секунд на вбивание в поиск Гугела "приоритет прерываний AVR"? ))
А, ну да -
спасибо за ссылку, все прочитал.... Приоритет прерываний работает по принципу «кто первый встал тот и ходит в тапках».
на практике определить пока не могу, так как на собраной плате есть ошибки, на данный момент устраняю
не правильно подключил NPN транзистор 2222А для замыкания релющки 12в, уже переделал, а так же был бракованный (или я испортил) оптопара PC817 (заменил).
теперь этот узел заработал, однако есть еще какойто косяк со стороны слаботочки, пока не понял но обязательно разберусь.
у меня еще созрел вопрос , не могу найти ответ, возле реле установлен диод, это я понял для чего, потребление катушки реле 35 мА, нужно ли зашунтировать ограничивающим резистором? а то у меня получается что катушка питатся 12 вольтами практически на прямую из брока питания (не считая транзистора), или больше чем нужно тока для ее работы она не возьмет?
и второй вопрос, снова по прерываниям :)))
если бдут 2 внешних прерывания и 1 прерывание от таймера, так прерывание по таймеру тоже подчиняется закону таму кто первый? а остальные в очередь, правильно понимаю?
Не нужно.
Все верно. Поэтому в прерываниях нужно выполнять минимум кода. И еще - погуглите про квалификатор volatile, если про него не в курсе.
отладил я плату, все запустилось и работает.... но
1. датчик холла почемуто всегда выдает высокий уровень на сигнальный пин, а при его срадатывании выдает 0 (если магнит рядом),
на сколько я понимаю это не правильно, и как исправить не знаю)))) может кто подскажет... или так оставить?
2. не могу сообразить с логикой работы.
есть датчик холла считающий обороты и диммер (режит полуволны) с детектором нуля регулируется потенциометром, все по отдельности работает...
детектор нуля на внешнем прерывании и холл тоже
и вот никак не соображу как выстроить логику чтоб обороты поддерживались и подстраивались добавляя или уменьшая срез от полуволны в зависимости от оборотов
Правильно работает. Выход ДХ подтянут к + питания?
ПМСМ, обороты пофиг как считать, по фронту и по спаду.
Вы можете использовать ПИ или ПИД алгоритм регулирования, где входными параметрами будут измеренная и заданная частота вращения, а выходной величиной - время задержки до импульса открытия симистора.
всем привет
вроди поуберал ошибки в монтаже платы, подключил лампочку... все работает и регулируется!
пишу скет для регулировки движка, на днях попробую.
однко есть одна неприятность... показания потенциометра скачут в пределах 10 + - (выводил в манитор порта), припаял конденсатор 10 мф мжду сигнальным и землей, стали прыгать в пределах 3 попугаев.
с чем это может быть связано? подкиньте идею где проверить...
1. Пульсации питания.
2. Нестабильность контакта движка потенциометра.
3. Шум младших разрядов АЦП.
Можете усреднять значение АЦП - какое-то кол-во раз считывать, суммировать и делить на количество считываний (ср. арифметическое). Можете игнорировать новое значение, если оно на некое кол-во единиц (в Вашем случае более 3-х) отличается от предыдущего. Можно применить какой-нибудь программный алгоритм цифровой фильтрации.
да я так и думал решить как Вы предложили. буду игнорить новое значение если оно не выходит за значения старого значения +-5 единиц.
"1. Пульсации питания." в этом случае конденсатор на выходе из блока питания поможет?
Попробуйте. Но в данном случае, 3 единицы - немного, можно и "игнором" обойти.
Baks, если Вам нужно снимать показания с потенциометра, то напряжение, подаваемое на потенциометр, и опорное напряжение АЦП должно быть одним и тем же (не просто равными между собой, а именно одним и тем же - взятым из одной и той же точки схемы), тогде нестабильность питания не будет сказываться на показаниях.
10 мкФ - слишком много. Во-первых, Вы вновь введете зависимость показаний от нестабильности питания, во-вторых, 10 мкФ - это уже электролит, у которого велики как собственные шумы, так и токи утечки. Лучше заменить на керамику порядка 0.1 мкФ.
Ну и наконец (а на самом деле - в первую очередь), пока не опубликована схема, обсуждать можно только сферического коня в вакууме.
замечание принял, вот схемка (вырезка из LAY6) выделено то что касается питания и 3 контакта потенциометра.
https://cloud.mail.ru/public/AfBW/AReYHSvyU
также выкладываю доработанную плату разведенную в lay6
https://cloud.mail.ru/public/GQNn/7VNqCG9Bg
нашел код с подсчетом количества импульсов на 8 пине на 328 чипе.
не могли бы посмотреть , по возможности обьяснить мне что вот это застрока
( tic = ((uint32_t)int_tic << 16) | ICR1 ; //подсчёт тиков ) что тут происходит...?
и еще, ( Serial.println(tic );) что именно будет храниться в этой переменной ?
Так посмотрите - tic объявлен как uint32_t, а int_tic объявлен как uint16_t
Конкретно в той строке идет смещение и побитовое "или": https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE...
спасибо за труд, но мне все равно ничего не ясно, операто я понял что значит, читал перед написанием поста.
давайте я напишу что понимаю, а вы поправите или дополните...
в переменную tic поместим значение (int_tic со смещенными битами на 16 в лево ) или значение регистра ICR1
что это за регистр и что в нем хранится не знаю :))))
наверное еще один пробел в знаниях, это регистры .
нашел кое что интересное, названия и описания регистра http://avrprog.blogspot.ru/2013/03/t1-16.html
Вот что находится при быстром поиске:
Включили микроконтроллер, настроили таймер, запустили его, таймер тикает. При изменении состояния ножки (при нарастании сигнала), текущее значение таймера (то сколько он оттикал), копируется в регистр ICR1.
По строке вы тоже не до конца поняли. Делаем смещение int_tic на 16 бит влево, затем результат прогоняют через логическую "или" (1 если любой бит равен 1, 0 если оба равны 0) с переменной ICR1. Какая разрядность у ICR1 сказать не могу - искать надо (но по идее должна быть 32 разрядная для сравнения).
1. Ничего никуда не копируется. ICR1 - это доступ к аппаратному счетчику. Непосредственно к числу, которое используется при счете.
2. ICR1 - 16-разрядный регистр. В AVR вообще нет 32-разрядных регистров.
Всем доброго дня!
решил поднять свой недоделанный проект, по управлению электро двигателем с поддержанием оборотов.
Немного воды- вроди все по логике правильно в программе но не работат, и я пришел к выводу что не успевает ардуинка за всем следить и еще регулировать. Значит нужно разделить задачи. одна будет следить за скоростью, работать с экраном и расчитывать новое значение для димирования, а вторая будет димировать. Так вот нужно организовать передачу от мастера слейву (две ардуинки) одного параметра размером byte, вижу 2 варианта передачи это сериал и I2C. максимальная частота передачи будет составлять 250 раз в секунду.
Есть конечно еще один вариант, замерять аналоговый выход но боюсь шумы будут между пинами..
Подскажите пожалуйсто какой протакол справится и надежнее? или может какой другой?