Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите подобрать МК
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
barabek
Помогите подобрать МК под следующие требования.
Необходимо формировать с помощью ШИМ с несущей порядка 100кГц синусоидальный сигнал 50-500Гц с разрешением хотя бы 8 бит (т.е. 256 уровней). Конечно, вряд ли удастся менять уровни с частотой несущей, но хотелось бы иметь возможность обновлять выходные уровни почаще (прошу прощения за такую точную величину - почаще, но пока сам не могу определиться, буду исходить из возможностей).
Число каналов ШИМ - 4.
Желательно иметь на борту компаратор и АЦП.
1 UART.
Цена - хотелось бы иметь до 300 рублей.
До этого работал только с 51. Придется переходить, по всей видимости, на другое ядро. Отсюда еще одно требование - доступность программатора и среды разработки. (Доступность в моем понимании ~ цена около 0 smile.gif )
Хотелось бы иметь корпус поменьше - кроме выходов ШИМ будет достаточно иметь порядка 10 входов/выходов.

Смотрел у атмела (SAM7) и техаса (430) - глаза разбегаются, затрудняюсь с выборов.
Peter Pavlov
Для того что бы иметь синусоиду нужно иметь больше 3 отсчетов на период на самой верхней частоте. Те 500*3=1500. Плюс к этому 8бит ШИМ - 256 отсчетов. Те частота ШИМ должна быть 1500*256=384000Гц Лучше что бы еще выше. Для этой задачи вролне подойдет обычный МК. Мега128 - 6 аппаратных шимов + АЦП. Задача не настолько сложна что бы искать новый контроллер.
_Pasha
Цитата(barabek @ Nov 3 2009, 08:19) *
Желательно иметь на борту компаратор и АЦП.

про АЦП - частота выборки какая нужна. А то ведь есть dsPIC30Fxxxx - там до 500 кГц, но нету компаратора, а есть AT90PWM3B - там ацп до 78 кГц и компаратор есть.
barabek
Цитата(Peter Pavlov @ Nov 3 2009, 16:16) *
Мега128 - 6 аппаратных шимов + АЦП. Задача не настолько сложна что бы искать новый контроллер.

Спасибо, посмотрю.

А насчет
Цитата
1500*256=384000Гц
, я имел ввиду 256 разрешение по уровню, а не по времени. Но это не важно, еще раз спасибо.

Цитата(_Pasha)
AT90PWM3B
, тоже гляну, спасибо.
rezident
Цитата(barabek @ Nov 3 2009, 11:28) *
А насчет , я имел ввиду 256 разрешение по уровню, а не по времени. Но это не важно, еще раз спасибо.
Так вам по уровню и указали. Вообще формула расчета такая.
Частота тактирования>=макс.выходная частота синуса * количество отсчетов на период синуса * количество ступеней дискретизации по амплитуде
500*256 уже получается 128Кгц, т.е. даже двух отсчетов на период синуса не выходит.
Если хочется ограничиться тактовой именно 100кГц, то нужно исключить последний сомножитель, т.е. следует использовать полноценный ЦАП, а не ШИМ в качестве ЦАП.
_Pasha
Цитата(rezident @ Nov 4 2009, 02:15) *
следует использовать полноценный ЦАП, а не ШИМ в качестве ЦАП.

Не-не, есть ведь шимы, в которых таймеры тактируются от умножителя частоты. (Например 64МГц PLL можно подать на таймер у AT90PWM3B, ATtiny261/461/861-кстати, забыл указать)
Так что 128 кГц - это не потолок. Лишь бы проц успевал считать...
rezident
Цитата(_Pasha @ Nov 4 2009, 04:32) *
Не-не, есть ведь шимы, в которых таймеры тактируются от умножителя частоты.
Какая разница есть PLL, FLL или нет? Я же имею в виду именно тактовую частоту модуля таймера или модуля PWM, а не тактовую ядра или частоту кварцевого генератора. laughing.gif
И вообще. У топикстартера указано
Цитата("barabek")
ШИМ с несущей порядка 100кГц
"несущей", а не с тактовой. Хотелось бы от него уточнения, что он подразумевает под "несущей ШИМ"? Может это именно временнОе разрешение выходного ШИМ, то бишь ему период синуса 500Гц хочется на 200 отсчетов поделить. Тогда тактовая д.б. 100кГц*256 ≥ 25,6МГц.
_Pasha
Цитата(rezident @ Nov 4 2009, 03:49) *
тактовая д.б. 100кГц*256 ≥ 25,6МГц.

Дык я о том, что в помянутых мною аврках PLL специально предусмотрен для использования с модулем шим, и тактовая 64МГц - как раз для таких красивых "несущих" по сотне кгц. А тактовая на проц ессно в пределах до 16(20) МГц.
barabek
Цитата(rezident @ Nov 4 2009, 09:15) *
Так вам по уровню и указали. Вообще формула расчета такая.
Частота тактирования>=макс.выходная частота синуса * количество отсчетов на период синуса * количество ступеней дискретизации по амплитуде
500*256 уже получается 128Кгц, т.е. даже двух отсчетов на период синуса не выходит.
Если хочется ограничиться тактовой именно 100кГц, то нужно исключить последний сомножитель, т.е. следует использовать полноценный ЦАП, а не ШИМ в качестве ЦАП.

Извините за мой французский, если меня не поняли. Я Вас, кстати, тоже smile.gif. Попробую объяснить по другому. Требуемый период ШИМа = 1/100кГц (10 мкс). Соответственно получаем количество периодов ШИМа на 500Гц =200. А так как разрешение по уровню хотелось бы иметь 8бит, то получаем (как Вы уже писали) тактовую частоту 100е3*256. Разрешение в 256 равномерно распределенных уровней не значит, что все уровни используются. При переходе синусоиды через 0, в месте наибольшей производной, будут некоторые пропускаться. Я так себе представляю. Выразился, наверно, не в общепринятых терминах.
V_G
Цитата(rezident @ Nov 4 2009, 09:15) *
Так вам по уровню и указали. Вообще формула расчета такая.
Частота тактирования>=макс.выходная частота синуса * количество отсчетов на период синуса * количество ступеней дискретизации по амплитуде

Я реально делал программу с ШИМ 31,25 кГц, формирующую синусы 141, 504, 1042, 5208 Гц, сумму синусов 1042+5208 с соотношением амплитуд 2:1 и 1.5:1. Отсчеты заранее рассчитывал и писал в программную память (на четверть периода, остальные повторяются). При постоянной частоте ШИМ выбор частот при этом не очень велик, но моего заказчика устроил набор тестовых частот.

Да, амплитуды можно было менять в 2 раза 6-ю ступенями (просто отсчет сдвигаешь вправо перед выдачей на ШИМ).
По осциллографу видимых искажений не было, измерителем нелинейных искажений не пользовался.
Проц Мега128 8 МГц=частота ШИМ *256. 8-битный таймер без предделителя в режиме fast PWM.

И последнее добавление: все сказанное мной относится к формированию чистого синуса (или суммы синусов), а не к формированию АМ сигнала. Во всяком случае, я так понял смысл вопроса топикстартера. Как я понял, и как заметили тут еще, он несколько путается в показания по поводу несущей частоты и частоты дискретизации. Последняя, понятно, рассчитывается на основании теоремы Котельникова.
_Pasha
Цитата(barabek @ Nov 4 2009, 07:52) *
При переходе синусоиды через 0, в месте наибольшей производной, будут некоторые пропускаться. Я так себе представляю.

А на максимумах /минимумах синуса - тоже. Но это не пропуски, а следствие округления
Herz
Цитата(V_G @ Nov 4 2009, 07:24) *
Я реально делал программу с ШИМ 31,25 кГц, формирующую синусы 141, 504, 1042, 5208 Гц,...


То есть, всего 6 градаций на максимальную частоту приходилось?
barabek
Цитата(V_G @ Nov 4 2009, 15:24) *
Как я понял, и как заметили тут еще, он несколько путается в показания по поводу несущей частоты и частоты дискретизации. Последняя, понятно, рассчитывается на основании теоремы Котельникова.

Еще и частота дискретизации выплыла smile.gif.
Если уж пошел такой разговор, давайте определимся. В моем представлении частота несущей =100 кГц, тактовая частота ШИМ модуля 25,6МГц. Я не прав?
Ваше предложение по поводу 31,25 кГц мне не подходит. В сегодня работающем устройстве используется несущая 19 кГц. Проблема - параметры выходного фильтра. Повышение частоты до Вашей проблему не решат. К сожалению.

Цитата(_Pasha)
А на максимумах /минимумах синуса - тоже. Но это не пропуски, а следствие округления

Мы, все-таки, говорим о разных вещах. Я имею ввиду не округление, а пропуск (возможно, а может и нет - зависит от соотношения частот несущей и выходной, а также разрешающей способности ШИМ).
V_G
Цитата(Herz @ Nov 4 2009, 18:16) *
То есть, всего 6 градаций на максимальную частоту приходилось?

Да, но не 6 градаций, а 6 временнЫх отсчетов. Котельников требует более двух, так что все в порядке.

Цитата(barabek @ Nov 4 2009, 18:19) *
Если уж пошел такой разговор, давайте определимся.


Во-во, давно пора! Так вам чистый синус на выходе нужен, или какой-то более сложный сигнал (АМ, ЧМ,ФМ, например, в которых имеется понятие несущей частоты)?
Dog Pawlowa
Легко и просто сформировать синус да и другой сигнал на STM32 - он имеет DMA на встроеный DAC со скоростью больше 1 MS/s. Проверено лично.
Если нужно ШИМ, скважность которого определяется каким-то законом, но достаточного любого контроллера, только какое это отношение имеет к синусоидальному сигналу? Подобие на синус появится только после фильтрации.
barabek
Цитата(Dog Pawlowa @ Nov 4 2009, 21:12) *
Легко и просто сформировать синус да и другой сигнал на STM32 - он имеет DMA на встроеный DAC со скоростью больше 1 MS/s. Проверено лично.
Если нужно ШИМ, скважность которого определяется каким-то законом, но достаточного любого контроллера, только какое это отношение имеет к синусоидальному сигналу? Подобие на синус появится только после фильтрации.

Вот если бы ШИМ был с DMA , было бы вообще прекрасно. Фильтрация у меня обязательно будет. Контроллер должен будет управлять полумостами. Нагрузка 500-700 Вт. Я, предварительно, остановился на AT90PWM316. Как я понял ( не хватает времени внимательно документацию прочитать) смогу на нем сделать 4 независимых канала. Драйверы буду брать от silabs. В них встроен deadtime. Осталось определиться со средой и программатором - камень для меня новый.
_Pasha
Цитата(barabek @ Nov 4 2009, 12:19) *
Мы, все-таки, говорим о разных вещах. Я имею ввиду не округление, а пропуск (возможно, а может и нет - зависит от соотношения частот несущей и выходной, а также разрешающей способности ШИМ).

Как его ни назовите, N=trunc(256*sin(w*t)); и заметьте - ничего не пропускается. Вы же не будете пользоваться одной таблицей для генерации всей сетки... кстати, почитайте старинную некрочиповскую апноту http://www.microchip.com/stellent/idcplg?I...ppnote=en011086 по поводу правильных алгоритмов генерации синуса.

Цитата(barabek @ Nov 4 2009, 14:40) *
Я, предварительно, остановился на AT90PWM316. Как я понял ( не хватает времени внимательно документацию прочитать) смогу на нем сделать 4 независимых канала.

Ничего подобного. Три независимых, т.к последний(PSC22+PSC23) очень дже зависим от PSC20+PSC21
barabek
Цитата(_Pasha @ Nov 4 2009, 23:20) *
Как его ни назовите, N=trunc(256*sin(w*t)); и заметьте - ничего не пропускается. Вы же не будете пользоваться одной таблицей для генерации всей сетки... кстати, почитайте старинную некрочиповскую апноту http://www.microchip.com/stellent/idcplg?I...ppnote=en011086 по поводу правильных алгоритмов генерации синуса.

За ссылку спасибо, почитаю.
По поводу Вашей формулу я полностью согласен. Берем и строим в exel таблицу с номерами отсчетов и выходным кодом для ШИМ c учетом 200 отсчетов на период выходной 500 Гц
Код
n(отсч)  N                     N(окр)
0    0                0
1    8.041154324    8
2    16.074373    16
3    24.09172821    24
4    32.08530779    32
5    40.04722305    40
6    47.96961653    48

....
44    251.4655362    251
45    252.8482152    253
46    253.9813635    254
47    254.8638629    255
48    255.4948425    255
49    255.8736795    256
50    256    256
51    255.8736795    256
.....

Как видно из последнего столбца, я прохожу не все 256 уровней. Возле 0 пропуски через 8 уровней, возле максимума без пропусков. Я это и имел ввиду. (я кстати обманул, получилось 512 уровней, но смысл тот же)

Цитата
Ничего подобного. Три независимых, т.к последний(PSC22+PSC23) очень дже зависим от PSC20+PSC21

Чиорт, чиорт crying.gif
Мне при беглом просмотре показалось, что в каждом PSC каналы A и B могут работать независимо. Уточню завтра на работе.( Для управления верхним и нижним плечом будет использоваться драйвер с одним входом PWM поэтому два вывода МК не требуются )

Да еще, в моей задаче не требуется "налету" менять частоту, только амплитуду синусоид. Это значительно проще. Соответсвенно таблица может быть и одна.
_Pasha
Цитата(barabek @ Nov 4 2009, 18:13) *
Да еще, в моей задаче не требуется "налету" менять частоту, только амплитуду синусоид. Это значительно проще. Соответсвенно таблица может быть и одна.

Таблицу можно и насчитать перед запуском и забить в ОЗУ (вместо экселя) smile.gif
Проблема такая, что надо либо озаботиться кратностью отсчетов, манипулируя частотой ШИМ, либо решать разностное уравнение по приведенной выше методологии - тогда выдаваемые отсчеты сигнала будут максимально близки к синусоиде, и при этом частота ШИМ будет постоянна (!)
guxa
Добрый день!
Для вас еще актуален этот вопрос?
У NEC есть подобный контроллер. Количество ШИМ там может доходить до 18(при разрядности МК - 32) есть и ЦАП и АЦП и большой Flash. А отладку можно взять у дитстрибьютора на прокат....Отпишусь вам попозже
barabek
Цитата(guxa @ Nov 10 2009, 23:11) *
Добрый день!
Для вас еще актуален этот вопрос?
У NEC есть подобный контроллер. Количество ШИМ там может доходить до 18(при разрядности МК - 32) есть и ЦАП и АЦП и большой Flash. А отладку можно взять у дитстрибьютора на прокат....Отпишусь вам попозже

Да, еще актуален будет месяца 2, пока текущий проект не закончу. Тогда под этот будем закупаться.
Но NEC, честно говоря, боязно. Недавно здесь писали про них. Да, вроде хорошие. Но как быть с софтом и всем сопутствующим, поставками и т.д., учитывая наше географическое расположение в жо..е России smile.gif
guxa
В плане поставок, есть дистрибьюторы, по собсвенному опыту знаю, что у них они есть и на складе, и отладка сравнительно не дорогая и тоже есть в наличии, возятся они из Европпы и тех.поддержка наша и европейская, поэтом языкового барьера как такового нет.

Вам подойдут любые контроллеры для Motor Control, они заточены под более конкретные задачи + несколько ШИМ-каналов, есть почти у всех производителей, например:
http://www.eu.necel.com/micro/product/devi...t-MCLC-AllFlash
http://www.eu.necel.com/micro/product/devi...bit-MC-AllFlash
http://www.eu.necel.com/micro/product/devi...bit-MC-AllFlash
alekseykoj
Для формирования синусоиды 5-50 Гц с несущей 100 кГц необходимо контроллер с частотой не ниже 60 МГц. Там же еще надо управлять амплитудой, частотой, контролировать входные парметры. Это из практики. При более низкой частоте процессора формирование синусоиды получается нестабильным
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.