Пульсация не работает при совместном заземлении
У меня есть стороннее устройство, создающее ШИМ-выход, которое я хочу измерить с помощью Arduino, проблема, с которой я столкнулся, заключается в том, что я разделил землю между двумя платами, что приводит к тому, что импульсный выход становится нулевым. (почему это происходит и как это исправить)
Причина, по которой я подключаю землю, заключается в том, что мне нужно измерить другие сигналы на этой плате. (Все остальные сигналы реагируют нормально)
код:
#define pulse_ip 3
unsigned long duration;
int ontime,offtime,duty;
float freq,period;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(pulse_ip, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
ontime = pulseIn(pulse_ip, HIGH);
offtime = pulseIn(pulse_ip, LOW);
period = ontime + offtime;
freq = 1000000.0 / period;
duty = (ontime / period) * 100;
Serial.print(offtime);
Serial.print("-");
Serial.print(ontime);
Serial.print("-");
Serial.print(period);
Serial.print("-");
Serial.print(freq);
Serial.print("-");
Serial.print((duty * 255) / 100);
Serial.print("-");
Serial.println(duty);
delay(1000);
}
@Shahreza, 👍1
Обсуждение1 ответ
Без подключенного заземления сигнал на входном выводе, который вы считываете с помощью pulseIn, должен быть случайным шумом.
Два импульса
, один из которых ожидает изменения МАКСИМУМА, а второй-НИЗКОГО, не имеют смысла, потому что при ВЫСОКОМ параметре
pulseIn ждет, пока вывод перейдет с НИЗКОГО уровня на ВЫСОКИЙ, запускает синхронизацию, затем ждет, пока вывод опустится, и останавливает синхронизацию. Затем он возвращает длительность импульса в микросекундах.
- Какова работа pulseIn?
- Как использовать две функции pulseIn() одновременно в Arduino?
- Как измерить ультразвуковой датчик без импульсного метода?
- Импульсный тахометр
- Можно ли использовать Arduino Uno для измерения частоты прямоугольной волны до 600 кГц?
- Непрерывное чтение двух последовательных периодов импульса
- Функция Pulsein() блокирует одновременное выполнение других задач
- Считывание ШИМ-сигнала с радиоуправляемого приемника
в чем заключается ваш вопрос?, @jsotola
почему я получаю ноль, когда делю землю, @Shahreza
вы уверены, что не получаете только случайные импульсы без общей основы?, @Juraj
@Juraj это хороший момент, может быть, я становлюсь случайным, позвольте мне еще раз проверить, @Shahreza
@Juraj Да, я верю, что вы правы, я получаю случайные числа, и как только я разделяю землю, она становится нулевой, @Shahreza
имеет ли смысл дважды вызывать Пульсейна? проверьте ссылку https://www.arduino.cc/reference/en/language/functions/advanced-io/pulsein/, @Juraj
"Причина, по которой я подключаю землю, заключается в том, что мне нужно измерить другие сигналы на этой плате."...нет, причина, по которой вы соединяете основания, заключается в том, что **вы должны**. https://majenko.co.uk/blog/our-blog-1/the-importance-of-sharing-grounds-12, @Majenko
@Majenko вы, конечно, правы, именно по этой причине я получал случайное число, @Shahreza
Какова (приблизительная) частота ШИМ-сигнала? И какие уровни напряжения?, @Majenko
@Majenko 3,3 В-это напряжение, частота шим 14,56 К, @Shahreza
вы должны указать аргумент тайм-аута, чтобы он работал быстрее. даже в этом случае он выходит за рамки аппаратного обеспечения и скорости процессора и, скорее всего, будет нечетким/шумным, если он вообще работает. Было бы лучше использовать RC-фильтр для преобразования ШИМ в аналоговое напряжение, затем разделить его до 0-5 В, а затем выполнить выборку полученного сигнала. Поскольку вам, по-видимому, требуется всего 1 образец в секунду, вы можете легко использовать большой конденсатор и усреднение выборки, чтобы получить очень плавное аналоговое напряжение., @dandavis