Почему триггер осциллографа выглядит шатким при использовании delayMicroseconds?
Я новичок в электронике, но у меня есть осциллограф Rigol DS1054Z, и я экспериментирую, чтобы помочь учиться. Я создал невероятно простой скетч, используя ESP32 и Arduino IDE:
void setup() {
pinMode(32, OUTPUT);
}
void loop() {
delayMicroseconds(10);
digitalWrite(32, LOW);
delayMicroseconds(10);
digitalWrite(32, HIGH);
}
Однако квадратная волна выглядит невероятно "шаткой" или неустойчивой. Почему это так?
@SofaKng, 👍0
Обсуждение3 ответа
Это не ответ, но вы можете сравнить его с аппаратным ШИМ, чтобы проверить пределы остальной части системы.
Простой ШИМ ESP32 на https://www.electronicshub.org/esp32-pwm-tutorial/
int freq = 48000;
int ledChannel = 0;
int resolution = 8; // 48000*2^8 < 80Mhz on channel 0 per https://www.electronicshub.org/esp32-pwm-tutorial/
void setup() {
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(32, ledChannel);
ledcWrite(ledChannel, 127);
}
void loop() {
}
Подобное дрожание обычно вызвано различным количеством времени, которое требуется для прохождения цикла(). Помните, что таймер тика отнимает время у loop() с интервалом, который не синхронизирован со временем loop ().
Перемещение дисплея - это то, что мы называем дрожанием. Это нормально для Arduino и ожидаемо. Импульсы возникают даже не из-за фоновых задач, таких как процедура обслуживания прерываний (которая выполняет миллионы и т. Д., Используете вы их или нет). Когда возникает прерывание, это приводит к остановке процессора, сохранению его состояния, выполнению новой задачи, затем восстановлению его состояния и продолжению. Во время процедуры обслуживания прерываний (ISR) процессор использует время для выполнения инструкций, эта задержка вызывает дрожание. Доверяйте своему прицелу, как обычно, он правильный. Если вы используете один из выходов таймера, дрожание исчезнет, потому что они обычно не регулируются, просто продолжайте работать. ШИМ - один из наиболее распространенных способов сделать это, но есть много других, которые вы также можете использовать.
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Питание esp32cam от аккумулятора
- Контакты RX и TX на esp32
- ESP32: отключить детектор отключения питания
это дрожание? код не является правильным способом создания идеальной волны.. попробуйте ШИМ-сигнал, @ArduinoFan
@ArduinoFan: Да, это джиттер., @Edgar Bonet
Пробовали ли вы не прерывать работу, чтобы убедиться, что это решает проблему? https://www.arduino.cc/reference/en/language/functions/interrupts/nointerrupts/ DSO "Триггерный режим" установлен в "Нормальный"?, @VE7JRO
См. https://arduinoprosto.ru/q/37393/6628, @Dave X