Технический форум по робототехнике.
Master » 04 апр 2008, 09:11
2 AsonD
Раз уж задал вопрос и сам нашел на него ответ, будь уж так добр напиши на него ответ, потом другие пойдут по твоим стопам и им не придется искать знакомых, которые умеют подключать сервы.
AsonD » 04 апр 2008, 20:49
Сначало крышечный редуктор на меня свлили, теперь сервы, че вы от миня хотите?)))
MegaBIZON » 04 апр 2008, 23:29
Эдгул...
Хорош уже жлобить в самом деле! плохо на тебя весна как-то действует... чесслово, завязывай.
Master писал(а):2 AsonD
Раз уж задал вопрос и сам нашел на него ответ, будь уж так добр напиши на него ответ, потом другие пойдут по твоим стопам и им не придется искать знакомых, которые умеют подключать сервы.
Да есть такая статья хорошего тона - нашедши сам ответ на свой вопрос, написать его тут же.
Но я на месте AsonD'а тоже не стал бы тут писать подобных откровений. Мне бы это и в гологу не пришло - будучи новичком расказывать Робофоруму, как фтыкается серва.
Да, кстати, как вы думаете, камрады, сколько бы народу встало в очередь здраво поглумиться, если б AsonD и в самом деле расписал тут сию прописную истину?
На счёт Эдгула я как-то даже не сомниваюсь...
Короче, народ, давайте уже будем немного думать перед тыканием палцем в клаву.
аминь.
Vovan » 04 апр 2008, 23:48
МегаБизон +1
А то, походу, тут у некоторых типо "звёздной болезни" обнажилось... Вот кому бы про тактичность намекнуть...
AsonD » 05 апр 2008, 00:41
Так, я понимаю, правила хорошего тона и манеры - темы интересные, но мы не об этом) Но для некоторых личностей сделаю лирическое отступление - когда начерчу принципиальную схему и приведу часть программы в рабочее состояние, то я все выложу сюда - думаю новичкам по схеме будет вполне понятно как подрубать сервы...

хотя я думаю временно наши беседы прекратятся, так как пока не сделаю все говорить будет не о чем, а спрашивать тут о том, что не знаешь, как я вижу, не принято (сразу гуглить отправят), так что когда сделаю первую часть все выложу

lebaon » 05 апр 2008, 18:27
а спрашивать тут о том, что не знаешь, как я вижу, не принято (сразу гуглить отправят)
не сразу, а как правило
кстати, скажи аську, я уже большую часть таких вопросов знаю и помогу без гугла

AsonD » 06 апр 2008, 21:20
Так, долгожданный вопрос:
Скажи - либо я дурак, либо протеус тупит?
В общем у мня есть программга для теста сервы, но в протеусе она не пашет, тоесть привод там поворачиваетсо, но только на 90 градусов не зависимо от того, какое значение не стояло бы в программе...
вот прога:
- Код: Выделить всё • Развернуть
#include <mega16.h>
#include <delay.h>
void main(void)
{
double t = 0.01;
char j = 100;
char i;
PORTA=0xff;
DDRA=0xff;
PORTB=0xff;
DDRB=0xff;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0xff;
while(1)
{
PORTB.1 = 0;
delay_us(2);
PORTB.1 = 1;
delay_us(1);
};
}
=DeaD= » 06 апр 2008, 21:31
Вообще серве нужно с частотой 50Гц выдавать сигнал от 1 до 2мс длиной. А вы выдаете, я так понимаю, сигнал длиной 1мс, но с частотой 1000/3=333Гц.
AsonD » 06 апр 2008, 21:36
Так понятно, ответ ясен, теперь мона пояснение что нужно сделать? (я новичок в программировании)
=DeaD= » 06 апр 2008, 22:04
Хотя погодите, если я правильно понимаю, то delay_us - это микросекунды, а не миллисекунды, то есть правильный код будет типа такого:
- Код: Выделить всё • Развернуть
while(1)
{
PORTB.1 = 0;
delay_us(18500);
PORTB.1 = 1;
delay_us(1500);
};
Проверьте?
AsonD » 06 апр 2008, 23:32
Все, терь все работает)
Добавлено спустя 59 минут 55 секунд:А у меня рабочий код получилсо вот такой:
- Код: Выделить всё • Развернуть
while (1)
{
PORTC.1 = 0;
delay_us(20000);
PORTC.1 = 1;
delay_us(480);
};
Оно проверено в Протеусе на рабочесть
Добавлено спустя 9 минут 43 секунды:Такс, ну и еще один вопросцик, что тут еще мона сделать чтобы допустим заставить вторую серву делать тож самое? (я просто языком не шибко владею), допустим мы коннект ее к С.1 ?
Не забываем использовать тег CODE для листингов программ! Относится ко всем!
<Digit>
=DeaD= » 06 апр 2008, 23:36
AsonD писал(а):Такс, ну и еще один вопросцик, что тут еще мона сделать чтобы допустим заставить вторую серву делать тож самое? (я просто языком не шибко владею), допустим мы коннект ее к С.1 ?
Разве не очевидно, что:
- Код: Выделить всё • Развернуть
while (1)
{
PORTC.1 = 0;
PORTC.0 = 0;
delay_us(20000);
PORTC.1 = 1;
PORTC.0 = 1;
delay_us(480);
};
Заставит делать одно и то же сервы на портах C.0 и C.1 ?
AsonD » 06 апр 2008, 23:44
Когда я так сделал у мня глюк проста случилсо в протеусе, сервы снова начали поворачивать на 90
Добавлено спустя 50 секунд:
И допустим, а если не одно и тоже?
=DeaD= » 06 апр 2008, 23:54
1. Вероятно потому что вы всё-таки не в интервале 1-2мс, а на 0.48мс даете сигнал, не думаю что идеально отлажена модель сервы на некорректных сигналах.
2. Ну блин, вы хотите чтобы вам пошагово написали то что вам надо? три варианта есть, первый простой:
- Код: Выделить всё • Развернуть
servo_1=1200;
servo_1=1800;
while (1)
{
PORTC.0 = 1;
delay_us(servo_0);
PORTC.0 = 0;
PORTC.1 = 1;
delay_us(servo_1);
PORTC.1 = 0;
delay_us(20000-servo_1-servo_0);
};
Дальше два сложных, обсуждалось в форуме -
viewtopic.php?f=2&t=3780.
Master » 07 апр 2008, 00:04
2 AsonD
Выложи свой проект с сервой в протеусе и исходники. Интересно посмотреть.