roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 16:44

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 13:02 
Не в сети
Аватара пользователя

Зарегистрирован: 05 ноя 2009, 10:10
Сообщения: 314
Откуда: Санкт-Петербург vs Мурманск
Skype: sergey199100
прог. языки: С, C++, C++++, Delphi, Pascal, Asm
Два кода, представленые ниже, это то, пока что я умею. Если с программным(delau_us(...); PORTx.x^=1;) ШИМом я еще более менее разобрался, то с аппаратным не очень.

Программный ШИМ:
Код:
int i;
for(i=0;i!=10000;i++)
{
PORTC.6^=1;
if(i<3000)
   {
   PORTx.x^=1;
   delay_us(1300);
   }
if(i>3000 && i<6000)
   {
   PORTx.x^=1;
   delay_us(1500);
   }
}
while(1);




Аппаратный ШИМ:

Код:
#include <mega32.h>



void main(void)
{
PORTD=0x00;
DDRD=0x30;


TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;


TCCR1A=0xA3;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;


MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;


ACSR=0x80;
SFIOR=0x00;

while (1)
      {
     
      // вывести ШИМ около 25% на PD4
OCR1BH = 0x00;
OCR1BL = 0xFF; // PWM(PD4) 255/10.23 = 24.9(%)
OCR1AH = 0x00;
OCR1AL = 0x00;
      };
}


я вчера вроде как вкурил то, например это OCR1AH и OCR1AL (L-младший, H-старший), и то, что в них записывается цифра от 0 до 1023. в шестнадцетеричной системе. Вобщем я запустил шим на обоих ножках PD4/5. Все крутится. Причем оба в одну сторону. Непонятно вот что, судя по формуле: число от 0...1023/10.23= W ШИМА в %. Когда я "изменял" мощьность (W) этого шима, например, записывая цифру 500(01ff) то разницы в скорости я них не заметил. Что я не так сделал ? И как заставить серву в другую сторону крутиться ?

_________________
РОБОТОТЕХНИКА для каждого СВОИМИ РУКАМИ - SERVODROID.RU [SERVODROID.RU-Робототехника для начинающих своими руками]


Последний раз редактировалось S-T-A-L-K-E-R 13 авг 2010, 13:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помагите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 13:09 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Серва управляется длиной импульсов. Подробно в задаче-упражнении 13 обучалки по AVR - http://proavr.narod.ru/z13.htm

Среднее положение servo это ШИМ около 7.5 % с частотой около 50 Гц.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помагите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 13:44 
Не в сети
Аватара пользователя

Зарегистрирован: 05 ноя 2009, 10:10
Сообщения: 314
Откуда: Санкт-Петербург vs Мурманск
Skype: sergey199100
прог. языки: С, C++, C++++, Delphi, Pascal, Asm
Т.е. если я заместо ICR1H=0x00; ICR1L=0x00; запишу так: ICR1=9216; (либо так: ICR1H=0x16;ICR1L=0x92;), то получу частоту в 50 Гц ? И потом запишу в OCR1BH = 0x4С; OCR1BL = 0x00; то серва на PORTD.4 будет находится в состоянии покоя ? (1500)

_________________
РОБОТОТЕХНИКА для каждого СВОИМИ РУКАМИ - SERVODROID.RU [SERVODROID.RU-Робототехника для начинающих своими руками]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 13:57 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Я немогу в уме прикинуть 16-ричные числа :lol: но вроде меньше 1 % получается.

Если таймер до 9216 считает при 50 Гц, то надо 691 в регистр ШИМ записывать пожалуй.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 14:06 
Не в сети
Аватара пользователя

Зарегистрирован: 05 ноя 2009, 10:10
Сообщения: 314
Откуда: Санкт-Петербург vs Мурманск
Skype: sergey199100
прог. языки: С, C++, C++++, Delphi, Pascal, Asm
avr123.nm.ru
Я тоже не могу ) Хотя учили... Пользуюсь калькулятором инженерным ;)
Я читал оба курса, но не один из них в полной мере не поясняет как всеже выставить все правильно чтоб работало ( Либо я еще не совсем это понимаю. Можешь в кратце объяснить как заставить серву крутитьсяв разные стороны, стоять. Дело в том что я пишу в CvAVR, а мне дали код из WinAVR, и мой компилятор не понимает что такое OCR1B...и тд. Может надо дерективу прописывать... незнаю.

_________________
РОБОТОТЕХНИКА для каждого СВОИМИ РУКАМИ - SERVODROID.RU [SERVODROID.RU-Робототехника для начинающих своими руками]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 14:16 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Вы задачу 13 то смотрели ? там как раз 8 серв ATmega16 крутит в родном CVAVR :D

Таймеры лучше настраивать мастером ICC - более детально все расписано. Картинка в задаче 6.

Если у вас 9216 дает 50 Гц ( смотрите в PROTEUS или в Студии или в VMALB), то меньше 691 вал против часовой должен крутится а больше - по часовой.

Добавлено спустя 5 минут 8 секунд:
S-T-A-L-K-E-R писал(а):
не поясняет как всеже выставить все правильно чтоб работало

Надо внимательно прочитать и проделать то что в задаче по ШИМ - задача 8 - http://proavr.narod.ru/z8.htm

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 14:22 
Не в сети
Аватара пользователя

Зарегистрирован: 05 ноя 2009, 10:10
Сообщения: 314
Откуда: Санкт-Петербург vs Мурманск
Skype: sergey199100
прог. языки: С, C++, C++++, Delphi, Pascal, Asm
ШИМ - задача 8
-ее я вчера и курил весь день

Добавлено спустя 53 секунды:
вот прога, как ее переделать под квавр :

Код:
#include "defines.h"
#include <avr/interrupt.h>
#include <util/delay.h>

int main(void)
{
  DDRC=0x20;
  DDRD=0x30;

  //Init PWM for SERVO Control on PD4, PD5
  //PWM, Phase and frequency correct, TOP=ICR1
  TCCR1A=0xA0; //clear on up-counting, set on down-counting
  TCCR1B=0x12; //Clock prescaler 1/8
  ICR1=9216;  //Set 50Hz frequency   

  while(1){

    for(uint16_t i=750; i<2250; i+=10){ //vrasheniye serv vpered

      //Set servo A pos:
     uint16_t servoPosA=i;
      OCR1A=servoPosA*23/50;

     //Set servo B pos:
     uint16_t servoPosB=2250+750-i;
     OCR1B=servoPosB*23/50;

     //Wait for a 20ms
     _delay_ms(20);
    };

    for(uint16_t i=2250; i>750; i-=10){ //vrasheniye serv nazad

     //Set servo A pos:
      uint16_t servoPosA=i;
     OCR1A=servoPosA*23/50;

     //Set servo B pos:
     uint16_t servoPosB=2250+750-i;
     OCR1B=servoPosB*23/50;
     //Wait for a 20ms
     _delay_ms(20);
    };
  };
   
}


Добавлено спустя 53 секунды:
только в условии не нужно серву вращать на определенный градус, только в одну из сторон.

_________________
РОБОТОТЕХНИКА для каждого СВОИМИ РУКАМИ - SERVODROID.RU [SERVODROID.RU-Робототехника для начинающих своими руками]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 15:18 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Наверно так:

Код:
#include <"процессор ваш".h>
#include <delay.h>

int main(void)
{
  DDRC=0x20;
  DDRD=0x30;

  //Init PWM for SERVO Control on PD4, PD5
  //PWM, Phase and frequency correct, TOP=ICR1
  TCCR1A=0xA0; //clear on up-counting, set on down-counting
  TCCR1B=0x12; //Clock prescaler 1/8
  ICR1=9216;  //Set 50Hz frequency   

  while(1){

    for(uint16_t i=750; i<2250; i+=10){ //vrasheniye serv vpered

      //Set servo A pos:
     uint16_t servoPosA=i;
      OCR1A=servoPosA*23/50;

     //Set servo B pos:
     uint16_t servoPosB=2250+750-i;
     OCR1B=servoPosB*23/50;

     //Wait for a 19 ms
     delay_ms(19);
    };

    for(uint16_t i=2250; i>750; i-=10){ //vrasheniye serv nazad

     //Set servo A pos:
      uint16_t servoPosA=i;
     OCR1A=servoPosA*23/50;

     //Set servo B pos:
     uint16_t servoPosB=2250+750-i;
     OCR1B=servoPosB*23/50;
     //Wait for a 19 ms
     delay_ms(19);
    };
  };
   
}

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 16:46 
Не в сети
Аватара пользователя

Зарегистрирован: 05 ноя 2009, 10:10
Сообщения: 314
Откуда: Санкт-Петербург vs Мурманск
Skype: sergey199100
прог. языки: С, C++, C++++, Delphi, Pascal, Asm
Нет, конечно не так, от того что вы изменили паузу с 20 мкс на 19, и подключили две дерективы, ничего не изменится :D Вы хорошо разбераетесь в компиляторе CvAVR ? Просто он не все поймет из этой программы. Например:
1. uint16_t servoPosA=i; заменяем на int servoPosA=i;
2. OCR1B=servoPosB*23/50; тут компелятор не знает что это за "символ" OCR1B/A ! Я знаю что OCR1B/A состоит из двух регистров: OCR1AH (cтарший бит) и OCR1AL(младший бит). И в них записывается значение этой формулы: OCR1B=servoPosB*23/50; и это значение выдается на ножку порта D5.
3. Так как, уважаемые, заставить компилятор CvAVR заставить видеть OCR1B/A ? :)

_________________
РОБОТОТЕХНИКА для каждого СВОИМИ РУКАМИ - SERVODROID.RU [SERVODROID.RU-Робототехника для начинающих своими руками]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 16:50 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Можно в хидере разрешить доступ к OCR1B по аналогии с другими 16 битными регистрами.


Но лучше просто записать число в две части регистра OCR1B

servoPosB = servoPosB*23/50;

теперь servoPosB записать в правильной последовательности в старший и младший байт.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 16:55 
Не в сети
Аватара пользователя

Зарегистрирован: 05 ноя 2009, 10:10
Сообщения: 314
Откуда: Санкт-Петербург vs Мурманск
Skype: sergey199100
прог. языки: С, C++, C++++, Delphi, Pascal, Asm
А что именно записывать в BH и BL я не совсем понял ?
OCR1Bl = servoPosB*23/50;
OCR1BH = servoPosB;
А точнее, как вытащить оттуда это число и расфасовать по H & L ?

_________________
РОБОТОТЕХНИКА для каждого СВОИМИ РУКАМИ - SERVODROID.RU [SERVODROID.RU-Робототехника для начинающих своими руками]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 13 авг 2010, 17:02 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Язык Си для микроконтроллеров AVR и PIC - http://proavr.narod.ru/05.htm

Код:
servoPosB = servoPosB*23/50;

OCR1BL = (char)servoPosB;
OCR1BH = (char)(servoPosB >> 8);

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 16 авг 2010, 19:09 
Не в сети
Аватара пользователя

Зарегистрирован: 05 ноя 2009, 10:10
Сообщения: 314
Откуда: Санкт-Петербург vs Мурманск
Skype: sergey199100
прог. языки: С, C++, C++++, Delphi, Pascal, Asm
У меня компилятор ругается на запись ICR1=ххххх; :o Пишет, что не "индифицированный символ". Что делать в таком случае ? Компилятор CvAVR

Добавлено спустя 4 минуты 32 секунды:
MCU-ATmega32L

Добавлено спустя 16 минут 13 секунд:
Ай, сам разобрался, надо тоже разделить на старший и младший регистр

_________________
РОБОТОТЕХНИКА для каждого СВОИМИ РУКАМИ - SERVODROID.RU [SERVODROID.RU-Робототехника для начинающих своими руками]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 16 авг 2010, 19:36 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
а в даташите то он есть ?

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с аппаратным и программным шимом
СообщениеДобавлено: 16 авг 2010, 20:10 
Не в сети
Аватара пользователя

Зарегистрирован: 05 ноя 2009, 10:10
Сообщения: 314
Откуда: Санкт-Петербург vs Мурманск
Skype: sergey199100
прог. языки: С, C++, C++++, Delphi, Pascal, Asm
Input Capture Register (ICR1) are all 16-bit registers. Special procedures must be followed when
accessing the 16-bit registers.

_________________
РОБОТОТЕХНИКА для каждого СВОИМИ РУКАМИ - SERVODROID.RU [SERVODROID.RU-Робототехника для начинающих своими руками]


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


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

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO