Вопрос по ШИМу. Зависает Arduino
- Войдите на сайт для отправки комментариев
Всем привет. Возникла проблема небольшая. С ардуино не работал практически, но логику его работы, думал, что понимаю. Тем не менее, не получается один проект сделать.
Нужно накачать конденсатор большой емкости и большим напряжением. Третью ногу ардуино нано вывел на затвор полевика с подтяжкой на землю через резистор 10кОм. В части, где расположен конденсатор, установил делитель из резисторов 12кОм и 470кОм, чтобы мерить напряжение и не перекачать кондер. Все это выводится на дисплей OLED. Ардуино питается от USB и общего питания с основной платой пока нет (для отладки). Сама плата питается от 4 банок 18650 (14,8V).
Включаю плату - напряжение на конденсаторе сразу становится равным напряжению питания, как и должно быть. На дисплей выводится значение напряжения.
А дальше в ход идет моя программа - подается шим-сигнал на затвор полевика и конденсатор "накачивается", отображая напряжение на дисплее. Стоит условие, шимить до тех пор, пока не накачает до 40 вольт (условно).
Но, подняв напряжение на 10-15 вольт, ардуино зависает, дисплей выключается, условие накачки пропускается и качает до бесконечности. Отключаю питание, включаю снова - на дисплее правильное напряжение (больше 40 вольт), следовательно накачка не идет дальше. Поднимаю в условиях до 60, запускаю - опять накачает на 10-15 вольт и зависание с бесконечным шимом. По мультиметру вижу, что напряжение растет, да и дроссель слышно как пищит.
Уже весь мозг сломал. Что я не учел? Выкладываю часть кода
#include <OLED_I2C.h> const int nak = 3; //накачка const int napr = A7; //напряжение на кондере const int scl = A5; //дисплей SCL const int sda = A4; //дисплей SDA float NaprKond = 0; //показание напряжения конденсатора OLED myOLED(sda, scl, 8); extern uint8_t SmallFont[]; void setup() { myOLED.begin(); myOLED.setFont(SmallFont); } void loop() { NaprKond = float(analogRead(napr)*0.183); myOLED.clrScr(); myOLED.print("Capacitor: " + String(NaprKond) + "V", LEFT, 0); myOLED.update(); if (NaprKond < 30.00) { analogWrite (nak, 5); myOLED.print("Charging...", CENTER, 50); myOLED.update(); } }
а земли объеденил?
А схему подключения можно посмотреть?
Земли объединил. Часть схемы выкладываю. Остальная часть, думаю, не важна.
Схема, наверное, кривовато сделана... Только учусь
преобразователь для гаусса мастеришь?
преобразователь для гаусса мастеришь?
Электроударник для PCP-винтовки
драйвер полевика поставь, хоть на 555 таймере
Драйвер IR4427 стоит по схеме. Хотя, для моих мосфетов он и не нужен
Может я не так понял, драйвер на накачивающий полевик поставить? Я использую IRL530N, ему не нужен драйвер. Только на полевике соленоида поставил.
Схему я брал с рабочего проекта. Есть у меня примерно такая же плата, управляемая PIC'ом. Но мне нужно расширить функционал платы, а для этого пика не хватает. Да и разбираться в программировании пиков не хочется.
код посмотрел. а может и не зависает. ты же задал условие что если меньше 30 то подать шим 5. а если больше ничего не указал
а насчет тянет, я бы не был так уверен. лишний нагрев полевика покажет нужен или нет
Зависает. Изображение на дисплее тоже зависает. Если кидаю значение в ком-порт, то тоже после зависания ничего не шлет.
Если больше - то условие просто не должно выполняться, а должен выводить напряжение на экран и при это этом должна пропасть надпись "Charging..." и шим-сигнал прекратиться должен
у тебя неверное представление. условие не выполнится, а вот шим каким был таким и останется
вольтметром проверял на аналоговом пине напряжение? может условие выполняется. просто ты неверно расчитал делитель
ты ардуину используешь или мегу8 какую нибудь?
После перезапуска платы, условие не выполняется же. Значит, все верно у меня указано. Сравниваю я значение переменной, а не напряжения. На ноге в это время около 0.8 вольт.
Ардуино нано, Mega328
ясно значит скорее всего не в оперативке дело
почему после перезапуска не выполняется? в смысле не зависает и правильно работает?
код совсем простой. хз что с ним не так. но все таки если напряжение выше допиши условие
почему после перезапуска не выполняется? в смысле не зависает и правильно работает?
Работает, потому что больше ШИМа нет. Показывает правильное напряжение на конденсаторе и не пытается накачать его дальше
допиши условие. сколько можно херней страдать
Ну ок. Специально для тебя
Те же яйца, вид сбоку
а нифига. ты овен по зодиаку что ли? реально упертый
говорю же шим не выключается. только при перезагрузке когда не выполняется изначально шима нет потому что
Нашел осцилограф, подключил. В момент когда ардуино зависает, идут прострелы в -7 вольт на ноге накачки. Это, видимо, и есть причина зависания...
Теперь вопрос, откуда они берутся.
И почему у меня качает, только когда значение digitalWrite меньше 10 стоит. Ставлю 10 и больше - упирается накачка в 20-30 вольт
ты повышаешь напряжение за счет выбросов на катушке, это временная к тому же характеристика, то есть выброс будет не когда ты захочешь, а при смене потенциала на катушке, ток в катушке насколько помню растет не мгновенно, все дело в этом
похоже через полевик напряжение выброса с катушки пробивает на микроконтроллер и он перезагружается. катушка с полевиком не согласованы. выбросы возможно слишком большие, и выше 100В полевика вот и пробивает. или катушку поменяй или полевик на более высоковольтный
и параллельно катушке или транзистору нужно диод поставить от выбросов
Выпаял из рабочей пикавской платы дроссель - действительно, я накосячил с намоткой. Вместо 12 витков в два слоя, намотал всего 6. С этой чуть стабильнее получается - до 36 вольт качает и зависает.
Но в той плате компоненты все те же самые стоят. Тот же полевик, эта же катушка...
частота значит выше. и от выбросов нжуна защита. ссылку на ту схему дай
Защита стоит вроде как
дай уже свой пример, на основе которого делаешь и свою схему
Так выше же я выложил плату на PIC'е, которая у меня работает (ну как работает, выходные мосфеты периодически горят). А моя схема, по которой я собираю, выше есть. Там в обвязке не хватает только кнопок и разрядки конденсатора, но они и не нужны. Сейчас на плате разрядные резисторы даже не запаяны
тогда решай проблему выбросов на затворе, которые попадают на ардуину
и ты не давал ссылку
Может картинки не отображаются?
Вот схема с PIC'ом http://img.allzip.org/g/30/orig/7655481.jpg
моя схема
http://s020.radikal.ru/i708/1704/13/de3e69c41ae0.jpg
http://s50.radikal.ru/i128/1704/31/a62ff3186d1e.jpg
http://s019.radikal.ru/i621/1704/8f/d3d58dfff6ae.jpg
http://s020.radikal.ru/i713/1704/6f/951d197750df.jpg
http://s013.radikal.ru/i325/1704/0b/4d04b699ce5d.jpg
http://i069.radikal.ru/1704/bf/8d24e4c426e8.jpg
с пиком дохлая ссылка
а так?
http://s020.radikal.ru/i702/1704/2c/01f30850162e.jpg
вернул обратно плюсовую дорожку от общей платы к ардуино и перестала плата зависать.
Собственно, дорожку общую резал, чтобы прошивать можно было и сразу тестировать. А из-за питания от USB и одновременно от платы, атмега перегревалась
Чтобы не создавать новую тему, спрошу тут. Вопрос уже не по ШИМу.
Горят выходные транзисторы (200В, 130А)
RUN - пин, выходящий на ногу транзистора. Delay'ем пытаюсь установить паузу открытия транзистора. Если ставлю 3-9, то транзистор не открывается. А на 10 - открывается и сразу сгорает. Напряжение на конденсаторе поставил около 80 вольт, параллельно соленоиду стоит диод шоттки VS-31DQ10TR. Два выходных полевика подключены параллельно IRFB4227PBF.
Драйвер убрал из схемы, потому что на затвор полевика нужно от 3 до 5 вольт подавать.
Почему не открывается полевик при задержке меньше 10 мс и почему сгорает на 10? Мне кажется, проблема в коде...
1. драйвер зря убрал
2. открывается на полную от 7В. лучше сразу 12В
3. переходные процессы стали медленнее, полевик до конца не октрывается и поэтому сгорает. меньше 10мс просто не успевает открыться настолько чтобы на нем было такое падение мощности, достаточной чтобы сжечь полевик. просто выход ардуины слабый и не успевает быстро зарядить конденсатор
проблема в схеме!
С драйвером на пике тоже сгорали полевики... Думал, что проблема в драйвере, т.к. на затвор приходило +15В
С delay, как я понял, точности никакой не будет?
импульсный ток расчитывал? выбросы точно гасишь?
например в гауссе на 350В у меня стоят тиристоры на 1200В. прикладываю картинку какие токи там
а еще вопрос: какой источник питания? источник у драйвера и нагрузки один? возможен такой вариант что если источник не тянет или провода тонкие или дорожки узкие происходила просадка, драйвер не мог открыть полевик, так как чем больше драйвер открывал полевик тем сильнее становилась просадка по питанию. как тебе такая теория. а проверить легко, просто раздельное питания драйвера и исполнительной части, просадка никак не будет влиять
Импульсный ток не знаю как рассчитать... Думал, что шоттки справится с этим.
Конденсатор стоит 100В 10000мкф, источник питания планируется 4 х 18650 либо 4 баночная LiPo, сейчас для тестов использую блок питания от ноутбука (15В 1.2А), драйвер, соответственно, берет питание оттуда. Чтобы питать ардуино, стоит 78L05, думаю, если взять питание драйвера от него, то не выдержит стабилизатор.
Проблема с полевиками у меня постоянно. Я их уже десятка два нажег, еще на плате с пиком. Стреляю - все нормально, 2-3 десятка выстрела, ничего не греется. Чуть полежит, один выстрел - и дохнет полевик. Изначально по схеме стоял супрессор 1.5KE100A (1500Вт, 100В) параллельно соленоиду, при этом полевики горели, теперь вот поставил VS-31DQ10TR, но проблема осталась.
По поводу теории - вполне может быть. Надо проверить. Но для этого придется плату заново разводить с драйвером. Нет у меня монтажной под рукой.
100В 10000мкф))) ну тут смотря какая катушка. у меня 350В 680мкф параметры катушки на фото выше. так там импульсный ток 342А)) и то только потому что конденсатор разряжается, если бы емкость была больше и 500А было бы и выше в записимости от катушки. ставь драйвер, ставь несколько полевиков параллельно, 4-6. без питания подай импульсы, посмотри что на затворах, может одного драйвера не хватит раскачать такое количество полевиков
Вот моя катушка с ударником
14.5 мм диаметр катушки, 45 мм длина, на которую наматывал провод. Сам провод 0.8 мм, 4 слоя, сопротивление 0.7 ом.
у меня 6мм диаметр, 20 длина 14 слоев. провод 0,8. и расчетное сопротивление 0,05 по той программе
странно что так мало слоев провода
поставил драйвер. Все то же самое. На небольших значениях delay не открывается транзистор. Ставлю 10 - опять КЗ получается и транзистор дохнет. Мне оптимально 3-4 мс поставить надо
ты на затворе смотрел что у тебя? без нагрузки
с драйвером и без
Все, нашел косяк. Неправильно драйвер подключал. Теперь все работает.
Теперь надо сделать программируемый импульс, чтобы его можно было настроить в "поле" при помощи спускового крючка. И зашить в eeprom.
Только импульс надо будет записывать в сотнях микросекунд
ты так долго не мог найти ошибку в подключении драйвера?
ты так долго не мог найти ошибку в подключении драйвера?
не в нем ошибку искал сначала. Случайно даташит открыл и понял в чем дело
случайно открыл даташит))) ну как так можно, я думал ты уже все исключил и только потом обратился с проблемой. какой я наивный
ну хоть чесно, а то большинство - всем спасибо проблема решилась сама сабой, а некотырые начинают фантазировать, типо разорвал землю и все завелось.
случайно открыл даташит))) ну как так можно, я думал ты уже все исключил и только потом обратился с проблемой. какой я наивный
"Если ничто другое не помогает, прочтите, наконец, инструкцию!" (с) Аксиома Кана
"Если ничто другое не помогает, прочтите, наконец, инструкцию!" (с) Аксиома Кана
Дали, были люди, умели говорить ... а щас всё по простому и по сермяжному: "RTFM || GTFO" :)
RTFM я не тот программист, у меня нет такого в обиходе. А второе первый раз встречаю)
RTFM я не тот программист, у меня нет такого в обиходе. А второе первый раз встречаю)
Да, ладно, подзабыли просто
Read The Fucking Manual || Get The Fuck Out
В общем, "учи матчасть или иди нах" - очень часто хочется так ответить на посты, начинающиеся с фразы "я - новичок" :)
я это сокращение в первый раз тут на форуме кажется встретил. я же не программист со стажем. а русская интерпритация конечно давно