roboforum.ru

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


Управление сервами

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Управление сервами

Сообщение Korbofos » 20 сен 2011, 09:19

Не могу разобраться в чём проблема :cry:
Взял код (из робовики) управления сервами при помощи 4017 счётчика
Код: Выделить всёРазвернуть

uint16_t servo_position[9] = {3000 //для среднего положения

volatile uint32_t i;


SIGNAL(SIG_OUTPUT_COMPARE1A)
{
   
   static uint8_t current_servo = 1;
   
   
   static uint16_t pause = 40000;

   
   TCCR1A |= _BV(FOC1A);

   if (current_servo == 9) {
      current_servo = 0;
      OCR1A += pause;
      pause = 40000;
   } else {
      
      OCR1A += servo_position[current_servo];
      pause -= servo_position[current_servo];
      current_servo++;
   }
}


Переделал все значения под частоту 7.3728
в итоге получилось
Код: Выделить всёРазвернуть
interrupt [TIM3_COMPC] void timer3_compc_isr(void)
{
static char current_servo=1;
static unsigned int pause = 18432;

TCCR3C|=(1<<FOC3C);
       
        if (current_servo == 9)
        {
         current_servo = 0;
         OCR3C += pause;
         pause = 18432;
        }
        else
        {
         OCR3C+=servo_position[current_servo];
         pause -= servo_position[current_servo];
         current_servo++;
        }
}     
servo_position[9]={1382 //среднее положение

Пред делитель счётчика на 8
Серва работает некорректно дергается сдвигается в сторону при заданном среднем
положении :shock:
Подскажите где ошибка?
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение avr123.nm.ru » 20 сен 2011, 09:55

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

Re: Управление сервами

Сообщение Korbofos » 20 сен 2011, 11:07

Протеус кажет.
Но как так (1<<FOC3C) бит принудительного сброса?

Добавлено спустя 2 минуты 1 секунду:
Может посмотреть в железе осцилупой? Но чё то боюсь своими кривыми руками лезть...
Вложения
pr.JPG
pr.JPG (15.06 КиБ) Просмотров: 2704
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение avr123.nm.ru » 20 сен 2011, 13:03

Вот длинющий импульс похоже и колбасит вашу серву.

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

Re: Управление сервами

Сообщение Korbofos » 20 сен 2011, 14:31

Счётчик неправильно считает?
Код: Выделить всёРазвернуть
#define OCR3C (*(unsigned int *) 0x82) //прописал сам как 16 битовую переменную может //здесь косяк?
//файл mega128.h
#define OCR3CL (*(unsigned char *) 0x82)
#define OCR3CH (*(unsigned char *) 0x83)

//--------------------------------
TCCR3C|=(1<<FOC3C);
       
        if (current_servo == 9)
        {
         current_servo = 0;
         OCR3C += pause;
         pause = 18432;
        }
        else
        {
         OCR3C+=servo_position[current_servo];
         pause -= servo_position[current_servo];
         current_servo++;
        }



проект выложить?
Вложения
12.JPG
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение avr123.nm.ru » 20 сен 2011, 14:47

Давно пора. Вам нужны импульсы шириной 1500 мкС каждые 20000 мкС а у вас меандр похоже. Время примерное.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Управление сервами

Сообщение Korbofos » 20 сен 2011, 14:56

Вот оно.
Вложения
ADC.rar
(127.82 КиБ) Скачиваний: 0
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение avr123.nm.ru » 20 сен 2011, 14:59

А где у вас 4017 ?

добавил 4017 - servo импульсы стали нормальные, но все слишком долго даже при 8 МГц такта.
Вложения
servo_avr_hc4017.rar
(253.53 КиБ) Скачиваний: 0
servo_4017.png
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Управление сервами

Сообщение Korbofos » 20 сен 2011, 15:22

Дк выходящий сигнал с мк уже не тот.

Добавлено спустя 1 минуту 27 секунд:
avr123.nm.ru писал(а):А где у вас 4017 ?

добавил 4017 - servo импульсы стали нормальные, но все слишком долго даже при 8 МГц такта.

Пересчитать?

Добавлено спустя 9 минут 31 секунду:
Почему 1 на выходе сразу не сбрасывается(обведено кружком)?
TCCR3C|=(1<<FOC3C); Этот бит в прерывании сразу должен сбрасывать 1 в 0.
Вложения
11.JPG
23.JPG
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение Korbofos » 20 сен 2011, 20:01

Почему то не срабатывает сброс ножки в 0??????
Код: Выделить всёРазвернуть
TCCR3C|=(1<<FOC3C);
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение ALHIMIK » 20 сен 2011, 20:31

потому что CVAVR
сам с таким сталкивался , решение которое нашел - дёргать лапки программно
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

Re: Управление сервами

Сообщение avr123.nm.ru » 20 сен 2011, 20:37

Korbofos писал(а):Почему то не срабатывает сброс ножки в 0??????
Код: Выделить всёРазвернуть
TCCR3C|=(1<<FOC3C);
Дак в PROTEUS разверните АСМ подстрочник под Си кодом и посмотрите почему.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Управление сервами

Сообщение Korbofos » 20 сен 2011, 21:06

Asm я незнаю :cry:
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение avr123.nm.ru » 20 сен 2011, 21:08

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

Re: Управление сервами

Сообщение Korbofos » 20 сен 2011, 21:11

Вот.
Вложения
ADC.rar
(129.94 КиБ) Скачиваний: 0
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

След.

Вернуться в Микроконтроллеры

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

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