Jump to content

    

U_K

Участник
  • Content Count

    18
  • Joined

  • Last visited

Community Reputation

0 Обычный

About U_K

  • Rank
    Участник

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Понадобилось выяснить внутреннюю стабильность тока драйвера
  2. Лазер Thorlabs S1FC635, работает около 1.5 года (бывает даже круглосуточно), пока вроде в норме) Внутри лазерный диод HL6320G
  3. По невнимательности написал, надо было R19 и C1, исправил... В простейшем интеграторе "+" обычно просто заземлен, а тут к нему прицеплены напряжения с 2-х точек Скажем так, Uset - напряжение с потенциометра ограниченное двумя повторителями на U1.1 и U2.2 (итого диапазон от 0В до 2В) + напряжение с "входа модуляции", уменьшенное в 0,4 раза (т.к. на этот вход может подаваться 0..5В, которые преобразуются в 0...2В) вот U1_3OUT - сигнал с трансимпедансного усилителя (усиленный сигнал фотодиода)
  4. Производная или интеграл? Там же вроде интегратор находится А тогда получается, что -2.5В - "искусственная земля"? Тогда R34 - это нагрузка на землю, а R20 - это, как в инвертирующем усилителе, резистор на землю с "+"-ого входа?
  5. Здравствуйте. Имеется схема драйвера для лазерного диода, восстановленная по плате (через Diptrace). Есть в схеме один фрагмент - см.картинку. Хотелось бы понять, какую роль выполняет ОУ U1.4. На его инвертирующий вход подается напряжение с фотодиода(встроен внутрь лазерного диода, предназначен для стабилизации мощности излучения). На неинвертирующий вход подается Uset - это напряжение с потенциометра, который регулирует мощность(находится на передней панели лазера) + к входу прицеплено через R20 отрицательное опорное напряжение. Так вот вопрос - U1.4 является дифференциальным усилителем, который вычисляет разницу между входами, причем один из входов интегрируется(R19 и C1 на схеме) или U1.4 выполняет роль интегратора с каким-то смещением? И какой примерно формулой будет определяться напряжение на выходе U1.4 в этом случае?
  6. Наконец-то выяснил источник проблемы. При чтении регистра PHY_BMCR выдавалось 0x3900, так из этого значения получается, что PHY находится в POWER-DOWN режиме. Еще раз посмотрел на схему - пин PB14(MII_INT) у STM соединен с пином PWR_DN/INT у DP83848. Так вот, нужно было подтянуть в этом случае MII_INT к питанию. Cделал это в инициализации GPIO. Инициализация в HAL_ETH_Init теперь выдает HAL_OK (и бит SR в DMAMBR сбрасывается когда нужно, и бит link status в регистре BMSR у DP83848 устанавливается). И соотвественно ping есть. Вот так, очередной раз у меня из-за такой мелочи, не работало. Кто помогал - большое спасибо!
  7. Из регистра PHY_BMCR (39 00) - Autonegation Enable, PHY-BMSR (78 49). На ПК, в Wireshark все то же самое, как и раньше(ПК спрашивает "Who has 192.168.1.1? Tell 192.168.1.192", но никто не отвечает). Светодиоды на разъеме Ethernet на плате - один горит постоянно, другой мигает периодически(когда ПК шлет данные). Локальная петля кабелем - в смысле закоротить TX и RX на кабеле, из МК что-то отправить через PHY и обратно через PHY принять?
  8. В while (((heth->Instance)->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET) заккомментировал "return HAL_TIMEOUT" и добавил break. Бит SR в DMABMR стал сбрасываться - источник https://www.programmersought.com/article/52516336171/ Добрался до чтения регистра PHY_BSR (HAL_ETH_ReadPHYRegister(heth, PHY_BSR, &phyreg)) - теперь зависает в цикле while (((phyreg & PHY_LINKED_STATUS) != PHY_LINKED_STATUS)) Регистры у PHY читаются, все нормально. Проблема теперь в том, что бит LINK STATUS в PHY BSR не устанавливается.
  9. Проверил перед циклом, все нормально, AHB Prescaler=1, после него 168МГц. Перед ним 168 МГц идет на Ethernet PTP clock, но однако из регистра RCC->AHB1ENR, Ethernet PTP clock disabled. Если что вот регистры: RCC->CR 03 03 87 83 HSEON=1(HSE clock enable) HSERDY=1(HSE clock ready flag) HSION=1(Internal high-speed clock enable) - если у нас внешнее тактирование, HSI вроде должен быть выключен? HSIRDY=1 PLLRDY=1(Main PLL (PLL) clock ready flag) PLLON=1( Main PLL (PLL) enable) RCC->PLLCFGR 04 40 54 19 PLLQ=4 PLLP=2 PLLN=336 PLLM=25 f(VCO)=25*336/25=336МГц f(PLL general clock output)=336/2=168МГц RCC->CFGR 00 00 94 0A RTCPRE 00000(no clock) PPRE2(APB2)=100(divided by 2) PPRE1(APB1)=101(divided by 4) HPRE(AHB)=0000(system clock not divided) SWS=10(PLL used as the system clock) SW=10(PLL selected as system clock)
  10. Тактирование настроено на внешний кварц 25МГц, отдельный кварц, второй на плате(после кварца для PHY). В коде установлено HSE value = 25000000, регистры с тактированием STM уже проверял. У TX_CLK и RX_CLK амплитуда до 2.6В, может нужно хотя бы 3В?(Хотя возможно, амплитуда уменьшается из-за щупов для такой частоты)
  11. как раз перед этим циклом проверяю
  12. Проверил тактирование в регистрах, сверился с reference документом на STM, все установлено как нужно(включен альтернативный режим, выбраны альтернативные функции ETH для PA1(RX_CLK) и PC3(TX_CLK)). Если, что вот значения из регистров: RCC->AHB1ENR 0E 10 00 8F RCC->AHB1RSTR 00 00 00 00 GPIOA->MODER A8 00 80 AA GPIOC->MODER 00 05 AA A8 GPIOA->AFRL B0 00 BB BB GPIOC->AFRL 88 BB BB B0 На входах MII_RX_CLK и MII_TX_CLK, а также 25MHz_OUT у DP83848 генерация есть (по форме между синусом и квадратом), единственно тактовый сигнал в границах от 840мВ до 2.6В. По длительности импульсы 40нс, соответствует 25МГЦ. На линиях RX_CLK и TX_CLK стоят резисторы по 51 Ом, может тока маловато? Хоть и звучит как бред, но было у меня дело один раз с цифровым потенциометром - на SPI пришлось убрать резисторы, иначе команды потенциометр не воспринимал. P.S. попробовал без резисторов, не повлияло
  13. Посмотрел инициализацию. В low_level_init(), функция HAL_ETH_Init(&heth) выдает HAL_TIMEOUT - зависает в цикле "while (((heth->Instance)->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)" и через некоторое время, вылетает из него. По документации на STM, я так понял, не происходит программный сброс - MAC DMA controller должен сбросить все регистры MAC, после чего бит SR должен установиться в ноль в регистре DMABMR. В файле stm32f4xx_hal_eth.c по этому поводу написано, что сброса не происходит, потому что нет сигналов ETH_RX_CLK или ETH_TX_CLK, и нужно проверить PHY или конфигурацию GPIO. Странно, но сигналы RX_CLK и TX_CLK есть, и GPIO по десятому разу проверил.
  14. MX_LWIP_Init() имеется, она же стандартно генерируется кубом
  15. Посмотрел регистры из ETH_MMC, связанные с приемом (после условия "if (HAL_ETH_GetReceivedFrame(&heth) != HAL_OK"), которое находится в low_level_input): ETH->MMCRIR, ETH->MMCRIMR, ETH->MMCRFCECR, ETH->MMCRFAECR, ETH->MMCRFAECR, ETH->MMCRGUFCR - все по нулям, дефолтные значения. Проверил еще пару MAC-регистров - ETH->MACA0HR, ETH_MACA0LR - там тоже все как в документации на STM(reset value). В регистре ETH->MACCR значение отличается от стандартного - там в 2-м и 3-м битах единицы - Receiver, Transmitter enable. В ETH->MACDBGR(debug register) по нулям -> по документации MAC в idle-режиме(ожидания), буферы FIFO пусты, а на линиях данных нет сигналов. Получается, что периферия Ethernet не инициализировалась?