Всем здравствуйте. собрал станок для намотки катушек трансформаторов на шд. скетч взял готовый из интернета. механику немного изменил. основной мотор (ввиду небольшой мощности), собрал на редукторе 1/5. поэтому нужно изменить количество шагов на оборот намоточного шд в 5 раз больше. там где скачивал скетч тема умерла. возможно подкорректировать скетч?
Ув.ЗАВ!А как вставить код правильно Вас не учили случайно?В этом виде никто даже смотреть не будет. Надо так
Код (C++): /* Description: Arduino ATmega 328P + Stepper motor control CNC Shield v3 + 2004 LCD + Encoder KY-040 Author: TDA Ver: 2.4b Date: 21/08/2020 Arduino pinout diagram: _______________ | USB | | AREF| | GND| | 13| DIR A |RESET 12| STEP A |3V3 #11| STOP BT |5V #10| BUZ OUT |GND #9| |VIN 8| EN STEP | | | 7| DIR Z | #6| RS LCD AD BUT |A0 14 #5| ENCODER CLK LCD EN |A1 15 4| STEP Z LCD D4 |A2 16 INT1 #3| ENCODER SW LCD D5 |A3 17 INT0 2| ENCODER DT LCD D6 |A4 18 TX 1| LCD D7 |A5 19 RX 0| |__A6_A7________| */ //************************************************************************************************************** #define ShaftStep 50 // ShaftStep = Шаг резьбы*50 #define MicroStepsN 4 // Число микрошагов на шаг #define StepsForTurn 1 // число шагов для одного оборота основного двигателя (200 = 1,8° на шаг) //************************************************************************************************************** #include <AccelStepper.h> #include <LiquidCrystal.h> #define STEPPER1_DIR_PIN 7 // The Z Stepper pins #define STEPPER1_STEP_PIN 4 #define STEPPER2_DIR_PIN 13 // The A stepper pins #define STEPPER2_STEP_PIN 12 #define ENC_CLK 2 // Даем имена номерам пинов #define ENC_SW 3 #define STEP_Z 4 #define ENC_DT 5 #define DIR_Z 7 #define EN_STEP 8 #define BUZZ_OUT 10 #define STOP_BT 11 #define STEP_A 12 #define DIR_A 13 #define RS 6 #define EN 15 #define D4 16 #define D5 17 #define D6 18 #define D7 19 #define AD_BUTTON 14 byte up[8] = {0b00100,0b01110,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000}; // Создаем свой символ ? для LCD byte down[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b01110,0b00100}; // Создаем свой символ ? для LCD volatile int Encoder_Dir; // Направление вращения энкодера volatile boolean Push_Button, Var_Set, DC, AutoWindStart; // Нажатие кнопки; режим установки значения; формирование сигнала STEP; работает подпрограмма автонамотки volatile boolean Pause; // Флаг паузы в режиме автонамотка volatile int i; // Счетчик кол-ва заходов в прерывание таймера char Str_Buffer[22]; // Буфер для функции sprintf byte LCD_Column, LCD_Row, Symbol_Code, Motor_Num; // Номер столбца и строки LCD; код символа https://i.stack.imgur.com/oZhjJ.gif; номер шагового двигателя int32_t ActualShaftPos, ActualLayerPos; // Текущие позиции двигателей вала и укладчика int Actual_Turn = 0, Actual_Turn_Prev, Actual_Turn_Temp, Actual_Layer = 0; // Текущий виток и слой при автонамотке int Shaft_Pos, Lay_Pos, Set_Turns, Set_Step, Set_Speed=16, Set_Layers=1, Step_Mult=1; // Переменные изменяемые на экране byte Menu_Index = 0, run_btn; // Переменная хранит номер текущей строки меню uint16_t Buttons_ADC; // Значение АЦП от нажатия кнопок uint8_t MicroSteps = MicroStepsN; // Число микрошагов на шаг int8_t Steppers_Dir = 1; // Направление вращения ШД volatile int Set_Speed_INT; char Short_Str_Buffer[5]; int32_t stepper1CurPos; int32_t stepper1OldPos; int32_t stepper1Pos; enum menu_states {Autowinding, PosControl, TurnsSet, StepSet, SpeedSet, LaySet, Direction, Start, Cancel, Empty, StepSA, DirSA, SpeedSA, CancelSA}; // Нумерованный список строк экрана struct MenuType { // Структура описывающая меню byte Screen; // Индекс экрана byte string_number; // Номер строки на экране char format[22]; // Формат строки char format_Set_var[9]; // Формат значения при вводе переменной int *param; // Указатель на адрес текущей переменной изменяемой на экране int var_Min; // Ограничение значения переменной снизу int var_Max; // Ограничение значения переменной сверху byte param_coef;}; // Размерный коэффициент значения переменной const struct MenuType Menu[] = { // Объявляем переменную Menu пользовательского типа MenuType и доступную только для чтения {0, 0, " AUTO ", "" ,NULL, 0, 0, 0 }, // "> AUTOWINDING " {0, 1, " SEMI-AUTO ", "" ,NULL, 0, 0, 0 }, // "> POS CONTROL " {2, 0, " TURNS: %03d ", "%03d" ,&Set_Turns, 1, 999, 1 }, // "> TURNS: >000< " {2, 1, " STEP: %1d.%04d ", "%1d.%04d" ,&Set_Step, 1, 400, ShaftStep}, // "> STEP:>0.0000<v" {4, 0, " SPEED: %03d ", "%03d" ,&Set_Speed, 1, 16, 1 }, // "> SPEED: >000< ^" {4, 1, " LAYERS: %02d ", "%02d" ,&Set_Layers, 1, 99, 1 }, // "> LAYERS:>00< v" {6, 0, " DIR>>> ", "" ,NULL, 0, 0, 0 }, // "> DIRECTION >>>^" {6, 1, " START ", "" ,NULL, 0, 0, 0 }, // "> START v" {8, 0, " CANCEL ", "" ,NULL, 0, 0, 0 }, // "> CANCEL ^" {8, 1, " ", "" ,NULL, 0, 0, 0 }, // "> " {10, 0, " STEP: %1d.%04d ", "%1d.%04d" ,&Set_Step, 1, 400, ShaftStep}, // "> STEP:>0.0000< " {10, 1, " DIR>>> ", "" ,NULL, 0, 0, 0 }, // "> DIRECTION >>>v" {12, 0, " SPEED: %03d ", "%03d" ,&Set_Speed, 1, 16, 1 }, // "> SPEED: >000< ^" {12, 1, " CANCEL ", "" ,NULL, 0, 0, 0 }, // "> CANCEL " {14, 0, "T%03d/%03d L%02d/%02d", "" ,NULL, 0, 0, 0 }, // "T000/000 L00/00 " {14, 1, "SP%03d ST0.%04d ", "" ,NULL, 0, 0, 0 }, // "SP000 ST0.0000 " {16, 0, "AUTOWINDING DONE ", "" ,NULL, 0, 0, 0 }, // "AUTOWINDING DONE" {16, 1, "PRESS CONTINUE ", "" ,NULL, 0, 0, 0 }}; // "PRESS CONTINUE " // Define some steppers and the pins the will use AccelStepper stepper1(AccelStepper::DRIVER, STEP_Z, DIR_Z); AccelStepper stepper2(AccelStepper::DRIVER, STEP_A, DIR_A); LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD void setup() { pinMode(ENC_CLK, INPUT); // Инициализация входов/выходов pinMode(ENC_SW, INPUT); pinMode(STEP_Z, OUTPUT); pinMode(ENC_DT, INPUT); pinMode(DIR_Z, OUTPUT); pinMode(EN_STEP, OUTPUT); pinMode(STEP_A, OUTPUT); pinMode(DIR_A, OUTPUT); pinMode(BUZZ_OUT,OUTPUT); pinMode(STOP_BT, INPUT); pinMode(RS, OUTPUT); pinMode(EN, OUTPUT); pinMode(D4, OUTPUT); pinMode(D5, OUTPUT); pinMode(D6, OUTPUT); pinMode(D7, OUTPUT); digitalWrite(EN_STEP, HIGH); // Запрет управления двигателями digitalWrite(STOP_BT, HIGH); // Вкл. подтягивающие резисторы к VDD cli(); // Глобальный запрет прерываний EICRA = (1<<ISC11)|(0<<ISC10)|(0<<ISC01)|(1<<ISC00); // Настройка срабатывания прерываний: INT0 по изменению сигнала, INT1 по спаду сигнала; ATmega328/P DATASHEET стр.89 EIMSK = (1<<INT0)|(1<<INT1); // Разрешение прерываний INT0 и INT1; ATmega328/P DATASHEET стр.90 EIFR = 0x00; // Сбрасываем флаги внешних прерываний; ATmega328/P DATASHEET стр.91 sei(); lcd.createChar(0, up); // Записываем символ ? в память LCD lcd.createChar(1, down); // Записываем символ ? в память LCD // lcd.begin(20,4); // Инициализация LCD Дисплей 20 символов 4 строки lcd.begin(16,2); // Инициализация LCD Дисплей 16 символов 2 строки lcd.clear(); lcd.print("Winding Machine"); lcd.setCursor(0,1); lcd.print("ver.2.4b TDM Lab"); delay(1500); lcd.clear(); sprintf(Str_Buffer, Menu[0].format); lcd.print(Str_Buffer); // Выводим первую строку на экран lcd.setCursor(0,1); sprintf(Str_Buffer, Menu[1].format); lcd.print(Str_Buffer); // Выводим вторую строку на экран PrintSymbol(0,0,0x3E); // Выводим символ ">" на 0,0 LCD }
подозреваю что вставил код неверно, так как пришлось только половину вставить , редактор жалуется (много символов). где посмотреть курсы по вставке кода? (мне приходиться перетаскивать его с другого компа. ардуино и интернет стоят в разных компах) если я правильно понял , то автор планировал выставлять шаги в скетче этой строкой #define ShaftStep 50 // ShaftStep = Шаг резьбы*50 #define MicroStepsN 4 // Число микрошагов на шаг #define StepsForTurn 1 // число шагов для одного оборота основного двигателя (200 = 1,8° на шаг) Однако третья строка работает странно (как я понял она и выставляет шаги намоточного ШД . у меня на 360 градусов нужно их 200 , но стоит редуктор 1/5 , следовательно на круг катушки мне нужно 200*5+1000 шагов). скетч не работает только со значение 0 , ЛЮБЫЕ другие числа шагов отличные от 200 ни на что не реагируют! как увеличить в 5 раз шаги намоточного ШД?
#define StepsForTurn 1 // число шагов для одного оборота основного двигателя (200 = 1,8° на шаг) На значение 1 не смотрите . изначально оно равно 200. 1 - Это я пробовал уже все подряд пробовал , чтобы хоть как то прояснить функционально значения строки. - безрезультатно.всегда ШД либо работает как значение 200, либо не работает, если ставишь 0.
Что-то тут неряшливо. Зачем строки - #define STEPPER1_DIR_PIN 7 // The Z Stepper pins #define STEPPER1_STEP_PIN 4 #define STEPPER2_DIR_PIN 13 // The A stepper pins #define STEPPER2_STEP_PIN 12 ?
Спасибо за оценку чужого труда. однако чем богаты тем и рады. строки насколько я понял привязывают пины к драйверам для управления шд. к сожалению больше мне нечего сказать... надеюсь на Вашу помощь. Скетч то рабочий...
Ну не знаю. Я их закомментировал и все скомпилировалось без ошибок. Эти же пины переименованы ("передефайнены" )))) ) чуть ниже.
скетч компилируется , грузится и работает на приемлемом уровне. проблема в его перенастройке- изменении оборотов намоточного шд.
по большому счету нужно чтобы скетч считал 5 оборотов намоточного шд как один оборот. и исходя из этого считал обороты намотки и управлял шагами укладочного шд.
Пожалуйста, пользуйтесь кнопкой "редактировать", а не писать тонну разных сообщений. вы картинку смотрели что вам отправили в 2-м посте?
конечно смотрел. написал , что не понял до конца как вставлять код . я в arduino ide выделяю весь код , копирую в буфер , язык ставлю с++ , и вставляю кнопкой как указано, весь код в редактор , порядка 2000 символов. редактор ругается, половину нижнюю удаляю, тогда берет. подозреваю , что это не правильно . как вставить правильно ВЕСЬ код? и почему он у меня вставляется в текстовом формате?
Может MicroStepsN нужно то же в пять раз увеличить? Исходя из этого: Код (C++): Actual_Turn_Temp = stepper1Pos/MicroStepsN/StepsForTurn;
подозреваю что на результатам намотки вполне возможно, что придется переделывать механику на соотношение 1/10. чтоб быть уверенным , что пропусков шагов нет. Ваше предложение эту возможность поддерживает? как конкретно это попробовать?
к сожалению мой вопрос (заданный дважды) по поводу вставки всего кода в формате с++ остается без ответа. никто не знает как его вставлять? по поводу корректировки шд уже спрашивать не знаю как.....
Код (Text): [code=cpp]#pragma for [ /code] Вот так через BB - коды, если про кнопку <> непонятно. Пробел в между [ и / уберите.
по поводу корректировки можно обсуждать только после вставки ВСЕГО кода. А сейчас в той части кода. что вставлена - управления мотором нет вовсе. обсждать нечего