Страница 4 из 5

Re: Arduino и RS422 энкодер

Добавлено: 30 янв 2019, 02:15
Serg
Попробуй увеличивать количество импульсов - там в конце блока данных будет нулевой бит, а если продолжать дальше увеличивать, то пойдёт повтор этого блока.

Re: Arduino и RS422 энкодер

Добавлено: 30 янв 2019, 08:19
Кулибин1437
Спасибо. Увеличил количество импульсов. Пока стабильно переходит в 1.
Даже время записи анализатора увеличил до 5 секунд. Нолика не заметил.
Надеюсь нормально будет. Прилагаю скрины.
Записывал 100секунд(максимальное время в анализаторе) -полёт нормальный.
25 имп-1.png (1413 просмотров) <a class='original' href='./download/file.php?id=155734&mode=view' target=_blank>Загрузить оригинал (124.7 КБ)</a>
на втором вложил скрин монитора порта, результат преобразования даты в десятичную цифру-смотрим на длинную. Короткая-попытка превратить её в милиметры.
25 имп-2 и монитор порта.png (1413 просмотров) <a class='original' href='./download/file.php?id=155735&mode=view' target=_blank>Загрузить оригинал (167.88 КБ)</a>
прикладываю весь скетч. Правильно ли происходит считывание бит? (убрал гору коментов, что то тут совсем не смотриться)))

const int CLOCK_PIN = 11; // к пину 11 подключаем CLK
const int DATA_PIN = 10; // к пину 10 подключаем DO data

unsigned long sample1; //создали пременую с именем sample1 которая может содержать отчень большое число
unsigned long mm; //создали переменную mm-попытка получить градусное значение в милиметры

void setup() {
pinMode(DATA_PIN, INPUT); //назначили 10 пин как пин для выхода данных
pinMode(CLOCK_PIN, OUTPUT); //назначили 11 пин как пин для выхода данных
//give some default values- задайте значения по умолчанию
digitalWrite(CLOCK_PIN, HIGH); // при старте ардуины 11 пин установлен на высокий уровень (1)
Serial.begin(19200); //запусаем монитор порта на скорости 19200
}


void loop() {

unsigned long reading = readPosition(); //создаем переменную reading и тут-же считыываем ее значение из функции readPosition();
Serial.println(reading, DEC); //печатаем значение переменной reading в формате DEC .
delay(40); //задержка на 20 микросекунд
}

//прочитать текущее угловое положение
int readPosition() { // это функция, набор команд, в которой вычесляется значение переменной reading
unsigned long sample1 = shiftIn(DATA_PIN, CLOCK_PIN, 24); //24считывем значение и записываем его в переменную sample1
delayMicroseconds(1); // часов высок на 20 микросекунд прежде чем новый образец можно принять
unsigned long mm = sample1/223; //попытка перевести в миллиметры
Serial.println(mm, DEC); //распечатал
return sample1; //а если равны возвращаем значение sample1
}

// чтение байта данных из цифрового входа платы.
unsigned long shiftIn(const int DATA_PIN, const int CLOCK_PIN, const int bit_count) { // опять создали
unsigned long data = 0; //создали переменную data и приравняли ее к 0

for (int i=0; i<26; i++) { //24 раз записываем в 11 пин то 0 то 1 через 1 микросекунду со здвигом переменной data в лево на еденицу24
data <<= 1; //сдвигает переменную data влево на 1
digitalWrite(CLOCK_PIN, LOW); // записываем ноль
delayMicroseconds(2); //задержка на 1 микросекунду
digitalWrite(CLOCK_PIN, HIGH); // записываем ноль
delayMicroseconds(1); //задержка на 1 микросекунду
data |= digitalRead(DATA_PIN); //считываем значение с 9 пина и записывае его в переменную data со сдвигом
}
return data; //возвращает значение переменной data
}


Пы.Сы. Я сейчас смотрю цифры с монитора порта. Отключаю питание энкодера(24в), питание Arduino не отключаю. Цифры во время выключения превращаються в нули, а потом в какую то другую. Чё за хрень, энкодер как и положенно не выдаёт ничего(анализатор подтверждает), а циферки не в нолях :wtf: .
Гдето в скетче засада есть.

Re: Arduino и RS422 энкодер

Добавлено: 30 янв 2019, 12:54
Сергей Саныч
Кулибин1437 писал(а): Отключаю питание энкодера(24в), питание Arduino не отключаю. Цифры во время выключения превращаються в нули, а потом в какую то другую.
Случайно не в 16777215 ?

Re: Arduino и RS422 энкодер

Добавлено: 30 янв 2019, 13:36
Кулибин1437
неа, печатает в данный момент 67108863. а с питанием 39015906 при вращении энкодера-меняется.
И также 67108863-когда пин дата вытащен из ардуинки

Re: Arduino и RS422 энкодер

Добавлено: 30 янв 2019, 14:10
Сергей Саныч
Кулибин1437 писал(а):неа, печатает в данный момент 67108863
То есть 2^26-1. А должно быть 16777215 = 2^24-1.
Подозреваю, что первый и последний биты данных последовательности надо проигнорировать.
У вас, когда включен энкодер, при вращении получаются только четные значения?

Re: Arduino и RS422 энкодер

Добавлено: 30 янв 2019, 14:49
Кулибин1437
в виду того что дата при 24 нестабильно себя вёл то в 1 то 0,между пачками импульсов, вынужден был добавить до 26. Теперь это как раз и мешает правильно считать. Каким то образом куда то игнор надо вставить последних 2 бит или первых, незнаю.

int readPosition() { // это функция, набор команд, в которой вычесляется значение переменной reading
unsigned long sample1 = shiftIn(DATA_PIN, CLOCK_PIN, 24); //24считывем значение и записываем его в переменную sample1
delayMicroseconds(1); // часов высок на 20 микросекунд прежде чем новый образец можно принять
unsigned long mm = sample1/223; //попытка перевести в миллиметры
Serial.println(mm, DEC); //распечатал
return sample1; //а если равны возвращаем значение sample1
}

// чтение байта данных из цифрового входа платы.
unsigned long shiftIn(const int DATA_PIN, const int CLOCK_PIN, const int bit_count) { // опять создали
unsigned long data = 0; //создали переменную data и приравняли ее к 0

for (int i=0; i<26; i++) { //24 раз записываем в 11 пин то 0 то 1 через 1 микросекунду со здвигом переменной data в лево на еденицу24
data <<= 1; //сдвигает переменную data влево на 1
digitalWrite(CLOCK_PIN, LOW); // записываем ноль
delayMicroseconds(2); //задержка на 1 микросекунду
digitalWrite(CLOCK_PIN, HIGH); // записываем ноль
delayMicroseconds(1); //задержка на 1 микросекунду
data |= digitalRead(DATA_PIN); //считываем значение с 9 пина и записывае его в переменную data со сдвигом
}
return data; //возвращает значение переменной data
}
нет всякие и чётные и не чётные

Re: Arduino и RS422 энкодер

Добавлено: 30 янв 2019, 16:35
Кулибин1437
Сергей Саныч писал(а):То есть 2^26-1. А должно быть 16777215 = 2^24-1.
Это с отключенной датой или равносильно с отключенным энкодером.
16777215.png (1353 просмотра) <a class='original' href='./download/file.php?id=155761&mode=view' target=_blank>Загрузить оригинал (163.49 КБ)</a>
а это с подключенным, то есть считает.
считает.png (1353 просмотра) <a class='original' href='./download/file.php?id=155763&mode=view' target=_blank>Загрузить оригинал (162.48 КБ)</a>
:D

Правда до завершения ещё пыхтеть и пыхтеть :thinking: .
Надо подключить индикатор со своей програмкой и туда передавать инфу, придумать как менять коефициент для пересчёта в миллиметры, причём чтоб клиент мог сам его менять. И чтобы тайминг не перескочил за требуемые параметры :lolh:

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 09:39
Кулибин1437
С этой DATA пока не всё решено, ну или с преобразованием в десятичное значение. Дело в том что, насколько я помню энкодер за оборот должен выдавать 4096 импульсов, по крайней мере заказывал такой.
UT86RSJXkNbXXagOFbXC--1.jpg (1333 просмотра) <a class='original' href='./download/file.php?id=155821&mode=view' target=_blank>Загрузить оригинал (97.83 КБ)</a>
А по факту разница в цифрах между оборотами таковы:
6156
6126
260098
2060
10137
6048
чегото я ещё не понимаю :problem:
Скидку наверное можно давать на неточность вращения в пределах пусть 200 единиц, а тут гораздо выше.
Почему обратил внимание. Хотел пытаться отмотать до нуля энкодер и увидел это дело...

К стати я у энкодера не применял выход DIR и MIDP(почему то так написано на нём). Что с ними делать. Может и их подключить. Это вроде как направление или ни так???
Придётся читать мануал, учи матчасть :lolh: , чтото про них написано на непонятном аглицком :wtf:
По сути мне кажется что эти сигналы не должны влиять на отчёт?

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 10:21
Сергей Саныч
Кулибин1437 писал(а):data |= digitalRead(DATA_PIN);
А эта функция точно возвращает только 0 или 1? Не может ли быть мусора в старших разрядах?
я бы для надежности попробовал

Код: Выделить всё

data |= digitalRead(DATA_PIN) & 1;
Попробуйте повернуть энкодер на "чуть-чуть" и сравните показания.

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 10:30
Сергей Саныч
Кулибин1437 писал(а):по крайней мере заказывал такой
Пометки красным соответствуют вашему энкодеру?

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 10:52
Кулибин1437
Спасибо. Попробовал. без разницы

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 10:53
Кулибин1437
Сергей Саныч писал(а):Пометки красным соответствуют вашему энкодеру?
ага, опа кроме выхода не RS485 а SG=SSI

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 11:06
Сергей Саныч
При малых (доли градуса) поворотах как меняются показания? Приведите примеры (скриншоты).
На неподвижном энкодере показания стабильны?

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 11:52
Кулибин1437
иногда последний знак скачет, а так в основном цифра не меняется.
от нуля.
0.png (1299 просмотров) <a class='original' href='./download/file.php?id=155833&mode=view' target=_blank>Загрузить оригинал (213.58 КБ)</a>
минус 0,25 оборота
минус четверть оборота.png (1299 просмотров) <a class='original' href='./download/file.php?id=155834&mode=view' target=_blank>Загрузить оригинал (233.07 КБ)</a>
плюс 0,25 оборота
плюс четверть оборота.png (1299 просмотров) <a class='original' href='./download/file.php?id=155837&mode=view' target=_blank>Загрузить оригинал (259.51 КБ)</a>
ща пробую видео закинуть и ссылку скину
у меня через флешку, интернет прям -пуля. :tongue: :pssdoff:
https://yadi.sk/i/XwXDirQyXEVfRw

DIR и MIDP- про них читал чита, так и не понял, это входы или выходы. Если правильно понял то MIDP какfя то обнулялка, то есть вход?

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 12:28
Сергей Саныч
Попробуй задействовать контакт MidP. Высокий уровень сбрасывает энкодер в "среднюю" позицию, низкий - позволяет считать. Если сейчас он никуда не подключен, могут быть "нюансы", особенно если этот вход внутри никуда не подтянут.

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 13:45
Кулибин1437
к плюсу-ничего не считает, показания не меняються.
К минусу-показания изменились(похоже действительно сбросился в какуто цифру.
зато фокус появился.
обнулил.
обнулил.png (1282 просмотра) <a class='original' href='./download/file.php?id=155839&mode=view' target=_blank>Загрузить оригинал (168.07 КБ)</a>
повернул четверть оборота против часовой
после обнул против часов.png (1282 просмотра) <a class='original' href='./download/file.php?id=155843&mode=view' target=_blank>Загрузить оригинал (396.89 КБ)</a>
апосля обнул.png (1263 просмотра) <a class='original' href='./download/file.php?id=155847&mode=view' target=_blank>Загрузить оригинал (223.35 КБ)</a>
И по часовой полоборота


Цифры после перскакивания нуля резко меняют показания.
А вот когда смотришь на нолики и единички, их переполнение, перескакивание происходит вроде как в книжках, всё замечательн(смотрел ещё до этого)

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 14:19
Сергей Саныч
Что-то попутано, картинки 1 и 3 идентичны, у них даже время совпадает.
И еще - в документации заявлен контроль четности, но где этот бит - не сказано.

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 14:59
Кулибин1437
Сергей Саныч писал(а):И еще - в документации заявлен контроль четности, но где этот бит - не сказано.
а это не провод DIR c энкодера-который в воздухе висит пока что.
Или мне к китайцам, пытать их, куда они спрятали его, в смысле бит.

добавлю. Поймал момент перехода через обнулённую точку.
Поймал момент перехода через обнулённую точку.png (1258 просмотров) <a class='original' href='./download/file.php?id=155864&mode=view' target=_blank>Загрузить оригинал (112.83 КБ)</a>
Кстати второй бит слева, возможно он о направлении говорит. Я как раз менял направление, в этот момент цифры резко меняються как раз

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 15:13
Сергей Саныч
Кулибин1437 писал(а):а это не провод DIR c энкодера
Вряд ли. Он где-то среди битов данных.
DIR - это направление, его, кстати, тоже надо фиксировать.
Вообще, документация достаточно мутная.

Попробуй снять несколько замеров не удаляя "лишних" битов. То есть выведи все 26. Посмотрим.

Re: Arduino и RS422 энкодер

Добавлено: 31 янв 2019, 15:16
Serg
Там похоже не обычное число, а код Грея...