Arduino. Изучаем вместе
-
Автор темыKimIV
Arduino. Изучаем вместе
Импульсным я назвал режим мигания. Согласись, нагрузка другая, нежели б он постоянно светился
Отправлено спустя 1 минуту 31 секунду:
Кстати, ты чё тут пасёшься? Иди форум ломай, как договаривались
Отправлено спустя 1 минуту 31 секунду:
Кстати, ты чё тут пасёшься? Иди форум ломай, как договаривались
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Arduino. Изучаем вместе
Да, но ток уж очень большой для импульса у такого СД.должен быть по идее около 10мА Ладно не мешаю тебе ломать твою Ардуину дальшеKimIV писал(а):Источник цитаты Импульсным я назвал режим мигания. Согласись, нагрузка другая, нежели б он постоянно светился
Отправлено спустя 53 секунды:
Сообщение не по теме
Каждый убежден, что другие ошибаются, когда судят о нем, и что он не ошибается, когда судит о других.
Arduino. Изучаем вместе
я конечно понимаю что у нас не принято читать инструкции
однако датшит на микроконтроллер почитать, чё - совсем не судьба, да ?
Сообщение не по теме
однако датшит на микроконтроллер почитать, чё - совсем не судьба, да ?
Ушел в себя.
Вернусь не скоро.
Вернусь не скоро.
Arduino. Изучаем вместе
А вот задачку подкинули.. Нужно сделать типа метеостанции - показывать скорость ветра и направление.
Датчик скорости ветра - энкодер, датчик направления - полнооборотный резистор
Вывод на двухстрочный дисплей.
Тут и аналоговая часть и цифровая, и ввод и вывод..
Датчик скорости ветра - энкодер, датчик направления - полнооборотный резистор
Вывод на двухстрочный дисплей.
Тут и аналоговая часть и цифровая, и ввод и вывод..
Попытка оптимизации оптимального может привести к неоптимальности результата
-
Автор темыKimIV
Arduino. Изучаем вместе
ШИМ-Выходы
Всякие разные интересные книжки по ардуине утверждают, что некоторые цифровые выходы, а именно те, что с номерами 3, 5, 6, 9, 10 и 11, могут работать как ШИМ-Выходы. Всего таких выходов 6 и на плате они помечены символом переменки (тильда) перед номером.
ШИМ (Широтно-Импульсная Модуляция, по англ. pulse-width modulation (PWM)) - это изменение скважности импульсов с целью управления электрической мощностью, подводимой к нагрузке. И этот процесс выглядит следующим образом.
Многие нагрузки, многие потребители электрической энергии достаточно инерционны, чтобы не реагировать на отдельные импульсы, а воспринимать только некое их среднее воздействие. И этот факт во многом определяется частотой импульсов. То есть для нагревательной спирали например достаточно небольшой частоты следования импульсов, несколько Гц и даже реже. Для лампочки накаливания, чтобы глаз не замечал её мерцания, эту частоту уже желательно повысить до 70-80 Гц. А в устройствах, управляющих индуктивными нагрузками, эту частоту стараются вывести за пределы слышимости человеческого уха, чтобы они не "свистели", то есть 20 кГц и выше.
Для исследования ШИМ-Выходов прицепил к ним светодиоды, то есть собрал на макетке вот такую схему. Задействовал на будущее все 6 выходов.
Написал скетч для подачи сигнала с уровнем 127 на 3-ий выход.
К третьему выходу прицепил Осциллограф DSO068 и меняя значение переменной val и перезагружая код скетча в контроллер, сфотил осциллограммы.
Длительность горизонтальной развёртки, как видно из осциллограмм установлена 0,5 мс/дел. Период следования импульсов 4 деления или 4 * 0,5 мс = 2 мс. Частота 1 / 2 мс = 1 / 0,002 сек = 500 Гц. В книжках пишут, что по умолчанию ШИМ-Выходы работают на частоте 488 Гц. Ну вот оно примерно так и есть
Любое ШИМ-управление имеет два параметра, определяемых конструкцией устройства:
1. Частота следования импульсов.
2. Разрядность. Это количество бит (бинарных, двоичных линий), участвующих в формировании ШИМ-сигнала. В ардуино по умолчанию задействовано 8 бит, то есть работает 8-ми разрядный ШИМ. Количество этих разрядов определяет количество значений, которые можно будет "положить" в переменную val (см. код скетча выше) и связь здесь следующая. Количество значений равно 2 в степени количество разрядов. В ардуино по умолчанию это будет 2 в степени 8 равно 256. Ну а так как одно из значений ноль, то максимум, который мы можем "положить" в переменную val - это 255. Таким образом, от 0 до 255 будет как раз 256 значений. При этом 0 будет задавать минимальный уровень мощности на ШИМ-Выходе, а 255 - максимальный.
Вот эти два параметра ШИМ целиком и полностью определяются конструкцией устройства. Это так называемая аппаратная поддержка. Но современные устройства стараются делать универсальными на столько, чтобы можно было программно изменять их аппаратные свойства. Например, в ардуино есть регистры, изменяя значения которых, можно изменять частоту и разрядность ШИМ. Круто правда? Кому интересно, в интернетах есть таблички значений регистров и частоты с разрядностью. Я их тырить не буду, просто дам ссылку на одну из них (листать вниз, в конец урока). А здесь словами упомяну, что разрядность ШИМ ардуино можно менять от 8 до 10, а частоту от 0,2 Гц (период 5 сек) до 62,5 кГц.
Всякие разные интересные книжки по ардуине утверждают, что некоторые цифровые выходы, а именно те, что с номерами 3, 5, 6, 9, 10 и 11, могут работать как ШИМ-Выходы. Всего таких выходов 6 и на плате они помечены символом переменки (тильда) перед номером.
ШИМ (Широтно-Импульсная Модуляция, по англ. pulse-width modulation (PWM)) - это изменение скважности импульсов с целью управления электрической мощностью, подводимой к нагрузке. И этот процесс выглядит следующим образом.
Многие нагрузки, многие потребители электрической энергии достаточно инерционны, чтобы не реагировать на отдельные импульсы, а воспринимать только некое их среднее воздействие. И этот факт во многом определяется частотой импульсов. То есть для нагревательной спирали например достаточно небольшой частоты следования импульсов, несколько Гц и даже реже. Для лампочки накаливания, чтобы глаз не замечал её мерцания, эту частоту уже желательно повысить до 70-80 Гц. А в устройствах, управляющих индуктивными нагрузками, эту частоту стараются вывести за пределы слышимости человеческого уха, чтобы они не "свистели", то есть 20 кГц и выше.
Для исследования ШИМ-Выходов прицепил к ним светодиоды, то есть собрал на макетке вот такую схему. Задействовал на будущее все 6 выходов.
Написал скетч для подачи сигнала с уровнем 127 на 3-ий выход.
Код: Выделить всё
int val=127;
void setup() {
pinMode(3, OUTPUT);
}
void loop() {
analogWrite(3, val);
}
К третьему выходу прицепил Осциллограф DSO068 и меняя значение переменной val и перезагружая код скетча в контроллер, сфотил осциллограммы.
Длительность горизонтальной развёртки, как видно из осциллограмм установлена 0,5 мс/дел. Период следования импульсов 4 деления или 4 * 0,5 мс = 2 мс. Частота 1 / 2 мс = 1 / 0,002 сек = 500 Гц. В книжках пишут, что по умолчанию ШИМ-Выходы работают на частоте 488 Гц. Ну вот оно примерно так и есть
Любое ШИМ-управление имеет два параметра, определяемых конструкцией устройства:
1. Частота следования импульсов.
2. Разрядность. Это количество бит (бинарных, двоичных линий), участвующих в формировании ШИМ-сигнала. В ардуино по умолчанию задействовано 8 бит, то есть работает 8-ми разрядный ШИМ. Количество этих разрядов определяет количество значений, которые можно будет "положить" в переменную val (см. код скетча выше) и связь здесь следующая. Количество значений равно 2 в степени количество разрядов. В ардуино по умолчанию это будет 2 в степени 8 равно 256. Ну а так как одно из значений ноль, то максимум, который мы можем "положить" в переменную val - это 255. Таким образом, от 0 до 255 будет как раз 256 значений. При этом 0 будет задавать минимальный уровень мощности на ШИМ-Выходе, а 255 - максимальный.
Вот эти два параметра ШИМ целиком и полностью определяются конструкцией устройства. Это так называемая аппаратная поддержка. Но современные устройства стараются делать универсальными на столько, чтобы можно было программно изменять их аппаратные свойства. Например, в ардуино есть регистры, изменяя значения которых, можно изменять частоту и разрядность ШИМ. Круто правда? Кому интересно, в интернетах есть таблички значений регистров и частоты с разрядностью. Я их тырить не буду, просто дам ссылку на одну из них (листать вниз, в конец урока). А здесь словами упомяну, что разрядность ШИМ ардуино можно менять от 8 до 10, а частоту от 0,2 Гц (период 5 сек) до 62,5 кГц.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
-
Автор темыKimIV
Arduino. Изучаем вместе
ШИМ-Выходы. Изменяем разрядность и частоту
Сначала на все ШИМ-Выходы подадим меандр, то есть импульсы с заполнением 50%. Для 8-разрядных ШИМ это делается подачей значения 127. Пишем скетч.
Загружаем его в контроллер и смотрим осциллографом сигналы на выходах 3, 5, 6, 9, 10 и 11. Все они одинаковы. Частота 500 Гц. И светодиоды светятся одинаково.
Для повышения универсальности и расширения базовых возможностей разработчики заложили в ардуино 3 таймера, каждый из которых управляет только парой из шести ШИМ-Выходов. Это означает, что одну пару ШИМ-выходов можно настроить на одну частоту, другую пару - на другую частоту и т.д. А кроме частот ещё и можно менять разрядность, а вместе с ней количество управляющих значений от 256 до 1024. Шикарно, просто шикарно! Теперь приведу таблицу соответствия таймеров, ШИМ-Выводов и управляющих регистров.
Предыдущий код скетча, а именно функцию setup() дополняю кодом для считывания первоначальных, умолчательных значений регистров. Загружаю скетч в контроллер и записываю значения в табличку MS Excel.
Теперь добавляю команды изменения частоты нулевого таймера. Следует отметить, что в общем случае, то есть назависимо от номера таймера, регистр A управляет разрядностью, а регистр B - частотой. В данном случае я в регистр B нулевого таймера положил единичку вместо умолчательной тройки.
И таким образом, изменил частоту следования импульсов на выходах 5 и 6, которая примерно составила 31 кГц. Вот фотография осциллограммы. Время развёртки там 5 мкс, остальное можете посчитать сами.
А если в регистр B нулевого таймера отправить значение 2, то частота на выходах 5 и 6 станет равной примерно 4 кГц. Время развёртки на фото 50 мкс.
И вот так балуясь со значениями регистров, постепенно заполняю свою табличку частот и разрядностей ШИМ. И в процессе экспериментов выявилось, что таймеры не равнозначны по функционалу. А это означает, что таймер нужно будет выбирать не только исходя из удобства использования тех или иных выходов, но и учитывая возможности конкретного таймера. В настоящий момент мне уже достоверно стало известно, что таймер 0 может работать только как 8-ми разрядный. Позже я приведу всю свою таблицу. А сейчас пока ещё одна фотка осциллограммы, снятой с выхода 9, то есть это таймер 1. Значение переменной val осталось неизменной и равно 127, а значения регистров следующие: TCCR1A=2, TCCR1B=2. Обратите внимание на скважность импульсов. Она равна примерно 25%. Это 9-ти разрядная ШИМ. То есть количество значений, которыми можно устанавливать значения мощности будет уже не 256, а 2 в степени 9 равно 512.
Итак, дошёл до значения 3 в регистре TCCR1A таймера 1. Разрядность ШИМ установилась 10, а это 1024 (2 в степени 10) управляющих значений в переменной val. Также можно видеть, что светодиоды, присоединённые к выходам 9 и 10, светятся немного тусклее, чем остальные, управляемые 8-ми разрядными ШИМ.
Итак, вот результаты моих исследований возможных значений регистров, управляющих разрядностью и частотой ШИМ-выходов. Все значения регистров десятичные.
Важные выводы.
1. Таймеры 0 и 2, то есть выходы 3, 5, 6 и 11 могут работать только как 8-ми разрядные.
2. Разрядность 8, 9 или 10 можно устанавливать только у таймера 1 (выходы 9 и 10).
3. Таймер 1 может ещё работать как устройство задержки, то есть на выходах 9 и 10 можно поднимать высокий уровень через заданный интервал времени. И таким образом задерживать исполнение чего-либо относительно других выходов. И здесь выполняется именно задержка, то есть сначала на выходе низкий уровень, а потом он поднимается и держится бесконечно долго.
Сначала на все ШИМ-Выходы подадим меандр, то есть импульсы с заполнением 50%. Для 8-разрядных ШИМ это делается подачей значения 127. Пишем скетч.
Код: Выделить всё
void setup() {
}
void loop() {
analogWrite(3, 127);
analogWrite(5, 127);
analogWrite(6, 127);
analogWrite(9, 127);
analogWrite(10, 127);
analogWrite(11, 127);
}
Загружаем его в контроллер и смотрим осциллографом сигналы на выходах 3, 5, 6, 9, 10 и 11. Все они одинаковы. Частота 500 Гц. И светодиоды светятся одинаково.
Для повышения универсальности и расширения базовых возможностей разработчики заложили в ардуино 3 таймера, каждый из которых управляет только парой из шести ШИМ-Выходов. Это означает, что одну пару ШИМ-выходов можно настроить на одну частоту, другую пару - на другую частоту и т.д. А кроме частот ещё и можно менять разрядность, а вместе с ней количество управляющих значений от 256 до 1024. Шикарно, просто шикарно! Теперь приведу таблицу соответствия таймеров, ШИМ-Выводов и управляющих регистров.
Предыдущий код скетча, а именно функцию setup() дополняю кодом для считывания первоначальных, умолчательных значений регистров. Загружаю скетч в контроллер и записываю значения в табличку MS Excel.
Теперь добавляю команды изменения частоты нулевого таймера. Следует отметить, что в общем случае, то есть назависимо от номера таймера, регистр A управляет разрядностью, а регистр B - частотой. В данном случае я в регистр B нулевого таймера положил единичку вместо умолчательной тройки.
И таким образом, изменил частоту следования импульсов на выходах 5 и 6, которая примерно составила 31 кГц. Вот фотография осциллограммы. Время развёртки там 5 мкс, остальное можете посчитать сами.
А если в регистр B нулевого таймера отправить значение 2, то частота на выходах 5 и 6 станет равной примерно 4 кГц. Время развёртки на фото 50 мкс.
И вот так балуясь со значениями регистров, постепенно заполняю свою табличку частот и разрядностей ШИМ. И в процессе экспериментов выявилось, что таймеры не равнозначны по функционалу. А это означает, что таймер нужно будет выбирать не только исходя из удобства использования тех или иных выходов, но и учитывая возможности конкретного таймера. В настоящий момент мне уже достоверно стало известно, что таймер 0 может работать только как 8-ми разрядный. Позже я приведу всю свою таблицу. А сейчас пока ещё одна фотка осциллограммы, снятой с выхода 9, то есть это таймер 1. Значение переменной val осталось неизменной и равно 127, а значения регистров следующие: TCCR1A=2, TCCR1B=2. Обратите внимание на скважность импульсов. Она равна примерно 25%. Это 9-ти разрядная ШИМ. То есть количество значений, которыми можно устанавливать значения мощности будет уже не 256, а 2 в степени 9 равно 512.
Итак, дошёл до значения 3 в регистре TCCR1A таймера 1. Разрядность ШИМ установилась 10, а это 1024 (2 в степени 10) управляющих значений в переменной val. Также можно видеть, что светодиоды, присоединённые к выходам 9 и 10, светятся немного тусклее, чем остальные, управляемые 8-ми разрядными ШИМ.
Итак, вот результаты моих исследований возможных значений регистров, управляющих разрядностью и частотой ШИМ-выходов. Все значения регистров десятичные.
Важные выводы.
1. Таймеры 0 и 2, то есть выходы 3, 5, 6 и 11 могут работать только как 8-ми разрядные.
2. Разрядность 8, 9 или 10 можно устанавливать только у таймера 1 (выходы 9 и 10).
3. Таймер 1 может ещё работать как устройство задержки, то есть на выходах 9 и 10 можно поднимать высокий уровень через заданный интервал времени. И таким образом задерживать исполнение чего-либо относительно других выходов. И здесь выполняется именно задержка, то есть сначала на выходе низкий уровень, а потом он поднимается и держится бесконечно долго.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Arduino. Изучаем вместе
максимально 5 сек? я правильно понимаю?KimIV писал(а):Источник цитаты можно поднимать высокий уровень через заданный интервал времени. И таким образом задерживать исполнение чего-либо относительно других выходов.
Каждый убежден, что другие ошибаются, когда судят о нем, и что он не ошибается, когда судит о других.
-
Автор темыKimIV
Arduino. Изучаем вместе
ШИМ-Выходы. Практическое применение
Так... теперь давайте "помигаем светодиодами" Пишем скетч, в котором в функции setup() все ШИМ-выходы настраиваем на частоту 1 кГц, а также таймер 1 (выходы 9 и 10) делаем 10-ти разрядным.
Загружаем скетч в контроллер и смотрим осциллограммы на выходах 3 (8 бит) и 9 (10 бит). Сигналы там с изменяющейся скважностью, то есть подвижные, поэтому смотрим видео
https://youtu.be/IB0TAClWI2Y
Теперь комментарии, что собственно происходило. В функции loop() реализовано два цикла: один повышает значение переменной от 0 до 255, а второй снижает значение этой же переменной от 255 до 0. Таким образом у нас реализовано циклическое плавное повышение мощности от минимальной до максимальной и также плавное понижение мощности для 8-ми разрядных ШИМ-выходов. Значение этой циклически изменяющейся переменной мы подаём на все ШИМ-выходы, помня при этом, что выходы 9 и 10 у нас 10-ти разрядные, а все остальные выходы 8-ми разрядные. Именно поэтому на выходе 3 мы наблюдаем заполнение межимпульсного пространства от пустого до полного, а на выходе 9 всего лишь частичное.
Теперь увеличиваем счётчик циклов с 255 до 1023, то есть затачиваем их под 10-ти разрядную ШИМ. Кроме этого вводим дополнительную переменную k, в которую кладём значения счётчика i. И ограничиваем значение переменной k, чтобы оно не превышало 255. Затем значение переменной k отправляем на выходы 3, 5, 6 и 11, а переменную i на выходы 9 и 10. Вот код.
И видео осциллограмм на выходах 3 (8 бит) и 9 (10 бит).
https://youtu.be/WYqbEq-m9Ug
Так... теперь давайте "помигаем светодиодами" Пишем скетч, в котором в функции setup() все ШИМ-выходы настраиваем на частоту 1 кГц, а также таймер 1 (выходы 9 и 10) делаем 10-ти разрядным.
Код: Выделить всё
void setup() {
TCCR0A=3;
TCCR0B=3;
TCCR1A=3;
TCCR1B=2;
TCCR2A=1;
TCCR2B=3;
}
void loop() {
for (int i=0; i<=255; i++) {
analogWrite(3, i);
analogWrite(5, i);
analogWrite(6, i);
analogWrite(9, i);
analogWrite(10, i);
analogWrite(11, i);
delay(3);
}
for (int i=255; i>=0; i--) {
analogWrite(3, i);
analogWrite(5, i);
analogWrite(6, i);
analogWrite(9, i);
analogWrite(10, i);
analogWrite(11, i);
delay(3);
}
}
Загружаем скетч в контроллер и смотрим осциллограммы на выходах 3 (8 бит) и 9 (10 бит). Сигналы там с изменяющейся скважностью, то есть подвижные, поэтому смотрим видео
https://youtu.be/IB0TAClWI2Y
Теперь комментарии, что собственно происходило. В функции loop() реализовано два цикла: один повышает значение переменной от 0 до 255, а второй снижает значение этой же переменной от 255 до 0. Таким образом у нас реализовано циклическое плавное повышение мощности от минимальной до максимальной и также плавное понижение мощности для 8-ми разрядных ШИМ-выходов. Значение этой циклически изменяющейся переменной мы подаём на все ШИМ-выходы, помня при этом, что выходы 9 и 10 у нас 10-ти разрядные, а все остальные выходы 8-ми разрядные. Именно поэтому на выходе 3 мы наблюдаем заполнение межимпульсного пространства от пустого до полного, а на выходе 9 всего лишь частичное.
Теперь увеличиваем счётчик циклов с 255 до 1023, то есть затачиваем их под 10-ти разрядную ШИМ. Кроме этого вводим дополнительную переменную k, в которую кладём значения счётчика i. И ограничиваем значение переменной k, чтобы оно не превышало 255. Затем значение переменной k отправляем на выходы 3, 5, 6 и 11, а переменную i на выходы 9 и 10. Вот код.
Код: Выделить всё
void setup() {
TCCR0A=3;
TCCR0B=3;
TCCR1A=3;
TCCR1B=2;
TCCR2A=1;
TCCR2B=3;
}
void loop() {
for (int i=0; i<=1023; i++) {
int k=i;
if (k>255) k=255;
analogWrite(3, k);
analogWrite(5, k);
analogWrite(6, k);
analogWrite(9, i);
analogWrite(10, i);
analogWrite(11, k);
delay(3);
}
for (int i=1023; i>=0; i--) {
int k=i;
if (k>255) k=255;
analogWrite(3, k);
analogWrite(5, k);
analogWrite(6, k);
analogWrite(9, i);
analogWrite(10, i);
analogWrite(11, k);
delay(3);
}
}
И видео осциллограмм на выходах 3 (8 бит) и 9 (10 бит).
https://youtu.be/WYqbEq-m9Ug
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
-
Автор темыKimIV
Arduino. Изучаем вместе
ROW писал(а):Источник цитаты максимально 5 сек? я правильно понимаю?
Да, всё верно! Но учитывай, что даташиты я не читаю а исследую тыкая иголочкой и стукая молотком Другими словами, это то, что мне удалось найти. Вполне возможно, что там где-то есть и другие значения.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.