Jump to content
admin

Намоточный станок на Arduino версия 2.0

Recommended Posts

09.11.2019 в 09:39, bykowina сказал:

Обмотки двигателя требуют какой то ориентации.? Как их павильно сфазировать.? Методом тыка, т е последовательным перебором? 

Обмоток в таких ШД всего две, то есть вариантов подключения то же ровно 2. От этого будет зависеть направление вращения. Если не устраивает, то меняете местами обмотки.

1 час назад, Mech51 сказал:

А если применить драйверы TB6600, то я понимаю, что эти перемычки не нужны и шаг надо устанавливать на самом драйвере?

Да, так.

У TB6600 есть микропереключатели, табличка назначений приведена на корпусе.

Share this post


Link to post
Share on other sites

Приветствую всех!

Собрал и тестирую данный станок.

Да, управление энкодером конечно удобно. Но в режиме позиционирования, при премещении укладчика провода   к предполагаемому первому витку  это не очень удобно.

При минимальном значении stepmul очень долго приходится крутить энкодер, а при значении 200( один оборот) укладчик перемещается быстро и проскакивает положение первого витка.Это касается если провод очень тонкий. 

Удобнее было использовать две кнопки: 1- движение укладчика влево. 2- движение укладчика вправо. 

 

И второй момент- при завершении намотки последнего витка происходит остановка двигателя приемной катушки с последующим снятием его с удержания. Я думаю, что лучше не снимать его с удержания т.к  витки могут сползти.

 

Edited by evkuch
корректировка

Share this post


Link to post
Share on other sites

Собрал сегодня схему, залил скетч, дисплей не горит. 

Завтра все проверю на свежую голову. 

 

Edited by bykowina

Share this post


Link to post
Share on other sites

Финальные результаты тестирования литиевых батареек FANSO при нормальных условиях

Перед разработчиком устройства, в котором предполагается использование батарейки, всегда стоит задача выбора того или иного бренда. Конечно, наиболее объективный результат по качеству можно получить при реальном тестировании в режиме работы самого устройства. Для того чтобы у разработчиков была некоторая информация о реальных значениях основных параметров ЛХИТ, инженеры компании КОМПЭЛ решили провести серию из трех тестов. Первый тест на постоянный разряд в нормальных климатических условиях, начатый в апреле 2019 г., мы завершили.

Узнать финальный результат тестирования

Скрытый текст

#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        14
#define EN        15
#define D4        16
#define D5        17
#define D6        18
#define D7        19
 

Здравствуйте! Для  подключения дисплея по I2C определения пинов для параллельного подключения оставлять, или их лучше закомментировать?

Share this post


Link to post
Share on other sites
31 минуту назад, Mech51 сказал:
  Показать содержимое

#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        14
#define EN        15
#define D4        16
#define D5        17
#define D6        18
#define D7        19
 

Здравствуйте! Для  подключения дисплея по I2C определения пинов для параллельного подключения оставлять, или их лучше закомментировать?

Подключил дисплей по I2C. дисплей засветился, естественно ничего кроме квадратиков не отображает. Возникает подобный вопрос.

"Вернуть к варианту 1602 I2C в текущей версии ПО все еще возможно, раскомментировав нужные строчки:

 

#include <LiquidCrystal.h>

//#include <LiquidCrystal_I2C.h>

//#include <Wire.h>

 

LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD

//LiquidCrystal_I2C lcd(0x27,16,2); // 0x3F I2C адрес для PCF8574AT, дисплей 16 символов 2 строки

 

lcd.begin(20,4); // Инициализация LCD Дисплей 20 символов 4 строки  

// lcd.begin(16,2); // Инициализация LCD Дисплей 16 символов 2 строки

"

Раскомментировать, значит убрать двойной бэкслеж?

Share this post


Link to post
Share on other sites
                     

Видеокурс Работаем с микроконтроллерами STM32G0. Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0

Подробнее

 Да, в начале строк нужно убрать двойной слэш, а там где его не было, надо поставить.

Share this post


Link to post
Share on other sites

Простите за назойливость. Я полный ноль в Ардуино. В моем возрасте осваивать что то новое очень большая проблема. Доходит как до жирафа. 

Какие строки надо закоментировать, те которые в моей сноске не закоментированы?

Спасибо. 

 

//#include <LiquidCrystal.h>

#include <LiquidCrystal_I2C.h>

#include <Wire.h>

 

//LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD

LiquidCrystal_I2C lcd(0x27,16,2); // 0x3F I2C адрес для PCF8574AT, дисплей 16 символов 2 строки

 

//lcd.begin(20,4); // Инициализация LCD Дисплей 20 символов 4 строки  

 lcd.begin(16,2); // Инициализация LCD Дисплей 16 символов 2 строки

 

Должно быть вот так?

 

Вот сообщение об ошибке компиляции

 

"Arduino: 1.8.2 (Windows 7), Плата:"Arduino/Genuino Uno"

C:\Users\Garry\Arduino_winding_machine_21b_i2c\Arduino_winding_machine_21b_i2c.ino:39:31: fatal error: LiquidCrystal_I2C.h: No such file or directory

 #include <LiquidCrystal_I2C.h>

                               ^

compilation terminated.

exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции""

 

 

Кажется понял в чем дело. Нет файла  LiquidCrystal_I2C.h.  

Edited by bykowina

Share this post


Link to post
Share on other sites

	[code]
//#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
	

//LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD 
LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 I2C адрес для PCF8574AT, дисплей 16 символов 2 строки 

  //lcd.begin(20,4);                                                            // Инициализация LCD Дисплей 20 символов 4 строки   
  lcd.begin(16,2);                                                              // Инициализация LCD Дисплей 16 символов 2 строки                                                              
	

Вот, надо найти эти строчки в скетче и сделать их так.

Share this post


Link to post
Share on other sites
38 минут назад, bykowina сказал:

"Arduino: 1.8.2 (Windows 7), Плата:"Arduino/Genuino Uno"

C:\Users\Garry\Arduino_winding_machine_21b_i2c\Arduino_winding_machine_21b_i2c.ino:39:31: fatal error: LiquidCrystal_I2C.h: No such file or directory

 #include <LiquidCrystal_I2C.h>

                               ^

compilation terminated.

exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

Я так и сделал. Выдает вот такую ошибку.

Я отредактировал файл и сохранил его под другим именем. Может здесь я что то не так сделал. 

Пытаюсь загрузить скетч от первой версии выдаёт ту же ошибку. Нет библиотеки I2C. 

Edited by bykowina

Share this post


Link to post
Share on other sites

В Ардуино IDE в разделе меню "скетч" строка "подключить библиотеку"- в выпадающем списке найти то, что нужно. 

Share this post


Link to post
Share on other sites
5 часов назад, Mech51 сказал:

Здравствуйте! Для  подключения дисплея по I2C определения пинов для параллельного подключения оставлять, или их лучше закомментировать?

Можно оставить как есть. Нужно проверить в работе. Я сейчас только с полубайтовым подключением экспериментирую.

1 час назад, bykowina сказал:

Я так и сделал. Выдает вот такую ошибку.

Да, нужно установить библиотеку LiquidCrystal_I2C.h

Делается это в менеджере библиотек. Скопируйте название LiquidCrystal_I2C в строку поиска, должно получиться как то так:

964736439_.png.b11d922c5162c3c4084b784f3f6ebe8f.pngspacer.png

Edited by TDA

Share this post


Link to post
Share on other sites

Библиотеку установил, скетч залил в Ардуино, на экране верхний ряд черных квадратов, самый последний символ просто  горизонтальные полосы. Что то подобное было описано в первой теме. Подключение проверял, библиотеку менял. Подключил дисплей непосредственно к Адруинке без энкодера. Увы все тоже самое. 

Share this post


Link to post
Share on other sites
11 минут назад, bykowina сказал:

Подключил дисплей непосредственно к Адруинке без энкодера. Увы все тоже самое. 

А почему не хотите полубайтовое подключение использовать? Это будет лучше.

Share this post


Link to post
Share on other sites

как подрубить 2004.? я так понимаю комплектная проводка не встанет на ардуино.(пока не пришел)

Share this post


Link to post
Share on other sites

квадратики прорисовываются в двух случая - дисплей не запущен или не отрегулирована контрастность. Что происходит при кручении потенциометра?

Share this post


Link to post
Share on other sites

Завтра попробую покрутить. При подключении 12В квадратики полностью черные, при подключении ЮСБ все немного блеклые а последний три или четыре горизонтальные полосы. 

Подключать напрямую пробовал, он вообще ни как не реагировал. Здесь хоть подсветка загорается. 

В самом начале я походу перепутал полярность на энкодере. Видимо придется заказывать другой. 

Share this post


Link to post
Share on other sites
6 минут назад, bykowina сказал:

При подключении 12В квадратики полностью черные, при подключении ЮСБ все немного блеклые а последний три или четыре горизонтальные полосы. 

Подключать напрямую пробовал, он вообще ни как не реагировал. Здесь хоть подсветка загорается. 

В самом начале я походу перепутал полярность на энкодере. Видимо придется заказывать другой. 

12В надеюсь не напрямую к LCD? 

Странно, подсветка должна загораться сразу после подключения 5В питания даже без сигнальных.

Энкодер это просто замыкающие контакты, электрически их повредить сложно.

Квадратики на первой строчки значат, что дисплей не инициализирован. Это либо неправильное подключение или при использовании I2C не тот адрес. Какая у вас микросхема на I2C модуле? Должно быть что-то типа PCF8574 или PCF8574A

Если дадите фото монтажа и используемых модулей будет легче понять что не так.

Share this post


Link to post
Share on other sites

Все-таки при подключении дисплея по I2C что-то не так. Работало все на первой версии, решил залить вторую. Ничего не отключал, только шилд отсоединил от Ардуино. Сделал все необходимые изменения для I2C-подключения в скетче, залил, и на тебе-дисплей с квадратиками. Где-то что-то не стыкуется. А дисплея без модуля I2C пока нет. 

Share this post


Link to post
Share on other sites

Вот фото подключения. 

Микросхема на контроллере дисплея  PCF8574T. 

image.jpeg

image.jpeg

image.jpeg

Регулировка контрастности выставлена оптимально. 

Подключение по I2C мне показалось проще. Не надо городить схему регулировки контрасности, меньше проводов, програмно ни чуть не сложнее, ну и сам блок уже имелся в наличии. 

Edited by bykowina

Share this post


Link to post
Share on other sites
1 час назад, Mech51 сказал:

Сделал все необходимые изменения для I2C-подключения в скетче, залил, и на тебе-дисплей с квадратиками.

А не пробовали обратно залить первую версию?

Видимо где то ошибка в скетче. Я залил первую версию и дисплей ЗАРАБОТАЛ!!! Ура!!!

 

Edited by bykowina

Share this post


Link to post
Share on other sites

С адресом (который 27) могут быть ошибки - зависит от платы i2c. 
Контроллер имеет входы A0-A2, которыми может устанавливаться младший адрес i2c
Буква А в названии чипа означает старшую часть адреса на i2c. Без буквы А адрес будет 0x20 + A (0x20-0x27), для микросхемы с буквой А 0x38 + A(0x38-0x3f).

Share this post


Link to post
Share on other sites

В первой версии прошивки 27-й адрес. С ней все работает. Во второй версии указан тоже  0х27. 

Микросхема в интерфейсе PCF8574T. 

Edited by bykowina

Share this post


Link to post
Share on other sites

Проверил адрес сканером, все как и было, 0х27, а на дисплее квадратики. Загрузил 1 версию, все нормально, работает.

Edited by Mech51
дополнение

Share this post


Link to post
Share on other sites
/* Name: Winding machine    
   Description: Arduino ATmega 328P + Stepper motor control CNC Shield v3 + 2004 LCD + Encoder KY-040
   Author:      TDA
   Ver:         2.1b_I2C_DEBUG
   Date:        20/11/2019

       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|
  LCD RS |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

//**************************************************************

#include <avr/io.h>
#include <avr/interrupt.h>
//#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#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        14
#define EN        15
#define D4        16
#define D5        17
#define D6        18
#define D7        19

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_Layer = 0;                    // Текущий виток и слой при автонамотке
int Shaft_Pos, Lay_Pos, Set_Turns, Set_Step, Set_Speed=1, Set_Layers=1, Step_Mult=1;  // Переменные изменяемые на экране
byte Menu_Index = 0;                                      // Переменная хранит номер текущей строки меню
int32_t Steps, Step_Accel, Step_Decel;

volatile uint16_t OCR1A_NOM;
volatile uint32_t OCR1A_TEMP;
volatile uint32_t INCR;
volatile uint32_t NSteps;
volatile uint32_t Temp;
int V;
volatile int NTurn;
uint8_t run_btn;
 
uint8_t MicroSteps = 16;
long SteppersPositions[2];
int Pitch = 1;
int8_t Steppers_Dir = 1;
int16_t SpeedIncrease, SpeedDecrease;

volatile int X,Y;
volatile int Set_Speed_INT;

enum menu_states {Autowinding, PosControl, TurnsSet, StepSet, SpeedSet, LaySet, Direction, Start, Cancel, Empty, ShaftPos, LayPos, StepMul, PosCancel}; // Нумерованный список строк экрана

struct MenuType {                       // Структура описывающая меню
  byte Screen;                          // Индекс экрана
  byte string_number;                   // Номер строки на экране
  char format[22];                      // Формат строки
  char format_Set_var[6];               // Формат значения при вводе переменной
  int  *param;                          // Указатель на адрес текущей переменной изменяемой на экране
  int  var_Min;                         // Ограничение значения переменной снизу
  int  var_Max;                         // Ограничение значения переменной сверху
  byte param_coef;};                    // Размерный коэффициент значения переменной

const struct MenuType Menu[] = {        // Объявляем переменную Menu пользовательского типа MenuType и доступную только для чтения
  {0,  0,  "  AUTOWINDING        ", ""      ,NULL,        0,      0,      0        },    // "> AUTOWINDING   "
  {0,  1,  "  POS CONTROL        ", ""      ,NULL,        0,      0,      0        },    // "> POS CONTROL   "
  {2,  0,  "  TURNS:  %03d       ", "%03d"  ,&Set_Turns,  1,      999,    1        },    // "> TURNS: >000<  "
  {2,  1,  "  STEP: 0.%04d       ", "%04d"  ,&Set_Step,   1,      200,    ShaftStep},    // "> STEP:>0.0000<↓"  
  {4,  0,  "  SPEED:  %03d       ", "%03d"  ,&Set_Speed,  1,      300,    1        },    // "> SPEED: >000< ↑"
  {4,  1,  "  LAYERS: %02d       ", "%02d"  ,&Set_Layers, 1,      99,     1        },    // "> LAYERS:>00<  ↓" 
  {6,  0,  "  DIRECTION >>>      ", ""      ,NULL,        0,      0,      0        },    // "> DIRECTION >>>↑"
  {6,  1,  "  START              ", ""      ,NULL,        0,      0,      0        },    // "> START        ↓" 
  {8,  0,  "  CANCEL             ", ""      ,NULL,        0,      0,      0        },    // "> CANCEL       ↑" 
  {8,  1,  "                     ", ""      ,NULL,        0,      0,      0        },    // ">               " 
  {10, 0,  "  SH POS: %+04d      ", "%+04d" ,&Shaft_Pos,  -999,   999,    1        },    // "> SH POS:>±000< "
  {10, 1,  "  LA POS: %+04d      ", "%+04d" ,&Lay_Pos,    -999,   999,    1        },    // "> LA POS:>±000<↓" 
  {12, 0,  "  STPMUL: %03d       ", "%03d"  ,&Step_Mult,  1,      100,    1        },    // "> STPMUL:>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  "
  
//LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD 
LiquidCrystal_I2C lcd(0x27,16,2); // 0x3F I2C адрес для PCF8574AT, дисплей 16 символов 2 строки 

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  
  
 lcd.init(); 
 lcd.backlight();             // Включение подсветки LCD
  
  lcd.createChar(0, up);       // Записываем символ ⯅ в память LCD
  lcd.createChar(1, down);     // Записываем символ ⯆ в память LCD

  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
  TCCR1A=(0<<COM1A1)|(0<<COM1B1)|(0<<COM1A0)|(0<<COM1B0)|(0<<WGM11)|(0<<WGM10); // Настройка таймера/счетчика 1: нормальный режим работы порта, OC1A/OC1B отключены; ATmega328/P DATASHEET стр.170-172
  TCCR1B=(0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);                   // Режим работы таймера/счетчика - CTC (очистить таймер при достижении значения в регистре сравнения OCR1A)
  OCR1A = 20000;                                                                // Значение в регистре OCR1A определяет частоту входа в прерывание таймера и устанавливает скрость вращения двигателей
  sei();
//lcd.begin(20,4);                                                              // Инициализация LCD Дисплей 20 символов 4 строки   
//lcd.begin(16,2);                                                             // Инициализация LCD Дисплей 16 символов 2 строки 
       
  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

 

Замените весь код до void loop() 

Но в дальнейшем крайне рекомендую использовать полубайтовое подключение.

Протокол I2C использует прерывания и при выполнении программы возможны наложения прерываний и "плавающие" баги, которые будет очень трудно ловить и я не могу гарантировать дальнейшую поддержку I2C

Edited by TDA

Share this post


Link to post
Share on other sites
19.11.2019 в 21:06, РеактоР сказал:

как подрубить 2004.? я так понимаю комплектная проводка не встанет на ардуино.(пока не пришел)

Я использовал эту схему для подключения

image.thumb.png.353da4c6fbc73227d1dc055bf9f04f53.png

 

Edited by TDA

Share this post


Link to post
Share on other sites

×
×
  • Create New...