pmw, 0 duty, 100 duty
Если я делаю подтяжку на плюс, то на входе висит +5в, мне нужно, чтобы это определялось ШИМ0(инвертировано), когда я замыкаю на массу, мне нужно ШИМ100. Так вот, даже в положении замкнуто на массу он не всегда корректно определяет шим 100. Пытаюсь понять, как корректно обработать эти значения. При старте МК ШИМ100 вне зависимости в воздухе висит пин или на массе. Подскажите, как обработать эти состояния?kulibinsvv писал(а): ↑03.01.2024{, 17:57}ШИМ равный 0% - это логический 0,
100% - логическая 1,
открытый вход - недопустимая ситуация.
Эти состояния вы должны контролировать и обрабатывать в программе. Ещё лучше обслуживать аппаратно.
если ставлю инвертированный вход и не подключаю его, то работает, я так понимаю, но умолчанию там висит false
Здесь выход повторителя скоростного счетчика не корректно определяет состояние входа.
А некорректное определение входа это баг программы? может можно исправить блок, чтобы он корректно определял?rw6cm писал(а): ↑05.01.2024{, 12:44}Здесь выход повторителя скоростного счетчика не корректно определяет состояние входа.
Как вариант в место его использовать дополнительный цифровой вход (например запараллелить D2-D6)
C D6 (включить в нем анти дребезг или поставить за ним TOF) взять сигнал на свитч (0-100)
Нет, это не баг. Скоростной счетчик работает на прерываниях, а этот метод не определяет состояние пина, он следит лишь за нужными изменениями на нем. Если вдумчиво почитаете описание этого выхода ("выход "IV" на котором будут дублироваться импульс поступающие на выбранный вход") то поймете, что он для логики вашей программы не надежный вариант.
Тяжело советовать когда нет ТЗ.
2 шим сигнала с ЭБУ двигателя заданы с частотой 78гц, заполнение от 0 до 100, мне нужно их корректно считать(D2, D3)(D4 и D5 использую для определения 0 и 100 шим), перемножить значение заполнения (%pwm1 * %pwm2)/100 и выдать результат на пин(D6) с частотой ~78гц.
Частота 78гц = 12.8мс
Т.е. провалы при считывании шим на d2 и d3 из-за выхода на d6?rw6cm писал(а): ↑19.02.2024{, 10:57}Частота 78гц = 12.8мс
Заполнение от 0 до 100% 12.8/100= 1% = 128мкс.
Чтобы на пин(D6) "нанки" генератор выдал импульсы 128мкс с частотой ~78гц, надо что бы цикл программы был меньше 128мкс.
Для этого: про дисплей, сом порт, текст, и тд (а также куче ваших фильтров) можно забыть.
В проекте нужна только хорошо продуманная логика, и ни чего лишнего.
Настройка по анализатору, "ослику". Тогда возможно что то и получится.
из за большого цикла программы
Спасибо, буду стараться оптимизировать
на счет шим 0 и 100% быть не должно. Может быть 0.000...1% или 99.9999...
В Вашей схеме не хватает детектора 0 и 100%. Исключил из схемы деления по максимуму, больше не знаю где урезать код. Все равно периодически подсыпает неверными значениями.kipiaxxx писал(а): ↑19.02.2024{, 14:13}Я измеряю ШИМ-сигнал (30...300 Гц) скоростным счетчиком иначе и проблем нет.
тест ШИМ.jpg
Скоростной счетчик настроен на измерение длительности импульса PDP и паузы PDN.
Далее простая математика: PDP* умножается на 10000 (для получения макс. высокой разрешающей способности)
и делится на сумму PDN + PDP.
Все вычисления в интегер или лонгинтегер (как более быстрые).
Во флоат переходим только в самом конце всех вычислений, причем умножением (но не делением)!
Фильтры добавлять по вкусу.
Красивая схема, если отказаться от 0 и 100%. У меня ШИМ задается с шагом 1% в принципе могу поставить везде от 1 до 99, критично на работоспособность сказаться не должно, если только провод не отвалится и в воздухе не повиснет.
Подскажите, замена нано на stm32 упростила бы задачу или подобные операции сложные для данных устройств?t405 писал(а): ↑19.02.2024{, 22:07}В Вашей схеме не хватает детектора 0 и 100%. Исключил из схемы деления по максимуму, больше не знаю где урезать код. Все равно периодически подсыпает неверными значениями.kipiaxxx писал(а): ↑19.02.2024{, 14:13}Я измеряю ШИМ-сигнал (30...300 Гц) скоростным счетчиком иначе и проблем нет.
тест ШИМ.jpg
Скоростной счетчик настроен на измерение длительности импульса PDP и паузы PDN.
Далее простая математика: PDP* умножается на 10000 (для получения макс. высокой разрешающей способности)
и делится на сумму PDN + PDP.
Все вычисления в интегер или лонгинтегер (как более быстрые).
Во флоат переходим только в самом конце всех вычислений, причем умножением (но не делением)!
Фильтры добавлять по вкусу.
Красивая схема, если отказаться от 0 и 100%. У меня ШИМ задается с шагом 1% в принципе могу поставить везде от 1 до 99, критично на работоспособность сказаться не должно, если только провод не отвалится и в воздухе не повиснет.
Завтра опробую самую простую схему, если она будет работать, то ее и оставлю, без 0, 100 и диагностики в уарт.