Скачиваний:
1
Добавлен:
18.07.2023
Размер:
2.76 Mб
Скачать

3D AtMega2560 разгон

https://anteh.ru/notes/schematic/delta-3d-fdm-printer-atmega2560-increase-quartz-frequency-upt...

Разработка электроники,

Систем автоматики,

Программного обеспечения

8(981)186-50-82

ООО "Антех ПСБ", Санкт-Петербург

anteh@bk.ru

antehru@gmail.com

Услуги

Примеры

Контакты

Статьи

AVRDelCalc

©

Увеличение частоты кварцевого резонатора, платы управления

FDM 3D принтера, Arduino AtMega2560 с 16 до 24MHz

29.11.2016 Сайт https://anteh.ru

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

Описаны практически все аппаратные проблемы с решениями и нюансы, с которыми можно столкнуться при смене кварца Arduino AtMega2560.

На текущий момент не было реальной проверки самой печати, результат может быть разный. Информация добавляется по ходу процесса, лишнего будет многовато, пока всё не утрясётся.

В процессе испытаний получилось, что применение кварца в 24MHz для 3D принтера с marlin прошивкой нецелесообразно. То что меню перестало заедать это хорошо, но никаких других преимуществ пока не обнаружено. Разве возможность увеличить частоту STEP импульсов, но придётся marlin исходник дорабатывать, а это к его разработчикам. Помимо этого, с 24MHz кварцем наблюдается подёргивание кареток при движении эффектора вниз в начале печати и при печати в целом, проявляется в движении рывками осей, но пропусков нет. В целом вроде удовлетворительно, но когда вернул 16MHz стало лучше. Нижний абзац, с описанием проблемы при питании драйверов напряжением более 26VDC при 16MHz не актуален. Интересующиеся могут попробовать 20MHz. Можно предположить, что чтобы не было проблем с 24MHz кварцем, то нужно произвести какие-либо настройки marlin прошивки.

При питании A4988 27VDC и частоте тактирования Mega2560 в 24MHz ход трёх кареток по вертикали дельта принтера происходит прерывисто, скорость движения то замедляется то ускоряется такое наблюдалось при Vref=900mV, при Vref=700mV такого уже не наблюдается. При Vref=300mV были проблемы, не работало. При Vref=400mV оси тихо и плавно пошли но при отработке команды "autohome" в верхней точке одна из осей начала "хрипеть" так же, как ранее при 300mV все оси. При Vref=600mV снова небольшие ускорения и замедления, при движении осей по вертикали. Волнами идёт. При Vref=500mV опять волнами, до этого было всё в порядке. И тут обратил внимание на величину сетевого напряжения она =241VAC, в розетке 241(12ночи) и т.к. стабилизатора напряжения нет, то на драйвера приходит 29.5VDC и похоже это перебор. Нужен стабилизатор переменного сетевого напряжения и бесперебойник. Принтер запитан от стабилизатора 225VAC получено напряжение питания 27.8VDC на драйверах. Выставлен Vref=900mV прерывистость наблюдалась в меньшей степени. Неделей ранее, при испытаниях принтера с повышенным напряжением проблем не было, возможно сетевое напряжение было меньше. В разрыв +27VDC питания шаговых двигателей ставим пару диодов. Итог такой: в розетке 222VAC питание драйверов 25.8V Vref=900mV драйвера A4988 и вопрос решён всё работает как надо без "дерготни", проблема была в "передозировке" напряжения у A4988 при тактировании AtMega2560 от 24Mhz кварца. Вывод:

предельное напряжение питания для A4988 не должно превышать 26VDC, иначе оси начнут двигаться прерывисто. Как оказалось, это

Стр. 1 из 8

28.02.2022, 10:48

3D AtMega2560 разгон

https://anteh.ru/notes/schematic/delta-3d-fdm-printer-atmega2560-increase-quartz-frequency-upt...

было связано с использованием 24MHz кварца AtMega2560, на 16MHz проблемы нет.

Было предположение, что напряжение питания шаговых двигателей как-то повлияет на шумность. При плавном изменении, через латр, напряжения с 12 до 29VDC, во время печати, каких либо заметных на слух изменений замечено не было.

Если сразу к делу, то в конце краткая подробная инструкция

Есть проблема подвисания управления пластиковым FDM 3D принтером во время печати, не хватает производительности контроллера. Возможно, повлияет на качество печати и позволит увеличить параметр DELTA_SEGMENTS_PER_SECOND 200. Решено поднять частоту кварца и посмотреть, какие преимущества или проблемы это даст. При напряжении питания контроллера atmega 5VDC, для увеличения частоты тактирования, без использования генератора частот, можно просто заменить кварц на более высокочастотный. 27MHz будет работать без проблем, у кого-то и 32 может заработать. Для первого эксперимента решено использовать 20MHz.

На плате Arduino mega2560 для тактирования USB преобразователя на AtMega16u2 используется кварц "низкая лодочка" 16MHz, для тактирования контроллера AtMega2560 используется 16MHz SMD кварц CSTCE16M0V53-R0. Кварц не удобный для замены. Отпаиваем миниатюрный SMD кварц со встроенными конденсаторами и рядом, на термоклей, ставим 20MHz кварц, напаиваем конденсаторы 12pf 0603 и 2 провода от кварца до конденсаторов(центральный вывод smd кварца -GND), как на фотографии ниже:

На фото: низкая лодочка с напаянными проводами кварц 20MHz, в синей термоусадке 27MHz.

После замены/перепайки кварца, в Arduino IDE нужно указать новую частоту кварца. Идём в С:\arduino-1.6.13\hardware\arduino\avr\boards.txt и меняем параметр mega.build.f_cpu=16000000L на mega.build.f_cpu=20000000L. Этот параметр задаёт значение F_CPU используемое в прошивке marlin. Сохраняем файл.

Оригинальный загрузчик stk500boot_v2_mega2560.hex копируем с переименованием в stk500boot_v2_mega2560_20MHz.hex и редактируем в ручную UBRR0L в .hex файле. Boot загрузчик работает через USART0. U2X0=1 настроено удвоение частоты(было заблуждением, хоть согласно

.hex файлу стоит удвоение, возможно при работе бут загрузчика удвоение отключается). UBRR0L = 0x10(частота 115200) при частоте кварца 16MHz и удвоении частоты, это было заблуждением. Т.е. нужно искать регистр, в который загружается 0x10 и затем регистр отправляется в 0xC4(UBRR0L). С помощью AVR Studio был открыт stk500boot_v2_mega2560.hex, полностью дизассемблировать не удалось, было около 30 нераспознанных команд "Data or unknown opcode". Найден предположительный участок кода загрузки в r24 константы 0x10 и отправки её в UBRR0L. В hex ищем участок кода, где E180 и E188 расположены рядом, точнее 80E1 и 88E1. Здесь интересует 80E1(E180) -это ldi r24, 0x10 формат (E180)1110kkkkddddkkkk. Т.е. 80E1 нужно изменить на 85E1 и это будет соответствовать частоте загрузчика115200 на 20MHz при удвоении частоты. Не забываем про чек сумму, она поменяется с 0xA4 на 0x9F. Чек сумма у каждой строки своя и подсчитывается начиная от байта после двоеточия до предпоследнего байта строки включительно. Загрузчик работает только на 115200(это было заблуждение), поэтому hex нужно править под частоту кварца AtMega2560. Заливаем загрузчик в AtMega2560 по ISP, например, через STK500. И … ничего не вышло.

Вернул всё в исходное. Осциллограф показал частоту USART0 AtMega2560 =17us или 58823 герца ближайшая стандартная 57600. То, что включено удвоение частоты также было непроверенным предположением. Реально удвоение частоты USART0 отключено, по крайней мере при работе бут загрузчика. По факту имеем, что с прошивкой stk500boot_v2_mega2560.hex бут загрузчик AtMega2560 обменивается с USB USART преобразователем на частоте 58823(измерено по периоду бита). Точнее на TxD выводе 9 PD3 AtMega16U2 и TxD выводе USART0 AtMega2560 присутствует частота 58823 герца при использовании одинаковых 16MHz кварцев. Важно, что ориентироваться нужно на эту частоту. Согласно документации, этой частоте соответствует UBRR0L=16=0x10 если не включено удвоение частоты. Для 20MHz UBRR0L=0x14 или нужно 80E1(E180 ldi r24, 0x10) заменить на 84E1 (E184 ldi r24, 0x14). Правим чек сумму на A0. Прошиваем… и ура заработало. Ошибок IDE, при прошивке не выдало. Частота TxD AtMega2560, у которой 16MHz кварц был заменён на 20MHz, по показаниям осциллографа(на глаз измерялся период бита) составила примерно 16.9us или 59172герца, по расчётам 59524. Отклонение частот TxD AtMega16U2 и TxD AtMega2560 находится в рамках допустимых 10%.

Пробуем поработать с pronterface. Проблем не возникло, всё стандартно, частота обмена с pronterface та же 250000 герц.

Пробуем кварц 27MHz "CPM 27.000 C-20"это полноразмерная лодочка, на фото выше в синей термоусадке. UBRRL = 27000000/(16*58823)-1 = 28 = 0x1C, 80E1(E180 ldi r24, 0x10) заменяем на 8CE1 (E18C ldi r24, 0x1C), чек сумма 98. Расчётная частота 58190герц, отклонение от 58823 = 663герца. В boards.txt поправляем mega.build.f_cpu=27000000L.

Не заработало. Решить нужно 2 проблемы:

1.Не заработал USART обмен, не смотря, что отклонения в частотах не превышало 10%.

2.Возникла проблема с отсутствием таблицы speed_lookuptable_fast для частоты 27MHz, для каждой частоты кварца эта таблица должна быть своей. Штатно предусмотрено 2 таблицы, для 16 и 20 MHz.

Стр. 2 из 8

28.02.2022, 10:48

3D AtMega2560 разгон

https://anteh.ru/notes/schematic/delta-3d-fdm-printer-atmega2560-increase-quartz-frequency-upt...

Первая решается подбором кварца и выбором частоты USART, вторая с помощью скрипта create_speed_lookuptable.py размещённого на GitHub. Считаем, что python установлен, запускаем скрипт для частоты 27MHz. Например из командной строки, через cmd: <путь>\create_speed_lookuptable -f 27 -d 8

c:\[путь]>create_speed_lookuptable -f 27 #ifndef SPEED_LOOKUPTABLE_H

#define SPEED_LOOKUPTABLE_H

#include "Marlin.h"

const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{62500,

51613},

{10887,

4925},

{5962,

1857},

 

{4105,

975},

{3130,

601},

 

{2529,

407},

 

{2122,

294},

{1828,

223},

 

{1605,

174},

{1431,

140},

{1291,

116},

{1175,

96},

{1079,

82},

{997,

70},

{927,

61},

{866,

53},

 

 

 

{813,

47},

{766,

 

43},

{723,

37},

{686,

34},

{652,

31},

 

{621,

28},

{593,

26},

{567,

23},

 

 

 

 

{544,

22},

{522,

 

20},

{502,

18},

{484,

17},

{467,

16},

 

{451,

15},

{436,

14},

{422,

13},

 

 

 

 

{409,

13},

{396,

 

11},

{385,

11},

{374,

10},

{364,

10},

 

{354,

9},

{345,

 

9},

 

{336,

9},

 

 

 

 

 

{327,

8},

 

{319,

7},

{312,

7},

{305,

7},

{298,

7},

{291,

6},

 

{285,

6},

{279,

6},

 

 

 

 

 

 

 

{273,

6},

 

{267,

5},

{262,

5},

{257,

5},

{252,

5},

{247,

4},

 

{243,

5},

{238,

4},

 

 

 

 

 

 

 

{234,

4},

 

{230,

4},

{226,

4},

{222,

4},

{218,

3},

{215,

4},

 

{211,

3},

{208,

3},

 

 

 

 

 

 

 

{205,

3},

 

{202,

3},

{199,

3},

{196,

3},

{193,

3},

{190,

3},

 

{187,

2},

{185,

3},

 

 

 

 

 

 

 

{182,

2},

 

{180,

3},

{177,

2},

{175,

3},

{172,

2},

{170,

2},

 

{168,

2},

{166,

2},

 

 

 

 

 

 

 

{164,

2},

 

{162,

2},

{160,

2},

{158,

2},

{156,

2},

{154,

2},

 

{152,

1},

{151,

2},

 

 

 

 

 

 

 

{149,

2},

 

{147,

1},

{146,

2},

{144,

2},

{142,

1},

{141,

2},

 

{139,

1},

{138,

1},

 

 

 

 

 

 

 

{137,

2},

 

{135,

1},

{134,

2},

{132,

1},

{131,

1},

{130,

2},

 

{128,

1},

{127,

1},

 

 

 

 

 

 

 

{126,

1},

 

{125,

1},

{124,

2},

{122,

1},

{121,

1},

{120,

1},

 

{119,

1},

{118,

1},

 

 

 

 

 

 

 

{117,

1},

 

{116,

1},

{115,

1},

{114,

1},

{113,

1},

{112,

1},

 

{111,

1},

{110,

1},

 

 

 

 

 

 

 

{109,

1},

 

{108,

1},

{107,

0},

{107,

1},

{106,

1},

{105,

1},

 

{104,

1},

{103,

1},

 

 

 

 

 

 

 

{102,

0},

 

{102,

1},

{101,

1},

{100,

1},

{99,

 

1},

{98,

 

0},

{98,

1},

{97,

1},

 

 

 

 

 

 

 

 

 

{96,

0},

{96,

 

1},

{95,

 

1},

 

{94,

0},

{94,

1},

 

{93,

1},

 

{92,

 

0},

{92,

 

1},

 

 

 

 

 

 

 

 

 

 

 

{91,

1},

{90,

 

0},

{90,

 

1},

 

{89,

1},

{88,

0},

 

{88,

1},

 

{87,

 

0},

{87,

 

1},

 

 

 

 

 

 

 

 

 

 

 

{86,

0},

{86,

 

1},

{85,

 

1},

 

{84,

0},

{84,

1},

 

{83,

0},

 

{83,

 

1},

{82,

 

0},

 

 

 

 

 

 

 

 

 

 

 

{82,

1},

{81,

 

0},

{81,

 

1},

 

{80,

0},

{80,

1},

 

{79,

0},

 

{79,

 

1},

{78,

 

0},

 

 

 

 

 

 

 

 

 

 

 

{78,

1},

{77,

 

0},

{77,

 

0},

 

{77,

1},

{76,

0},

 

{76,

1},

 

{75,

 

0},

{75,

 

1},

 

 

 

 

 

 

 

 

 

 

 

{74,

0},

{74,

 

1},

{73,

 

0},

 

{73,

0},

{73,

1},

 

{72,

0},

 

{72,

 

1},

{71,

 

0},

 

 

 

 

 

 

 

 

 

 

 

{71,

0},

{71,

 

1},

{70,

 

0},

 

{70,

0},

{70,

1},

 

{69,

0},

 

{69,

 

1},

{68,

 

0},

 

 

 

 

 

 

 

 

 

 

 

{68,

0},

{68,

 

1},

{67,

 

0},

 

{67,

0},

{67,

1},

 

{66,

0},

 

{66,

 

0},

{66,

 

1},

 

 

 

 

 

 

 

 

 

 

 

{65,

0},

{65,

 

0},

{65,

 

1},

 

{64,

0},

{64,

0},

 

{64,

1},

 

{63,

 

0},

{63,

 

0},

 

 

 

 

 

 

 

 

 

 

 

{63,

0},

{63,

 

1},

{62,

 

0},

 

{62,

0},

{62,

1},

 

{61,

0},

 

{61,

 

0},

{61,

 

1},

 

 

 

 

 

 

 

 

 

 

 

{60,

0},

{60,

 

0},

{60,

 

0},

 

{60,

1},

{59,

0},

 

{59,

0},

 

{59,

 

0},

{59,

 

1},

 

 

 

 

 

 

 

 

 

 

 

{58,

0},

{58,

 

0},

{58,

 

0},

 

{58,

1},

{57,

0},

 

{57,

0},

 

{57,

 

0},

{57,

 

1},

 

 

 

 

 

 

 

 

 

 

 

{56,

0},

{56,

 

0},

{56,

 

0},

 

{56,

1},

{55,

0},

 

{55,

0},

 

{55,

 

0},

{55,

 

1},

 

 

 

 

 

 

 

 

 

 

 

{54,

0},

{54,

 

0},

{54,

 

0},

 

{54,

1},

{53,

0},

 

{53,

0},

 

{53,

 

0},

{53,

 

0},

 

 

 

 

 

 

 

 

 

 

 

{53,

1},

{52,

 

0},

{52,

 

0},

 

{52,

0},

{52,

0},

 

{52,

1},

 

{51,

 

0},

{51,

 

0},

 

 

 

 

 

 

 

 

 

 

 

};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{62500,

8065},

{54435,

 

6221},

{48214,

4945},

 

{43269,

4025},

 

{39244,

 

3340},

 

{35904,

2816},

{33088,

2407},

{30681,

2080

},

{28601, 1816}, {26785, 1599}, {25186, 1419}, {23767, 1267}, {22500, 1140}, {21360, 1029}, {20331, 935}, {19396, 853},

{18543, 780}, {17763, 718}, {17045, 662}, {16383, 612}, {15771, 569}, {15202, 529}, {14673, 493}, {14180, 461}, {13719, 432}, {13287, 406}, {12881, 381}, {12500, 360}, {12140, 340}, {11800, 321}, {11479, 304}, {11175, 288}, {10887, 274}, {10613, 261}, {10352, 248}, {10104, 236}, {9868, 226}, {9642, 215}, {9427, 206}, {9221, 197}, {9024, 189}, {8835, 182}, {8653, 174}, {8479, 167}, {8312, 160}, {8152, 155}, {7997, 149}, {7848, 143}, {7705, 138}, {7567, 134}, {7433, 128}, {7305, 125}, {7180, 120}, {7060, 116}, {6944, 113}, {6831, 108}, {6723, 106}, {6617, 102}, {6515, 99}, {6416, 96}, {6320, 94}, {6226, 90}, {6136, 88}, {6048, 86}, {5962, 83}, {5879, 81}, {5798, 78}, {5720, 77}, {5643, 74}, {5569, 73}, {5496, 70}, {5426, 69}, {5357, 68}, {5289, 65}, {5224, 64}, {5160, 62}, {5098, 61}, {5037, 60}, {4977, 58}, {4919, 56}, {4863, 56}, {4807, 54}, {4753, 53}, {4700, 52}, {4648, 50}, {4598, 50}, {4548, 48}, {4500, 48}, {4452, 46}, {4406, 46}, {4360, 45}, {4315, 43}, {4272, 43}, {4229, 42}, {4187, 41}, {4146, 41}, {4105, 39}, {4066, 39}, {4027, 38}, {3989, 38}, {3951, 36}, {3915, 36}, {3879, 36}, {3843, 34}, {3809, 34}, {3775, 34}, {3741, 33}, {3708, 32}, {3676, 32}, {3644, 31}, {3613, 31}, {3582, 30}, {3552, 30}, {3522, 29}, {3493, 28}, {3465, 29}, {3436, 27}, {3409, 28}, {3381, 27}, {3354, 26}, {3328, 26}, {3302, 26}, {3276, 25}, {3251, 25}, {3226, 24}, {3202, 25}, {3177, 23}, {3154, 24}, {3130, 23}, {3107, 22}, {3085, 23}, {3062, 22}, {3040, 22}, {3018, 21}, {2997, 21}, {2976, 21}, {2955, 21}, {2934, 20}, {2914, 20}, {2894, 20}, {2874, 19}, {2855, 19}, {2836, 19}, {2817, 19}, {2798, 18}, {2780, 19}, {2761, 18}, {2743, 17}, {2726, 18}, {2708, 17}, {2691, 17}, {2674, 17}, {2657, 17}, {2640, 16}, {2624, 16}, {2608, 16}, {2592, 16}, {2576, 16}, {2560, 15}, {2545, 16}, {2529, 15}, {2514, 14}, {2500, 15}, {2485, 15}, {2470, 14}, {2456, 14}, {2442, 14}, {2428, 14}, {2414, 14}, {2400, 14}, {2386, 13}, {2373, 13}, {2360, 13}, {2347, 13}, {2334, 13}, {2321, 13}, {2308, 13}, {2295, 12}, {2283, 12}, {2271, 12}, {2259, 12}, {2247, 12}, {2235, 12}, {2223, 12}, {2211, 11}, {2200, 12}, {2188, 11}, {2177, 11}, {2166, 11}, {2155, 11}, {2144, 11}, {2133, 11}, {2122, 10}, {2112, 11}, {2101, 10}, {2091, 11}, {2080, 10}, {2070, 10}, {2060, 10}, {2050, 10}, {2040, 10}, {2030, 10}, {2020, 9}, {2011, 10}, {2001, 9}, {1992, 10}, {1982, 9}, {1973, 9}, {1964, 9}, {1955, 9}, {1946, 9}, {1937, 9}, {1928, 9}, {1919, 8}, {1911, 9}, {1902, 9}, {1893, 8}, {1885, 8}, {1877, 9}, {1868, 8}, {1860, 8}, {1852, 8}, {1844, 8}, {1836, 8}, {1828, 8}, {1820, 8}, {1812, 8}, {1804, 7}, {1797, 8}, {1789, 8}, {1781, 7}, {1774, 7}, {1767, 8}, {1759, 7}, {1752, 7}, {1745, 8}, {1737, 7}, {1730, 7}, {1723, 7}, {1716, 7}, {1709, 7}, {1702, 7}, {1695, 6}, {1689, 7}, {1682, 7}, {1675, 6}, {1669, 7}, {1662, 6}, {1656, 7}, {1649, 6}, {1643, 7}, {1636, 6}, {1630, 6}, {1624, 7}, {1617, 6}, {1611, 6},

};

#endif

В скрипте у --cpu-freq заменён тип int на float, чтобы использовать дробные значения частот кварца "-f', '--cpu-freq', type=float". Но большой практической необходимости в этом нет.

Для кварца 27MHz расхождение в частотах обмена составило 58823-58190=663герца. По стандарту частота может отклоняться на 10%. Есть некое интернет мнение на счёт отклонения в 3%. Для 20MHz разница была в 58823-59524 = 701. Не клеится.

Пробуем кварц 25MHz. UBRRL = 25000000/(16*58823)-1 = 25.56. Для UBRRL = 26 частота = 57870герц. Прошивка через загрузчик заливаться начала, но через секунд 20 вылетает ошибка:

avrdude: verification error, first mismatch at byte 0x046c 0x23 != 0x63

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

Ещё

avrdude: verification error, first mismatch at byte 0x146c 0x3d != 0x7d

Стр. 3 из 8

28.02.2022, 10:48

3D AtMega2560 разгон

https://anteh.ru/notes/schematic/delta-3d-fdm-printer-atmega2560-increase-quartz-frequency-upt...

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

Так было несколько раз. Но прошивка залита, по крайней мере pronterface работает.

Есть проблемы с USB USART преобразователем, реализованном на AtMega16U2, точнее код не отлажен для работы с разными кварцами, но никто ничего и не обещал. Посредством STK500 программатора, через ISP залита Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex. И при заливке прошивки снова:

avrdude: verification error, first mismatch at byte 0x146c 0x3d != 0x7d

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

Не помогло, ошибка появляется. Но прошивка 3D принтера скорее всего залита, pronterface работает.

Возможно лучшее решение использовать другой USB USART преобразователь, например на CP2104. Можно попробовать использовать одинаковые кварцы на AtMega16U2 и AtMega2560. Пробуем подправить прошивку Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex для использования другого кварца, а именно 25MHz вместо 16MHz. По тому же самому принципу, подправлял hex. В Arduino-usbserial-atmega16u2- Mega2560-Rev3.hex ищем:

F419 BRNE PC+0x04 Branch if not equal

E120 LDI R18,0x10 Load immediate

E030 LDI R19,0x00 Load immediate

Или ищем 19F420E130E0 и 20E1 исправляем на 2AE1 чек сумма 2C. Загружаем получившийся .hex в AtMega16U2 по ISP STK500 и… не нашёл второго кварца на 25MHz. Переделываем всё на 27MHz. Но оказалось, что для тактирования USB 48MHz подойдёт только 16MHz кварц.

Можно попробовать найти "волшебную" универсальную частоту USART, которая будет одинаковой или максимально близкой для AtMega16U2 и AtMega2560, ниже представлена таблица, помогающая произвести подобный поиск:

UBRRL

16MHz

20MHz

24MHz

22MHz

25MHz

27MHz

0

1000000

1250000

1500000

1375000

1562500

1687500

1

500000

625000

750000

687500

781250

843750

2

333333,3333

416666,6667

500000

458333,3333

520833,3333

562500

3

250000

312500

375000

343750

390625

421875

4

200000

250000

300000

275000

312500

337500

5

166666,6667

208333,3333

250000

229166,6667

260416,6667

281250

6

142857,1429

178571,4286

214285,7143

196428,5714

223214,2857

241071,4286

7

125000

156250

187500

171875

195312,5

210937,5

8

111111,1111

138888,8889

166666,6667

152777,7778

173611,1111

187500

9

100000

125000

150000

137500

156250

168750

10

90909,09091

113636,3636

136363,6364

125000

142045,4545

153409,0909

11

83333,33333

104166,6667

125000

114583,3333

130208,3333

140625

12

76923,07692

96153,84615

115384,6154

105769,2308

120192,3077

129807,6923

13

71428,57143

89285,71429

107142,8571

98214,28571

111607,1429

120535,7143

14

66666,66667

83333,33333

100000

91666,66667

104166,6667

112500

15

62500

78125

93750

85937,5

97656,25

105468,75

16

58823,52941

73529,41176

88235,29412

80882,35294

91911,76471

99264,70588

17

55555,55556

69444,44444

83333,33333

76388,88889

86805,55556

93750

18

52631,57895

65789,47368

78947,36842

72368,42105

82236,84211

88815,78947

19

50000

62500

75000

68750

78125

84375

20

47619,04762

59523,80952

71428,57143

65476,19048

74404,7619

80357,14286

21

45454,54545

56818,18182

68181,81818

62500

71022,72727

76704,54545

22

43478,26087

54347,82609

65217,3913

59782,6087

67934,78261

73369,56522

23

41666,66667

52083,33333

62500

57291,66667

65104,16667

70312,5

24

40000

50000

60000

55000

62500

67500

25

38461,53846

48076,92308

57692,30769

52884,61538

60096,15385

64903,84615

26

37037,03704

46296,2963

55555,55556

50925,92593

57870,37037

62500

27

35714,28571

44642,85714

53571,42857

49107,14286

55803,57143

60267,85714

28

34482,75862

43103,44828

51724,13793

47413,7931

53879,31034

58189,65517

29

33333,33333

41666,66667

50000

45833,33333

52083,33333

56250

30

32258,06452

40322,58065

48387,09677

44354,83871

50403,22581

54435,48387

31

31250

39062,5

46875

42968,75

48828,125

52734,375

32

30303,0303

37878,78788

45454,54545

41666,66667

47348,48485

51136,36364

33

29411,76471

36764,70588

44117,64706

40441,17647

45955,88235

49632,35294

34

28571,42857

35714,28571

42857,14286

39285,71429

44642,85714

48214,28571

35

27777,77778

34722,22222

41666,66667

38194,44444

43402,77778

46875

36

27027,02703

33783,78378

40540,54054

37162,16216

42229,72973

45608,10811

37

26315,78947

32894,73684

39473,68421

36184,21053

41118,42105

44407,89474

Стр. 4 из 8

28.02.2022, 10:48

3D AtMega2560 разгон

https://anteh.ru/notes/schematic/delta-3d-fdm-printer-atmega2560-increase-quartz-frequency-upt...

38

25641,02564

32051,28205

38461,53846

35256,41026

40064,10256

43269,23077

39

25000

31250

37500

34375

39062,5

42187,5

40

24390,2439

30487,80488

36585,36585

33536,58537

38109,7561

41158,53659

41

23809,52381

29761,90476

35714,28571

32738,09524

37202,38095

40178,57143

42

23255,81395

29069,76744

34883,72093

31976,74419

36337,2093

39244,18605

Бросается в глаза цифра 62500 и она действительно "волшебная". Теперь можно полностью исключить из пазла проблему несогласованности частот.

Краткое резюме. AtMega16U2 должна работать только с кварцем 16MHz с частотой USART 62500 UBRRL=15. AtMega2560 может работать

с разными кварцами обеспечивающими частоту USART ровно 62500, таких кварцев много.

Для прошивки Arduino-usbserial-atmega16u2-Mega2560-Rev3_16MHz_62500.hex задаём частоту USART 62500. Ищем 19F420E130E0 и 20E1

исправляем на 2FE0 чек сумма 28.

Для stk500boot_v2_mega2560_25MHz_62500.hex задаём ту же частоту 62500. Ищем C00080E18093C40088E18093 и 80E1 меняем на 88E1 чек сумма 9С. Прошиваем обе микросхемы, запускаем заливку прошивки с компьютера через USB и снова мимо:

avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_getsync(): timeout communicating with programmer

Произошла ошибка при загрузке скетча

Согласно boards.txt передача данных с компьютера на AtMega16U2 происходит на 115200, с AtMega16U2 на AtMega2560 на 57600(по факту 58823). Предыдущие прошивки AtMega16U2 и AtMega2560 установили частоту USART обмена между собой на 62500, логично предположить, что скорость передачи данных с компьютера на AtMega16U2 нужно изменить на 125000. Меняем запускаем:

avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: verification error, first mismatch at byte 0x146c 0x3d != 0x7d

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

Прошивка загрузилась, pronterface работает. Следующие 3 раза прошивка не загружалась.

После того, как был убран крокодил минуса осциллографа с земли ISP разъёма AtMega16U2 всё стало быстро загружаться, но наблюдались ошибки:

avrdude: verification error, first mismatch at byte 0x146c 0x3d != 0x7d

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

После пере подключения USB снова не загружается

avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_getsync(): timeout communicating with programmer

Произошла ошибка при загрузке скетча

После пере подключения и нажатия reset на плате загрузка пошла:

avrdude: verification error, first mismatch at byte 0x146c 0x3d != 0x7d

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

Все загрузилось.

Пробуем снизить "волшебную" универсальную частоту 62500 до 31250 также универсальная для разных кварцев:

Для прошивки Arduino-usbserial-atmega16u2-Mega2560-Rev3_16MHz_31250.hex задаём частоту USART 31250. Ищем 19F420E130E0 и 20E1

исправляем на 2FE1 чек сумма 27.

Для stk500boot_v2_mega2560_25MHz_31250.hex задаём ту же частоту 31250. Ищем C00080E18093C40088E18093 и 80E1 меняем на 81E3 чек сумма A1. Прошиваем, устанавливаем mega.menu.cpu.atmega2560.upload.speed=62500. Проверяем:

avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: verification error, first mismatch at byte 0x146c 0x3d != 0x7d

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

Ситуация та же, но всё как и ранее загрузилось. Нажимаем reset и снова производим загрузку:

Стр. 5 из 8

28.02.2022, 10:48

3D AtMega2560 разгон

https://anteh.ru/notes/schematic/delta-3d-fdm-printer-atmega2560-increase-quartz-frequency-upt...

avrdude: verification error, first mismatch at byte 0x146c 0x3d != 0x7d

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

После пере подключения всего и попытке загрузки в уже прошитую AtMega2560 снова:

avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_getsync(): timeout communicating with programmer

Произошла ошибка при загрузке скетча

Нажимаем reset, загрузка и всё ОК:

avrdude: verification error, first mismatch at byte 0x146c 0x3d != 0x7d

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

Пробуем 27MHz

Для прошивки Arduino-usbserial-atmega16u2-Mega2560-Rev3_16MHz_31250.hex задаём частоту USART 31250. Ищем 19F420E130E0 и 20E1

исправляем на 2FE1 чек сумма 27.

Для stk500boot_v2_mega2560_27MHz_31250.hex задаём ту же частоту 31250. Ищем C00080E18093C40088E18093 и 80E1 меняем на 85E3 чек сумма 9D. Прошиваем, устанавливаем mega.menu.cpu.atmega2560.upload.speed=62500. Проверяем:

avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_getsync(): timeout communicating with programmer

Произошла ошибка при загрузке скетча

Ни в какую работать не хочет.

Можно использовать и 25MHz кварц, но, на всякий случай ищем тот, с которым не будет ошибок. По хорошему нужно с прошивкой разбираться. Лучшим вариантом будет использование вместо AtMega16U2 аппаратного преобразователя USB в USART, микросхема CP2104. Поддерживается всеми операционными системами, надёжен, проверен, доступен, не требует прошивки. Но в QFN корпусе.

Пробуем кварц 24MHz

Кварца 24MHz не оказалось, был кварцевый генератор.

Для прошивки Arduino-usbserial-atmega16u2-Mega2560-Rev3_16MHz_31250.hex задаём частоту USART 31250. Ищем 19F420E130E0 и 20E1

исправляем на 2FE1 чек сумма 27.

Для stk500boot_v2_mega2560_24MHz_31250.hex задаём ту же частоту 31250. Ищем C00080E18093C40088E18093 и 80E1 меняем на 8FE2 чек сумма 94. Прошиваем, устанавливаем mega.build.f_cpu=24000000L и mega.menu.cpu.atmega2560.upload.speed=62500. Создаём таблицы speed_lookuptable_ для 24MHz

Проверяем:

avrdude: verification error, first mismatch at byte 0x266c 0xa0 != 0xe0

avrdude: verification error; content mismatch avrdude: verification error; content mismatch

Всё работает. Но непонятная ошибка осталась. Значение ошибки зависит от частоты кварца. На 24MHz загрузка происходит всегда и без задержек в начале загрузки. Но это не означает, что AtMega2650 не будет работать на 27MHz.

Остановился на 24MHz c 31250герц скоростью обмена между 16U2 и 2560. Можно частоту увеличить до 62500. Разницы между 31250 и 62500 не заметно, разве на 31250 прошивка длится в 2 раза дольше.

Пробовал AtMega16U2 менять на аппаратный преобразователь USB в USART на базе CP2104, чтобы исключить необходимость дополнительной доработки прошивок при работе с разными кварцами. На время эксперимента AtMega16U2 снималась с платы. Фокус удался частично. Передача данных от компьютера(pronterface) в Arduino не идёт, но приём идёт. Если нажать на reset кнопку Arduino, то в pronterface выдаются все сообщения как при подключении и устанавливается соединение. Если плата Arduino AtMega2560 не подключена к принтеру, то она на команды не реагирует. Т.е. всё должно работать, но для установления связи по USB с компьютером(pronterface) нужно нажимать reset на плате Arduino AtMega2560. Решено на этом закругляться. Выбрал кварц 24MHz со штатным загрузчиком. Но если кому интересно, то через аппаратный преобразователь можно 27MHz и более кварц повесить, с возможностью работы через pronterface с 3D принтером. Ниже фото стенда проверки работы с аппаратным преобразователем:

Стр. 6 из 8

28.02.2022, 10:48

3D AtMega2560 разгон

https://anteh.ru/notes/schematic/delta-3d-fdm-printer-atmega2560-increase-quartz-frequency-upt...

Fuse по умолчанию для AtMega2560

Fuse по умолчанию для AtMega16U2

Arduino AtMega2560 кварц 24MHz + Marlin. Краткая инструкция

Повторюсь, 24MHz кварц использовать нецелесообразно, появляются прерывистые движения кареток, связано, скорее, с не равномерным натяжением ремней. На низких скоростях печати, на определённом токе и напряжении питания драйверов менее 26VDC прерывистое движение не наблюдается. Проблема прерывистого движения может быть и в драйверах. Пока особых преимуществ использования 24MHz кварца не обнаружилось. Использование более высокой частоты тактирования должно убрать тормоза управления принтером во время печати и позводит добавить второй хотэнд для дельта принтера. Пока единственное преимущество 24MHz -перестало меню жутко тормозить во время печати. Разбираться с прерывистым движением планирую через использование промышленных драйверов, возможно попробую поставить ШВП.

Как описывалось в начале статьи производим замену smd кварца на "лодочку" 24MHz с дополнительной установкой чип конденсаторов 12-15pf. Если удастся найти, то можно установить кварц такого же типа. Не принципиально какого типа резонатор, самому пришлось кварцевый генератор на 24MHz ставить, под рукой не оказалось кварца на эту частоту, да так и оставил.

Редактируем файл Arduino IDE С:\arduino-1.6.13\hardware\arduino\avr\boards.txt меняем 2 параметра "mega.build.f_cpu=24000000L" -Частота

Стр. 7 из 8

28.02.2022, 10:48

3D AtMega2560 разгон

https://anteh.ru/notes/schematic/delta-3d-fdm-printer-atmega2560-increase-quartz-frequency-upt...

кварца AtMega2560 и "mega.menu.cpu.atmega2560.upload.speed=62500" -Частота USART обмена между USB и AtMega16U2.

Корректируем файл "speed_lookuptable.h" marlin проекта или копируем с заменой предлагаемый, содержит частоты 24, 25, 27MHz, к уже имеющимся 16 и 20MHz.

Прошиваем AtMega16U2 и AtMega2560 прошивками бут загрузчиков Arduino-usbserial-atmega16u2-Mega2560-Rev3_16MHz_31250.hex и stk500boot_v2_mega2560_24MHz_31250.hex соответственно.

Запускаем проект в Arduino IDE, заливаем прошивку. На ошибки, после заливки не обращаем внимания. Всё будет работать штатно.

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

Услуги

Примеры

Предложение

Контакты

Статьи

AVRDelayCalculator

Copyright ©Новиков Алексей Александрович,

2012-2017 Санкт-Петербург, 197372, ООО "Антех ПСБ",

anteh собака bk.ru

Стр. 8 из 8

28.02.2022, 10:48