Перейти к содержанию
    

rav38

Участник
  • Постов

    55
  • Зарегистрирован

  • Посещение

Весь контент rav38


  1. Здравствуйте все! Есть возможность отправить себя на какие-нибудь курсы. Поскольку деятельность связана со разной беспроводкой, логично было бы получить представление о проектировании и расчете печатных антенн, антенных массивов и вообще антеннах. Коллеги, порекомендуйте пожалуйста что-то стоящее из многообразия всяких разных курсов.
  2. stm32g4 ADC2

    Здравствуйте все! Прошу совета. Есть STM32G431KB (UFQFPN-32). Несколько каналов ацп. Разведены на adc1 и на adc2. Все каналы работают независимо. Каналы на adc1 измеряют корректно. Каналы на adc2 с очень большим смещением. Притом разным на разных каналах. Ситуация идентична на двух платах. Пробовал упрощать, работать только с одним каналом, с dma или без - постоянно одно и тоже. Если детальнее пример PA4, ADC_CHANNEL_17: 1) вход закорочен на 0 - результат 1987 2) 0,27В на входе - результат 2150 3) 2,2В на входе - результат 3358 Нигде не увидел такого, что adc2 не может работать независимо. Каких-то особенностей в инициализации ADC2 не нашел. Ткните носом в очевидное пожалуйста. Если верно понимаю stm32f4 аналогичен полностью. Самый упрощенный листинг прилагаю: void ADC2_Init (void) { ADC_ChannelConfTypeDef sConfig = {0}; hadc2.Instance = ADC2; hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; hadc2.Init.Resolution = ADC_RESOLUTION_12B; hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc2.Init.LowPowerAutoWait = DISABLE; hadc2.Init.ContinuousConvMode = ENABLE; hadc2.Init.NbrOfConversion = 1; hadc2.Init.DiscontinuousConvMode = DISABLE; hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc2.Init.DMAContinuousRequests = DISABLE; hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; hadc2.Init.OversamplingMode = DISABLE; if (HAL_ADC_Init(&hadc2) != HAL_OK) { Error_Handler(); } sConfig.Channel = ADC_CHANNEL_17; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5; if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) { Error_Handler(); } } int main (void) { HAL_Init(); SystemClock_Config(); Device_EnterActiveMode (); ADC2_Init (); if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED) != HAL_OK) { Error_Handler(); } if (HAL_ADC_Start(&hadc2) != HAL_OK) { Error_Handler(); } if (HAL_ADC_PollForConversion(&hadc2, 2) != HAL_OK) { Error_Handler(); } while (1) { adcConvertedData = HAL_ADC_GetValue(&hadc2); } }
  3. Добрый день! Требуется сделать преобразователь напряжения из сетевого 220VAC на три выхода: 1) 36В - 200мА (должно быть максимально точно) 2) 24В - 500мА 3) 5В - 200мА (минимальные требования по точности - будет стоять LDO для питания цифровой части схемы) Мысли вслух. Преобразователь на TNY280, обратная связь с выхода 36В. Трансформатор рассчитывается и мотается со всеми экранирующими обмотками по софтине PowerInt. Какими путями можно уменьшить взаимное влияние токов по трем выходам? Был совет сделать стабилизацию среднего напряжения между 24В и 36В - в цепи обратной связи с двух каналов по резистору и один общий резистор на землю. Подскажите еще пути решения и какие грабли следует учесть?
  4. UP Кроме поиска разовых работ, готов принять участие в разработке перспективных тем и проектов (в том числе первичная проработка идей) в составе команды. Регион не приниципиален. Возможность релокации рассматривается.
  5. stm32f407 + uSD (SDIO) + FAT

    Огромное спасибо! Вопрос решился. Посыпаю голову пеплом. Была ошибка в портировании библиотек в части определения размера карточки. Карточка считывалась верно, но была лишняя локальная переменная в SD_ioctl, из которой подставлялось мусорное значение емкости карты. В любом случае было даже полезно - изучил досконально интерфейс и библиотеки)))
  6. stm32f407 + uSD (SDIO) + FAT

    Прикрутил, Новый год, новая библиотека - форматирование старое кривое. Код проходит вроде без ошибок, но карта виндой по-прежнему не читается. Форум смотрел, вроде все настройки DMA и SDIO вроде учел и надо ковырять файл stm32f4xx_hal_sd.c Отсюда вопрос - ни у кого нет исправленной библиотеки или хотя бы подсказки что править?
  7. stm32f407 + uSD (SDIO) + FAT

    Продолжил возьню с картой. Перевел обмен на DMA, вылет по флагу исчез. Программа вроде бы как полностью отрабатывает - форматирует, записывает строку на карту, что-то там считывает и говорит ОК. На это хорошее заканчивается, начинается интересное При проверки карты виндой требуется форматирование. Если карту вставить сразу форматированной и писать на нее строку все норм. Под отладчиком обратил внимание на особенность с количеством блоков, записываемых функцией mkfs. Их количество неуклонно растет, хотя вроде бы должно быть постоянным. Сейчас уже порядка 360 000, хотя при первых попытках было меньше 200 000. Сам процесс форматирования идет минут 20. Скачал библиотеку от Чена, буду ее прикручивать.
  8. stm32f407 + uSD (SDIO) + FAT

    Здравствуйте все! Осваиваю работу stm32f4 с uSD, используя STM32F4-DISCOVERY (stm32f407vgt6) + плата STM32F4DIS-BB Проект собрал, взяв библиотеки из STM32Cube_FW_F4_V1.14.0 и оттуда же из примеров вытащил библиотеки FatFs. Используется работа в полинге. Из примеров оставил main, где сначала форматируется карта, а потом идет запись текстового файла. В процессе форматирования на n-ном блоке происходит вылет по флагу SDIO_FLAG_TXUNDERR. Если поставить паузы между блоками по 1 мс, вылетов нет, но после завершения работы программы карта при подключении к винде требует форматирования. Если убрать вызов ф-ции f_mkfs на уже отформатированной карте успешно создается текстовый файл. Добавил проверку флага ReadyForData перед каждой записью блока (не нашел к ф-циях HAL такого) -ситуация не изменилась. Выкинул FreeRTOS, оставил только инициализацию контроллера, проблема осталась. В настройках SDIO: SDIO_CLOCK_BYPASS_DISABLE SDIO_HARDWARE_FLOW_CONTROL_DISABLE Что не так делаю?
  9. RESET ADuC836 и WSD

    Проблема была в монтаже периферии на портах последовательного порта. Смутила непривычная работа схемы сброса.
  10. RESET ADuC836 и WSD

    Здравствуйте все! Задача стояла переработать существующее устройство на ADuC836 в другой корпус не меняя схемы и прошивки. Схема на словах (обе платы одинаково): PSEN через 1к подключается к нулю через разъем программатора - перемычка в разъеме. RESET подтянут к нулю через 20к и стоит конденсатор 2,2мкф между RESET и +5В Логика работы: подключил программатор, включил питание При подключении к WSD микросхема не определяется на новой плате, но благополучно определяется на старой без всяких проблем и шаманства. На новой схеме если пинцетом хаотично закорачивать +5В и RESET и при этом подключаться через WSD ADuC периодически определяется. если просто замкнуть и разомкнуть RESET при PSEN подтянутым к 0 - не определяется. Как вообще оно должно быть? Каким образом микросхема сбрасывается? я понимаю что микросхеме для сброса нужен высокий уровень на RESET (рабочий низкий)
  11. Клон PicKIT3 и PIC16F690

    Внутренний генератор используется, верно. Ножки тоже чет там делают как выходы в схеме, сейчас их не использую в своем коде. А то что было зашито -там вполне могло использоваться. Почти написал требуемое приложение, проблемы вроде не возникало. Посмотрим как дальше. Тем более что пока работаю с одной платой, а их несколько десятков спаяно. Если буду перерабатывать железку всерьез, учту замечания.
  12. Клон PicKIT3 и PIC16F690

    В общем странно все это, но тем не менее. После того как обнулил микросхему Тритоном, проблема ушла. Накидал тестовую моргалку светодиодом, успешно записал и успешно стер своим программатором. Вот запустить дебагер не смог, но это и не особо нужно, приложение небольшое. Более чем уверен что старая программа стояла с защитными фьюзами, но мешало ли это стиранию с помощью PicKitа хз. Я озадачен, но в общем-то надеюсь что проблема решена.
  13. Клон PicKIT3 и PIC16F690

    про конденсатор на vdd странно. стоит танталовый рядом с керамикой.
  14. Клон PicKIT3 и PIC16F690

    Тритон стирает и программирует. Обнулил проц, буду завтра своим пробовать шить Оно?
  15. Клон PicKIT3 и PIC16F690

    Висит там всякое, есть такое. Одолжу сейчас тритон, попробую им стереть. Vpp есть на плате, сигналы доходят. Опять процессор определяется.
  16. Клон PicKIT3 и PIC16F690

    Здравствуйте все! Имею чужую железку (чем шилась и когда неизвестно, исходников и зашитых конфигов нет, тактирование от внутреннего генератора). Потребовалось переделать. В качестве программатора используется клон PicKIT3 от Olimex и последний MPLAB X. Собственно суть в заголовке. Микросхема определяется, но при попытке перезаписи выдает ошибку. При попытке стереть старая программа точно сохраняется (в MPLAB сообщение, что стирание прошло успешно). Aplly Vpp before Vdd или Vdd before Vpp не меняет дела. Питание и от внешнего источника 3,3В и от программатора - эффект тот же. Куда копать? У себя конфиги ставлю такие: #pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD) #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = ON // Brown-out Reset Selection bits (BOR enabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled
  17. Здравствуйте! Попробовал применить решение, основанное на АЦП от TI ADS131E04. http://www.ti.com/product/ADS131E04 Выбор обусловлен достойными характеристиками и относительно невысокой ценой. В итоге поимел непонятные проблемы с зависанием АЦП. Либо пропадает сигнал готовности данных DRDY, либо считываю непонятные цифры, пропадает опорное напряжение. Создал ветку на форуме e2e.ti https://e2e.ti.com/support/data_converters/...s/f/73/t/524589 Указали на недочеты по питанию - с опорным вопрос кажется отпал. Попробовал постоянно аппаратно сбрасывать АЦП после каждой серии измерений, так как первое измерение проходит корректно. Логика сейчас такая: Если удалось считать данные 16 раз подряд (не пропал сигнал DRDY) и слово STATUS не равно нулю (первые 4 бита 1100 - не всегда так бывает даже если данные верны), выдаю данные наверх. После RESET микросхемы и перенастройка АЦП - все в кучу 10 мс. Такая цепочка может не проходить в течение нескольких секунд. Если и проходит - примерно каждая 10 серия измерений с непонятными цифрами. Стабилизация параметров, исправление разводки земли и различные танцы с бубном ничего не меняет. Грешу впервую очередь на кривизну своей платы и кода, но вдруг все же для этой микросхемы критично необходим внешний генератор тактовой частоты или источник опорного напряжения, а не внутренние. Или еще нюансы.... Пока понял, что однозначно лучше было команду использовать START аппаратнно, но не особо критично. Относительно схемы во вложении - оптрон DRDY изменён на другой. У того что в схеме не хватает быстродействия. Если у кого-то есть опыт применения АЦП серии ADS131 прошу поделиться рабочей конфигурацией этого АЦП. Пока не понимаю в какую сторону двигаться с переделками и в чем ошибка. VMP.pdf
  18. Попробую завтра) спасибо. Большая ёмкость (2.2 мкФ максимум что ставил) заваливает фронты и амплитуда успевает нарастать до нескольких вольт, но все равно видна просадка.
  19. Однако мне повезло с энкодером. Увеличение нагрузки в два раза изменило картинку в лучшую сторону на уровне эмоций. Зануление корпуса и экрана никак не повлияло в принципе. Замена кабеля на кабель от второго энкодера никак не повлияла. Не обрезая кабель подпаялся проводами к штырям разъёма- получилась общая длина примерно пол метра. Картинка нормальная, выбросы мелкие все же присутствуют, но уже никак не влияют на оптрон и обработку сигнала. Добавление конденсатора 220 мкФ картину не изменило на такой длине. В общем завтра буду решать конструктивные вопросы по теме какая реально нужна длина кабеля, так как скомпенсировать выбросы по фронтам вариантов не могу придумать. Разве что измерять скорость по одному каналу и забить на направление вращения.
  20. В общем на маленьком все вроде нормально работает. Измеряю скорость и направление. Длина кабеля метр. Больших энкодера два - оба работают одинаково на 10 метрах. Кабель пока обрезать не могу. Маленький поставить тоже не могу - готовая металлоконструкция с креплением. Все энкодеры покупались фиг знает когда. Года два минимум. В использовании не были. Сейчас попробую заземление экрана. И увеличить ток. Открытый коллектор терпит 30 мА, оптопара 15 - сейчас около 11. Воспользуюсь советом зашунтировать оптопару резистором.
  21. Два канала. В качестве нагрузки резисторы 2к. Без других элементов. Один канал до и после оптрона В общем взял другой энкодер с коротким кабелем. Проблема исчезла. На фото - виновник торжества (покрупнее). Как вариант после обрезки по месту кабеля поставить конденсатор по питанию. Пока буду отлаживать железо на втором энкодере.
  22. Здравствуйте все! Есть необходимость подключить инкрементальный энкодер E50S8-1024-3-N-24 (открытый коллектор) Autonic к своему устройству. Раньше никогда с энкодерами дела не имел. Если подключаю по одному каналу (A, B, Z) никаких проблем вроде бы нет при вращении в любую сторону - прямоугольные импульсы. Если подключаю два канала: по заднему фронту импульсов канала A импульсы канала B имеют провалы (см. картинку - красные стрелки, осцилограммы не зафиксировал - завтра добавлю) если вращение в обратную сторону - аналогично - по заднему фронту импульсов B провалы в канале A. Провалы есть до и после оптрона. Только начал разбираться. хочу увеличить ток для начала до 15 мА(максимум рабочий ток оптрона). Кабель пока не обрезал - не знаю еще сколько потребуется для монтажа - примерно 10 метров сейчас. Так же не должно быть?
  23. г. Иркутск. Работа удаленно приветствуется. Готов отправить портфолио.
  24. Полный цикл разработки электронных устройств: - моделирование в 3D конструктива и дизайна создаваемого оборудования. - проектирование принципиальных схем и трассировка печатных плат c помощью пакета Altium Designer. - разработка программ микроконтроллеров на C для платформ ARM CortexM3, M4; Microchip PIC16, PIC18; Atmel AVR. - составление технической и пользовательской документации. - организация контрактной сборки оборудования и сопровождение в производстве. E-mail: [email protected]
  25. STM32F103CBT и I2C2

    В общем проблему с интерфейсом так и не решил, но уперся в какие-то другие грабли, связанные с портом PB10 (аппаратный I2C2). Написал программную реализацию I2C. На плате две ведомых микросхемы, каждая на своем интерфейсе. I2C1 аппаратный запускать даже не пробовал, программная реализация заработала сразу же. Начал пробовать опрашивать микросхему на PB10. При инициализации GPIO PB10 c него начинает лезть 26МГц (картинка в первом посте темы). Перефирия не инициализирована, ремап не включен. Параллельно работает светодиодная моргалка и опрашивается первый пограммный порт I2C, все это крутится на FreeRTOS. Если PB10 настроить на вход - генерации нет. Любой вариант выхода - генерация есть. Частотат появляется после выполнения кода GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); На любом другом порте проблема не наблюдается. Платы собраны в 2 экземплярах. Повторяемость 100%. Куда копать?
×
×
  • Создать...