roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 мар 2025, 10:47

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Плавное движение сервы
СообщениеДобавлено: 20 сен 2009, 23:18 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
Ура нашёл то что искал. Кто знает как добиться такого же плавного движения сервы в Bascom AVR?
я такой код использую, но он с резкими движениями получается
Код:
For I = 30 To Top Step 10
X = Center + I
Servo(1) = X
Waitms Wait1
Gosub Sharp_left
Next


_________________
https://vk.com/ledscale - платы, vk.com/ledscale3dprintig - 3Д печать\моделирование, vk.com/ledrenovation- ремонт светодиодных источников света


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 20 сен 2009, 23:22 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Waitl чему равно? Top чему равно? Почему Step 10 ?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 20 сен 2009, 23:28 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
Целый код не хотел выкладывать....
Основная:
Код:
$regfile = "m16def.dat"                                     'используем мк ATmega16
$crystal = 16000000                                         'частота кварцевого резонатора 16mHz
$include "config ports.bas"

'*********************************ЖКИ*******************************************

$lib "lcd4.lbx"                                             'используем 4-х битное подключение дисплея с помощью альтернативной библиотеки
Cursor Off : Cls                                            'отключаем курсор и очищаем дисплей

'************************Переменные и константы*********************************

Dim Minimum As Byte , Maximum As Byte , Center As Byte , Speed As Byte : Speed = 200
Dim X As Integer , I As Integer

Minimum = 80 : Maximum = 160 : Center = Maximum - Minimum   'подсчитываем разворот в градусах для сервопривода

Const Wait1 = 500 : Const Top = 30


'*****************************Основной цикл*************************************

1:
Do

Gosub Вперёд                                                ' Если сигнала от ик-датчика(Sharp) не поступает, значит двигаемся всё время прямо

'******************Вращение сервопривода и датчика Sharp************************
'*********************************Вправо****************************************
For I = 30 To Top Step 10
X = Center + I
Servo(1) = X
Waitms Wait1
Gosub Sharp_left
Next

'*********************************Центр*****************************************
For I = 30 To Top Step 10
Servo(1) = Center
Waitms Wait1
Gosub Sharp_center
Next

'*********************************Влево*****************************************
For I = 30 To Top Step 10
X = Center - I
Servo(1) = X
Waitms Wait1
Gosub Sharp_right
Next

'*********************************Центр*****************************************
For I = 30 To Top Step 10
Servo(1) = Center
Waitms Wait1
Gosub Sharp_center
Next

Loop

'*******************************************************************************

$include "gosub.bas"

'*******************************************************************************

End

'*******************************************************************************


config ports:
Код:
Config Servos = 1 , Servo1 = Portc.0 , Reload = 12          ' Указываем кол-во серв, присваеваем имя Servo1 порту PD2, указываем длину импульса.


Добавлено спустя 2 минуты 11 секунд:
=DeaD= писал(а):
Почему Step 10 ?

Это там не обязательно. Потом уберу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 20 сен 2009, 23:38 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Шо за ересь?

Top=30
For I = 30 To Top Step 10

Это не цикл, а издевательство.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 20 сен 2009, 23:58 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
но это ерись работает. и что тебе здесь не нравится?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 00:00 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Не нравится то, что цикл не цикл, а одна итерация - поэтому, думаю, серва и дергается.

Цикл от 30 до 30 с шагом 10 - ну что за нафиг? Конечно он 1 раз выполнится со значением 30 и всё.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 00:32 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
Усё осознал. И впрям ерись получается. Порыскал хелп и нашёл такое:
Код:
$regfile = "m16def.dat"                                     ' specify the used micro

$crystal = 16000000                                         ' used crystal frequency

$baud = 19200                                               ' use baud rate

$hwstack = 32                                               ' default use 32 for the hardware stack

$swstack = 10                                               ' default use 10 for the SW stack

$framesize = 40                                             ' default use 40 for the frame space

'Servo's need a pulse in order to operate

'with the config statement CONFIG SERVOS we can specify how many servo's we

'will use and which port pins are used

'A maximum of 14 servos might be used

'The SERVO statements use one byte for an interrupt counter and the TIMER0

'This means that you can not use TIMER0 anymore

'The reload value specifies the interval of the timer in uS

'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10

Config Servos = 1 , Servo1 = Portc.0 , Reload = 10

'as an option you can use TIMER1

'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1

'we use 2 servos with 10 uS resolution(steps)

'we must configure the port pins used to act as output

Config Portc = Output

'finally we must turn on the global interrupt

Enable Interrupts

'the servo() array is created automatic. You can used it to set the

'time the servo must be on

Servo(1) = 10                                               '10 times 10 = 100 uS on

'Servo(2) = 20                                               '20 times 10 = 200 uS on

Dim I As Byte

Do

For I = 50 To 200 Step 1

  Servo(1) = I

  Waitms 30

Next

For I = 200 To 50 Step -1

  Servo(1) = I

  Waitms 30

Next

Loop

End

Вроде двигается медленно но чуть "неуверенно". С английским туго, если можешь, то объясни для чего это:
Servo(1) = 10 '10 times 10 = 100 uS on
I = 50-как понял теже градусы. Тоесть задаём начало движения сервы от 50 градусов. До To 200 с шагом 1. И тоже самое в обратном направление For I = 200 To 50 Step -1.
Роль задержки Waitms 30. Эксперементируя выяснил, что чем она больше тем медленнее двигается серва.
Тогда хоть смогу добиться такого же результата как на видео :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 00:37 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
По поводу "неуверенности" попробуй поиграть параметром Step, варьируй 1..10

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 00:40 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
Ок попробую.
Во видео загрузил. Когда крутится, трясётся что-ли. Типо мизирных рывков получается. Собсно так и работает:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 16:45 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
Ну вот сделал.

Прога если кому пригодится:
Код:
$regfile = "m16def.dat"

$crystal = 16000000

Config Servos = 1 , Servo1 = Portc.0 , Reload = 10

Config Portc = Output

Enable Interrupts

Servo(1) = 10                                               '10 times 10 = 100 uS on

Dim I As Byte

Do

For I = 45 To 90 Step 1                                     ' начинаем движение от 45 градусов и до 90 с шагом 1

  Servo(1) = I

  Waitms 12                                                 ' время за которое будет выполняться один шаг(движение на один градус).
  ' то есть в нашем случае каждые 12 мс серва будет сдвигаться влево или вправо на один градус.

Next

Waitms 500                                                  ' задерживаем серву в данном положение на 0, 5 секунды

For I = 90 To 135 Step 1

  Servo(1) = I

  Waitms 12

Next

Waitms 500

For I = 135 To 90 Step -1

  Servo(1) = I

  Waitms 12

Next

Waitms 500

For I = 90 To 45 Step -1

  Servo(1) = I

  Waitms 12

Next

Waitms 500

Loop

End

Прокоментировал один цикл. Если я всё правильно понял, то работает именно так как описал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 16:49 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
2space: Маленькая проблема - серва получает сигнал каждые 20мс только, поэтому лучше сделать именно такой шаг в цикле. Иначе половина шагов будет пропущена и движения будут чуть дерганные.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 16:50 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
Что то я тебя не совсем понял :unknown:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 16:51 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
А зачем всередине то останавливается?

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 16:52 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
просто так. на роботе сделаю так как на первом видео


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плавное движение сервы
СообщениеДобавлено: 21 сен 2009, 16:54 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Там не останавливается :)
Смысла в этой остановке нет. Только потеря времени.

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO