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

 
 
> Выбор AVR микроконтроллера для 5ти фазного ШИМ., Есть ли модели с 5 регистрами сравнения для одного таймера?
-=TRO=-
сообщение Oct 25 2014, 15:58
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 24-10-07
Из: zp.ua
Пользователь №: 31 690



Хочу сделать контроллер для пятифазного моторчика BLDC. Имею опыт программирования только на ассемблере и вариациях бейсика для AVR. Програмно ШИМить как то не очень хочется. А процессоров которые могут синхронно пять аппаратных каналов ШИМ не встречал, так что бы от одного таймера пятью регистрами сравнения. Может я пропустил что нибудь, буду рад подсказке в сторону какого контроллера смотреть.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
-=TRO=-
сообщение Oct 25 2014, 19:12
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 24-10-07
Из: zp.ua
Пользователь №: 31 690



Жаль с ATxmega не знаком, по большому счету это не проблема. Однако я не совсем понял, зацепить таймеры можно будет аппаратно, или прийдется выныривать в программу по прерыванию в начале цикла ШИМ первого таймера чтобы сбросить и запустить второй таймер?

Сообщение отредактировал -=TRO=- - Oct 25 2014, 20:07
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 25 2014, 21:55
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(-=TRO=- @ Oct 25 2014, 23:12) *
Жаль с ATxmega не знаком, по большому счету это не проблема. Однако я не совсем понял, зацепить таймеры можно будет аппаратно, или прийдется выныривать в программу по прерыванию в начале цикла ШИМ первого таймера чтобы сбросить и запустить второй таймер?


Зацепить можно (и нужно) аппаратно, в том-то и дело. У Х-Мег есть, так называемая, система событий, позволяющая произвести коммутацию заранее, чтобы не использовать прерывания.

С точки зрения програмиста это делается просто - записать правильные биты в два регистра. Что на ассеблере сделать ничуть не сложнее, чем на С/С++.

Например, выберем 1-ый канал системы событий (их всего где-то 7 или 8):
EVSYS.CH1MUX = EVSYS_CHMUX_TCC0_CCA_gc; // это я так бит выставила
где:
EVSYS.CH1MUX - регистр системы событий, указующий откуда событие входит в канал
EVSYS_CHMUX_TCC_CCD_gc - константа из одного бита, указующая, что входящим событием является совпадение в канале D (4-ый) таймера C (таймеры имеют имена портов на которые могут генерировать ШИМ, на порту С их 2 штуки).
Знак равенства, т.к. вход будет только один.

TCC1.CTRLD = TC_EVACT_RESTART_gc | TC_EVSEL_CH1_gc; // это я так два бита выставила
где:
TCC1.CTRLD - регистр управления ДРУГИМ таймером (первый был TCC0, а этот TCC1).
TC_EVACT_RESTART_gc | TC_EVSEL_CH1_gc - константа из двух бит, указующая, что таймер надо перезапустить от 1-го канала системы событий.

Вот и всё. Теперь 4-ый (D) канал таймера TCC0 будет перезапускать таймер TCC1, на котором можно организовать свои ШИМы.

Тем не менее, тут есть определенная сложность с тем, что второй таймер станет считать до своего перезапуска. Поэтому я бы сделала чуть сложнее, но зато надежнее - задействовала 3 тамера:
3-ый таймер генерит тактовые импульсы в канал событий, а 1-ой и 2-ий таймеры от этого канала событий считают (инкрементируются).
После этого на 1-ом таймере организуете 4 ШИМа, а на 2-ем еще один. Хотя можно на 1-ом организовать 3 ШИМа, а на 2-ом остальные 2. Оно без разницы - лишь бы в сумме было 5.
При этом 3-ий таймер можно использовать как регулятор скорости, поскольку только от его темпа будет зависеть скорость работы ШИМ-генерирующих таймеров. При этом ковырять уровни сравнения не потребуется.
Получится что-то примерно такое:
EVSYS.CH1MUX = EVSYS_CHMUX_TCD0_CCA_gc; // таймер D0 подает импульсы в 1-ый канал системы событий
TCC0.CTRLA = TC_EVSEL_CH1_gc; // таймер C0 берет клоки из 1-ого канала системы событий
TCC1.CTRLA = TC_EVSEL_CH1_gc; // таймер C1 берет клоки оттуда же

Т.е. програмирование тут ерунда - главное сообразить, какие константы в регистры записать. sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- -=TRO=-   Выбор AVR микроконтроллера для 5ти фазного ШИМ.   Oct 25 2014, 15:58
- - Xenia   Цитата(-=TRO=- @ Oct 25 2014, 19...   Oct 25 2014, 16:32
- - Genadi Zawidowski   Цитата(-=TRO=- @ Oct 25 2014, 19...   Oct 25 2014, 22:05
|- - Xenia   Цитата(Genadi Zawidowski @ Oct 26 2014, 02...   Oct 25 2014, 22:40
- - Егоров   Самый эффективный путь создания пятифазного контро...   Oct 25 2014, 23:20
- - Сергей Борщ   В самом обычном "двухзначном" AVR (88 и ...   Oct 26 2014, 00:03
|- - -=TRO=-   Цитата(Сергей Борщ @ Oct 26 2014, 03:03) ...   Oct 26 2014, 08:20
|- - Xenia   Цитата(-=TRO=- @ Oct 26 2014, 11...   Oct 26 2014, 11:25
- - Herz   А что, действительно существуют пятифазные двигате...   Oct 26 2014, 09:43
|- - -=TRO=-   Цитата(Herz @ Oct 26 2014, 12:43) А что, ...   Oct 26 2014, 12:17
|- - Herz   Цитата(-=TRO=- @ Oct 26 2014, 14...   Oct 26 2014, 12:47
- - -=TRO=-   Маленький миниотчет. Эксперименты ставил в BASCOM-...   Nov 2 2014, 14:21
|- - Сергей Борщ   Цитата(-=TRO=- @ Nov 2 2014, 16...   Nov 2 2014, 16:01
- - nordnative   Ретроспективно замечу, что есть микроконтроллер, к...   Aug 7 2015, 12:48


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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 07:25
Рейтинг@Mail.ru


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