Заметки электроника
Простое - надёжнее!
Меню
  • Главная
  • Погода
  • Заметки
  • Календарь
  • Фотогалерея
  • Песни
  • Чтиво
  • Программы
  • Скачать
  • Связь и ссылки
  • Чехия
  • Lavka

Живёшь в Чехии?

STM32F4xx: Code that uses the one-shot mode of TIM2_CH1 to generate a sinusoidal output by alternating the duty cycle of each pulse

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование микроконтроллеров
Создано: 20 марта 2023
Обновлено: 20 марта 2023
Просмотров: 821
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
#include "stm32f4xx.h"
#include <math.h>

#define PWM_FREQ 400000   // Base frequency of the PWM output
#define PWM_PERIOD_US 100 // Period of the PWM output in microseconds

#define NUM_SAMPLES 100   // Number of samples per PWM period
#define PI 3.14159265358979323846

uint16_t duty_cycles[NUM_SAMPLES]; // Array of duty cycles for each sample
uint16_t current_sample = 0;       // Index of current sample in the duty_cycles array

void TIM2_IRQHandler(void) {
    if (TIM2->SR & TIM_SR_UIF) { // Check if the update interrupt flag is set
        TIM2->SR &= ~TIM_SR_UIF; // Clear the update interrupt flag

        // Set the duty cycle for the current sample
        TIM2->CCR1 = duty_cycles[current_sample];

        // Increment the sample index, wrapping around if necessary
        current_sample = (current_sample + 1) % NUM_SAMPLES;
    }
}

int main(void) {
    // Enable clock for GPIOA and TIM2
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

    // Configure GPIOA pin 0 as alternate function mode
    GPIOA->MODER &= ~GPIO_MODER_MODE0;
    GPIOA->MODER |= GPIO_MODER_MODE0_1;
    GPIOA->AFR[0] |= GPIO_AFRL_AFRL0_1; // Set alternate function to TIM2_CH1

    // Generate duty cycle values for a sinusoidal waveform
    for (uint16_t i = 0; i < NUM_SAMPLES; i++) {
        float phase = 2.0 * PI * i / NUM_SAMPLES;
        duty_cycles[i] = (uint16_t)((1.0 + sin(phase)) * 0.5 * 65535.0);
    }

    // Configure TIM2 for one-shot PWM output on CH1
    TIM2->PSC = 0; // Set prescaler to 1
    TIM2->ARR = PWM_PERIOD_US * (SystemCoreClock / 1000000) - 1; // Set auto-reload value for PWM period
    TIM2->CCR1 = 0; // Set initial duty cycle to 0%
    TIM2->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // Set PWM mode to mode 1
    TIM2->CCER |= TIM_CCER_CC1E; // Enable capture/compare channel 1 output
    TIM2->DIER |= TIM_DIER_UIE; // Enable update interrupt
    NVIC_EnableIRQ(TIM2_IRQn); // Enable TIM2 interrupt in NVIC
    TIM2->CR1 |= TIM_CR1_CEN;   // Start the timer

    while (1) {
        // Wait for interrupt to update duty cycle
    }
}
using HAL:
#include "main.h"
#include "stm32f4xx_hal.h"
#include <math.h>

#define PWM_FREQ 400000   // Base frequency of the PWM output
#define PWM_PERIOD_US 100 // Period of the PWM output in microseconds

#define NUM_SAMPLES 100   // Number of samples per PWM period
#define PI 3.14159265358979323846

TIM_HandleTypeDef htim2;
uint16_t duty_cycles[NUM_SAMPLES]; // Array of duty cycles for each sample
uint16_t current_sample = 0;       // Index of current sample in the duty_cycles array

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if (htim->Instance == TIM2) {
        // Set the duty cycle for the current sample
        TIM2->Instance->CCR1 = duty_cycles[current_sample];

        // Increment the sample index, wrapping around if necessary
        current_sample = (current_sample + 1) % NUM_SAMPLES;
    }
}

int main(void) {
    // Initialize HAL
    HAL_Init();

    // Enable clock for GPIOA and TIM2
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_TIM2_CLK_ENABLE();

    // Configure GPIOA pin 0 as alternate function mode
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    // Generate duty cycle values for a sinusoidal waveform
    for (uint16_t i = 0; i < NUM_SAMPLES; i++) {
        float phase = 2.0 * PI * i / NUM_SAMPLES;
        duty_cycles[i] = (uint16_t)((1.0 + sin(phase)) * 0.5 * 65535.0);
    }

    // Configure TIM2 for one-shot PWM output on CH1
    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 0;
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = PWM_PERIOD_US * (SystemCoreClock / 1000000) - 1;
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim2.Init.RepetitionCounter = 0;
    HAL_TIM_PWM_Init(&htim2);

    TIM_OC_InitTypeDef sConfigOC = {0};
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);

    HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_1);

    while (1) {
        // Wait for interrupt to update duty cycle
    }
}

STM32+Ethernet link collection

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование микроконтроллеров
Создано: 13 марта 2023
Обновлено: 16 марта 2023
Просмотров: 884
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна

STM32 Ethernet #1. Connection

WSPR TRXes collection

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Электроника / cхемотехника
Создано: 15 марта 2023
Обновлено: 15 марта 2023
Просмотров: 886
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
http://protofusion.org/wordpress/2017/09/tracking-balloons-with-wspr/
http://shop.qrp-labs.com/U3S
https://www.qrp-labs.com/flights/u3b27.html
https://www.zachtek.com/product-page/wspr-tx-pico-transmitter-with-large-solar-cells
https://www.zachtek.com/1028

''Tablet PC Settings'' option in Windows 11

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Компьютерная повседневность
Создано: 07 марта 2023
Обновлено: 07 марта 2023
Просмотров: 1006
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна

Go to the Desktop.

 

Right click on the Desktop and select New/Shortcut.

 

In the Type the location of the item window, Copy/Paste the following.

 

%windir%\explorer.exe shell:::{80F3F1D5-FECA-45F3-BC32-752C152E456E}

 


Click the Next button and type the name Tablet PC Settings.

 


Click the Finish button.

 


Double Click the new shortcut and it should open the Table PC Settings window.

Какие типы оптоизоляторов подходят для вашего сигнала?

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Электроника / cхемотехника
Создано: 26 февраля 2023
Обновлено: 26 февраля 2023
Просмотров: 1281
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Оптоизолятор - это электронный компонент, обеспечивающий передачу информации между двумя областями без использования электрического тока. Это достигается за счет использования светоизлучающего диода для преобразования входного электрического сигнала в световой сигнал, который затем преобразуется обратно в электрический сигнал светочувствительным устройством, таким как фотодиод, фототранзистор или фотодарлингтонный транзистор, в рамках одного устройства. Оптоизоляторы обеспечивают электрическую изоляцию в печатных платах, предотвращая протекание вредных электрических токов между входами и выходами.

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

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

Следует отметить, что термины оптопара и оптоизолятор иногда используются как взаимозаменяемые, но обычно оптопара относится к устройствам, которые могут изолировать напряжение приблизительно до 5000 В, в то время как оптоизоляторы могут изолировать напряжение свыше 5000 В. Однако из этого правила могут быть исключения. Кроме того, оптоизоляторы различаются по скорости, причем быстрые оптоизоляторы, такие как твердотельные реле, превосходят по скорости передачи данных более медленные варианты, такие как диодные оптоизоляторы. Для правильного выбора рекомендуется внимательно изучить спецификацию. На принципиальной схеме оптоизолятора или оптопары входы обычно располагаются слева, а выходы - справа.

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

Напряжение изоляции относится к максимально допустимой разнице напряжений между светодиодом и датчиком света в устройстве оптоизолятора. Этот номинал напряжения определяется конструкцией устройства, а также внешними факторами. Внутренний пробой может произойти, если напряжение на элементе источника света перейдет на элемент датчика света. Аналогично, внешний пробой может произойти, если напряжение на входном выводе переходит на выходной вывод. Определенную роль в этом играет конструкция печатной платы, поскольку маршрутизация и разделение входных и выходных дорожек могут повлиять на вероятность возникновения дуги. Факторы окружающей среды, такие как температура, влажность, расстояние между выводами, давление и загрязняющие вещества в воздухе, также могут влиять на напряжение дуги. Расстояние и влажность являются наиболее значительными факторами, влияющими на напряжение дуги.

Типичные оптоизоляторы, доступные на рынке, могут выдерживать разницу напряжения на входе и выходе до 10 кВ и переходные процессы напряжения около 25 кВ/мкс.
 читать далее:
https://resources.altium.com/p/which-type-opto-isolator-right-your-signal?utm_source=altium-designer-app&utm_medium=referral&utm_campaign=my-altium&utm_content=article


  1. Как сделать инфракрасную охлаждающую краску (кондиционирование без электричества)
  2. Construct The APRS transceiver part one: collect
  3. Mastering Midjourney in 2023 | The Ultimate Guide
  4. Delete all your messages in Telegram group by python

Страница 44 из 197

  • 39
  • ...
  • 41
  • 42
  • 43
  • 44
  • ...
  • 46
  • 47
  • 48

Back to Top

© 2026 Заметки электроника

Top.Mail.Ru