Jump to content

    

Sirko

Участник
  • Content Count

    256
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Sirko

  • Rank
    Местный

Recent Profile Visitors

1699 profile views
  1. 35nS 150nS Спасибо, обнадежили. Буду заказывать.
  2. Ух. Это пилотаж не моего полета. А через затвор придется пробовать (если просто диод не прокатит). В моем случае частота управления позволит.
  3. Это я понял через несколько секунд после запуска двигателя Из того, что быстро доставаемое - на примете VS-ETX0806FP-M3 - 8A, 14 ns. Но "осязать" на сколько это устраивает - не могу. По сему и прошу помощи. Достаточно ли этого времени? Нужно ли запараллелить RC снаббером и если нужно то каким? Может варистор по скорости лучше, соответственно тоже - какой варистор? Может стОит "завалить" фронты, зашунтировав затвор емкостью на исток, соответственно какая емкость? Хуже - точно не будет. А в чем выигрыш? Он ведь диод, а не стабилитрон.
  4. Как-то топик - в оффтопик превращается :( Тридцать лет назад коммутировалось тиристорами, без ШИМов, компараторов, контроллеров и пр. Нужно правильно обвязать четыре ключа, а не разрабатывать и изготавливать заново драйвер, который все равно будет "включалкой" катушек. Но самое главное то, что суть проблемы вылезет и на "умном" драйвере, если не предпринять "правильные" меры.
  5. Во первых уровень сложности несоизмерим с "простовключением". Во вторых современные крутят биполярные движки. Иначе проще было-бы купить готовый драйвер.
  6. Понял. Нужно значит озвучить задачу. В станке советского производства использовался униполярный шаговый двигатель. Заменить его на современный - оочень не удобно. Нужно раскидать пол машины, как следствие остановить "процесс" на неделю и людей отвлечь на неделю. Проще "в сторонке" плату спаять и установить вместо отсутствующей. Родная была на тиристорах. Полагаю на транзисторах будет не хуже. На текущий момент один из каналов выглядит так:
  7. В импульсном источнике тока - ШИМ. Здесь другая задача. Нужно быстро "вогнать" номинальный ток в катушку. Для этого и напряжение завышенное.
  8. Тепло - в небо. Батареи из ПЭВ-50.
  9. Увы - есть "жертвы". Грешу на то, что диод не успевает открыться. Диод - выпрямительный 10A10.
  10. Добрый день. Стоит задача коммутировать RL нагрузку. Частота небольшая, от 0 до нескольких сотен герц, меандр. Напряжение питания 150 вольт, ток 4А, сопротивление резистора 30 Ом, активное сопротивление катушки 3.5 Ом. Индуктивность не знаю. Но в момент разрыва цепи - возникает "жесткая" дуга миллиметров 15 длинной. Коммутация будет мосфетом или IGBT. А вот какой применить снаббер или шустрый диод - не знаю.
  11. Нет, я не пропал. Простите. Попытался запустить предложеный Вами код. Но... Вопросов не поубавилось. Напротив ... Для ясности на картинку "надел" имена сигналов использующихся в коде. [attachment=91678:WatchDog2.png] CODEmodule PumpControl( input clk_1Hz, input pump, input activate, output reg alarm ); //------------------------------------------------------------------------------------------- reg [12:0] cntCharge = 12'd0; // Счетчик необходимого кол-ва импульсов с датчика reg [3:0] cntTimer = 4'd0; // Таймер времени ожидания, по истечению которого - авария parameter countMin = 12'd5; // Кол-во импульсов с датчика, меньше которого - появится ошибка parameter waitingTime = 4'd10; // Время, за которое должно появится достаточное кол-во импульсов reg stop = 1'b0; reg cntChargeQ = 1'b0; // always 1 --- cntCharge always @(negedge activate or posedge pump) if (!activate) cntCharge <= 12'd0; else if (stop || cntChargeQ) cntCharge <= 12'd0; else cntCharge <= cntCharge + 1'b1; // always 2 always @(negedge activate or posedge pump) if (!activate) cntChargeQ <= 1'b0; else if (stop) cntChargeQ <= 1'b0; else cntChargeQ <= (cntCharge == countMin - 12'd2); // -2 потому, что отсчет от нуля, и единица теряется при переносе // always 3 --- cntTimer always @(negedge activate or posedge clk_1Hz) if (!activate) cntTimer <= 4'd0; else if (!stop) if (cntChargeQ) cntTimer <= 4'd0; else cntTimer <= cntTimer + 1'b1; // always 4 always @(negedge activate or posedge clk_1Hz) if (!activate) stop <= 1'b0; else if (!stop) stop <= (cntTimer == waitingTime - 4'd2); // always 5 --- alarm always @* if (!activate || cntChargeQ) alarm <= 1'b0; else if (stop) alarm <= 1'b1; endmodule Код практически один в один, за исключением того, что сигнал activate был проинвертирован. Ни в первом, ни во втором случае устройство в железе не заработало. Вот так выглядит PTL. Но мне пока что затруднительно сопоставить это с кодом. [attachment=91679:RTL.png] Попытался симулировать -компилятор пишет, мол, синтаксическая ошибкаCODEDevice family: MAX II Running quartus eda_testbench >> quartus_eda --gen_testbench --check_outputs=on --tool=modelsim_oem --format=verilog Mill_6520-F3_CPLD -c Mill_6520-F3_CPLD {--vector_source=D:/Projects/Mill_6520-F3_CPLD/output_files/Waveform.vwf} {--testbench_file=./simulation/qsim/Mill_6520-F3_CPLD.vt} PID = 920 ******************************************************************* Running Quartus II 32-bit EDA Netlist Writer Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Web Edition Processing started: Fri Apr 17 00:14:24 2015 Command: quartus_eda --gen_testbench --check_outputs=on --tool=modelsim_oem --format=verilog Mill_6520-F3_CPLD -c Mill_6520-F3_CPLD --vector_source=D:/Projects/Mill_6520-F3_CPLD/output_files/Waveform.vwf --testbench_file=./simulation/qsim/Mill_6520-F3_CPLD.vt Can't find port "clk_1Hz" in design Can't find port "pump" in design Can't find port "activate" in design Can't find port "alarm" in design Can't find port "cntCharge" in design Can't find port "cntCharge[12]" in design Can't find port "cntCharge[11]" in design Can't find port "cntCharge[10]" in design Can't find port "cntCharge[9]" in design Can't find port "cntCharge[8]" in design Can't find port "cntCharge[7]" in design Can't find port "cntCharge[6]" in design Can't find port "cntCharge[5]" in design Can't find port "cntCharge[4]" in design Can't find port "cntCharge[3]" in design Can't find port "cntCharge[2]" in design Can't find port "cntCharge[1]" in design Can't find port "cntCharge[0]" in design Can't find port "cntChargeQ" in design Can't find port "cntTimer" in design Can't find port "cntTimer[3]" in design Can't find port "cntTimer[2]" in design Can't find port "cntTimer[1]" in design Can't find port "cntTimer[0]" in design Can't find port "Stop" in design Generated Verilog Test Bench File ./simulation/qsim/Mill_6520-F3_CPLD.vt for simulation Quartus II 32-bit EDA Netlist Writer was successful. 0 errors, 25 warnings Peak virtual memory: 276 megabytes Processing ended: Fri Apr 17 00:14:34 2015 Elapsed time: 00:00:10 Total CPU time (on all processors): 00:00:02 Running quartus eda_func_netlist >> quartus_eda --functional=on --simulation --tool=modelsim_oem --format=verilog Mill_6520-F3_CPLD -c Mill_6520-F3_CPLD PID = 1272 ******************************************************************* Running Quartus II 32-bit EDA Netlist Writer Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Web Edition Processing started: Fri Apr 17 00:14:43 2015 Command: quartus_eda --functional=on --simulation=on --tool=modelsim_oem --format=verilog Mill_6520-F3_CPLD -c Mill_6520-F3_CPLD Generated file Mill_6520-F3_CPLD.vo in folder "D:/Projects/Mill_6520-F3_CPLD/simulation/modelsim/" for EDA simulation tool Quartus II 32-bit EDA Netlist Writer was successful. 0 errors, 0 warnings Peak virtual memory: 276 megabytes Processing ended: Fri Apr 17 00:14:49 2015 Elapsed time: 00:00:06 Total CPU time (on all processors): 00:00:03 ******************************************************************* Running quartus modelsim >> vsim -c -do Mill_6520-F3_CPLD.do PID = 1268 Reading C:/altera/13.0sp1/modelsim_ase/tcl/vsim/pref.tcl # 10.1d # do Mill_6520-F3_CPLD.do # ** Warning: (vlib-34) Library already exists at "work". # # Model Technology ModelSim ALTERA vlog 10.1d Compiler 2012.11 Nov 2 2012 # -- Compiling module \Mill_6520-F3_CPLD # # Top level modules: # \Mill_6520-F3_CPLD # Model Technology ModelSim ALTERA vlog 10.1d Compiler 2012.11 Nov 2 2012 # ** Error: Mill_6520-F3_CPLD.vt(29): near "-": syntax error, unexpected '-', expecting import or ';' or '#' or '(' # ** Error: c:/altera/13.0sp1/modelsim_ase/win32aloem/vlog failed. # Executing ONERROR command at macro ./Mill_6520-F3_CPLD.do line 4 [attachment=91680:Simul.png] Блин. Руки опускаются. Ну, теперь по существу: По поводуЦитатаЗачем разрядность 8 если вы считаете до 50 В реальном железе, теоретически, частота импульсов в районе 240 Гц. Т.е. 12 бит - впритык. Но, на самом деле, я это узнаю, когда железяка заработает в комплексе. Да и отношения к делу это не имеет. На счет "Эта операция дешевле", "Здесь ЛУТов меньше" - не спорьте, и уж, тем более, не паникуйте. Во - первых, у меня два плюс два нифига не работает и код похож на бред. Во - вторых, в моем случае плисина практически "бездельничает". А вот на счет глитчей и глюков и т.п. - это уже по существу. ЦитатаАсинхронное формирование сигнала сброса из 8-и разрядного регистра чревато возникновением паразитных фронтовЦитатаНо, управление от "cnt1Q" я бы сделал асинхронным, так как не уверен, что он будет длиться достаточно Я не "осязаю" прохождения сигналов на уровне ключей внутрях ПЛИС, но если обстрагироваться дискретной логикой, то не ясно, как может что-то испортить сигнал сброса в принципе. При активном ресете все выходы, все регистры должны находится в нулях и не зависеть от других входных сигналов. На счетЦитатаПромежуточные выходы конца счета сделаны отдельными дополнительными регистрами, чтобы избежать там глитчейПодразумевается случайное "укорочение" из-за появления внешнего сигнала или в задержках между ЛУТами. Внешние сигналы можно запустить через D-триггеры, тактируемые системным клоком. Но, конкретно в этой задаче, плюс-минус один тик счетчиков на работу механизма влияния не оказывает. И вот: При попытке использовать сигнал activate асинхронно, компилятор говорит "Error (10122): Verilog HDL Event Control error at PumpControl.v(18): mixed single- and double-edge expressions are not supported" Если negedge заменить на posedge, то ошибка "Error (10200): Verilog HDL Conditional Statement error at PumpControl.v(19): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct" Че ему, заразе, нужно? В том виде, в котором код приведен, схема работает так: При поступлении сигнала activate, спустя одну секунду появляетя сигнал на выходе alarm. Горит до исчезновения activate. Импульсы на входе pump никогда никакого влияния не оказывают. Во время эксперимента Clock подаю частотой 10Гц.
  12. Задачка пустяковая - начать постижение верилога. По сути - описать сторожевой таймер. Но, блин, не могу даже скомпилить проект. Если "на пальцах", то вот... [attachment=91653:WatchDog.png] При отсутствии сигнала Activate, счетчики должны находится в "нулях" и выход Alarm тоже. В рабочем режиме - выход Alarm в нуле до тех пор, пока частота сигнала Charge выше, чем 50 раз за 10 секунд. Пытался и в одном always блоке описать, и в отдельных, но что-то не складывается. CODEmodule PumpControl( input clk_1Hz, input pump, input activate, output reg alarm ); //------------------------------------------------------------------------------------------- reg [0:7] charge = 8'd0; // Счетчик необходимого кол-ва импульсов с датчика reg [0:3] timer = 4'd0; // Таймер времени ожидания, по истечению которого - авария parameter countMin = 8'd50; // Кол-во импульсов с датчика, меньше которого - появится ошибка parameter waitingTime = 4'd10; // Время, за которое должно появится достаточное кол-во импульсов always @(posedge pump) begin if(!activate || charge >= countMin) begin charge = 8'd0; end else begin charge <= charge + 1'b1; end end wire resetTimer; assign resetTimer = (charge) ? 1'b1 : 1'b0; always @(posedge clk_1Hz or posedge resetTimer) begin if(!activate) begin timer = 4'd0; alarm = 1'b0; end else if(timer < waitingTime) begin timer <= timer + 1'b1; end else if(timer >= waitingTime) begin alarm = 1'b1; end end endmodule Если закоментировать содержимое второго always, то проект собирается. А в чем причина? И как правильно реализовать сброс и синхронно и асинхронно одновременно?
  13. ЦитатаСтавлю на то, что транзистор жгёт пусковой токПри удержании якоря и подаче полного питания, ток порядка 12А. Мерил и на резисторе и амперметром. ЦитатаРезистор 0.1 ома безындукционный?Спасибо. Резистор действительно проволочный, керамический. В даташитах индуктивность не нашел, но если верить мультяшке с диапазоном 2мГн, то показания, где-то 10мкГн. На текущий момент применил IRFP460. Диод установлен непосредственно на клеммнике якоря. При тех-же "исходных данных" - схема пока, что жива. ЦитатаПопробуйте начать пуск двигателя, увеличивая ШИМДело не в том, что я не могу "снизить" ШИМ, а в том, что в боевых условиях привод может быть нагружен или заклинен. И из за этого перепаивать транзисторы - не правильно. Т.е. либо делать аппаратную защиту, либо взять ключ с запасом. При чем движок то "детский" Цитатапуть у Вас только один, снижать напряжение питанияСогласен. Вероятнее так будет проще и быстрее. Цитатато показания, где-то 10мкГн.Мерилка брешет. Индуктивность резистора не знаю.
  14. Питания и управление гальванически развязаны. Посмотреть картинку нечем. Но транзистор кратковременно способен выдержать ток больше, чем может дать транс. Во всяком случае, транзистор холодный, а предохранитель цел. Обратная связь по току, резистор в истоке для АЦП. "во избежание аварийных токов" Вот и пытаюсь выяснить, откуда такие берутся, и берутся ли. Демпфер - мягко говоря, дуть на холодное, и диод медленный, в надежде сделать более пологий фронт.
  15. [attachment=87920:IGBT.png] Не могу понять источник проблемы. Схема питается от тр-ра 200ВА, в дальнейших планах питаться от сети напрямую. Двигатель коллекторный, 110В, 250Вт. При подаче силового питания ключ моментально пробивает и двигло вращается на полную. Предохранитель при этом остается целым. ШИМ при старте ориентировочно 30-50%. Но, полагаю, что причина пробоя не из-за большого тока. (Ему взяться неоткуда) Монтаж практически навесной. Какие могут быть причины, на что обратить внимание?