Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ШИМ Сortex-M0
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
shtunder
Всем добрый день!

Я начинающий чел в этом деле. Хочу попробовать сделать, чтобы лампочка изменяла яркость как функция синус. Т.е мне надо сделать шим. Я разобрался как например работает шим, но теперь не могу понять, как реализовать это програмно. Т.е. пусть я делаю счетчик. Дальше что? Т.е мне надо считать тики (пример: в течении 75% от периода подавать на ножку логическую единицу.) и в течении определенного кол-ва тиков подавать на ножку 1? Но возникает вопрос: Т.е к примеру я хочу получить синусоиду. В начале я должен подать 1 в течении 3 тиков, потом в течении 20 и т.д. (цифры конечно рандомные. надо все говорить относительно периода сигнала). Потом меняю полярность (есть в hal drivers функция). Но как сделать чтобы с каждым периодом менялась скважность сигнала?

не могу понять как это реализовать программно.
Буду рад любым объяснениям блок схемам и программам.

З.Ы. Может кто скинет кодик с пояснением, что как почему и зачем. А то что-то мне тяжело это дается.
domowoj
Цитата(shtunder @ Sep 28 2014, 07:20) *
Хочу попробовать сделать, чтобы лампочка изменяла яркость как функция синус.
Не совсем понятна задача, какая лампочка, с какой частотой, зачем?
Golikov A.
да все тут понятно надо синус на шиме генерить.

задача разбивается на 2.

1. - это ШИМ. Обычно надо взять таймер (это железный модуль в проце) и запустить его в режиме ШИМ. И выдать его выход на ножку. Это работает так. Таймер - счетчик который считает с заданной частотой для него задается максимальное число счета (до максимума таймера или до заданного числа), досчитав до него таймер сбрасывает в ноль и считает заново. Это число определяет период ШИМ. Вторым задает скважность - это число регистра сравнения, от 0 до максимума таймера. И на железном уровне задается что когда таймер от 0 до этого числа он на ножку выдает 1, а за пределами этого числа 0 (или наоборот, как вам больше нравиться).
Дальше вам остается задавать скважность, и выходной сигнал генериться автоматически на железном уровне.

2. - это сам синус. Тут уже много творческих реализаций имеется. Наиболее часто делают так. Берут второй таймер который генерит прерывания с заданным периодом. Каждое прерывание внутри вычисляют очередную точку синуса (х координату точки) по формуле
W*t+fi, то есть на самом деле есть sum=fi в начальный момент и каждое прерывание считают sum = sum + W*dt. где dt - период таймера.
А дальше по полученному значению вычисляют синус либо по таблице, либо приближенно каким то рядом аля фурье и так дальее...
И вот это вычисленное значение пихаете в ваш первый ШИМ, который и выдаст его на ружу.

Как то так. Период таймера выбирает в зависимости от мощности проца, как быстро он сможет считать новые точки.
scifi
Цитата(Golikov A. @ Sep 28 2014, 14:20) *
да все тут понятно надо синус на шиме генерить.

Да? А при чём тут лампочка? Вот зачем лампочке синус, объясните мне, раз уж вам всё понятно.
Golikov A.
лампочка - индикация. Меняла яркость как функция синуса. Плавно от темного до светлого, не линейно а по синусуsm.gif
Человек пробует, не у всех есть осциллографы, как я думаю... а может курсовая или лаба какая... Скорее лаба
muravei
Цитата(Golikov A. @ Sep 28 2014, 14:20) *
как быстро он сможет считать новые точки.

Можно ничего не считать , а сделать таблицу из "четвертинки"
scifi
Цитата(Golikov A. @ Sep 28 2014, 15:28) *
лампочка - индикация. Меняла яркость как функция синуса. Плавно от темного до светлого, не линейно а по синусуsm.gif
Человек пробует, не у всех есть осциллографы, как я думаю... а может курсовая или лаба какая... Скорее лаба

Ага, сферическая лампочка в вакууме. Если это курсовая или лаба, я бы аффтара оной прибил этой же лампочкой. Ну что за феерический бред?
jcxz
Цитата(scifi @ Sep 28 2014, 16:22) *
Да? А при чём тут лампочка? Вот зачем лампочке синус, объясните мне, раз уж вам всё понятно.

Если чисто для визуализации, то лучше не синус, а треугольник - визуально будет лучше восприниматься. rolleyes.gif
Ну и по-хорошему - нужно учесть зависимость яркости лампочки от приложенного напряжения.

PS: Хотя конечно сначала ТСу нужно научиться программировать. Именно программировать, без привязки к ембеддед.
А это значит - научиться формализовывать задачу, разбивать её на этапы и т.п. Что как видно он не умеет.
А иначе, да - всё это бессмыслица smile3046.gif

Цитата(Golikov A. @ Sep 28 2014, 16:20) *
Как то так. Период таймера выбирает в зависимости от мощности проца, как быстро он сможет считать новые точки.

Странное однако умозаключение... wacko.gif
Т.е. (следуя вашей логике) - если ТС возьмёт Cortex на 100МГц, то ему нужно выбирать частоту генерации новых отсчётов синуса == 1МГц? Ведь потянет-же!

Вообще-то следует действовать как раз наоборот - CPU выбирать под задачу, а не задачу подгонять под CPU.
Если задача - динамическое управление яркостью лампочки, то первым делом выбирается период обновления ШИМ.
А он выбирается исходя из инертности глаза. Думаю - достаточно будет 100Гц максимум.
Далее определяется необходимая дискретность установки яркости (сколько уровней яркости нужно).
Это значение (уменьшенное на 1) умножается на 100Гц и получается частота ШИМ.
Golikov A.
Столько слов и все по делу.... И лампочка не такая, и задача не та... ведь все написано не чтобы помочь, а чтобы себя показать...

вот к примеру

Цитата
Цитата
как быстро он сможет считать новые точки.

Можно ничего не считать , а сделать таблицу из "четвертинки"


это замечательное предложение, а как узнать какую точку в какой момент времени выбрать из таблицы? А так чтобы синус был заданной частоты?


Цитата
Странное однако умозаключение... wacko.gif
Т.е. (следуя вашей логике) - если ТС возьмёт Cortex на 100МГц, то ему нужно выбирать частоту генерации новых отсчётов синуса == 1МГц? Ведь потянет-же!


Да именно так, если потянет то 1 МГц, потянет 10, то лучше взять 10. Потому что частота с которой вы находите новое значение которое надо задать на ШИМе никак ни связана с частотой шима и частотой финально получаемого синуса. И чем она выше, тем лучше и плавнее будет синус, он будет представлен большим количеством точек, и не важно что многие из низ будут повторятся...

Строго говоря есть ограничения на обновления ШИМ, и излишняя частота может быть просто не нужна, но хуже от нее точно не будет... А также эта частота ограничивает синус по частоте сверху, и вот тут как раз чем выше тем лучше...


Цитата
Вообще-то следует действовать как раз наоборот - CPU выбирать под задачу, а не задачу подгонять под CPU.

Тоже не верно, иногда есть в распоряжении ЦПУ и задача, и хотят поглядеть что будет. Делают на максимум, получилось хорошо, нет можно думать. Если рассуждать здраво вряд ли в наше время развития техники кто-то серьезно будет делать мигалку диодом по синусу на контроллереsm.gif Это какие-то образовательные тесты, потому все ресурсы проца могут пойти на эту бедную лампочку) и пойдут ресурсы того проца что есть в наличии.

Цитата
Если чисто для визуализации, то лучше не синус, а треугольник - визуально будет лучше восприниматься. rolleyes.gif
Ну и по-хорошему - нужно учесть зависимость яркости лампочки от приложенного напряжения.

а вот тут кстати не факт. Треугольник - линейная функция, а яркость воспринимается экспоненциально. Синус тоже не очень подходит, но тут хотя бы математика какая-то, а линейка - это счетчик с коэффициентом и все... не интересно
А вот зависимости яркость от напряжения мало интересна, ведь напряжение то всегда одно, вместо лампы будет скорее всего диод, и гореть будет на максимум, разница яркости будет достигаться разницей времени горения и не горения... Даже в случае лампы накаливания вряд ли она достаточно зафилтрует шим чтобы сделать его напряжением зависящим от скважности...
shtunder
Цитата(jcxz @ Sep 28 2014, 14:35) *
PS: Хотя конечно сначала ТСу нужно научиться программировать. Именно программировать, без привязки к ембеддед.
А это значит - научиться формализовывать задачу, разбивать её на этапы и т.п. Что как видно он не умеет.
А иначе, да - всё это бессмыслица smile3046.gif


Что подразумевается под прогать? Одно дело прогать софт (этим я занимался), другое дело прогать МК! Здесь другая логика(и если начинать с 0 долго доходит). wacko.gif

Это не лаба и не курсач.
Просто пытаюсь освоить МК. Конечно можно забить на все и после учебы спать, а можно брать и пытаться хоть что-то сделать на МК! smile3009.gif

Спасибо за дельные комменты!
jcxz
Цитата(Golikov A. @ Sep 28 2014, 21:30) *
ведь все написано не чтобы помочь, а чтобы себя показать...

Надеюсь Вы это и к себе тоже относите? laughing.gif

Цитата(Golikov A. @ Sep 28 2014, 21:30) *
а вот тут кстати не факт. Треугольник - линейная функция, а яркость воспринимается экспоненциально.

Вы бы сначала попробовали, а потом теоретизировали laughing.gif
Над этим "а яркость воспринимается экспоненциально." долго думал, но так и не понял - как это?

Цитата(Golikov A. @ Sep 28 2014, 21:30) *
А вот зависимости яркость от напряжения мало интересна, ведь напряжение то всегда одно,

Не знаю, где в сообщении ТС Вы углядели диод, но даже в этом случае, даже если с выхода ШИМ ток идёт прямо на диод (лампу) (без RC-цепочки), то в моём замечании "напряжение"
просто нужно заменить на "средний протекающий ток".
И всё равно тогда это замечание остаётся в силе.

Как бы так сказать...
Средний протекающий ток (или отношение времени горения к времени негорения) и субъективные зрительные ощущения от создаваемого света не прямопропорциональны.
Или сказать по-другому:
Если взять K==выводимому в ШИМ значению (в %: 0%-все биты в состоянии "погашено"; 100% - все биты в сост. "горят");
то увеличение K в области минимальных значений (близких к 0) будет гораздо более заметно глазу, чем в области максимальных (близких к 100) значений.
Соответственно как середина яркости глазом будет восприниматься уровень скажем K==30% (условно) на ШИМ, а не K==50%.

Цитата(shtunder @ Sep 28 2014, 22:44) *
Что подразумевается под прогать? Одно дело прогать софт (этим я занимался), другое дело прогать МК! Здесь другая логика(и если начинать с 0 долго доходит). wacko.gif

До того как начинать "прогать", сначала надо формализовать задачу, разбить её на этапы, прикинуть алгоритм.
Это должно занимать 80% времени.
И тогда "другого" в программировании МК совсем мало, по отношеннию к любому другому программированию.
А у Вас как видно по первому сообщению "смешались в кучу люди, кони...".

Касаемо разбивки на этапы, что-то подобное Вам уже попытался сделать ув. Golikov A. в своём первом сообщении.
scifi
Цитата(shtunder @ Sep 28 2014, 20:44) *
Просто пытаюсь освоить МК. Конечно можно забить на все и после учебы спать, а можно брать и пытаться хоть что-то сделать на МК! smile3009.gif

"Хоть что-то сделать на МК" - это интересно, конечно, но гораздо лучше сделать что-то осмысленное, а не сферического коня в вакууме.
Ну и я бы советовал перед первым подходом к МК выучить язык Си, чтобы всё это не превратилось в мучительное убожество.
Просто мои 5 копеек :-)
Golikov A.
Цитата
Надеюсь Вы это и к себе тоже относите?

конечно, иначе зачем мы тутsm.gif ответ на вопрос дан в моем первом сообщении)


Цитата
Вы бы сначала попробовали, а потом теоретизировали laughing.gif
Над этим "а яркость воспринимается экспоненциально." долго думал, но так и не понял - как это?

я не теоретизирую, у меня диплом есть по данному вопросу)

Забавно что вы тоже про это знаете, только упускаете причину, и работаете только со следствием.
Цитата
Средний протекающий ток (или отношение времени горения к времени негорения) и субъективные зрительные ощущения от создаваемого света не прямопропорциональны.


Причиной этому что наши органы чувств воспринимаю все не линейно, а степенно. То есть если что-то свети, и вы распределите яркость так что вам будет казаться между точками яркость увеличивается на одинаковую дельту, то по факту окажется что она увеличивалась в одинаковое число раз. Это позволяет нам охватывать огромный диапазон воздействий при этом различать даже малейшие возмущения около нуля. И так у нас со всем с глазами, ушами и прочим. Потому децибелы так прижились в звуке.

Конечно есть и нелинейность свечения от входного среднего тока, но она значительно меньше влияния вызываемого устройством наших органов восприятия...



Цитата
Просто пытаюсь освоить МК. Конечно можно забить на все и после учебы спать, а можно брать и пытаться хоть что-то сделать на МК!

Может я так хорошо понял ваш вопрос, потому что так же начинал. Так что не обращайте ни на кого внимание и двигайтесь вперед, будут вопросы задавайте.


хотя вашу тему переместили.... а в этот раздел я редко заглядываюsad.gif
AlexandrY
Цитата(jcxz @ Sep 28 2014, 20:00) *
До того как начинать "прогать", сначала надо формализовать задачу, разбить её на этапы, прикинуть алгоритм.
Это должно занимать 80% времени.


Откуда это?
Действительно так программируете?
Вот так сидите, формализуете задачу с умным видом, разбиваете на этапы, и все это месяцами прежде чем написать хоть одну строчку кода?
ViKo
Цитата(Golikov A. @ Sep 28 2014, 21:09) *
Причиной этому что наши органы чувств воспринимаю все не линейно, а степенно. То есть если что-то свети, и вы распределите яркость так что вам будет казаться между точками яркость увеличивается на одинаковую дельту, то по факту окажется что она увеличивалась в одинаковое число раз. Это позволяет нам охватывать огромный диапазон воздействий при этом различать даже малейшие возмущения около нуля. И так у нас со всем с глазами, ушами и прочим. Потому децибелы так прижились в звуке.

Правильно. Только это называется не "экспоненциально", а "логарифмически". А подавать нужно экспоненту, чтобы воспринималось, как линейное изменение.
AlexandrY
Цитата(Golikov A. @ Sep 28 2014, 21:09) *
Причиной этому что наши органы чувств воспринимаю все не линейно, а степенно.


Тогда надо указать, что и время наши органы чувств воспринимают неравномерно и в корреляции c интенсивностью сигнала.

Так какую же форму должен иметь сигнал яркости чтобы восприниматься как синусоида?
muravei
Цитата(Golikov A. @ Sep 28 2014, 19:30) *
как узнать какую точку в какой момент времени выбрать из таблицы? А так чтобы синус был заданной частоты?

Есть такая штука, DDS называется.
Golikov A.
Цитата
Есть такая штука, DDS называется.

именно его и описал, и координату Х надо считать, и иногда это не просто, особенно для дробных шагов в ДДС с уточнением...


Цитата
Так какую же форму должен иметь сигнал яркости чтобы восприниматься как синусоида?

Хрен знает, калибровать надоsm.gif Хотя в задаче просят выдать синусоиду без замороков о восприятии.


Цитата
Тогда надо указать, что и время наши органы чувств воспринимают неравномерно

Насколько знаю время синтетическая величина, и у нас нет чувств его обрабатывающих, потому оно все время сбивается...


Цитата
Правильно. Только это называется не "экспоненциально", а "логарифмически". А подавать нужно экспоненту, чтобы воспринималось, как линейное изменение.

Да, наверное вы правы. Шкала лагорифмическая, а чувствительность степенная, то есть экспоненциальная. Но я не настаиваю, скорее всего чувствительность тоже логарифмической правильно называть, главное что вы понялиsm.gif


Цитата
Откуда это?
Действительно так программируете?
Вот так сидите, формализуете задачу с умным видом, разбиваете на этапы, и все это месяцами прежде чем написать хоть одну строчку кода?


Вопрос был не мне, но в этом вопросе я поддержу. Архитектура проекта должна занимать большую часть процесса разработки, а кодинг - программирование меньшую. Если детально проработать все блоки и связи, то они кодируются с первого раза и хорошо покрываются тестами, так что и отладка проходит быстро. В последнем проекте у меня было расклад неделя архитектуры на день кодинга и отладки.
Plain
Вообще-то, автор просто хотел пару готовых строчек программирования модуля ШИМ, но толку всё равно будет мало, потому что, если речь о лампе накаливания, то сперва требуется фотодиодом снять конкретную характеристику всей данной системы с ней на требуемой частоте, и т.д.
jcxz
Цитата(AlexandrY @ Sep 29 2014, 00:13) *
Вот так сидите, формализуете задачу с умным видом, разбиваете на этапы, и все это месяцами прежде чем написать хоть одну строчку кода?

Примерно так.
А Вы - наоборот? Месяцами сидите - строчите код, а потом вдруг задумываетесь - "а что-же это я написал? а почему?". Потом ещё столько-же переделываете?
Я считаю в своей профессии важным мозг, а не пальцы.
AlexandrY
Цитата(Golikov A. @ Sep 28 2014, 23:08) *
В последнем проекте у меня было расклад неделя архитектуры на день кодинга и отладки.


А чего ж стесняетесь тогда назвать эту великую архитектуру которую нужно обдумывать неделю, а написать и отладить можно за день.
Вам самому не смешно?
Или это экспоненциальное ощущение времени? biggrin.gif
Golikov A.
Меня немного озадачивают ваши вопросы....
Если хотите знать что за устройство - то это одномоторный программируемый контроллер шагового двигателя.

Если же вы будучи программистом не понимаете что фраза "неделя архитектуры на день кодинга и отладки" означает соотношение времени, а не общее потраченное время на проект, то это немного снижает ваш образ.

Цитата
Или это экспоненциальное ощущение времени? biggrin.gif

А это тупой троллинг, модератору стыдно...
AlexandrY
Цитата(Golikov A. @ Sep 29 2014, 21:20) *
Если хотите знать что за устройство - то это одномоторный программируемый контроллер шагового двигателя.


Теперь ясно. Просто вы применили понятие архитектура некорректно.
У вас видимо речь шла просто об алгоритме.

Alexashka
Цитата(scifi @ Sep 28 2014, 21:51) *
"Хоть что-то сделать на МК" - это интересно, конечно, но гораздо лучше сделать что-то осмысленное, а не сферического коня в вакууме.

Зря вы так. Помоему вполне полезная задача, потом можно сделать регулировку частоты кнопками, добавить ФНЧ по выходу и использовать как лаб.генератор для других поделок. Можно конечно найти готовое решение в инете, на тойже atmege их полно - просто собрать по схеме автора, залить его прошивку и готово, а можно даже пойти в магазин и купить готовый генератор. Но то что парень сам хочет разобраться и сделать чтото свое это ведь очень здорово.
Можно кстати приспособить для светодиодной ленты, там как раз ШИМом очень удобно регулировать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.