roboforum.ru

Технический форум по робототехнике.

 

Управление сервопривода от компьютера

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Сообщение KiCom » 05 ноя 2005, 14:44

Эээ нет, теперь я уже сделаю на МК :).
Это я уже понял, интересно получаеться человек тебе говорит, что тут всего два проводка спаять, и програмки готовые есть. А потом начинет выесняться что не два проводка а 200 да и програмку самому писать надо. Стабильности нет :)  да еще похоже вчера спалил МК вот теперь думаю идти новый покупать, но точно такого нет, ждать две недели пока его привезут под заказ или купить MEGA8, а при нашем раздолбайстве они хотябы в месяц с заказом уложились.
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение Сергей » 05 ноя 2005, 14:57

Тогда покупа сразу мегу16 чтоб не парится. Но если бошься опять спалить контроллер то бери мегу8, она подешевле. Могу подкинуть пример управления одной сервой. Сам пользовался, потом достало тк нестабильно у меня работала.
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение KiCom » 05 ноя 2005, 14:59

Ага подкинь, посмотрю как она работает.
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение Сергей » 05 ноя 2005, 15:05

Она по внешнему виду мне не очень нравится. Будет свободное время - подкоректирую может.
Код: Выделить всёРазвернуть
  #include <io2313v.h>
#include <macros.h>

void port_init(void);
void timer0_init(void);
void init_devices(void);
void delaysa(unsigned int mks);

unsigned char deltaServo1 = 100;

unsigned int maxServo1 = 4000;
unsigned int minServo1 = 900;


void nomovieServo1(void);



const int period = 30800; //period = 20 ms
int N = 2497; //neutral servo = 1.5 ms

//TIMER0 initialize - prescale:256
// desired value: 200Hz
// actual value: 200,321Hz (0,2%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop timer
TCNT0 = 0x3D; //set count
TCCR0 = 0x04; //start timer
}

#pragma interrupt_handler timer0_ovf_isr:7
void timer0_ovf_isr(void)
{
TCNT0 = 0x3D; //reload counter value
if (PIND==0x04)
forwardServo1(deltaServo1);
if (PIND==0x08)
backwardServo1(deltaServo1);
if((PIND!=0x04)&&(PIND!=0x08))
nomovieServo1();


}
//The first servo
void forwardServo1(unsigned char deltaServo1)
{
 if(N<maxServo1)
 {
   N=N+deltaServo1;
   PORTB|=0x10;
   delaysa(N);
   PORTB&=~0x10;
   delaysa(period);
  }
}
void backwardServo1(unsigned char deltaServo1)
{
 if(N>minServo1)
 {
  N=N-deltaServo1;
  PORTB|=0x10;
  delaysa(N);
  PORTB&=~0x10;
  delaysa(period);
 }
}
void nomovieServo1(void)
{
N=N-0;
PORTB|=0x10;
delaysa(N);
PORTB&=~0x10;
delaysa(period);
}
void delaysa(unsigned int mks)
{
while(mks>0)
{
 mks--;
}
}
//Init ports
void port_init(void)
{
PORTB = 0x00;
DDRB  = 0xFF;
PORTD = 0x0C; // for buttons
DDRD  = 0x00;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();

MCUCR = 0x00;
GIMSK = 0x00;
TIMSK = 0x02;
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
while(1);
}


ЗЫ
Там совсем легко можно подправить под любой компилятор. Можно ставить прогу на любой контроллер - только значения поменять не забудь.
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Сергей » 06 ноя 2005, 00:50

Код: Выделить всёРазвернуть
#include <io2313v.h>
#include <macros.h>

void port_init(void);
void init_devices(void);
void delaysa(unsigned int mks);
void forward(unsigned char delta);
void backward(unsigned char delta);
void nomovie(void);

const int period = 30800; //period = 20 ms
int N=2497;//neutral servo = 1.5 ms
unsigned char delta = 20;//skorost` perekladki

void forward(unsigned char delta)
{
if(N<4000){
N=N+delta;
PORTB|=0xFF;
delaysa(N);
PORTB&=~0xFF;
delaysa(period);
}
}
void backward(unsigned char delta1)
{
if(N>900){
N=N-delta;
PORTB|=0xFF;
delaysa(N);
PORTB&=~0xFF;
delaysa(period);
}
}

void nomovie(void)
{
N=N-0;
PORTB|=0xFF;
delaysa(N);
PORTB&=~0xFF;
delaysa(period);
}

void delaysa(unsigned int mks)
{
while(mks>0){
mks--;
}
}

void port_init(void)
{
PORTB = 0x00;
DDRB  = 0xFF;
PORTD = 0x0C;// for buttons
DDRD  = 0x00;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();

MCUCR = 0x00;
GIMSK = 0x00;
TIMSK = 0x00;
SEI(); //re-enable interrupts
//all peripherals are now initialized
}

main()
{
init_devices();

while(1){
if (PIND==0x08)
 forward(delta);
if (PIND==0x04)
 backward(delta);
if((PIND!=0x04)&&(PIND!=0x08))
 nomovie();
}
return(0);
}

   


Вот 100% работающий вариант.
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Тимофей » 15 ноя 2005, 21:23

Вопросы по сабжу:

1. Александр, в вашем списке стоит 10-проводной шлейф, т.е как я понимаю "лапша" (в магазине мне сказали, и это, кстати, логично :), что шлейф это готовое устройство, с разъемами и т.п), так вот почему именно 10-проводной? на разъеме же в 2 ряда по 5 контактов? и еще - по схеме. их (ряды), как я понимаю по схеме, нужно соединять между собой? тогда опять же - зачем 10-проводной кабель? вообщем, разьясните ламеру, очень прошу.
2. на схеме (с надписью "программатор") - только провод нарисован? т. е выводы контроллера цеплять на контакты кабеля? А нахрена тогда 10 контактный разъем?
3. схемка avr-rs232-pc непосредственно для устройства управления? для уже прошитого чипа?

Кстати, я сейчас купил МК - 120 р. Это норм. цена? Мне просто интересно узнать, сколько я переплатил.
Тимофей
 
Сообщения: 37
Зарегистрирован: 09 авг 2005, 17:38

Сообщение Сергей » 15 ноя 2005, 21:46

Начну с конца. Какой МК ты купил? Ты про AT90S2313? тогда переплатил...
Я хуже некуда ламер :) , но шлейв это много провоков аккуратно "склеиных" между собой. Это не готовое устройство. Бывают шлейфы продаются в компьютерных магазинах, там они уже готовые. В Чип и Дип там по метрам отрезают такой шлейф который те нужен.
Можешь использовать и пять проводков. Главное чтобы програмировалось нормально.
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение KiCom » 16 ноя 2005, 13:17

Ну с сервами кое как вроде разобрался, но там где я изучал небыло примера как посылать в МК числа с СОМ порта, вообще как им управлять? Может какой пример накидаете?
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение Тимофей » 17 ноя 2005, 17:58

Сергей.
Да, купил AT90S2313. А на сколько, если не секрет?
Что такое шлейф и что такое лапша я хорошо знаю. Наверное, это банальные трения в терминологии. И, подумай сам, обжатые проводки в сист. блоке - это ведь готовое устройство? А по поводу этих самых склееных проводков - я для них другого названия, кроме "лапша" у нас на кружке и не слышал. Важно в данный момент то, что в нашем городе ШЛЕЙФОВ НЕТ. Ужас.
Кварц привезут на неделе. Сегодня надо еще пойти поискать 5-контактный разъем.
Кстати, нашел у себя дома позаимствованную на кружке "макетку" под DIP16 (питание там под них сделано) и под какие-то древние разъемы с множеством контактов, на ней написано 7. 104.090 ИЗМ2. Паять на ней буду. Что это такое, никто не в курсе? Так, для общего развития.
Тимофей
 
Сообщения: 37
Зарегистрирован: 09 авг 2005, 17:38

Сообщение Сергей » 18 ноя 2005, 23:47

Ну я не помню точно сколко стоит 2313.. хотя ща я посмотрю в чеке.(всегда оставляй чек после покупки эл. компонентов - очень удобно потом смотреть).
Так, 2313 я покупал за 90р в Чипе и Дипе, тамже можно приобрести АТмегу8 за 68р. Она пофункциональней будет  :)
Так называемую тобой лапшу можешь достать из старых телевизоров, ну и в этом роде.
Плата под 16ног тебе я думаю не пригодится, хотя может и наоборот. Я ведь ее не видел даже)) На 2313 20 ног, на АТмега8 28 ног. А 16 ног небось у какойнить ТиниХХ...
Название платы видимо старое. Это надо смотреть в методичках для кружков, может там есть описание если тебе эт очень нада.
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Тимофей » 20 ноя 2005, 22:24

Сергей.
Старые отечественные ТВ врядли подойдут: там у шлейфов другие параметры: шаг и т.д
Плата под 16 ног уже пригодилась:) Она конструктивно "специализирована" по микросхемы dip16 только подводом питания к 8 и 16 ноге. Так что нужно тольк оудалить перемычку и... вуаля!
Кстати, да ЧипДипа мне приблизительно 200 км. ехать, так что, с учетом проезда, я еще и сэкономил:)
Тимофей
 
Сообщения: 37
Зарегистрирован: 09 авг 2005, 17:38

Сообщение Сергей » 21 ноя 2005, 16:50

Я имел ввиду не полностью брать из телека шлейфы, а только провода. А разъемы самому поставть.
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Тимофей » 04 янв 2006, 20:10

Купил я сегодня atmega8-8pi (кстати, 2313 у меня называлась at90s2313-10pi, цифра-это частота кварца, как я понимаю?), если она не заработает, Я ПОВЕШУСЬ:evil:
Тимофей
 
Сообщения: 37
Зарегистрирован: 09 авг 2005, 17:38

Сообщение avr123.nm.ru » 04 янв 2006, 20:23

"делай как я" на стр 7 курса - и веревка не понадобится ...
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение =DeaD= » 05 янв 2006, 00:21

Тимофей писал(а):Купил я сегодня atmega8-8pi (кстати, 2313 у меня называлась at90s2313-10pi, цифра-это частота кварца, как я понимаю?)

Какая цифра? "8pi" или "10pi"? Вроде это какое-то время обращения к памяти, а частоты надо в сводных таблицах или ДШ смотреть, у меги8 максимальная частота 16МГц.
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

Пред.След.

Вернуться в Новичкам или основы основ роботостроения.

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

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

Mail.ru counter