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

aske1

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

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

  • Посещение

Репутация

0 Обычный

Информация о aske1

  • Звание
    Участник
    Участник

Посетители профиля

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

  1. прошу прощения за мою тупизну, но я всё-таки уточню:т.е. получается, что по дефолту LDO тоже включен? Т.е. учитывая, что в nucleo по умолчанию подключена первая схема : на Vcap(выход LDO) и на вход LDO подаётся питание с выхода SMPS и LDO, который на новом контроллере изначально включен, от этого не страдает?
  2. А как Вы поступили с тремя выводами Vcap - объединили их? На плате STM32H745 Nucleo я смотрел они соединены вместе. Если их не объединять, то не до конца понятно как два конденсатора 2,2мкФ распределить между 3-мя пинами Vcap.
  3. Здравствуйте! Хочу сделать плату с контроллером STM32H745, запутался в схемах подключения питания. В документации 6 или больше схем как можно подать питание на Vcore используя SMPS или LDO. Решил для себя, что мне нужно максимально просто без всяких SMPS и чтобы не было на плате питаний ниже 3,3В и чтобы частоту можно было максимальной сделать(вроде бы она максимальна только при включенном LDO). Значит получается надо через LDO. Нашел схему и мануал на плату STM32H745 Nucleo на том же контроллере. Там по дефолту почему то схема питания Direct SMPS и сказано, что чтобы поменять одно на другое надо сделать следующие настройки: в main.c в SystemClock_Config прописать для случая “Direct SMPS” (Default): HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);, а для случая “LDO”: HAL_PWREx_ConfigSupply (PWR_LDO_SUPPLY); Ниже привел схемы питания Direct SMPS и LDO. Вопрос не получится ли так, что я сделаю плату для случая питания Vcore от LDO, а у меня потом контроллер не получится прошить, т.к. допустим по умолчанию в новом мк включен SMPS, а LDO выключен? И что делать в таком случае, как подавать питание на Vcore - просто снаружи на конденсатор ножки Vcap (не забыв отключить Vdd =3,3В от Vddldo) ?
  4. Заработало, не понял только почему 1-й импульс Tim1 длительностью меньше, чем все остальные..
  5. Я пытаюсь это через внешний вход сделать TI2FP2 у TIM1 , но т.к. на рисунке написано тоже пробовал и тоже не получилось
  6. Переписал, если я правильно понял принцип то оно должно выглядеть так: static void MX_SLAVE_TIM1_INIT(void) { //Форма импульса OPM определяется записью в регистры сравнения (с учетом тактовой частоты и прескалера счетчика). /* set the Timer prescaler to get 1MHz as counter clock */ RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; /* configure the Timer prescaler */ TIM1->PSC = 9; /* configure the period */ TIM1->ARR = 500-1; /* configure the repetition counter */ // TIM1->RCR = 1; /* configure pulse width */ TIM1->CCR1 = 250 ; /* Select the Clock Division to 1*/ // TIM1->CR1 |= TIM_CLOCKDIVISION; /* Reset clock Division bit field */ TIM1->CR1 &= ~ TIM_CR1_CKD; //Отобразите TI2FP2 на TI2 записью CC2S=01 в регистре TIMx_CCMR1 TIM1->CCMR1 |=TIM_CCMR1_CC2S_0; //TI2FP2 должен детектировать положительный перепад, для этого запишите CC2P=0 и CC2NP=0 в регистре TIMx_CCER 7?5 TIM1->CCMR1 &=~(TIM_CCER_CC2P|TIM_CCER_CC2NP); //Сконфигурируйте TI2FP2 в качестве триггера для контроллера подчиненного режима (TRGI) записью TS=110 в регистре TIMx_SMCR //TI2FP2 используется для запуска счетчика путем записи SMS=110 в регистре TIMx_SMCR (режим триггера). TIM1->SMCR |=(TIM_SMCR_TS_2|TIM_SMCR_TS_1|TIM_SMCR_SMS_2|TIM_SMCR_SMS_1); //разрешите PWM mode 2 записью OC1M=111 в регистре TIMx_CCMR1 TIM1->CCMR1 |=(TIM_CCMR1_OC1M_2|TIM_CCMR1_OC1M_1|TIM_CCMR1_OC1M_0); //В нашем примере биты DIR и CMS регистра TIMx_CR1 должны быть в лог. 0. TIM1->CR1 &=~(TIM_CR1_DIR|TIM_CR1_CMS); // Когда бит OPM в регистре TIMx_CR1 установлен в 0, выбирается режим повторения (Repetitive Mode) TIM1->CR1 &=~(TIM_CR1_OPM); /* * Если пользователь хочет вывести сигнал с минимальной задержкой, * то должен быть установлен бит OCxFE в регистре TIMx_CCMRx. * Тогда OCxRef (и OCx) принудительно будут установлены в ответ * на сигнал стимула, без обращения внимания на сравнение. * Новый уровень такой же, как если бы произошло совпадение сравнения. * OCxFE действует только если канал сконфигурирован в режиме PWM1 или PWM2. * */ TIM1->CCMR1 |=TIM_CCMR1_OC1FE; }
  7. Честно говоря я так и не догнал где во вкладке SFRs брать названия отдельных битов, группы битов там видел например CC2S. Как записать например вот эти строчки с помощью того, что есть в той вкладке? //Отобразите TI2FP2 на TI2 записью CC2S=01 в регистре TIMx_CCMR1. TIM1->CCMR1 &=~(0x3UL << (8U)); TIM1->CCMR1 |=(0x1UL << (8U));
  8. Здравствуйте! Пытаюсь сделать так, чтобы один таймер STM32f407 TIM2 периодически запускал другой TIM1 и чтобы тот другой на лапке мк формировал импульс заданной длительности. Соответственно у таймера TIM2 взял настроил на выход канал CH1 и соединил его с каналом таймера TIM1 СH2, который настроил на вход, у TIM1 так же канал СH1 настроил на выход. С таймером TIM2 проблем нет. На его CH1 вижу периодически меняющийся сигнал. Проблемы с таймером TIM1 на его канале CH1 импульсов нет, хотя в отладчике вижу, что он считает хотя и как то странно (мне нужен 1 импульс, а он переполняется несколько раз) за время переполнения TIM2. Инициализацию TIM1 приложил. Подскажите пожалуйста что я делаю не так? Вроде всё должно быть просто, а уже столько времени потратил.. static void MX_SLAVE_TIM1_INIT(void) { //Форма импульса OPM определяется записью в регистры сравнения (с учетом тактовой частоты и прескалера счетчика). /* set the Timer prescaler to get 1MHz as counter clock */ RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; /* configure the Timer prescaler */ TIM1->PSC = 9; /* configure the period */ TIM1->ARR = 500-1; /* configure the repetition counter */ // TIM1->RCR = 1; /* configure pulse width */ TIM1->CCR1 = 250 ; /* Select the Clock Division to 1*/ // TIM1->CR1 |= TIM_CLOCKDIVISION; /* Reset clock Division bit field */ TIM1->CR1 &= ~ TIM_CR1_CKD; //Отобразите TI2FP2 на TI2 записью CC2S=01 в регистре TIMx_CCMR1. TIM1->CCMR1 &=~(0x3UL << (8U)); TIM1->CCMR1 |=(0x1UL << (8U)); //TI2FP2 должен детектировать положительный перепад, для этого запишите CC2P=0 и CC2NP=0 в регистре TIMx_CCER 7?5 TIM1->CCER &=~(0x1UL << (5U)); TIM1->CCER &=~(0x1UL << (7U)); //Сконфигурируйте TI2FP2 в качестве триггера для контроллера подчиненного режима (TRGI) записью TS=110 в регистре TIMx_SMCR TIM1->SMCR &=~(0x7UL << (4U)); TIM1->SMCR |=(0x6UL << (4U)); //TI2FP2 используется для запуска счетчика путем записи SMS=110 в регистре TIMx_SMCR (режим триггера). TIM1->SMCR &=~(0x7UL << (0U)); TIM1->SMCR |=(0x6UL << (0U)); //разрешите PWM mode 2 записью OC1M=111 в регистре TIMx_CCMR1 TIM1->CCMR1 &=~(0x7UL << (4U)); TIM1->CCMR1 |=(0x7UL << (4U)); //Пользователь может опционально разрешить регистры предзагрузки записью OC1PE=1 в регистре TIMx_CCMR1 и ARPE в регистре TIMx_CR1 //В нашем примере биты DIR и CMS регистра TIMx_CR1 должны быть в лог. 0. TIM1->CR1 &=~(0x1UL << (4U)); TIM1->CR1 &=~(0x3UL << (5U)); // Когда бит OPM в регистре TIMx_CR1 установлен в 0, выбирается режим повторения (Repetitive Mode) TIM1->CR1 &=~(0x1UL << (3U)); /* * Если пользователь хочет вывести сигнал с минимальной задержкой, * то должен быть установлен бит OCxFE в регистре TIMx_CCMRx. * Тогда OCxRef (и OCx) принудительно будут установлены в ответ * на сигнал стимула, без обращения внимания на сравнение. * Новый уровень такой же, как если бы произошло совпадение сравнения. * OCxFE действует только если канал сконфигурирован в режиме PWM1 или PWM2. * */ TIM1->CCMR1 &=~(0x1UL << (2U)); TIM1->CCMR1 |=(0x1UL << (2U));//Output compare 1 fast enable /* Enable the TIM Counter */ // TIM1->CR1 |= TIM_CR1_CEN; } while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ ch1=TIM1->CNT ;//тот что slave ch2= TIM2->CNT ; // мастер ch5=TIM1->SMCR; if(ch1==251){ ch3=ch3+1;//сколько раз slave } if(ch2==999){ ch4=ch4+1;//сколько раз master } }
  9. в errate нашел следующие строки про one pulse mode: One-pulse mode trigger not detected in master-slave reset + trigger configuration Description The failure occurs when several timers configured in one-pulse mode are cascaded, and the master timer is configured in combined reset + trigger mode with the MSM bit set: OPM = 1 in TIMx_CR1, SMS[3:0] = 1000 and MSM = 1 in TIMx_SMCR. The MSM delays the reaction of the master timer to the trigger event, so as to have the slave timers cycleaccurately synchronized. If the trigger arrives when the counter value is equal to the period value set in the TIMx_ARR register, the onepulse mode of the master timer does not work and no pulse is generated on the output. Workaround None. However, unless a cycle-level synchronization is mandatory, it is advised to keep the MSM bit reset, in which case the problem is not правда так и не понял при сочетании каких то особенных обстоятельств не работает этот режим, входит ли мой случай в эти обстоятельства и что за бит msm и как его сбросить и вообще даст ли это что либо..
  10. утилитой Cube programmer или как то так она называется удалось оживить тот мк
  11. Огромное "спасибо", код очень помог в диагностике. После следующей поездки выяснилось, что сброс проходил только от NRST. Соответственно после обрезания лишнего от ножки всё решилось. Теперь при пробоях разрядника наш источник работает как надо, а всё другое оборудование (осциллографы, мониторы и прочее) тухнет и выключаются. Пришли к выводу, что у них заземление в помещении сделано не правильно.
  12. one pulse mod stm32H7 не запускается

    Доброго дня! Есть внешний сигнал, хочу по его фронту формировать импульсы заданной длительности (10мкс - 30мкс). Нарыл в нете, что мне поможет OPM, нашёл похожий пример. Пытаюсь в cube ide сделать это, скрины настроек приложил. Ничего не получается (TIM8_CH1 - не меняется). Внешний сигнал подаю на ножку TIM8_CH2 через резистор 1кОм, Сажусь прямо на неё осц-фом, вижу на ней сигнал очень мелкой амплитуды (как будто она настроена как выход, а не на вход - что тоже странно). Cube ide генерит следующий код инициализации: static void MX_TIM8_Init(void) { /* USER CODE BEGIN TIM8_Init 0 */ /* USER CODE END TIM8_Init 0 */ TIM_SlaveConfigTypeDef sSlaveConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; /* USER CODE BEGIN TIM8_Init 1 */ /* USER CODE END TIM8_Init 1 */ htim8.Instance = TIM8; htim8.Init.Prescaler = 9; htim8.Init.CounterMode = TIM_COUNTERMODE_UP; htim8.Init.Period = 200-1; htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim8.Init.RepetitionCounter = 0; htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim8) != HAL_OK) { Error_Handler(); } if (HAL_TIM_OC_Init(&htim8) != HAL_OK) { Error_Handler(); } if (HAL_TIM_OnePulse_Init(&htim8, TIM_OPMODE_SINGLE) != HAL_OK) { Error_Handler(); } sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER; sSlaveConfig.InputTrigger = TIM_TS_TI2FP2; sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING; sSlaveConfig.TriggerFilter = 0; if (HAL_TIM_SlaveConfigSynchro(&htim8, &sSlaveConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM2;//поменял, так было в примере sConfigOC.Pulse = 5; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; if (HAL_TIM_OC_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime = 0; sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.BreakFilter = 0; sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE; sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH; sBreakDeadTimeConfig.Break2Filter = 0; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM8_Init 2 */ /* USER CODE END TIM8_Init 2 */ HAL_TIM_MspPostInit(&htim8); } //запускаю так HAL_TIM_OnePulse_Start(&htim8, TIM_CHANNEL_1); Если кто сталкивался, прошу подсказать что я делаю не так?
  13. Я понял что вы имеете ввиду, предложение хорошее использовать комплиментарные выхода с dead-time. Но не прокатывает в данном случае не зависимо от того прав я или нет насчет того, что надо или не надо менять это время потому что не нашел я у 32-битных счетчиков комплиментарных выходов с dead-time. HRTIM на сколько я понял тоже только на 16 бит.
  14. Я наверно плохо выразился. Я говорю, что мы обычно в силу присутствия в силовой схеме реактивных элементов, чтобы не возникало колебаний снимаем импульс запуска с транзистора значительно раньше чем того бы требовал параметр dead-time, обеспечивающий отсутствие сквозного тока через оба транзистора полумоста. После того как ток через 0 перешел или немного до этого или близко к этому. Соответственно приходится паузу менять между включенным состоянием транзистора довольно в широких пределах.
  15. По мере изменения величины выходного напряжения будет меняться интервал протекания тока через транзистор. Если оставлять импульсы запуска длиннее чем длительность протекания полуволны тока через транзистор возможно ничего плохого не произойдет,но появятся условия для возникновения авто-колебаний, возможно они не прекратятся до включения следующего транзистора. из меня такой себе программист, по каким чипам инфу можно найти с примерами с теми и дружба У нас чим. Надо регулировать мощность с определенным шагом и в определенных пределах , мощность нелинейная ф-я от частоты работы преобразователя. Чтобы обеспечить нужный шаг изменения мощности дискрета по времени д.б. порядка 50нс. Чтобы обеспечить изменение мощности в заданных пределах частота должна изменяться от 100Гц до нескольких 10-ков кГц.
×
×
  • Создать...