Jump to content

    

ivainc1789

Свой
  • Content Count

    1183
  • Joined

  • Last visited

Community Reputation

0 Обычный

About ivainc1789

  • Rank
    Профессионал
  • Birthday 03/15/1972

Контакты

  • Сайт
    Array
  • ICQ
    Array

Recent Profile Visitors

4453 profile views
  1. Да, не работает вывод текста именно в режимах GUI_SetTextMode(GUI_TM_NORMAL) и GUI_SetTextMode(GUI_TM_REV). Скорее это не связано с "поддержкой" нового контроллера, я проверил какие команды посылает библиотека в контроллер при выводе текста в этих режимах. Оказалось, что ничего особенного - те же команды 2A,2B,2C. Пробовал увеличивать тайминги по FSMC - не помогло. Удивительно, что не работают только два режима вывода из пяти. Особенно жаль NORMAL, поле EDIT использует для своей инициализации именно этот режим... Что же делать?... Попробую еще поиграться с инициализацией самого контроллера, если не поможет, значит все дело в библиотеке, будем как-то жить с урезанным текстовым выводом...
  2. Отвечу сам себе (. Судя по мануалу, NT35510 не поддерживается. Тем не менее, я попробовал это оспорить. Система команд очень похожа, для ввода/вывода используются [в основном] команды ILI9486 0x36,2A,2B,2C,2E. NT35510 должен получить: 0x3600,0x2A00 и так далее. Причем параметры всегда однобайтовые и перед ними должна всегда выводится "инкрементированная" команда. Короче, вот функции LCDConf_FlexColor.c, которые я переписал: /******************************************************************** * * LcdWriteReg * * Function description: * Sets display register */ uint16_t cmd; // текущая команда uint8_t i; // текущий параметр команды static void LcdWriteReg(U16 Data) { // ... TBD by user Data <<= 8;cmd = Data;i=0; *(uint16_t *)ADR_CMD = Data; } /******************************************************************** * * LcdWriteData * * Function description: * Writes a value to a display register */ static void LcdWriteData(U16 Data) { // ... TBD by user if (i == 0){// первый параметр команды *(uint16_t *)ADR_DAT = Data; }else{// команда и последующий параметр команды *(uint16_t *)ADR_CMD = cmd+i;*(uint16_t *)ADR_DAT = Data; } i++; } /******************************************************************** И это работает!!! Дисплей: http://www.lcdwiki.com/3.97inch_16BIT_Module_NT35510_SKU:MRB3973 Подключение: STM32F103VET6, FSMC. Но счастье длилось недолго ибо обнаружил странный глюк при выводе текста. Взял кусок кода из UM01003 v6.18 стр 215: // пример вывода текста из UM03001_v6.18.pdf стр. 215 // вывод должен соответствовать картинке в UM03001_v6.18.pdf GUI_SetFont(&GUI_Font8x16); GUI_SetBkColor(GUI_BLUE); GUI_Clear(); GUI_SetPenSize(10); GUI_SetColor(GUI_RED); GUI_DrawLine(80, 10, 240, 90); GUI_DrawLine(80, 90, 240, 10); GUI_SetBkColor(GUI_BLACK); GUI_SetColor(GUI_WHITE); GUI_SetTextMode(GUI_TM_NORMAL); GUI_DispStringHCenterAt("GUI_TM_NORMAL", 160, 20); GUI_SetTextMode(GUI_TM_REV); GUI_DispStringHCenterAt("GUI_TM_REV", 160, 36); GUI_SetTextMode(GUI_TM_TRANS); GUI_DispStringHCenterAt("GUI_TM_TRANS", 160, 52); GUI_SetTextMode(GUI_TM_XOR); GUI_DispStringHCenterAt("GUI_TM_XOR", 160, 68); GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV); GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 160, 84); К сожалению, через функции GUI_ текст выводится иногда с ошибками и пока нельзя сказать, что это из-за криво поддержанного контроллера NT35510. Текст внутри виджетов всегда выводится корректно.
  3. Сначала у меня был дисплей на ILI9486 и мне удалось довольно быстро его настроить в STemWin, видимо потому, что он поддерживается библиотекой. Но при подключении было обнаружено, что кристаллы "потекли" (с момента покупки не проверялся и не подключался) и в конечном устройстве использовать его невозможно. Вскоре получил дисплей на NT35510, который довольно быстро удалось инициализировать и проверить на тестовых программах до подключения STemWin. Все работает без замечаний. Однако после подключения STemWin дисплей не работает, при этом инициализация его проходит нормально. Наверное, дело в том что команды NT35510 хотя в целом и похожи на ILI9486 имеют отличие - 16битный формат. Например, сброс дисплея для ILI9486: TFT_WriteCmd(01); а для NT35510: TFT_WriteCmd(0100); Возможно, дело именно в этом, но моих знаний STemWin пока не хватает, чтобы что-то поправить в библиотеке. Скорее всего, ошибка в этой функции: void LCD_X_Config(void) { GUI_DEVICE * pDevice; CONFIG_FLEXCOLOR Config = {0}; GUI_PORT_API PortAPI = {0}; // Set display driver and color conversion pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR,GUICC_565,0,0); // Orientation //Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y; Config.Orientation = GUI_SWAP_XY; //Config.Orientation = GUI_ROTATION_CW; //Config.RegEntryMode = 0x6E30; LCD_SetSizeEx(0, YSIZE_PHYS, XSIZE_PHYS); GUIDRV_FlexColor_Config(pDevice,&Config); // Set controller and operation mode PortAPI.pfWrite16_A0 = LcdWriteReg; PortAPI.pfWrite16_A1 = LcdWriteData; PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple; PortAPI.pfReadM16_A1 = LcdReadDataMultiple; GUIDRV_FlexColor_SetFunc(pDevice,&PortAPI,GUIDRV_FLEXCOLOR_F66709,GUIDRV_FLEXCOLOR_M16C0B16); } Я ее не изменял с момента использования ILI9486. Подскажите, что не так...
  4. Именно так и сделано, по рисунку же видно... Проверил состояние битов, все верно указано, куб нагенерил именно так! А вот этот битик был в 1, т. е. NSS менеджмент разрешен. Я его скинул так #define BITCLR(REG,BIT) ((REG) &= ~(BIT)) BITCLR(SPI1->CR1,SPI_CR1_SSM); Проверил в CubeIDE - состояние сбросилось. Но все эти меры не привели состояние пина 77 к возможности переключаться. Помогает только если отменить ремап SPI1... P.S. Попробовал сконфигурировать SPI1 в режим master с пином NSS в режиме hardware выхода. Передача байтов по линиям MOSI и SCK проходит как нужно, но NSS все время в низком уровне. Поведение одинаково и с ремапом SPI1 и без оного...
  5. Нарвался совершенно случайно на очередные грабли. Вот простая конфигурация для STM32F103VET6. Как видим, ремап сделан и для SPI1 и для TIM2CH1. В данной конфигурации был важен именно таймер, т. к. я планировал звук выводить на пищалку именно через него (пин 77). Куб ничего подозрительного не выдал, я естественно тоже никакого криминала не заметил, короче, плата была успешно сделана. Приступил к программированию и тут все порушилось: пин 77 не хотел делать НИЧЕГО! Висит в Hi-Z и все. Разбор полетов показал, что SPI1 не имеет частичного ремапа и переносятся не только пины SCK,MISO,MOSI но и NSS! И насколько показывают мои эксперименты, для данной конфигурации платы пин 77 потерян - нужно выбирать что-то одно, но нужен и SPI1 и таймер (звук). Была надежда, что пином будет управлять та периферия, которая инициализирует его последней. На практике вроде такое не подтвердилось... Вот решил посоветоваться, может что не так понимаю или есть еще варианты? TIM2CH1asA15.rar
  6. Точно! В голову как-то не пришло насчет конденсаторов. Сверил проекции - действительно, они родимые! Причем именно кондеры, если кондер не установлен (то есть не запаян) то и его "залипа" по проекции нет. Большое спасибо за помощь. Принесли проц с памятью и... плата-то заработала!
  7. Эх, к сожалению далеко не в Москве...
  8. Внезапно принесли материнскую плату в ремонт Хуананжи X99-TF. Диагностика выявила умерший интеловский хаб - SLKM8. После вроде бы успешной перепайки новым выяснилось, что для проверки ни проца ни памяти под рукой нет, зато есть возможность воспользоваться мед. рентгеном. Качество снимка к сожалению не очень, но видны "залипшие" шары. Если присмотреться, то это залипами назвать еще пока нельзя ибо расположены они довольно характерно в таких местах, где расстояние между шарами довольно велико. Какие будут мнения? При включении после запайки чипа (без проца и памяти) на мат плату можно лицезреть пост код FF и через несколько секунд ребут. Далее все повторяется циклично... Все напряжения после дежурки вроде в норме, ничто не греется, есть включение подсветки на плате (мультиконироллер включает блок питания ATX), вращаются вентиляторы VRM...
  9. Точно! Попробовал, это работает! Шпиндель коммутируется относительно редко, поэтому термистор не успевает существенно нагреваться. Но ваш вариант интересен, надо будет его опробовать на практике. Ну я не сталкивался с проблемами в этом смысле и в данном проекте. Но перед HY4008 использовался TIP35C, который взорвался прямо при первом же включении на слабую нагрузку. Позже выяснилось под рентгеном, что китайцы вставили туда микроскопический кристалл на меньшую мощность. Также у меня есть давно купленный (и тоже на Ali) IXTK90N25L2 специально предназначенный для работы в линейном режиме. И даже по отзывам его нагружали от блока ATX и раскаляли до красна, и он выдерживал! Но я убоялся работать с ним из-за риска ненадежности. Вообще с покупкой китайских силовых полупроводников нужно быть очень осторожным, не покупать самое дешевое, желательно иметь пару магазинов с проверенным качеством, такие есть на Ali. Следующим перед HY4008 был наш KT898A1 - попытка доверится советской элементной базе, этот солдат честно держал удар, но радиатор 10*7*2см на макс мощности имел температуру 95 градусов и я решил с ним не экспериментировать тоже, риск потери координат из-за прерывания питания может дорого стоить. Короче, загасить 55V побыстрому до 24V не получилось, просто времени не было, нужно было сделать срочную гравировку...
  10. Да, я тоже думал о каскадном. Изначально в станке стоял тороидальный транс ватт на 150 и выходом 55V. Я тогда сделал обычный стабилизатор на HY4008 и он некоторое время работал даже при дикой рассеиваемой мощности. Просто нужно было быстро что-то сделать, вот и сделал. Естественно, поработав так на десятке плат во время обрезки очередной мосфету пришел каюк, а за ним и всей плате управления и драйверам шаговых двигателей ибо на них пошло 55V напрямую как результат пробоя. Так что первичный "преобразователь" на основе транса был и есть. Но более верное решение полностью переделать плату управления двигателем так как его номинальное напряжение 36V. Я долго экспериментировал с оборотами пытаясь увидеть разницу на качестве гравировки при полном питании мотора от 36V. Но по факту все всегда нормально работало и от 24V, потому его и использую. По теме. Проблему удалось решить. Блок питания не стал трогать т. к. все же он работает нормально. А вот в разрыв питания мотора изготовил и включил вот такую схемку: XR1 принимает 24V на вкл шпинделя, к XR2 подключаем шпиндель. Осциллограмма на выходе блока стала теперь такой (слева начало перех процесса, справа - полностью), шунт 0R15: Теперь стартовый ток около 3A и небольшой всплеск в момент включения VT1. Все работает нормально. Китайский адаптер вообще вне себя от щастья, теперь с ним нет сильного "мех удара" в момент пуска двигателя. Единственный недостаток схемы - если включать мотор слишком быстро после последнего выключения, VT1 не успевает закрываться и получаем знакомую перегрузку. Но это легко устраняется настройкой схемы (уменьшение R2, введение порогового элемента и т. п.). Только не надо забывать, что шпиндель регулируется ШИМом платы управления, потому при низких напр питания возможны новые проблемы... Но в целом, как всегда, самое правильное решение вообще все переделать после китайцев, но времени на это катастрофически не хватает. SpindleSoftStartFiles.rar
  11. не совсем понял... заменил же оба на 0F0022=2200uF и осциллограммы приведены для датчика тока 0R15. Не работает, но слегка улучшило ситуацию. Полагаю, нужно изменить схему обратной связи, кардинально.
  12. Итак, заменил С9 С10 на 2200uF 35V а также нашелся токовый шунт 5W 0R15. Установил его в разрыв минуса на выходе, т. к. осцилл имеет два канала с общей землей. Привожу осциллограмму для напряжения (верхняя) и тока (нижняя) на выходе источника питания 24V4A5 на TOP256YN: Пусковой ток стал теперь более 13A, а напряжение теперь не так резко падает в районе 14V. Стоит ли и далее увеличивать емкости фильтра? Получается нехилая батарея кондеров, если еще и остальные заменить.... В корпусе нет столько места... Все же попробую заняться ограничением тока, мне кажется такой подход более эффективным... Кстати, китайский адаптер очень легкий, его размеры 130*60*30мм.
  13. В разрыв плюса на выходе блока питания поставил резистор 0R33 5W и вот осциллограмма на нем в момент включения мотора: Т.е. имеем пусковой ток 10A а длительность перегрузки аж 15-20ms. Не удивительно, что контроллер уходит в защиту... Вопрос, как теперь с этим бороться... Завтра попробую увеличить емкости С9-С10 но ИМХО это не поможет - кондеры просто разрядятся а контроллер не сможет их быстро зарядить до наступления авторестарта... Я конечно использовал PIexpert для расчета, но перепроверял в другой программе. PIexpert почему то выставил непрерывный ток по намоточным данным для прерывистого тока. Реальная индуктивность первички около 250uH. PIexpert.rar Почему же китайское чудо работает?
  14. Попозже сделаю по току, вот пока по напряжению. Итак, подключаем шпиндель сначала к блоку на TOP256 а потом к китайскому адаптеру. Третья осциллограмма - сделана для определения времени переходного процесса китайского адаптера. Как видим, все плохо у TOP. Длительность "переходного процесса" высока, что интерпретируется контроллером видимо как КЗ и начинаются авторестарты. А у китайца не так все плохо - 100мс на восстановление и все. Вскрыть китайца пока жалко ))) В моем первом сообщении приведена осциллограмма при подключении электронной нагрузки к блоку на TOP. Для китайца она оказалась чуть даже хуже чем в моей схеме. ИМХО, с электронной нагрузкой речь идет о переходном процессе лишь в 5-10us. А при подключении шпинделя имеем десятки-сотни ms... Я пробовал подбирать эту цепь и с резистором и без оного, но ничего не изменилось ни на электронной нагрузке ни на подключении мотора. да я уже попробовал и это по приведенной ниже схеме, (на фото стороны bottom) вы можете видеть оставшиеся замкнутые накоротко 5 резисторов 1206 включенных в разрыв выходного разъема. При плавном изменении (увеличении) нагрузки TOP корректно снижал напряжение как и китайский адаптер, но при подключении мотора-шпинделя все опять повторилось как и до... Кроме всего, я тут же изготовил второй блок питания по идентичной методике на TOP271EN, 24V8A и думал, что сейчас то уж все заработает - и фиг там, полное повторение ситуации с мотором. А вот в пределах расчетных данных, т. е. когда нагрузка активна и не перегружает блок - он работает нормально, вопросов нет. Сам мотор все же маломощный (индуктивность 720uH), ИМХО не может так сильно перегружать. У китайского адаптера 5А конечно же китайские, ограничение наступает уже при 3.5A и при этом с ним все работает... Пока даже не ясно, какая защита срабатывает
  15. Получил из Китая мини ЧПУ с совсем битой электроникой. Пришлось заменить плату управления и остро встал вопрос по блоку питания. Так как станок мини и предназначен только для гравировки небольших плат задача показалась тривиальной и в короткие сроки был изготовлен блок питания 24V4A на TOP256YN (фотки и схему прилагаю). Сама плата работает нормально только в пределах расчетных характеристик, но как только подключаю к ней маломощный шпиндель станка (на холостом ходу потребляет 24V 0.4A) блок питания уходит в защиту и работает авторестарт каждую секунду. Побороть пока не получается. Однако установлено, что если шпиндель включать шимом постепенно, то все нормально работает. Проблема именно с пуском при старте. Такая работа источника питания совершенно недопустима для ЧПУ ибо при прерывании питания станок теряет координаты со всеми вытекающими. При подключении электронной нагрузки 2A имеем на выходе блока ужасающую переходную характеристику (см вложение). Насколько я понимаю, схема обратной связи слишком медленная и не успевает отслеживать резкие изменения нагрузки. Мои попытки подбора R9 и С14 ни к чему не привели - все остается практически без изменений. Далее я попытался сделать доп схему soft start на вторичной стороне, которая состоит из электролита параллельно TL431 и его зарядной цепи из резистора и диода. Суть в том, что при включении блока питания и заряде этого электролита ток в пин CONTROL TOP256 не прерывается и авторестарт откладывается. Но это работает только при старте блока питания, ведь далее электролит остается в заряженном состоянии и на работу схемы TL431 не влияет. Первое же включение шпинделя приводит к прерыванию питания и только второй авторестарт нормально запускает этот шпиндель. Итак, реакция на резкое изменение нагрузки при включении шпинделя (step load regulation) не позволяет использовать данное схемное решение на TOP256YN. Может быть, TOPswitch девайсы являются voltage mode контроллерами и принципиально не могут работать в этих применениях? Прошу помочь. P.S. Работаю пока на дешевом китайском блоке питания 24V5A, нормально запускающим шпиндель. Замеры его выхода показали что он не отключает выход при перегрузках, а просто ограничивает мощность, т. е. при увеличении тока свыше 5A напряжение на выходе плавно снижается. Стало еще интереснее...