Прошивка для STM32f103c8t6

Только не пинайте строго рисовал под себя первый раз ......
По компонентам буферы SN74HC541N , стаб на 12 вольт XL4005E1стаб на 5 вольт MP1584-MICRO-POWER самовостонавливающийся предохранитель на 3 ампера ну и оптроны брал EL817. Вторая плата Arduino Pro Mini это тахометр для драйвера шпинделя WS55-200 питается от него сигналы от STM32 развязаны оптронами. С PWM сигналом не все так гладко как хотелось ..... сильно по экспоненте напряжение растет нет линейности управления скоростью.
По подключению Блютуза сделана развязка через два диода и подтягивающий резик линии ТХ блютуза (эксперимент по созданию управления станком через свой офлайн контроллер).
Учтите что некоторые полигоны на землю в Coopercam надо удалить оставив только сверловку.
Ну и ссылка на на первоисточник платы GitHub - avizienis/Minimal-Black-Pill--STM32F4xx-BOB-for-grblHAL: Single layer breakout board for the popular Black Pill. Features 4 axes, 5V outputs, optoisolated inputs.
Ваши сообщения автоматически объединены:

Да еще момент управляющие провода на драйверы скручены витой парой по принципу Dir + GND, Step + GND, EN + GND и длиной около 10 см.
А в чем преимущества этой платы по сравнению с родной от 3018?
 
Прогресивная кинематика.
Возможность работать с большим количеством шагов в еденицу времени.
Я с родной не мог вырезать одны платы с картой высот.
А вот с этой все отлично.
Атмега 328 прошлый век.
А тут stm32 и частота почти в 10 раз выше.
 
Прогресивная кинематика.
Возможность работать с большим количеством шагов в еденицу времени.
Я с родной не мог вырезать одны платы с картой высот.
А вот с этой все отлично.
Атмега 328 прошлый век.
А тут stm32 и частота почти в 10 раз выше.
Набор Г-кодов тот же, что и на атмеге?
 
Набор Г-кодов тот же, что и на атмеге?
Немного поширше, я на Гитхабе глянул. Но ожидаемого поворота плоскостей (G68), не нашёл . А может и есть, только под другими командами. Расшифровки команд не нашел.
 
Немного поширше, я на Гитхабе глянул. Но ожидаемого поворота плоскостей (G68), не нашёл . А может и есть, только под другими командами. Расшифровки команд не нашел.
Под другими командами не может быть.. это стандартные коды, они везде должны быть одинаковые.
 
Немного поширше, я на Гитхабе глянул. Но ожидаемого поворота плоскостей (G68), не нашёл . А может и есть, только под другими командами. Расшифровки команд не нашел.
Здесь все, что понимает (смайликов в кодах нет,сайт автоматически расставил)
Небольшая просьба - исходный код помещать в тэги "Код" (тогда и смайликов не будет), а длинный код ещё и помещать под спойлер.
C++:
// Determine 'G' command and its modal group

        switch(int_value) {

          case 10: case 28: case 30: case 92:

            // Check for G10/28/30/92 being called with G0/1/2/3/38 on same block.

            // * G43.1 is also an axis command but is not explicitly defined this way.

            if (mantissa == 0) { // Ignore G28.1, G30.1, and G92.1

              if (axis_command) { FAIL(STATUS_GCODE_AXIS_COMMAND_CONFLICT); } // [Axis word/command conflict]

              axis_command = AXIS_COMMAND_NON_MODAL;

            }

            // No break. Continues to next line.

          case 4: case 53:

            word_bit = MODAL_GROUP_G0;

            gc_block.non_modal_command = int_value;

            if :(int_value == 28) || (int_value == 30) || (int_value == 92:) {

              if (!:(mantissa == 0) || (mantissa == 10:)) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); }

              gc_block.non_modal_command += mantissa;

              mantissa = 0; // Set to zero to indicate valid non-integer G command.

            }            

            break;

          case 0: case 1: case 2: case 3: case 38:

            // Check for G0/1/2/3/38 being called with G10/28/30/92 on same block.

            // * G43.1 is also an axis command but is not explicitly defined this way.

            if (axis_command) { FAIL(STATUS_GCODE_AXIS_COMMAND_CONFLICT); } // [Axis word/command conflict]

            axis_command = AXIS_COMMAND_MOTION_MODE;

            // No break. Continues to next line.

          case 80:

            word_bit = MODAL_GROUP_G1;

            gc_block.modal.motion = int_value;

            if (int_value == 38){

              if (!:(mantissa == 20) || (mantissa == 30) || (mantissa == 40) || (mantissa == 50:)) {

                FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); // [Unsupported G38.x command]

              }

              gc_block.modal.motion += (mantissa/10)+100;

              mantissa = 0; // Set to zero to indicate valid non-integer G command.

            }

            break;

          case 17: case 18: case 19:

            word_bit = MODAL_GROUP_G2;

            gc_block.modal.plane_select = int_value - 17;

            break;

          case 90: case 91:

            if (mantissa == 0) {

              word_bit = MODAL_GROUP_G3;

              gc_block.modal.distance = int_value - 90;

            } else {

              word_bit = MODAL_GROUP_G4;

              if :(mantissa != 10) || (int_value == 90:) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [G90.1 not supported]

              mantissa = 0; // Set to zero to indicate valid non-integer G command.

              // Otherwise, arc IJK incremental mode is default. G91.1 does nothing.

            }

            break;

          case 93: case 94:

            word_bit = MODAL_GROUP_G5;

            gc_block.modal.feed_rate = 94 - int_value;

            break;

          case 20: case 21:

            word_bit = MODAL_GROUP_G6;

            gc_block.modal.units = 21 - int_value;

            break;

          case 40:

            word_bit = MODAL_GROUP_G7;

            // NOTE: Not required since cutter radius compensation is always disabled. Only here

            // to support G40 commands that often appear in g-code program headers to setup defaults.

            // gc_block.modal.cutter_comp = CUTTER_COMP_DISABLE; // G40

            break;

          case 43: case 49:

            word_bit = MODAL_GROUP_G8;

            // NOTE: The NIST g-code standard vaguely states that when a tool length offset is changed,

            // there cannot be any axis motion or coordinate offsets updated. Meaning G43, G43.1, and G49

            // all are explicit axis commands, regardless if they require axis words or not.

            if (axis_command) { FAIL(STATUS_GCODE_AXIS_COMMAND_CONFLICT); } // [Axis word/command conflict] }

            axis_command = AXIS_COMMAND_TOOL_LENGTH_OFFSET;

            if (int_value == 49) { // G49

              gc_block.modal.tool_length = TOOL_LENGTH_OFFSET_CANCEL;

            } else if (mantissa == 10) { // G43.1

              gc_block.modal.tool_length = TOOL_LENGTH_OFFSET_ENABLE_DYNAMIC;

            } else { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [Unsupported G43.x command]

            mantissa = 0; // Set to zero to indicate valid non-integer G command.

            break;

          case 54: case 55: case 56: case 57: case 58: case 59:

            // NOTE: G59.x are not supported. (But their int_values would be 60, 61, and 62.)

            word_bit = MODAL_GROUP_G12;

            gc_block.modal.coord_select = int_value - 54; // Shift to array indexing.

            break;

          case 61:

            word_bit = MODAL_GROUP_G13;

            if (mantissa != 0) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [G61.1 not supported]

            // gc_block.modal.control = CONTROL_MODE_EXACT_PATH; // G61

            break;

          default: FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); // [Unsupported G command]

        }

        if (mantissa > 0) { FAIL(STATUS_GCODE_COMMAND_VALUE_NOT_INTEGER); } // [Unsupported or invalid Gxx.x command]

        // Check for more than one command per modal group violations in the current block

        // NOTE: Variable 'word_bit' is always assigned, if the command is valid.

        if ( bit_istrue(command_words,bit(word_bit:) ) { FAIL(STATUS_GCODE_MODAL_GROUP_VIOLATION); }

        command_words |= bit(word_bit);

        break;
 
  • Последнее редактирование:
Последнее редактирование:
Что это было? :eek:
Ваши сообщения автоматически объединены:

Под другими командами не может быть.. это стандартные коды, они везде должны быть одинаковые.
Только далеко не везде команды индексируются, типа G 59.2, G41.1, G91. 1, и т.д.
 
Вот таблица с возможностями на разных процах.
STM32F4 и STM32F3 не сильно отличаются .....
 
Только не пинайте строго рисовал под себя первый раз ......
По компонентам буферы SN74HC541N , стаб на 12 вольт XL4005E1стаб на 5 вольт MP1584-MICRO-POWER самовостонавливающийся предохранитель на 3 ампера ну и оптроны брал EL817. Вторая плата Arduino Pro Mini это тахометр для драйвера шпинделя WS55-200 питается от него сигналы от STM32 развязаны оптронами. С PWM сигналом не все так гладко как хотелось ..... сильно по экспоненте напряжение растет нет линейности управления скоростью.
По подключению Блютуза сделана развязка через два диода и подтягивающий резик линии ТХ блютуза (эксперимент по созданию управления станком через свой офлайн контроллер).
Учтите что некоторые полигоны на землю в Coopercam надо удалить оставив только сверловку.
Ну и ссылка на на первоисточник платы GitHub - avizienis/Minimal-Black-Pill--STM32F4xx-BOB-for-grblHAL: Single layer breakout board for the popular Black Pill. Features 4 axes, 5V outputs, optoisolated inputs.
Ваши сообщения автоматически объединены:

Да еще момент управляющие провода на драйверы скручены витой парой по принципу Dir + GND, Step + GND, EN + GND и длиной около 10 см.
Посмотрел, интересная прошивка, скачал, скомпилировал под STM32F407ZGTE6. Пошла сразу, с компьтером связывается, $$ читает. Понравились опции, позволяющие посмотреть описания ошибок:
$EA - enumerate alarm codes.
$EE - enumerate error codes.
$ES - enumerate settings.
$EG - enumerate setting groups.

Теперь с этими опциями буду разбираться, почему сидит в аларме:(.
 
Потому что они спользуют нормально замкнутые кнопки.
$14=1 вот эта команда позволит это изменить.
 
Параметр.
Введите его и кнопки инвертируются.
Введите $help и контроллер выдаст доп меню, добавляя к help без пробела название раздела увидите желаемые опци.
Конкретно эту мне разраб написал .... чтоб можно было без обвязки и кнопок тестить на столе.
 
Потому что они спользуют нормально замкнутые кнопки.
$14=1 вот эта команда позволит это изменить.
Спасибо, с этим уже разобрался.
А как эта прошивка в работе по сравнению со штатной 3018?
 
Как по мне то лучше.
Я уже писал что наткнулся на глюк со сложной платой и картой высот....
На этой еще ни разу ни че не глючило.
Но опять же тут еще от платы зависит как развести и в платах на атмеге я буферных драйверов вроде не видел, а на своей поставил.
Да и с прогресивной кинематикой както интересней ( это когда в начале движения разгоняется до макс. Заданой скорости а в конце пути притормаживает плавно).
 
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

МЫ ДОГАДЫВАЕМСЯ, ЧТО РЕКЛАМА ВАС РАЗДРАЖАЕТ!

Конечно, Ваше программное обеспечение для блокировки рекламы отлично справляется с блокировкой рекламы на нашем сайте, но оно также блокирует полезные функции. Мы стараемся для Вас и не обязываем Вас донатить и скидывать денег на наши кошельки, чтобы пользоваться форумом, но реклама это единственное, что позволяет поддерживать проект и развивать его.

Спасибо за Ваше понимание!

Я отключил свой AdBlock    Нет, я не буду ничего отключать