Arduino simulator - генерация синусоидальной волны от PWD (считывание осциллографом имеет прямоугольную форму)
попытка создать эту простую схему, где прямоугольный вход напряжения передается на выход синусоидальной волны.
процесс довольно простой, но я не мог видеть фактическую синусоиду при подключении осциллографа.
В настоящее время я работаю над симулятором онлайн, поэтому я подумал, что было бы лучше поделиться схемой с кодом c++, и, возможно, у вас будут какие-то идеи о том, почему я продолжаю видеть прямоугольное выходное напряжение, а не синус, когда данные действительно являются синусоидальной волной:
вот изображение схемы за определенное время:
а код, генерирующий синусоидальную волну, таков:
#include <math.h>
const int numSamples = 500;
const float pi = 3.1415;
int f = 2; // частота сигнала
float sf = 500.0; // частота дискретизации > 2*f (Найквист)
int sineSignal[numSamples];
void setup(){
pinMode(13, OUTPUT);
// создание синусоидального сигнала:
for (int i = 0; i < numSamples; i++){
float t = i / sf;
// сдвиг +1 для получения значений от 0 до 2
sineSignal[i] = (int) (127 * (sin(2 * pi * f * t) + 1.0));
}
}
void loop(){
int pinToConnect = 9;
for (int i = 0; i < numSamples; i++){
analogWrite(pinToConnect, sineSignal[i]);
delay(2);
}
}
ps. это все основано на этом видео: Как генерировать синусоидальную волну с помощью Arduino?
@Hadar Sharvit, 👍0
1 ответ
Он работает так же интенсивно.
arduino UNO не имеет на борту ЦАП (цифроаналогового преобразователя), поэтому все, что он может производить, - это цифровые сигналы, либо 0, либо 5в. Функция analogWrite использует широтно-импульсную модуляцию для получения выходного сигнала, который в среднемимеет требуемое напряжение , быстро чередуя логические низкие и высокие значения с различной длительностью.
Это делается на аппаратном уровне с помощью таймеров Atmega, и это очень полезно для управления светодиодами, сервоприводами, шаговыми двигателями и т. Д.
Я бы предложил либо перейти на чип с встроенным ЦАП, используя внешний ЦАП-чип , такой как этот, либо самостоятельно построить простой ЦАП.
Еще более простым решением было бы создание RC-фильтра нижних частот на выходном выводе, который обеспечил бы простой, но, вероятно, неточный способ сгладить сигнал и сделать его похожим на аналоговый
- Вращающийся серводвигатель с использованием Arduino
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
Свет, который вы видите от светодиода, усредняется вашим глазом, который на самом деле не может видеть частоты в сотнях Гц, используемые ШИМ Arduino. Осциллограф, с другой стороны, срабатывает на восходящих/задних краях и имеет гораздо более высокое разрешение, поэтому он будет отображать больше деталей на высокой частоте. Гипотетически, если бы вы снимали светодиод в замедленном режиме, вы могли бы видеть, как он включается и выключается несколько раз, @Dario Petrillo