Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 04.03.2013, 10:21   #11 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Можно и поправку, но с учетом задержки на выполнение доп команд в каждом прерывании, импульс не поведет.
Цифра 73... получается так (указано в скобках) 4800000/256=18750 - кол-во приращений таймером в секунду, где 4800000 - тактовая частота 4,8МГц, 256 делитель, теперь 18750/256=73...Гц, где 256 - колво приращений при которых произойдет переполнение счетчика таймера, а 73Гц - частота ШИМа.
Но 73Гц - великовато для сервака - перегреется и сгорит (данный эфект уже получен ) ).
korsaj вне форума   Ответить с цитированием

Старый 04.03.2013, 10:21
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Аналогичные проблемы уже обсуждались ранее

Очень нужна подсказка по блоку питания
Рекурсия, язык с++
Язык программирования F#
Функции, язык Си

Старый 12.03.2013, 08:54   #12 (permalink)
Suharev
Member
 
Регистрация: 23.02.2013
Сообщений: 1,353
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 5285
По умолчанию

Наткнулся еще на одну статью.
Понятно как расчеты делаются, не понятно только как она работает.
Листинг программы:
Код:
#include <avr/io.h>
#include <util/delay.h>

//Что делает эта функция? 
void Wait()
{
    uint8_t i;
    for(i=0;i<50;i++)
    {
        _delay_loop_2(0);
        _delay_loop_2(0);
        _delay_loop_2(0);
    }

}
void main()
{
    //Ну это мне уже понятно, настроки таймеров, в даташите имеется таблица.
    TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);             //NON Inverted PWM
    TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10);    //PRESCALER=64 MODE 14(FAST PWM)

    //Вот это, как я понял, задает интервал всего импульса? Т.е. тот самый такт в 20мс при частоте 50Гц.
    ICR1=4999;    //fPWM=50Hz (Period = 20ms Standard).

    DDRD|=(1<<PD4)|(1<<PD5);    //Тоже ясно, выходы.

    while(1)
    {
        //Ну передача значения в OCR1A тоже ясна, с помощью этого задается ширина импульса.
        OCR1A=97;    //0 degree
        Wait();         //Зачем вызываем эту функцию? Что она делает?

        OCR1A=316;    //90 degree
        Wait();

        OCR1A=425;    //135 degree
        Wait();

        OCR1A=535;    //180 degree
        Wait();
    }
}
Suharev вне форума   Ответить с цитированием
Старый 12.03.2013, 10:17   #13 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Задержка перед новым значением угла. Если ее убрать то сервак не успеет развернуть ось.
korsaj вне форума   Ответить с цитированием
Старый 12.03.2013, 12:48   #14 (permalink)
Suharev
Member
 
Регистрация: 23.02.2013
Сообщений: 1,353
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 5285
По умолчанию

Т.е. в данной программе атмега16 используется только для поворота сервы и ничего кроме?
_delay_loop_2(0) - пока не сталкивался с таким оператором, понятно что задержка, но на сколько, учитывая что ему передается ноль, несколько тактов?
Suharev вне форума   Ответить с цитированием
Старый 12.03.2013, 15:27   #15 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Да похоже это не библиотечная функция, кто-то сам ее написал. Все функция Wait() должна занимать 1-2С.
Да, чуть не забыл. Обратите внимание в данной программе частота шим задается верхним переделом переполнения таймера (регистр ICR1).
korsaj вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 12.03.2013, 15:46   #16 (permalink)
Suharev
Member
 
Регистрация: 23.02.2013
Сообщений: 1,353
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 5285
По умолчанию

Будем пробовать.
Suharev вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:52.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.