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

 
 
> генератор на МК, как сдвинуть фазы
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
Ответов
defunct
сообщение Feb 27 2006, 08:42
Сообщение #2


кекс
******

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



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



здесь таймер не подходит, да и не нужен он.. C сразу отметается как средство программирования. Использовать только асм и учитывать длительность команд. Коэффициен заполнения в моем примере равен 0.33, думаю вы по аналогии сделаете требуемый. Imho самое сложное в этой задаче будет подборка кварца smile.gif

Код
.def AL = R24

.equ Phase0 = 1
.equ Phase1 = 2
.equ Phase2 = 4

.org 0
   ldi  AL,  $FF
   out DDRB, AL

PhaseShiftLoop:
   ldi  AL, Phase0
   out  PortB, AL
   nop
   nop
// столько раз пишем nop сколько требуется для обеспечения задержки в 25/3 мкс - Tout - Tldi
   ldi  AL, Phase1
   out  PortB, AL
   nop
   nop
// столько раз пишем nop сколько требуется для обеспечения задержки в 25/3 мкс - Tout - Tldi
   ldi  AL, Phase2
   out  PortB, AL
   nop
   nop
// столько раз пишем nop сколько требуется для обеспечения задержки в 25/3 мкс - Tout - Trjmp - Tldi
   rjmp PhaseShiftLoop


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



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:09
Рейтинг@Mail.ru


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