Среда, 11.12.2024, 15:54
| RSS
[SEARCH_TITLE]
[SEARCH_FORM]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Архив - только для чтения
Нужна помощь
GussiffДата: Пятница, 07.03.2008, 23:51 | Сообщение # 1








Зарегистрирован 20.02.2008
Группа: Модераторы
Сообщений: 19
Город: Москва
Статус: Offline
Нужна информация по принципам и путям решения прямой задачи кинематики 3х звенного манипуляционного робота, работающего в декартовой системе координат.

Если у кого-нибудь есть информация поделитесь ей пожалуйста !


Не бойся ничего

Сообщение отредактировал Gussiff - Суббота, 08.03.2008, 14:24
 
GussiffДата: Суббота, 08.03.2008, 14:35 | Сообщение # 2








Зарегистрирован 20.02.2008
Группа: Модераторы
Сообщений: 19
Город: Москва
Статус: Offline
Прямая задача кинематики заключается в определении параметров положения рабочего органа по известным смещениям всех звеньев манипулятора из их начальных положений. Имеет единственное решение.

Имеется робот вот такой http://robotsspace.ucoz.ru/news/2008-02-23-66 ( кстати на фотке Учебный робототехнический комплекс УРТК, разработанный в МИРЭА) состоящий из 3х линейных звеньев. И для него надо эту прямую задачу решить.


Не бойся ничего
 
GroverДата: Воскресенье, 09.03.2008, 12:16 | Сообщение # 3








Зарегистрирован 04.02.2008
Группа: Опытные
Сообщений: 130
Город: Воронеж
Статус: Offline
я так думаю, что эта тема не для программирования на C++

А вообще тут обычная геометрия - углы поворота, формулы зависимостей одного угла от другого и т.д.


--------
GroverSuper.ucoz.net - мои странички.
 
ShyrikДата: Среда, 19.03.2008, 20:01 | Сообщение # 4








Зарегистрирован 18.01.2008
Группа: Администраторы
Сообщений: 47
Город: Тула
Статус: Offline
доброго времени суток
народ памагай есть среди вас хорошие программеры а? нужно написать програмку генератор для моста/полу моста со следующими функцыями
1)частота в пределах1-999 кгц
2)пайза на нуле 0-99% от импульса (дедтайм)
3)возможность следования импусов пачками
4)вывод информации на жк дисплей
5)регулирование всех параметров кнопками во время работы
ну как оно ваапще осуществимо? а на компе с выводом сигнала через какой либо порт
я понинимаю работа кропотливая и не благодарная но хотябы савет
спасибо
 
GroverДата: Четверг, 20.03.2008, 08:22 | Сообщение # 5








Зарегистрирован 04.02.2008
Группа: Опытные
Сообщений: 130
Город: Воронеж
Статус: Offline
уууу....
Работа вполне выполнима, хотя посидеть придется.

Подключение к ПК через любой порт возможно - во многих книгах есть примеры.
Вывод на дисплей... легко (азы тут: http://groversuper.ucoz.ru/publ/2-1-0-2 ) [хотя я встречал inc файлы для свободной работы без заморочек]
Частота - ШИМ
пачками - ШИМ управляется дополнительным таймером или вкл/выкл из программы
пайза - а это чё?
регулировать параметры - либо подключать к компу и писать прогу (удобно) либо кнопочки - это уже целая замороч в проге МК (хотя прикольно)
Написать это все могу и я, НО нужны более точные требования, много времени... лучше по кусочкам сам разберись

прям по твоим пунктам: начни с ШИМ! - (можешь дождаться мою статью smile скоро опубликую)


--------
GroverSuper.ucoz.net - мои странички.
 
SpaceДата: Среда, 26.03.2008, 15:14 | Сообщение # 6








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Мож кто поможет. Вообщем программа, которая ниже рабочая уже проверял, но нужно сделать чтобы сначало робот ехал вперёд. У меня это не получается. Если без езды вперёд, нажать любой из датчиков, то он срабатывает дважды и продолжает крутится на месте, нажать другой тоже самое. Вот. Мне нужно сделать так чтоб срабатывал датчик только раз, а не дважды и продолжал после крутиться и чтоб в программе нормально всё компилировалось в месте с этим куском "едим вперёд". При компиляции, если
добовлять вот эти строчки:
Code
{
// ------------------ едим вперёд ------------------

PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
}

то выводится следующие после компиляции:

Вот программа:
Code
#include <avr/io.h>
#include <avr/interrupt.h> //для доступа к функции sei()
#include <avr/signal.h> //для доступа к макросу INTERRUPT     
#define OUT PORTC    
#define  MOTOR  PC1    
#define  MOTOR  PC2    
#define  MOTOR  PC3     
#define  MOTOR  PC4    
#define IN PIND    
#define BUMPER PD2    
#define BUMPER PD3    

//------------------------------------------------------------------------------    
// Задержка t х 10ms    
//------------------------------------------------------------------------------    
#define F_CPU 8000000    
    #define K_DELAY_10ms   F_CPU/600
void Delay_10ms(unsigned short t) {    
     unsigned int i;    
     if (t==0) return;    
     while (t--) for(i=0;i<K_DELAY_10ms; i++);    
}    
{
// ------------------ едим вперёд пока нет сигнала от датчиков ------------------
PORTC |=  _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |=  _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
}
SIGNAL(SIG_INTERRUPT0) //INT0
{
// ------------------ отъезд назад ------------------

PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C

Delay_10ms(150);  //разворот на 45 градусов, если ставить 300, то на 90
// --------------------------------------------------

//  разворот вправо

PORTC &= ~_BV(PC1); // установить "1" на линии 1 порта C
PORTC |= _BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C

Delay_10ms(150);    
// --------------------------------------------------
}
SIGNAL(SIG_INTERRUPT1) //INT1
{
// ------------------ отъезд назад ------------------

PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C

Delay_10ms(150);    
// --------------------------------------------------

//  разворот вправо

PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C

Delay_10ms(150);    
// --------------------------------------------------
}

int main(void) // начало основной программы
{
DDRC = 0xff; // все выводы порта C сконфигурировать как выходы
DDRD  = 0x00;  // назначаем все линии порта D на вход    
PORTD = 0xff;  // подключаем внутренние нагрузочные резисторы    
outb(GIMSK, (1<<INT0)|(1<<INT1)); // разрешаем прерывания int0 и int1
outb(MCUCR, (1<<ISC01)|(1<<ISC11)); // запрос на прерывание - по спадающим фронтам на int0 и int1
sei(); // общее разрешение прерываний
while(1) ; // ожидаем внешнего прерывания
}


Если есть идеи предлагайте буду пробовать happy
Прикрепления: 4269687.jpg (123.5 Kb)
 
GroverДата: Понедельник, 31.03.2008, 08:18 | Сообщение # 7








Зарегистрирован 04.02.2008
Группа: Опытные
Сообщений: 130
Город: Воронеж
Статус: Offline
ошибка в построении кода:
Code
while (t--) for(i=0;i<K_DELAY_10ms; i++);
}
{
// ------------------ едим вперёд пока нет сигнала от датчиков ------------------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
}

После while походу скобка не в ту сторону стоит.


--------
GroverSuper.ucoz.net - мои странички.
 
ПафДата: Вторник, 30.09.2008, 10:48 | Сообщение # 8








Язык программированя: C, ASM, Pascal
Зарегистрирован 10.09.2008
Группа: Новички
Сообщений: 15
Город: Тула
Статус: Offline
Quote
имеется переменая с числом например А=173
как это число разбить и записать в разные переменые?
например В=1 К=7 С=3

Val = A; //- временная переменная чтоб не попортить A
B = K = C = 0; //- B - сотни / K - десятки / С - единицы

Code
if (Val >= 100)
{
B = Val / 100;
Val = Val % 100;
}

if (Val >= 10)
{
K = Val / 10;
Val = Val % 10;
}

C = Val;

Написал сходу, проверь..


Сообщение отредактировал Паф - Вторник, 30.09.2008, 10:49
 
DoniakДата: Суббота, 04.10.2008, 22:02 | Сообщение # 9








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
спасиба Паф.

а вот ищё сам додумался yes3

Code
unsigned char В,К,С;
unsigned char А=173;

В=А\100;                    // В=1,73   поскольку переменная char  остаток откинулся, получили 1
К=(А-(В*100))\10;                             //  К=7,3    поскольку переменная char  остаток откинулся, получили 7  
С=(А-(В*100))-(К*10);                      //  С=3       получили 3

а вот Digit предложил с робофорума (довольно интересный алгоритм и простой) smile3

Code
int abc = 54173;
char digit[6];
for(char c=0; c<6; c++){ digit[c]=abc%10; abc=abc/10; };
 
Bass85Дата: Воскресенье, 01.03.2009, 01:40 | Сообщение # 10








Зарегистрирован 12.02.2009
Группа: Опытные
Сообщений: 422
Статус: Offline
Quote
помогите, пожалуйста, новичку. гуглем умею пользоваться, но библиотеки для дисплея LM016L под WinAVR не могу найти... sad

А и не нужно искать библиотеку под конкретный! в кодвижен просто подключаеш так #include <lcd.h> для винавр вроди также я посмотрел там в нем обычный контроллер LD44780 yes3
 
DoniakДата: Воскресенье, 05.04.2009, 14:29 | Сообщение # 11








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
Ктобы смог объяснить именно процесс происходящий в этих строчках, а именно в скобках?
Code
#define LED1            (1<<0)  /* PA0 */   
#define LED2            (1<<1)   /* PA1  */

<<, >> обозначают здвиг, а вот принцып их роботы не понимаю особенно в выделином фрагменте кода.

 
Bass85Дата: Воскресенье, 05.04.2009, 15:44 | Сообщение # 12








Зарегистрирован 12.02.2009
Группа: Опытные
Сообщений: 422
Статус: Offline
Операции сдвига осуществляют смещение значения первого операнда влево или вправо на количество, битов, задаваемое вторым операндом. Оба операнда должны быть целыми величинами. Выполняются обычные арифметические преобразования. При сдвиге вправо метод заполнения освобождающихся левых битов звисит от типа первого операнда. Если тип usigned, то свободные левые биты устанавливаются в ноль. В противном случае они заполняются копией знакового бита. Результат операции сдвига не определен, если второй операнд отрицательный.
Это с книги пособие по кодвижен smile3
Как я понимаю в том участке кода лажа. (сдвинуть единицу в лево на ноль битов wacko lol )
 
devilДата: Понедельник, 13.07.2009, 15:37 | Сообщение # 13








Зарегистрирован 18.01.2009
Группа: Новички
Сообщений: 2
Город: рыбница
Статус: Offline
Добрый день. подскажите, пожалуйста, как сделать преобразование типов из int в char?
 
DoniakДата: Воскресенье, 09.08.2009, 23:15 | Сообщение # 14








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
int i;
char c;

c = (char) i;

Добавлено (09.08.2009, 23:15)
---------------------------------------------
Как в CVAVR реализовать вызов функции функцией ?

ну типа такова :)

Code
void main() {
Функцыя1
}

Функцыя1{
...
Функцыя2
...
}

Функцыя2{
...
}
 
Bass85Дата: Понедельник, 10.08.2009, 11:21 | Сообщение # 15








Зарегистрирован 12.02.2009
Группа: Опытные
Сообщений: 422
Статус: Offline
Посмотри в книге пособие по CodeVisionAVR там точно есть я бы написал так под рукой нет(она дома), а так не помню потому что не пользовался таким
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: