блок счетчика и энкодер

энкодер вместо потенциометра

Вопросы по встроенным блокам
Ответить
Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

блок счетчика и энкодер

#1

Сообщение ingener » 19.10.2018{, 10:09}

Доброго дня всем,
не нашел профильную тему, хотя вопрос должен быть актуальным, по идее
Можно ли подключить инкрементальный энкодер напрямую к Ардуино?
Вроде бы блок "счетчик" как раз имеет нужные входы.
Задача - получить в итоге плавно изменяемое напряжение 0...5В (в идеале вообще настраиваемый диапазон, это, видимо, можно организовать блоком "scale"? )
если да, то как дальше обрабатывать сигнал с выхода счетчика?
спасибо
Вложения
enc.JPG

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

блок счетчика и энкодер

#2

Сообщение Sancho » 19.10.2018{, 10:28}

ingener, Пользовательские блоки, энкодеры.

Отправлено спустя 5 минут 41 секунду:
ingener писал(а):
19.10.2018{, 10:09}
Задача - получить в итоге плавно изменяемое напряжение 0...5В
Ардуино не имеет цап - только шим, поэтому это Ваш выбор, каким образом получить 0-5в, ОУ( схем предостаточно) или цап, например поддерживаемый программой MCP4725.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

блок счетчика и энкодер

#3

Сообщение ingener » 19.10.2018{, 11:34}

Sancho, спасибо за ссылки, поизучаем. Хотя там как-то все сложно...
А ШИМ тоже хорошо, из него получить аналог очень просто.

Отправлено спустя 11 часов 9 минут 57 секунд:
Вот отыскался рабочий скетч для прямого подключения энкодера к ардуино и получения на выходе ШИМ сигнала. Однако работает он очень грубо, можно ли как-то повысить дискретизацию (сделать более мелкими шаги энкодера) - как-то вставить деление импульсов на определенное число?

/*
** Энкодер
** Для управлением яркостью LED используется энкодер Sparkfun
*/

int brightness = 120; // яркость LED, начинаем с половины
int fadeAmount = 10; // шаг изменения яркости LED
unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 12; // pin 12
const int pin_B = 11; // pin 11
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;

void setup() {
// declare pin 9 to be an output:
pinMode(9, OUTPUT); // устанавливаем pin 9 как выход
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
currentTime = millis();
loopTime = currentTime;
}

void loop() {
currentTime = millis();
if(currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц)
encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера
if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю
if(encoder_B) {
// выход В в полож. сост., значит вращение по часовой стрелке
// увеличиваем яркость, не более чем до 255
if(brightness + fadeAmount <= 255) brightness += fadeAmount;
}
else {
// выход В в 0 сост., значит вращение против часовой стрелки
// уменьшаем яркость, но не ниже 0
if(brightness - fadeAmount >= 0) brightness -= fadeAmount;
}

}
encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла

analogWrite(9, brightness); // устанавливаем яркость на 9 ножку

loopTime = currentTime;
}
}

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

блок счетчика и энкодер

#4

Сообщение pan » 20.10.2018{, 00:04}

ужасный код

Ответить

Вернуться в «Штатные блоки»