Ви не увійшли.
Сторінки 1
Приветствую.
Неделю не могу подружить сервопривод с компом.
Уже и ардуино пробовал, ни как.
Хотя на видео красиво работает
https://youtu.be/_syxCwIINN8?si=Rms5gVFGZDeGqiBT
Есть у кого готовое решение, или хоть наработки ?
Неактивний
https://www.youtube.com/watch?v=S0tb3jnfdw4&t=1s тут прекрасно все описано если непонятно и не заработает отпешитесь
Неделю не могу подружить сервопривод с компом.
Покажіть cхему підключення і код керування. Чи відповідає servo ID в коді дійсному ідентифікатору серво? Покажіть дамп трафіку пакетів. Чи видає серво підтвердження прийому пакетів? Чи пробували різні бодрейти UART: 9600, 19200, 57600, 115200?
Неактивний
Покажіть cхему підключення
Прошивка переходника на Attiny13A
.DSEG ; Сегмент ОЗУ
.CSEG
.org 0 ;Задание нулевого адреса старта программы
rjmp reset ;Безусловный переход к метке reset
.org 1
reti ;Prer
.org 2
reti ;Pin Change Interrupt0
.org 3
reti ;timer0_ovf
.org 4
reti ;EEPROM write complete
.org 5
reti ;Analog Comparator Interrupt
.org 6
reti ;timerA;Timer_Counter0A; Compare Match A
.org 7
reti ;Timer_Counter0B; Compare Match B
.org 8
reti ;Watchdog Timeout
.org 9
reti ;conversion;ADC Conversion Complete Handle
reset:
wdr; Reset Watchdog Timer
;ldi r16,24
;out WDTCR, r16;
;ldi r16,12
;out WDTCR, r16;
LDI ZL,Low(SRAM_START) ; Адрес начала ОЗУ в индекс
LDI ZH,High(SRAM_START)
CLR R16 ; Очищаем R16
Flush: ST Z+,R16 ; Сохраняем 0 в ячейку памяти
CPI ZH,High(RAMEND+1) ; Достигли конца оперативки?
BRNE Flush ; Нет? Крутимся дальше!
CPI ZL,Low(RAMEND+1) ; А младший байт достиг конца?
BRNE Flush
CLR ZL ; Очищаем индекс
CLR ZH
LDI ZL, 30 ; Адрес самого старшего регистра
CLR ZH ; А тут у нас будет ноль
DEC ZL ; Уменьшая адрес
ST Z, ZH ; Записываем в регистр 0
BRNE PC-2 ; Пока не перебрали все не успокоились
ldi r16, RAMEND ;Загрузка в регистр r16 адреса верхней границы ОЗУ
out SPL, r16
cbi DDRB, 0
cbi PORTB, 0
cbi DDRB, 1
cbi PORTB, 1
cbi DDRB, 2
cbi PORTB, 2
cbi DDRB, 3
cbi PORTB, 3
cbi DDRB, 4
sbi PORTB, 4
ldi r16,0
main:
sbic PINB,1 ;пропустить если бит в регистре очищен
rjmp t_in_test
sbi DDRB, 0 ; установить
cbi DDRB, 2 ;out очистить
cbr r16, 1 ; очистить бит 0 в r16
rjmp main
t_in_test:
sbrc r16, 0 ; Пропустить если бит 0 в r16 очищен
rjmp rxrid
cbi DDRB, 0 ; очистить
sbr r16, 1 ; Установить бит 0 в r16
nop
nop
nop
nop
rjmp main
rxrid:
sbic PINB,0 ;пропустить если бит в регистре очищен
rjmp rx_test
sbi DDRB, 2 ; установить
cbr r16, 2 ; очистить бит 1 в r16
rjmp main
rx_test:
sbrc r16, 1 ; Пропустить если бит 1 в r16 очищен
rjmp main
cbi DDRB, 2 ; очистить
sbr r16, 2 ; Установить бит 1 в r16
nop
nop
nop
nop
rjmp main
Аналог схемы
https://arduino.ua/files/1_USB-TTL_sch.pdf
Режим сканера, на разных скоростях
Остання редакція AndDay (2024-01-08 00:09:43)
Неактивний
Якщо вірити даташиту зі сторінки цього серво, пакет має бути в форматі:
У вас після хідера 0xFFFF іде 0x01, що не схоже на коректне значення поля size. І двох байтів контрольної суми теж немає.
Не та версія протокола?
// Attiny в ролі буфера з відкритим колектором - це сильно
Неактивний
Не та версія протокола?
Родной бы документ от него, или хотя бы рабочий проект, там бы возможно разобрался бы по командам
Документ, что прилагается не от него, от похожего
https://www.pololu.com/file/0J1212/A1-16_datasheet_20151229.pdf
// Attiny в ролі буфера з відкритим колектором - це сильно
Готового решения сразу не нашел )
Хотя ранее были https://arduino.ua/ru/prod3963-ttlusb-adapter-dlya-ypravleniya-servoprivodom-sovmestima-s-arduino
Ну и на соседних есть, как оказалось https://electroradiogroup.com.ua/ua/p2008450927-adapter-ttlusb-dlya.html
Неактивний
Доречі, в прошивці для Attiny не бачу конфігурування CLKPR. Якщо Attiny працює від внутрішнього осциллятора на 9.6 МГц і фʼюз CKDIV8 не скинуто, то його тактова частота - 1.2 МГц. Один такт - це біля 10% від такту для 115200 бод. Далеко не всякий UART буде нормально працювати при такій похибці.
Неактивний
Документ, что прилагается не от него, от похожего
А він точно з керуванням по послідовному протоколу?
На сайті виробника по назві DM0900 знаходиться два серво:
DM0900 10.5KG Digital Metal Gear Servo
Digital Metal Gear Servo DM0900
Обидва з PWM-керуванням. У маркетологів PWM також вважається "digital"
Може в описі товару тупо переплутали, написавши про послідовну шину. Таке буває.
Так, програма у вас видає Dynamixel Protocol 1.0.
Ще є Protocol 2.0. А на сторінці товару посилання на даташит для A1-16, де протокол схожий, але несумісний ні з Dynamixel 1.0, ні з 2.0. Кожен виробник модифікує протокол як хоче, аби було несумісно з продукцією конкурентів.
Готового решения сразу не нашел )
Теоретично, якщо зі сторони серво відкритий колектор з підтяжкою, то одного діода Шотткі з серво на TX має бути достатньо. Принаймні debugWIRE для AVRок у мене так працює без проблем.
Але мені все ж здається, що там не послідовний протокол, а звичайний PWM.
Остання редакція dimich (2024-01-08 02:31:48)
Неактивний
А він точно з керуванням по послідовному протоколу?
На сайті виробника по назві DM0900 знаходиться два серво:
DM0900 10.5KG Digital Metal Gear Servo
Digital Metal Gear Servo DM0900
Обидва з PWM-керуванням. У маркетологів PWM також вважається "digital"
Може в описі товару тупо переплутали, написавши про послідовну шину. Таке буває.
PWM так же пробовал, результа 0
MG996R - работает норм по ШИМ
https://youtube.com/shorts/umBPXf9SeYQ
Так, програма у вас видає Dynamixel Protocol 1.0.
Ще є Protocol 2.0. А на сторінці товару посилання на даташит для A1-16, де протокол схожий, але несумісний ні з Dynamixel 1.0, ні з 2.0. Кожен виробник модифікує протокол як хоче, аби було несумісно з продукцією конкурентів.
Протоколы все перепробовал, качал еще пару альтернативных программ
Так же, что нашел по примерам ардуино, все глухо.
Теоретично, якщо зі сторони серво відкритий колектор з підтяжкою
Нет подтяжки.
На плате сервопривода, два резистора 1кОм припаяны вместе, отводы распаяны на разные входы микросхемы.
Неактивний
Протоколы все перепробовал, качал еще пару альтернативных программ
Я би все-таки спробував той протокол, що для A1-16. Тільки не сторонньою програмою, а своєю, щоб гарантовано видавала правильно сформований пакет. Наприклад, STAT для ID 1: 0xFF 0xFF 0x07 0x01 0x07 0x01 0x00. З перебором ID від 1 до 20 і перерахуванням байтів контрольної суми. Також з перебором чотирьох бодрейтів. І дивитись, чи прийде відповідь хоч на один. Всього-то 80 варіантів Ну або впевнетись, що альтернативні програми генерують пакет, відповідний протоколу.
На плате сервопривода, два резистора 1кОм припаяны вместе, отводы распаяны на разные входы микросхемы.
А видно маркування мікросхеми? Чи можна змалювати схему, хоча б частково, куди подається вхід, земля і живлення? Або фото плати?
Неактивний
check_sum_1 = (N^ID^CMD^data[0]^data[1]^...^data[N-8]) & 0xFE - (N XOR ID XOR CMD XOR data[0] XOR data[1] XOR ... XOR data[N-8]) И 0xFE
сheck_sum_2 = (~check_sum_1) & 0xFE - (~check_sum_1) И 0xFE
Я правильно понял, все через логическое XOR и в конце, через И ?
Остання редакція AndDay (2024-01-08 21:52:00)
Неактивний
Я правильно понял, все через логическое XOR и в конце, через И ?
Так, щось типу такого:
unsigned char pkt[] =
// 0 1 2 3 4 5 6
{ 0xFF, 0xFF, 0x07, 0x00, 0x07, 0x00, 0x00 }; // cmd STAT, no data
for (int id = 1; id <= 20; ++id) {
pkt[3] = id;
pkt[5] = 0; // zero check_sum_1
pkt[6] = 0; // zero check_sum_2
unsigned char checksum = 0;
for (int i = 2; i < sizeof(pkt); ++i) {
checksum ^= pkt[i];
}
pkt[5] = checksum & 0xFE;
pkt[6] = ~pkt[5] & 0xFE;
send_packet(pkt, sizeof(pkt));
wait_response();
}
Дивний і ненадійний алгоритм контрольної суми, але так написано
Неактивний
Сторінки 1