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

Вопросы по встроенным блокам
Ответить
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

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

Сообщение ingener »

Доброго дня всем,
не нашел профильную тему, хотя вопрос должен быть актуальным, по идее
Можно ли подключить инкрементальный энкодер напрямую к Ардуино?
Вроде бы блок "счетчик" как раз имеет нужные входы.
Задача - получить в итоге плавно изменяемое напряжение 0...5В (в идеале вообще настраиваемый диапазон, это, видимо, можно организовать блоком "scale"? )
если да, то как дальше обрабатывать сигнал с выхода счетчика?
спасибо
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

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

Отправлено спустя 5 минут 41 секунду:
ingener писал(а): 19 окт 2018, 10:09Задача - получить в итоге плавно изменяемое напряжение 0...5В
Ардуино не имеет цап - только шим, поэтому это Ваш выбор, каким образом получить 0-5в, ОУ( схем предостаточно) или цап, например поддерживаемый программой MCP4725.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

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

Сообщение ingener »

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

Отправлено спустя 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 апр 2017, 11:57
Имя: noname

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

Сообщение pan »

ужасный код
Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей