Страница 6 из 7
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 03 сен 2022, 21:05
MX_Master
wldev писал(а): ↑
Код: Выделить всё
if(stateA!=encoder[c].stateA
&&stateB!=encoder[c].stateB) //если оба канала изменились то значит не успели
{
//Error
}
Тут есть хитрый момент. Если импульсов было больше, чем код успел переварить, мы не можем данной проверкой выловить ошибку на 100%. Два входа могут передёрнуться и встать так, что пройдут эту проверку. Например, мы перескочили в обход кода только на 1 импульс (или на 4). При этом только 1 вход изменит своё состояние (или не один, если перескочили на 4).
wldev писал(а): ↑
Код: Выделить всё
if ( state == encoder[c].state ) continue; //дальше пройдём только если неравно
encoder[c].pos += encoder_states[encoder[c].state] == state ? 1 : -1; // и здесь всегда будет только -1?
encoder[c].state = state;
wldev писал(а): ↑// и здесь всегда будет только -1?
Тут используется хитрая проверка. Индекс предыдущего AB состояния (от 0 до 3) используется для проверки следующего состояния с помощью массива всех возможных состояний.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 04 сен 2022, 09:12
wldev
MX_Master писал(а): ↑
Тут используется хитрая проверка. Индекс предыдущего AB состояния (от 0 до 3) используется для проверки следующего состояния с помощью массива всех возможных состояний.
Это понятно. Но там всегда будет -1
до этой строчки
Код: Выделить всё
encoder[c].pos += encoder_states[encoder[c].state] == state ? 1 : -1;
мы дойдем только если
и соотв. всегда будет -1
сорри недопонял
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 04 сен 2022, 17:11
MX_Master
Специально перепроверил. Всё работает как и задумано -
https://onlinegdb.com/0C9ymAT04
Код: Выделить всё
#include <stdio.h>
#include <stdint.h>
uint32_t states[4] = {0b01, 0b11, 0b00, 0b10};
uint32_t A = 0, B = 0, AB_old = 0, AB_new = 0;
int32_t pos = 0;
void encoder_main_loop() {
AB_new = (A ? 0b10 : 0x00) | ( B ? 0b01 : 0x00);
if ( AB_new == AB_old ) return;
pos += states[AB_old] == AB_new ? 1 : -1;
printf("A:%u, B:%u, AB_new:%u, AB_old:%u, pos:%i \n",A,B,AB_new,AB_old,pos);
AB_old = AB_new;
}
int main() {
uint32_t i, p, pulses = 100;
printf("--- making %u pulses forward --------------\n", pulses);
for ( i = pulses, p = 0; i--; ) {
// Encoder pulses generator, direction = Clockwise
// A _____|`````|_____|`````|_____|`````|__
// B __|`````|_____|`````|_____|`````|_____
switch (p) {
case 0: { B = !B; break; }
case 1: { A = !A; break; }
case 2: { B = !B; break; }
case 3: { A = !A; break; }
}
p = (++p) & 0b11;
// encoder counter
encoder_main_loop();
}
printf("--- making %u pulses back --------------\n", pulses);
for ( i = pulses, p = 0; i--; ) {
// Encoder pulses generator, direction = Counter-Clockwise
// A __|`````|_____|`````|_____|`````|_____
// B _____|`````|_____|`````|_____|`````|__
switch (p) {
case 0: { A = !A; break; }
case 1: { B = !B; break; }
case 2: { A = !A; break; }
case 3: { B = !B; break; }
}
p = (++p) & 0b11;
// encoder counter
encoder_main_loop();
}
return 0;
}
Единственная ошибка в
предыдущем коде была опечаткой - вместо префикса
0b я кое-где написал
0x. Исправлено.
Остаётся вопрос как сделать данный код ещё быстрее. Чтобы было меньше команд процессора, меньше чтений регистров, меньше чтений с флэша.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 04 сен 2022, 18:06
wldev
Не знал про такое)) спасибо
Неправильно считает при нечётном задании 101 например..
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 04 сен 2022, 22:09
MX_Master
wldev писал(а): ↑
Неправильно считает при нечётном задании 101 например..
Генератор неправильно выдаёт состояние пинов, если общее число импульсов не кратно 4. Второй цикл там чисто для быстрой проверки в обратную сторону. В общем, счётчик работает. Заниматься тюнингом генератора задачи нет
По сути, грамотный генератор будет делать то же, что и счётчик только в обратном порядке.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 06 сен 2022, 13:58
MX_Master
Проверил ассемблерный листинг у каждого, из предложенных счётчиков -
https://godbolt.org/z/6f3Wv6qbE.
Код: Выделить всё
#include <stdio.h>
#include <stdint.h>
uint32_t states[4] = {0b01, 0b11, 0b00, 0b10};
uint32_t A = 0, B = 0, AB_old = 0, AB_new = 0, A_old = 0, B_old = 0;
int32_t pos = 0;
#if 0
void encoder_main_loop() {
AB_new = (A ? 0b10 : 0x00) | ( B ? 0b01 : 0x00);
if ( AB_new == AB_old ) return;
pos += states[AB_old] == AB_new ? 1 : -1;
AB_old = AB_new;
}
#else
void encoder_main_loop() {
if ( A != A_old ) {
A_old = A;
if ( A ) pos += B ? -1 : 1;
else pos += B ? 1 : -1;
} else if ( B != B_old ) {
B_old = B;
if ( B ) pos += A ? 1 : -1;
else pos += A ? -1 : 1;
}
}
#endif
Для быстрого сравнения можно переключать варианты (#if 0/1). В моём варианте коду получается меньше, но быстродействие от кол-ва кода не зависит. Эх, пора бы уже подучить ассемблер.. смелости не хватает
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 08 сен 2022, 15:14
MX_Master
Такс. Китайцы подложили в новые контроллеры
NVEM новую китайскую свинью
Вся разводка платы новая и основной чип теперь другой - iMX RT1052. Этого стоило ожидать. Привязка к определённому железу всегда чревата. В общем, приехали.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 08 сен 2022, 15:30
D.L.
Видимо нехватка stm32 сказывается, месе вон тоже на другую фпга пришлось перейти.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 11 сен 2022, 08:47
AndreyFly
Как получить прошивку для NVEM V2? Чип STM32F207.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 11 сен 2022, 10:55
MX_Master
AndreyFly писал(а): ↑11 сен 2022, 08:47
Как получить прошивку для NVEM V2? Чип STM32F207.
viewtopic.php?f=163&t=33843, и где-то через "недельку" будет версия с энкодерами
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 01 окт 2022, 12:29
MX_Master
Вместе с другими разработчиками и участниками форума
LinuxCNC пытаемся найти подходящее решение для прошивки новых контроллеров
NVEM/EC300/EC500 (на основе i.MX RT1052). Почитать можно тут -
https://forum.linuxcnc.org/18-computer/ ... ?start=500
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 02 окт 2022, 14:30
MX_Master
Пока что ощутимых результатов по подключению к чипу
IMXRT1052 нет. Так что с 50% вероятностью можно готовиться к сворачиванию проекта
и подготовке к форсированию проекта собственного контроллера. И это при том, что в прошивке/драйвере старого
NVEM'а уже энкодеры робят и мануал на русском есть, только конфиг с
ПИДом не доделан. Эх..
ЗЫ как меня заколебали эти готовые устройства.. уже второй проект в мусор уходит
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 02 окт 2022, 15:17
xenon-alien
MX_Master писал(а): ↑
ЗЫ как меня заколебали эти готовые устройства.. уже второй проект в мусор уходит
Для плат меса там тоже какие-то нюансы с чипами и приходится им переделывать плату и разводку под новые чипы, так что ты не один...
Мол цена старого чипа равняется на цену готовой плате в продаже...
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500
Добавлено: 06 окт 2022, 11:30
MX_Master
Закругляем проект. Времени потрачено много, результаты в мусор. Все желающие могут на старых контроллерах (с STM32) использовать открытый проект Remora -
https://github.com/scottalford75/Remora-NVEM
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500 (проект отменён)
Добавлено: 07 окт 2022, 19:28
antoxa-kylibin
Ожидаемо......
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500 (проект отменён)
Добавлено: 08 окт 2022, 06:44
AAN
У всех разрабов с STM беда приключилась - были мощные недорогие МК с множеством функций. Были, да сплыли. На поделиях этой фирмы можно поставить крест и солью посыпать...
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500 (проект отменён)
Добавлено: 08 окт 2022, 12:20
MX_Master
Интересно, что другие производители, такие как NXP, не сильно пострадали в период дефицита чипов. Непонятно только, почему китайцы на отечественные чипы не перешли в своих новых контроллерах. Это было бы логичнее и перспективнее. Видимо, свои чипы всё ещё недостаточно хороши в плане документации и средств разработки.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500 (проект отменён)
Добавлено: 08 окт 2022, 19:34
sidor094
А что,разве stm китайцы уже не продают? У меня тоже проект на плате с stm32f764.Вроде видел на али в продаже.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500 (проект отменён)
Добавлено: 08 окт 2022, 20:10
MX_Master
Макетки и небольшое кол-во с рук продавалось и раньше. Сейчас тоже есть. Но для производства устройств нужно закупать целые партии чипов. А партию так просто не купить. Надо в очереди стоять и брать очень много. Мелкосейрийка не может себе такое позволить.
Re: LinuxCNC + Ethernet контроллеры NVEM/EC300/EC500 (проект отменён)
Добавлено: 08 окт 2022, 23:39
sidor094
https://aliexpress.ru/item/400113165161 ... 4716178984
Использую такие для управления станками чпу .В том числе и на работе.Уходит максимум штук пять в месяц.Для остальных разработок использую более дешевые.А что значит большая партия?Неужели у вас контроллеры уходят сотнями штук?