Генератор шим сигнал с изменяемой частотой от 1гц до

Генератор шим сигнал с изменяемой частотой от 1гц до 10кгц и изменяемой скважность 50%-99%
Дополнительные параметры: codeFlowType: codeWrite codeFlowLang: C++
Создано: 23.03.2025 01:07

Генератор шим сигнал с изменяемой частотой от 1гц до 10кгц и изменяемой скважность 50%-99%

Вот пример кода на C++, который реализует генерацию шим-сигнала с изменяемой частотой от 1 Гц до 10 кГц и изменяемой скважностью от 50% до 99%. Для генерации сигнала мы будем использовать библиотеку chrono для задержки и thread для выполнения в отдельном потоке. Этот код может быть полезен для запуска на платформе, поддерживающей управление выходными сигналами, например, на Arduino или другой микроконтроллерной платформе.

#include <iostream>
#include <chrono>
#include <thread>

class PWMGenerator {
public:
    PWMGenerator(int frequency, int dutyCycle)
        : frequency(frequency), dutyCycle(dutyCycle) {}

    void start() {
        while (true) {
            // Расчет времени в мс для HIGH и LOW
            int highTime = (1000.0 / frequency) * (dutyCycle / 100.0);
            int lowTime = (1000.0 / frequency) * ((100.0 - dutyCycle) / 100.0);

            // Включение сигнала
            std::cout << "HIGH\n";
            std::this_thread::sleep_for(std::chrono::milliseconds(highTime));

            // Выключение сигнала
            std::cout << "LOW\n";
            std::this_thread::sleep_for(std::chrono::milliseconds(lowTime));
        }
    }

    void setFrequency(int newFrequency) {
        frequency = newFrequency;
    }

    void setDutyCycle(int newDutyCycle) {
        dutyCycle = newDutyCycle;
    }

private:
    int frequency;  // Частота в Гц
    int dutyCycle;  // Скважность в %
};

int main() {
    int frequency;
    int dutyCycle;

    std::cout << "Введите частоту (1-10000 Гц): ";
    std::cin >> frequency;

    if (frequency < 1 || frequency > 10000) {
        std::cerr << "Неверная частота! Она должна быть от 1 до 10000 Гц." << std::endl;
        return 1;
    }

    std::cout << "Введите скважность (50-99%): ";
    std::cin >> dutyCycle;

    if (dutyCycle < 50 || dutyCycle > 99) {
        std::cerr << "Неверная скважность! Она должна быть от 50 до 99%." << std::endl;
        return 1;
    }

    PWMGenerator pwm(frequency, dutyCycle);
    pwm.start(); // Запуск генерации сигнала

    return 0;
}

Описание кода:

  • Класс PWMGenerator принимает частоту и скважность в конструкторе.
  • Метод start запускает бесконечный цикл, генерируя шим-сигнал. Он включает и выключает сигнал на рассчитанное время, соответствующее частоте и скважности.
  • В main пользователю предлагается ввести частоту и скважность. Ввод проверяется на допустимые значения.

Заметки:

  • При реальной реализации на микроконтроллере вместо std::cout и std::this_thread::sleep_for необходимо использовать специфические функции для управления выходами и задержками, доступные на вашей платформе.