roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: ШИМ -> синус
СообщениеДобавлено: 19 апр 2009, 18:01 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Вот такое дело. Есть АВР с частотой 9,6 МГц. Можно выбрать и 4,8 МГц. Это дело поправимое. Необходимо с помощью ШИМа сгенерить синус 50 Гц. Моделирую пока в Протеусе, используя мегу16. Потом надо бует перенести код на Тини13. Код я написал. Только вот точность никудышняя. Ну никак не получается 50 Гц. Решено было использовать 64 отсчета для синуса.

Код:
char mas[]={128,131,....,116,119,122,125}; //тут 256 значений для синуса

int i=0;
const int size=(sizeof(mas)/sizeof(char));
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
   if(i<=size-1){
    OCR0=mas[i];
    i+=4;
  }
  else(i=0);
}

void main(void)
{
DDRB.3=1;

TCNT0=0;
OCR0=0;

TCCR0=(0<<7 )| (1<<6) | (1<<5) | (1<<4) | (1<<3) | (0<<2) | (1<<1) | (1<<0);
TIMSK=(1<<0);

#asm("sei")
while (1)
      {      };
}


Вот скриншот из Протеуса. Красный синус это из генератора я завел - 50 Гц.
Вложение:
Комментарий к файлу: Протеус
1.JPG
1.JPG [ 132.5 КиБ | Просмотров: 4197 ]


Вложение:
Комментарий к файлу: Вот файл протеуса и прошивка
prot.rar [12.76 КиБ]
Скачиваний: 22

Подскажите плиз как бы этот синус на 50 Гц настроить :)


Последний раз редактировалось snayperAlfa 19 апр 2009, 19:23, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ -> синус
СообщениеДобавлено: 19 апр 2009, 18:52 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
А почему в коде одно значение TCCR0, а в прошивке - другое?

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ -> синус
СообщениеДобавлено: 19 апр 2009, 19:22 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Забыл поменять


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ -> синус
СообщениеДобавлено: 19 апр 2009, 21:10 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Можно вот так сделать:


Код:
uint32_t phase = 0;
uint8_t next = 0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    OCR0 = next;
    phase += 45812985;
    next = mas[phase >> 24];
}

На частоте кварца 9,6 МГц будет 50 Гц. Подробно как это работает можно почитать здесь: http://www.telesys.ru/electronics/projects.php?do=p035

Только правильно выставь предделитель таймера на 8

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ -> синус
СообщениеДобавлено: 19 апр 2009, 22:31 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Error: D:\Ìèêðîêîíòðîëåððû\Ïðîåêòû\Sinus with PWM\experimento.c(6): missing '('

Выдает ошибку когда хочу обьявить тип данных uint

Добавлено спустя 20 минут 23 секунды:
ХВАЛА ТЕБЕ blindman :good: :Bravo:
А я весь день бьюсь над этой задачей.
Заменил uint на unsigned long int
:good: :good: :Yahoo!:

Добавлено спустя 2 минуты 19 секунд:
Осталось понять что это за формула такая хитрая

Добавлено спустя 17 минут 22 секунды:
Теперь попробую перенести код на Тини13. По идее он ведь не должен сильно изменится?

Добавлено спустя 7 минут 21 секунду:
От я лопухнулся...
В протеусе оказывается есть ТИНИ13. Блин. Надо было сначала с нее и начинать. Ну нечего буду портировать код :D


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

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


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

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


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

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