codeFlowType:
codeWrite
codeFlowLang:
C++
Генератор шим сигнал с изменяемой частотой от 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
необходимо использовать специфические функции для управления выходами и задержками, доступные на вашей платформе.