сигнал ШИМ и как его обрабатывать.
- Войдите на сайт для отправки комментариев
Сб, 09/03/2013 - 20:59
Имеется высокий уровень - режим 1 относительно которого формируются отрицательные ШИМ импульсы частотой 528 Hz и длительностью 1 ms режим 2 далее на этойже частоте меняется скважность на 0.1 ms режим 3
Вопрос:
1.Каким входом лучше считывать этот сигнал ( аналоговым или цифровым )
2.Как в программе прописать эти импульсы и приравнять к режимам :
а - режим 1 Высокий уровень нет ШИМ = 0
в - режим 2 ШИМ 528 гц 1 мс = 1
с - режим 3 ШИМ 528 гц 0.1 мс = 2
http://arduino.ru/forum/apparatnye-voprosy/shim-bolee-chem-8-bit#comment...
http://arduino.ru/forum/apparatnye-voprosy/shim-bolee-chem-8-bit#comment...
т.е как я понял мы ограничены частотой 244 гц - выходит надо попробовать RC цепочку расчитать и подключить к аналоговуму входу , ну а дальше дело техники. ТАК ?
Так вам нужно генерить ШИМ или считывать ШИМ ?
Считывать , все как в первом сообщении.
Тогда либо пользуетесь внешними прерываниями и micros(), либо функцией pulseIn().
Уровень оказался 12в - поэтому собрал делитель напряжения на двух резисторах , затем высокочастотный фильтр , далее диод для выделения положительной синусоиды и низкочастотный фильтр для небольшого аккумулирования импульсов - подключив все к аналоговуму входу получил через мониториг такие показания : 0-7 нет сигнала , 65-100 есть сигнал с минимальной скважносью и 120-200 - сигнал с большим периудом скважности все на частоте 528 гц.
Написал условие , все работает !
А можно было обойтись одним делителем....
А с аналоговым входом можно .... у меня не осталось цифровых свободных.
Если да то подскажите , пока я все на макетке нагородил ( 8 компонентов ) и на печатку не перенес.
Аналоговый вход может работать как цифровой. Подключите только делитель и посмотрите что в мониторе
Сейчас попробую !
Получаю :
Высокий уровень на входе А0 - на мониторенге - 0
Короткие отрицательные импульсы на А0 - на мониторенге 35-37
Длинные отрицательные импульсы на А0 - на мониторенне 565-575
Намного стабильнее получается , жаль смайликов нет Я ВАМ ОЧЕНЬ БЛАГОДАРЕН !!!
Условие выгледело как:
Led_1 = analogRead(A0);
if(Led_1>=0&&Led_1<10)
XXXXXXXXXXXX
if(Led_1>=10&&Led_1<100)
XXXXXXXXXXXX
А как теперь должно выглядеть условие ?
Получается если мне не понадобиться один из режимов , то 3-х этажный else не нужен ? и мне можно оставить все как у меня прописано ?
long в примере по ссылке прописан за пределами Loop , я прописал внутри как на примере выше - есть разница ?
И последнее почему именно 3000 мс
long в примере по ссылке прописан за пределами Loop , я прописал внутри как на примере выше - есть разница?
Спасибо большое!!! все очень понятно , будем изучать дальше ....
ххххх