роботы робототехника микроконтроллеры


 Страниц (2): [1] 2 »   

> Без описания
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



Здравствуйте Улыбка
Слышал я давно про такую прогрессивную вещь как сервопривод, слышал, видел, как на нём роботов делают, раньше их покупал, но не знал как их использовать, поэтому вытаскивал все микросхемы и использовал, как простой мотор с редуктором. Прошло время, я понял, что неплохо было бы освоить эту технологию, да и нужно это стало.
Порылся в интернете нашёл кое-какую информацию, понял, что сервомашинки управляются при помощи ШИМ сигнала. При этом частота должна быть постоянной(примерно 1500 Герц) а вот длина импульса изменяется и в зависимости от длины импульса(по моему, от 250мкс-крайнее положение, до 600мкс-другое крайнее положение). Значит с этим вроде понятно, точнее с теорией. Но на практике никак не могу разобраться как правильно настроить ШИМ.
Вобщем помогите, может ссылка какая есть, а то весь Гугл облазил Улыбка
Заранее спасибо Улыбка
(Добавление)
Да и ещё, такой вопрос, когда я просто подключаю сервомашинку к питанию она начинает крутиться, так и должно быть?
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Если вы про хоббийные рулевые машинки (сервомашинки) тогда немного не так. Импульсы надо подавать с частотой около 50Гц, а длинна импульса должна варьироваться от 1мс до 2 мс.(иногда даже от 0,8 до 2,2 мс)
А так, сервоприводы бывают разные, и управляются по разному, например по I2C или по RS-485.
(Добавление)
А ссылочка вот, почитайте: http://www.rcdesign.ru/articles/...adio/servo_intro
(Добавление)
Artem пишет:
Да и ещё, такой вопрос, когда я просто подключаю сервомашинку к питанию она начинает крутиться, так и должно быть?

Нет.

(Отредактировано автором: 29 Марта, 2013 - 17:13:21)

 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



Да, я говорю именно про хоббийные сервомашинки
Роботов пишет:
А ссылочка вот, почитайте

эту ссылку я уже читал, разобрался немного, но есть один вопрос: Что такое компаратор?
кстати схема работы очень напоминает исполнительную схему команд пропорционального радиоуправления.
Роботов пишет:
Нет.

Да, не стоило мне этого делать, сначала из сервомашинки пошёл дым, а потом она загорелась рёв в три ручья
придётся новую покупать, а эту опять, как мотор с редуктором использовать
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



компаратор- сравниватель. грубо говоря дифференциальный усилитель с бесконечно большим коэффициентом усиления и ограниченым питанием. 2 входа и 1 выход: если на входе + напряжение больше, чем на входе -, то на выходе +питания, если на входе+ напряжение меньше чем на входе - то на выходе -питания.
 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



А теперь понятна, а нельзя ли всё эту аппаратуру, которая управляет сервомашинкой, как нибудь заменить что-нибудь вместо сгоревшей поставить?
 
 Top
elmot Post Id



Гуру


Сообщений всего: 1141
Дата рег-ции: Дек. 2010  



Можно.
http://www.openservo.com/
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Можно, но проще новую серву купить.
Вот например люди переделывают штатную электронику, модернизируют сервы: http://www.openservo.com/
(Добавление)
З.Ы. Пока писал, elmot опередил Голливудская улыбка
 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



Вобщем, да, лучше новую купить, хотя у меня есть платки из других сервомашинок, я их вытаскивал раньше и вот теперь они остались, можно ли их в эту определить.
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



пример кода на MicroC под аппаратный PWM
под мегу 16 с внешним кварцем 8 мгц
серва HXT500

На видео видно в принципе что там творится.

http://youtu.be/bHRonJwnxgY

// в MicroC подключения библиотек, настройки частот и.т.п вынесены за рамки кода. поэтому тут этого нет.

CODE:

// переменные

int current_duty;
char txt[7];

// определения дисплея в которые нет смысла вникать.

sbit LCD_RS at PORTD2_bit;
sbit LCD_EN at PORTD3_bit;
sbit LCD_D4 at PORTD4_bit;
sbit LCD_D5 at PORTD5_bit;
sbit LCD_D6 at PORTD6_bit;
sbit LCD_D7 at PORTD7_bit;

sbit LCD_RS_Direction at DDD2_bit;
sbit LCD_EN_Direction at DDD3_bit;
sbit LCD_D4_Direction at DDD4_bit;
sbit LCD_D5_Direction at DDD5_bit;
sbit LCD_D6_Direction at DDD6_bit;
sbit LCD_D7_Direction at DDD7_bit;

void main(){

// кнопки управления

DDB0_bit = 0; // порт PORTB pin 0 как вход // вверх
DDB1_bit = 0; // порт PORTB pin 1 как вход // вниз
DDB2_bit = 0; // порт PORTB pin 2 как вход // среднее положение


current_duty = 40; // начальное значение current_duty (среднее положение)


DDB3_bit = 1; // назначен PORTB pin 3 как выход PWM (см даташит, в этой меге 4 линии PWM)

// включаем 1 PWM линию (предделитель выбран чтоб частота была где то 120Гц)

PWM1_Init(_PWM1_FAST_MODE, _PWM1_PRESCALER_256, _PWM1_NON_INVERTED, current_duty);


// вывод на дисплей просто для личного удобства

Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,6,"TEST");
inttostr(current_duty, txt);
Lcd_Out(2,2,txt);

// Основной цикл программы

do {
if (PINB0_bit) { // если PORTB pin 0 нажата
Delay_ms(140); // небольшая задержка для наглядности
if (current_duty<65) // границы и центр определял экспериментально
{current_duty++; // увеличиваем
PWM1_Set_Duty(current_duty);

nttostr(current_duty, txt); // просто вывод числа на экранчик
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,6,"UP");
Lcd_Out(2,2,txt);}
}
else
if (PINB1_bit)
{ // если PORTB pin 1 нажата
Delay_ms(140);
if (current_duty>17)
{current_duty--; // уменьшаем
PWM1_Set_Duty(current_duty);


inttostr(current_duty, txt);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,6,"DOWN");
Lcd_Out(2,2,txt);}
}

else
if (PINB2_bit) // если PORTB pin 2 нажата
{
Delay_ms(140);
current_duty=40; // устанавливаем в центральное положение
PWM1_Set_Duty(current_duty);


inttostr(current_duty, txt);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,6,"CENTER");
Lcd_Out(2,2,txt);
}



} while(1); // бесконечный цикл как обычно

}

(Отредактировано автором: 30 Марта, 2013 - 10:27:20)

 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



А нет ли такого же примера но на языке Си Улыбка
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



Artem пишет:
А нет ли такого же примера но на языке Си Улыбка


Это тоже С


IDE другое и как следствие названия библиотек...

мне в этой среде проще и быстрее.
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



http://easyelectronics.ru/servom...inka-hs-311.html
http://easyelectronics.ru/upravl...rvomashinok.html
http://forumdvrobot.ru/forum/3-46-1
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



А вот что должно в итоге получиться, так сказать совпало с заданным вопросом.

Управляемая через канал скайпы камера предположительно находящаяся в х.з. какой дали.

Уже работает в первом приближении

http://youtu.be/YPy33UhILa8


Применен стандартный интерфейс скайпы App2App (почему то с исходниками на дельфе ... русские программеры ???? в Майкрософт.)

Среда разработки MicroC_AVR

Размер кода в контроллере 980 байт.

CODE:

void main(){

UART1_Init(9600); // Initialize UART module at 9600 bps
Delay_ms(100); // Wait for UART module to stabilize
// UART1_Write_Text("Init");
// UART1_Write(13);UART1_Write(10);


DDB0_bit = 0; // Set PORTB pin 0 as input
DDB1_bit = 0; // Set PORTB pin 1 as input
DDB2_bit = 0; // Set PORTB pin 2 as input

//DDC0_bit = 0; // Set PORTC pin 0 as input
//DDC1_bit = 0; // Set PORTC pin 1 as input




current_duty = 40; // initial value for current_duty
current_duty2 = 40;


DDB3_bit = 1; // Set PORTB pin 3 as output pin for the PWM (according to datasheet)
PWM1_Init(_PWM1_FAST_MODE, _PWM1_PRESCALER_256, _PWM1_NON_INVERTED, current_duty);
DDD7_bit = 1; // Set PORTD pin 7 as output pin for the PWM (according to datasheet)
PWM2_Init(_PWM2_FAST_MODE, _PWM2_PRESCALER_256, _PWM2_NON_INVERTED, current_duty2);



do {
if (PINB0_bit) { // Detect if PORTB pin 0 is pressed

if (current_duty<65) // Small delay to avoid deboucing effect
{current_duty++; // Increment duty ratio
SetPosition (current_duty);
// display(1);
} // Set incremented duty
}
else
if (PINB1_bit)
{ // Detect if PORTB pin 1 is pressed

if (current_duty>17) // Small delay to avoid deboucing effect
{current_duty--; // Decrement duty ratio
SetPosition (current_duty);

}
} // Set decremented duty ratio
else
if (PINB2_bit)
{ // Detect if PORTB pin 1 is pressed
// Small delay to avoid deboucing effect
current_duty=40; // Decrement duty ratio
SetPosition (current_duty);

}
else
if (UART1_Data_Ready()) { // If data is received,
uart_rd = UART1_Read(); // read the received data,

switch (uart_rd) {
case 'w':
{
UART1_Write_Text("UP!");
if (current_duty<65) {
current_duty++;
SetPosition (current_duty);
}
break;
}
case 's':
{
UART1_Write_Text("DOWN!");
if (current_duty>17) {
current_duty--;
SetPosition (current_duty);
}
break;
}
case 'a':
{
UART1_Write_Text("LEFT!");
if (current_duty2<65) {
current_duty2++;
SetPosition2 (current_duty2);
}
break;
}
case 'd':
{
UART1_Write_Text("RIGHT!");
if (current_duty>17) {
current_duty2--;
SetPosition2 (current_duty2);
}
break;
}
default: UART1_Write_Text("Invalid state!");
}
}



} while(1); // Endless loop

}

(Отредактировано автором: 31 Марта, 2013 - 20:01:57)

 
 Top
robohabr Post Id



Рядовой


Сообщений всего: 4
Дата рег-ции: Март 2013  



От пива пузо растет - это не спортивно, его употреблять. Вот квас другое дело ))) Или чай... Да и народ не надо провоцировать, дети как-никак
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



.

(Отредактировано автором: 31 Марта, 2013 - 20:06:15)

 
 Top
Страниц (2): [1] 2 »
« Обо всем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru