Jump to content

    

alxkon

Участник
  • Content Count

    129
  • Joined

  • Last visited

Community Reputation

0 Обычный

About alxkon

  • Rank
    Частый гость

Recent Profile Visitors

2915 profile views
  1. Желаемая точность позиционирования 2 микрона. Я правда пока весьма туманно представляю как ее вывести, что и как влияет на точность, нужно вникнуть. В любом случае нужно смастерить стенд с индикатором измерителем как у фрезеровщиков, есть наверное до 1микрона.
  2. Приветствую всех! Имеется такой двигатель, 6в редуктор 1/1000: https://www.donghui-motor.net/en/product/dgr24-n20-reverse-metal-gear-motor.html с экодером как на картинке, 2 датчика Холла размещенных под 90гр, 7 магнитов в диске. Вал редуктора вращает небольшой диск в котором вырезан паз по спирали (как на рисунке, дуга внизу ). По этой дуге катается подшипник который крепится к вертикальному штоку. Вращая диск в определенном направлении можно двигать шток в цилиндре вверх или вниз. Люфта между штоком и цилиндром нет. Шток подпружинен для того что бы при движении вниз подшипник был в сцепке с диском. Имеются концевики для верхней и нижней мертвых точкек. Макс. перемещение около 3см. Драйвер используется STSPIN240, управляется ШИМ с ATMega328P. Положение задается количеством оборотов посчитаных энкодером. Код работает не всегда устойчиво, доехав до точки назначения шток дергается между положениями +1 -1 оборот, Назначение сей поделки максимально быстро и точно позиционировать шток, насколько это возможно с такой механикой. Творец кода недоступен. Проблемы с компонентами, древний процессор и ардуинщина заставляют все переходить на другую базу и улучшить управление. Хотелось бы услышать мнение опытных людей: Чего следует ожидать от энкодеров, они не установлены жестко, припаяны наверняка с большим разбросом? Механика наверное не самая хорошая - нет жесткой связи с валом редуктора, точность исполнения двигателя, редуктора, полировки дуги в диске и пружина будут давать большой разброс по точности? В текущей системе 0 задается каким то верхним уровнем програмы, какой-то калибровкой и он где-то ближе центра общего перемещения. Возможно будет более правильно взять верхнюю точку за 0 отсчёта или я не прав? При небольшом перемещении нужно перемещатся медленно, при большом - начать медленно (из-за редуктора) , ускориться и замедлить движение ближе к точке назначения. Какой регулятор лучше применить что бы нивелировать разброс в точности механики и ее выработки в процессе использования?
  3. Для варианта 3 есть готовые ядра, наверное не дешевые https://soc-e.com/products/mes-managed-ethernet-switch-ip-core/ https://www.latticesemi.com/products/designsoftwareandip/intellectualproperty/ipcore/flexibiliscores/flexibilisethernetswitch ну или делать самим. Только доставаемость FPGA в наше судьбоносное время это тоже приключение
  4. https://www.efinixinc.com/products-titanium.html Я сам пока даже их Trion не попробовал, кит нужно заказать, но в соседней теме говорят Trion кое-как работает.
  5. В новых версиях витиса уже и нет поддержки SystemC, только C/C++ Kак по мне вивадовский симулятор самое то, когда нет возможности купить моделсим/квесту, я его и для Xilinx и для Lattice использую. Если есть зависимые IP/примитивы, тогда через врапер если получается, если нет тогда Lattice edition ActiveHDL, а теперь у них ModelSim вместо Active. А у Вас есть реальный опыт с ними, можно им доверять?
  6. Альтера-Интел обьясняли свою надпись на микроновской флешке тем что каждый чип был тщательно выращен девствинницами в лунную ночь протестирован ними лично после микрона и является особо надежным, а за надежность надо платить. Обычные микроновские флешки работали с Циклон 5 ничуть не хуже и никогда не было проблем, 100к+ устройств.
  7. Вы будете ядро свое писать или использовать готовое?
  8. Большая засада с документацией, хотя судя по тому что приемную часть строят на Xilinx и Intel GT serdes ничего там супер нового нет.
  9. Да, Вы правы. Это следствие ошибки на которую указал des00. Мне нужно было запустить TB 3-х разных латтисовских IP. DO файлов там не было я сам быстро настрогал. Начал с первого ядра сразу криво - компиляция include файла привела к появлению ошибок, которые были мною приняты как смешаный Verilog разных стандартов. Попробовал в Modelsim выбрать год стандарта и оказалось что выбрав SV ошибок нет, вот и решил что это SV. Симуляция прошла. TB второго ядра это copy-paste первого TB. А на третьем споткнулся... Нашел Стюарта Сазерленда буду вникать сразу в SV.
  10. Спасибо огромное! Это ведь действительно очевидно, туплю... С RTL и TB на Verilog и SV не работал до сих пор особо, так, подправить и разобраться как работает. Зато теперь открыл для себя +include+
  11. Приветствую всех! С SystemVerilog пока особого опыта нет, изучаю понемногу. Тестбенч, все сгенерировано с помощью Clarity ( Lattice Diamond 3.12 ) В топ модуле тестбенча pix2byte_tb.v определенны различные параметры, например num_frames `timescale 1 ps / 1fs `include "dut_defines.v" `include "tb_params.v" `include "vid_timing_gen_driver.v" `include "byte_out_monitor.v" module top(); `include "dut_params.v" parameter num_frames = `NUM_FRAMES; parameter hfront_porch = `HFRONT; parameter hsync_pulse = `HPULSE; parameter hback_porch = `HBACK; parameter vfront_porch = `VFRONT; parameter vsync_pulse = `VPULSE; parameter vback_porch = `VBACK; //`ifndef MISC_ON // parameter init_drive_delay = `INIT_DRIVE_DELAY; //`endif parameter output_width_in_bytes = (DATA_WIDTH*NUM_TX_LANE*TX_GEAR)/128; parameter input_width_in_bits = PIX_WIDTH*NUM_PIX_LANE; parameter input_width_in_bytes = input_width_in_bits[0] ? input_width_in_bits : input_width_in_bits[1] ? input_width_in_bits/2 : input_width_in_bits[2] ? input_width_in_bits/4 : input_width_in_bits/8; parameter multiple_bytes = input_width_in_bytes*output_width_in_bytes; parameter least_common_multiple_bytes = multiple_bytes[0] ? multiple_bytes*4 : multiple_bytes[1] ? multiple_bytes*2 : multiple_bytes; parameter number_of_bytes = (1 + `NUM_BYTES/least_common_multiple_bytes)*least_common_multiple_bytes; parameter total_pix = number_of_bytes*8/PIX_WIDTH; parameter act_pix = total_pix/NUM_PIX_LANE; parameter total_line = `NUM_LINES; parameter pixclk_period = `SIP_PCLK/2; parameter byteclk_period = (pixclk_period*DATA_WIDTH*NUM_TX_LANE*TX_GEAR)/(PIX_WIDTH*NUM_PIX_LANE*16); localparam exp_byte_count = `NUM_FRAMES * `NUM_LINES * number_of_bytes; reg reset_n; reg pix_clk_i = 0; reg byte_clk_i = 0; reg mon_en = 0; reg start_vid = 0; reg byte_log_en = 0; wire rst_n_i = reset_n; wire byte_clk = byte_clk_i; integer line_cnt = 0; integer frame_cnt = 0; integer pixel_cnt = 0; integer testfail_cnt = 0; integer txfr_delay = 100000/byteclk_period; integer wc_delay = number_of_bytes/(GEAR_16+1)*NUM_TX_LANE; reg dvalid_i; wire de_i; wire hsync_i, vsync_i; wire fv_i, lv_i; wire eof; wire [PIX_WIDTH-1:0] pix_data9_i; ..... потом в тексте есть include ............... `ifdef TX_DSI `include "test_snow_pixel2byte_dsi_reset.v" `include "test_snow_pixel2byte_dsi_trans.v" `else `include "test_snow_pixel2byte_csi2_trans.v" `include "test_snow_pixel2byte_csi2_reset.v" `endif ............... .... и вызов ........... @(posedge pix_clk_i); byte_log_en = 1; start_vid = 1; $display(" test_hsync_front_porch : %d \n", hfront_porch); $display(" test_hsync_width : %d \n", hsync_pulse); $display(" test_hsync_back_porch : %d \n", hback_porch); $display(" test_h_width : %d \n", act_pix); $display(" test_v_height : %d \n", total_line); $display(" test_vsync_front_porch : %d \n", vfront_porch); $display(" test_vsync_width : %d \n", vsync_pulse); $display(" test_vsync_back_porch : %d \n", vback_porch); mon_en = 1; test_snow_pixel2byte_csi2_trans; `ifdef DSI_RESET_TEST1 byte_log_en = 0; start_vid = 1; mon_en = 1; test_snow_pixel2byte_dsi_reset; `endif ................. В test_snow_pixel2byte_csi2_trans.v определен такой task // ========================================================================= // Filename: test_snow_pixel2byte_csi2_trans.v // Copyright(c) 2017 Lattice Semiconductor Corporation. All rights reserved. // ========================================================================= //`ifdef CSI2_TEST1 task test_snow_pixel2byte_csi2_trans; begin fork `ifdef MISC_ON if (data_type !== 6'bzz_zzz) // 20191217 while((frame_cnt !== num_frames)) begin ......................... Насколько я понимаю перед begin должны быть перечислены input и output для даного task, но их нет. Все нужные файлы включены в .do файл, использую vlog -sv -work lib filename.v чтобы добавить исходник к тестбенчу ModelSim ругается, не видит frame_cnt # ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(83): (vlog-2730) Undefined variable: 'frame_cnt'. # ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(83): (vlog-2730) Undefined variable: 'num_frames'. ###### ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(84): @(posedge eof); # ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(84): (vlog-2730) Undefined variable: 'eof'. Наверное есть какой-то нюанс, который мне не очевиден, я все же думаю автор этого теста проверял что генерирует wizard и запускал свой тест. Оригинального DO файла нет, он не сгенирирован wizard-ом. Подскажите пожалуйста, какая была задумка у автора этого дизайна, как task должен видеть переменные из главного модуля?
  12. В новый проект эта серия Артиксов встает как влитая, если еще и цены приемлимые будут то вообще сказка - тут и трансиверов достаточно и логики. Давно ждали такого. Видно Lattice начал поджимать своими xxxx NX.
  13. Спасибо за ссылку. Как Вы думаете использовать такой анализатор?
  14. Вы правы, серьезные вещи нужно тестировать сертифицироваными приборами. Но предварительный частичный входной контроль работоспособности плат (целостность проводников, наличие всех напряжений питания и другие несложные функции) вполне посильная задача, особой точности не нужно, такой прибор можно размножить и распараллелить проверку.
  15. Не скажу о финансовой состоятельности осцилографостроения, но для меня идеи уважаемого Leka надолкнули на мысли о создании примитивного тестера плат на основе дешевых FPGA devkit : логические каналы тестируем с помощью '1', '0', измеряем наличие присутствия всех нужных напряжений с помощью дельтасигма АЦП реализованых на ПЛИС и если нужно можно и ЦАП реализовать и функциональный генератор также. Вот еще где-то промелькало раньше о возможности использования GT трансиверов ПЛИС для измерения быстрых сигналов, но не могу найти тему...