реклама на сайте
подробности

 
 
> генератор на МК, как сдвинуть фазы
paul2002
сообщение Feb 27 2006, 08:10
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 18-04-05
Пользователь №: 4 239



Есть задача: соорудить трехфазный задающий генератор со сдвигом фаз на треть периода друг относительно друга (рисунок с диаграммой прикладываю) с перспективой на большее количество фаз. Требуемый период сигнала - 25 мкс, коэф. заполнения - 0.4. Попробовал сделать на mega8(был под рукой) и уперся в то, что в лоб решить не получается - не хватает производительности. Наверное, самое простое - использовать таймер в режиме ШИМ, но их количества недостаточно и непонятно как реализовать требуемый сдвиг фаз. Может кто-нибудь сталкивался с подобной задачей и какие могут быть решения? Или надо просто брать МК мощнее? Спасибо

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MakFatum
сообщение Feb 28 2006, 02:56
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



"C сразу отметается как средство программирования. Использовать только асм и учитывать длительность команд."

А Можно узнать почему? Просто у меня будет стоять скоро похожая задача...
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 28 2006, 07:06
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(MakFatum @ Feb 28 2006, 04:56) *
А Можно узнать почему? Просто у меня будет стоять скоро похожая задача...


Во первых из-за простоты задачи.
Во вторых из-за того, что на Асм'е можно без проблем задать требуемую задержку с точностью до такта процессора. Ну и в третьих - возможность решения задачи на более дешевом МК.
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 28 2006, 09:01
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(defunct @ Feb 28 2006, 10:06) *
Цитата(MakFatum @ Feb 28 2006, 04:56) *

А Можно узнать почему? Просто у меня будет стоять скоро похожая задача...


Во первых из-за простоты задачи.
Во вторых из-за того, что на Асм'е можно без проблем задать требуемую задержку с точностью до такта процессора. Ну и в третьих - возможность решения задачи на более дешевом МК.

На 'C' IAR это тоже делаеться! Так что нет никакого особого преимущества... (просто учите язык 'C'). smile.gif
Задержки здесь не нужны. Необходимо работать по прерываниям от тайтера соответственно выбрав кварц для расчетной частоты.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
paul2002
сообщение Feb 28 2006, 09:50
Сообщение #5





Группа: Новичок
Сообщений: 10
Регистрация: 18-04-05
Пользователь №: 4 239



Цитата(BVU @ Feb 28 2006, 16:01) *
Цитата(defunct @ Feb 28 2006, 10:06) *

Цитата(MakFatum @ Feb 28 2006, 04:56) *

А Можно узнать почему? Просто у меня будет стоять скоро похожая задача...


Во первых из-за простоты задачи.
Во вторых из-за того, что на Асм'е можно без проблем задать требуемую задержку с точностью до такта процессора. Ну и в третьих - возможность решения задачи на более дешевом МК.

На 'C' IAR это тоже делаеться! Так что нет никакого особого преимущества... (просто учите язык 'C'). smile.gif
Задержки здесь не нужны. Необходимо работать по прерываниям от тайтера соответственно выбрав кварц для расчетной частоты.


Прежде всего большое спасибо откликнувшемся. smile.gif

Боюсь, что прерывания от таймера в данном случае использовать затруднительно, т.к. из диаграммы получается, что минимальный отрезок времени между соседними состояниями = 10 мксек - 8.33 мксек = 1,67 мксек, и на частоте 16 МГц от начала одного прерывания до начала следующего приходится ~26 тактов, попробовал смоделировать в протеусе - нужный промежуток получается больше(BVU, я правильно понял, что в прерывании нужно менять значение счетчика таймера для отсчета следующего отрезка времени ?).

Решил попробовать совет от BVU в реализации от defunct. думаю, что получится достаточно гибкое и точное решение. вот только придется поразбираться с асмом и AVR Studio, а то я только с ICCAVR знаком и вставки на асме не пробовал делать smile.gif
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 28 2006, 11:51
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(paul2002 @ Feb 28 2006, 12:50) *
я правильно понял, что в прерывании нужно менять значение счетчика таймера для отсчета следующего отрезка времени ?.

Совершенно верно, это самособой подразумевающиеся вещи. Счетчик инкрементируется и переходит опять в ноль по достижению реализации последнего состояния, и т.д. (и повториться все, как в старь: ...аптека, улица, фонарь smile.gif ). Как в закольцованном буфере.
А чисто для эксперимента попробуйте разогнать Atmega8 на 24 MHz... должно получиться (оговорюсь, но не для серийного производства и не для эксплуатации в экстремальных условиях окружающей среды).


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 28 2006, 20:29
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(BVU @ Feb 28 2006, 13:51) *
Совершенно верно, это самособой подразумевающиеся вещи. Счетчик инкрементируется и переходит опять в ноль по достижению реализации последнего состояния, и т.д. (и повториться все, как в старь: ...аптека, улица, фонарь smile.gif ). Как в закольцованном буфере.
А чисто для эксперимента попробуйте разогнать Atmega8 на 24 MHz... должно получиться (оговорюсь, но не для серийного производства и не для эксплуатации в экстремальных условиях окружающей среды).

Гм.. а о том что есть такой флажек как CTC1 Вы забыли? И о том что таймер может работать в режиме Output Compare - видимо тоже. Но поверте, в данном случае таймер неуместен, более внимательно посмотрите на диаграммы сигнала в посте автора. И для чего разгонять проц, если на 1Mhz с хвостиком задача автора решается.

PS: Я не противник Cи, напротив - ярый сторонник, но в данном конкретном случае C действительно неуместен. И наверное, я бы для реализции этой задачи брал бы PIC, чтобы AVR не позорить. smile.gif
Вопрос только что будет дешевле, вот смотрю по прайсам и удивляюсь Tiny13/25 стоят дешевле чем PIC12F629/675... Или MicroChip издевается или дела у него совсем плохо идут?!

Сообщение отредактировал defunct - Feb 28 2006, 22:35
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016