реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> На пути к робототехнике, Подскажите как управлять сервомашинкой
Costia
сообщение Jul 5 2008, 18:43
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



Будьте добры помогите разобраться с управлением сервомашинки .

Использую сервомашинку ( ACE RC C1016 )
Питаю от USB управляющий сигнал беру прямо с ножки PORTA.0
МК ATmega16 тактовая частота 1 mHz
Информацию брал с http://vtpablos.narod.ru/robots/servotester/

Задача кода ШИМ на PORTA.0 ( скважность 0.9 мс . частота 20 мс )


.include"m16def.inc"
.list

.cseg
.org 0

ldi r16, high(RAMEND)
out SPH, r16
ldi r16, low(RAMEND)
out SPL, r16


ldi r16, 255
out DDRA, r16
out DDRB, r16

rj0: ldi r16, 224
sbi PORTA, 0

rj1: dec r16
breq rj2
rjmp j1

rj2: cbi PORTA, 0

ldi r16, 20
rj3: dec r16
breq rj0
ldi r17, 250
rj4: dec r17
breq rj3
rjmp rj4





Забыл сказать что на выше изложенные действия машинка не реагирует...

Сообщение отредактировал Costia - Jul 5 2008, 18:46
Go to the top of the page
 
+Quote Post
VDG
сообщение Jul 5 2008, 22:11
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



оно и собираться не должно. имя метки 'rj1', а переход на 'j1'

rj1:
rjmp j1


--------------------
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Jul 5 2008, 23:51
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Если момент, на который указал VDG, является опечаткой, и это даже компилится... Кто Вас учил так управлять сервой, что мешает использовать таймеры? Представьте, что будет, если посреди какого-нибудь цикла возникнет прерывание? И напоследок, не забывайте использовать теги [code][/code] и писать комментарии к коду - чемы быстрее мы сможем понять, что Вы написали, тем быстрее Вы получите ответ.
Go to the top of the page
 
+Quote Post
Costia
сообщение Jul 6 2008, 07:27
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



да это опечатка . Что касается кто меня так учил то это не законченный девайс а просто способ пошевелить сервомашинкой. И даже с моей бурной фантазией мне ложно представить что будет ( учитывая что прерывания отключены = )
Код
        ldi    r16,    255
        out    DDRA,    r16
        out    DDRB,    r16
    
rj0:    ldi    r16,    224
        sbi    PORTB,    0   //устанавливаю лог 1 на ножке = )

rj1:    dec    r16            // задежка 0.9 мс
        breq    rj2
        rjmp    rj1

rj2:    cbi    PORTB,    0        //лог 0 на ножке

        ldi    r16,    20    //задержка 19.1 мс
rj3:    dec    r16
        breq    rj0
        ldi    r17,    250
rj4:    dec    r17
        breq    rj3
        rjmp    rj4


Сообщение отредактировал Costia - Jul 6 2008, 07:37
Go to the top of the page
 
+Quote Post
UserM
сообщение Jul 6 2008, 08:52
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 26-02-05
Пользователь №: 2 909



Может взять готовый проект.
http://www.ejberg.dk/servotst/index.html
Или
http://www.engr.sjsu.edu/bjfurman/courses/...servo-atmel.pdf

Подобных проектов полная сеть на разных контроллерах и языках.

Сообщение отредактировал UserM - Jul 6 2008, 08:56
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Jul 6 2008, 10:03
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



2Costia
Ну для начала могу посоветовать пощупать осцилографом - генерится ли что-нибудь на ножке. Если верить отладчику, то должно (но не надо верить отладчику wink.gif)...

К тому же, попробуйте увеличить ширину импульса - не все сервы воспринимают значение в 0,9мс, поставьте что-нибудь около 1,5мс.

Я думаю, не надо лишний раз напоминать, что не мешает перепроверить подключение сервомашинки wink.gif
Go to the top of the page
 
+Quote Post
VDG
сообщение Jul 6 2008, 12:00
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Цитата(Costia @ Jul 6 2008, 11:27) *
да это опечатка . Что касается кто меня так учил то это не законченный девайс а просто способ пошевелить сервомашинкой.

Вам же сказали уже - не хватает loop-а.
Код
loop:
;...
; ваш код
;...
  rjmp loop


--------------------
Go to the top of the page
 
+Quote Post
Costia
сообщение Jul 6 2008, 12:48
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



Цитата(Aesthete Animus @ Jul 6 2008, 14:03) *
2Costia
Ну для начала могу посоветовать пощупать осцилографом - генерится ли что-нибудь на ножке. Если верить отладчику, то должно (но не надо верить отладчику wink.gif)...

К тому же, попробуйте увеличить ширину импульса - не все сервы воспринимают значение в 0,9мс, поставьте что-нибудь около 1,5мс.

Я думаю, не надо лишний раз напоминать, что не мешает перепроверить подключение сервомашинки wink.gif


Спасиб да в этом дело попробовал на 1.5 и все заработало как надо ( до упоро против часовой )
вот код если кому понадобится
Код
        ldi        r16,    255
        out        DDRA,    r16
        out     DDRB,    r16
    
j0:        ldi        r16,    15
        sbi        PORTB,    0    //==================

j1:        breq    j3
        dec        r16
        ldi        r17,    19    

j2:        breq    j1
        dec        r17
        ldi        r20,    0
        rjmp    j2
            
j3:        cbi        PORTB,    0 //==================

        ldi        r16,    185

j4:        breq    j0
        dec        r16
        ldi        r17,    19

j5:        breq    j4
        dec        r17
        ldi        r20,    0
        rjmp    j5


А если у меня не стандатные уоманды сервы то как мне узнать остальные . Логично предположит что надо искать даташит но не получается найт ...
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Jul 6 2008, 14:44
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Цитата(Costia @ Jul 6 2008, 16:48) *
Спасиб да в этом дело попробовал на 1.5 и все заработало как надо ( до упоро против часовой )

Теперь я бы посоветовал постепенно увеличивать ширину импульса, чтобы узнать второе крайнее положение wink.gif


Цитата(Costia @ Jul 6 2008, 16:48) *
А если у меня не стандатные уоманды сервы то как мне узнать остальные

Что значит, нестандартные? Какие команды?


Цитата(VDG @ Jul 6 2008, 16:00) *
Вам же сказали уже - не хватает loop-а.


Есть там loop: "breq rj0". Другое дело, его стоит сделать явно, а то, он как-то слишком незаметен wink.gif
Go to the top of the page
 
+Quote Post
Costia
сообщение Jul 6 2008, 14:47
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



Цитата(Aesthete Animus @ Jul 6 2008, 18:44) *
Теперь я бы посоветовал постепенно увеличивать ширину импульса, чтобы узнать второе крайнее положение wink.gif
Что значит, нестандартные? Какие команды?
Есть там loop: "breq rj0". Другое дело, его стоит сделать явно, а то, он как-то слишком незаметен wink.gif


да лана прикапыватся . Код не большой и не сложный все прекрасно видно
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01454 секунд с 7
ELECTRONIX ©2004-2016