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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> ШИМ Сortex-M0, реализация синусоиды
shtunder
сообщение Sep 28 2014, 00:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 14-07-14
Пользователь №: 82 243



Всем добрый день!

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

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

З.Ы. Может кто скинет кодик с пояснением, что как почему и зачем. А то что-то мне тяжело это дается.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Sep 28 2014, 03:00
Сообщение #2


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Цитата(shtunder @ Sep 28 2014, 07:20) *
Хочу попробовать сделать, чтобы лампочка изменяла яркость как функция синус.
Не совсем понятна задача, какая лампочка, с какой частотой, зачем?


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 28 2014, 10:20
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да все тут понятно надо синус на шиме генерить.

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

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

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

Как то так. Период таймера выбирает в зависимости от мощности проца, как быстро он сможет считать новые точки.
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 28 2014, 10:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Sep 28 2014, 14:20) *
да все тут понятно надо синус на шиме генерить.

Да? А при чём тут лампочка? Вот зачем лампочке синус, объясните мне, раз уж вам всё понятно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 28 2014, 11:28
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



лампочка - индикация. Меняла яркость как функция синуса. Плавно от темного до светлого, не линейно а по синусуsm.gif
Человек пробует, не у всех есть осциллографы, как я думаю... а может курсовая или лаба какая... Скорее лаба
Go to the top of the page
 
+Quote Post
muravei
сообщение Sep 28 2014, 11:45
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Golikov A. @ Sep 28 2014, 14:20) *
как быстро он сможет считать новые точки.

Можно ничего не считать , а сделать таблицу из "четвертинки"
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 28 2014, 12:57
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



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

Ага, сферическая лампочка в вакууме. Если это курсовая или лаба, я бы аффтара оной прибил этой же лампочкой. Ну что за феерический бред?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 28 2014, 14:35
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(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Гц и получается частота ШИМ.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 28 2014, 15:30
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Столько слов и все по делу.... И лампочка не такая, и задача не та... ведь все написано не чтобы помочь, а чтобы себя показать...

вот к примеру

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

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


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


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


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

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


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

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

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

а вот тут кстати не факт. Треугольник - линейная функция, а яркость воспринимается экспоненциально. Синус тоже не очень подходит, но тут хотя бы математика какая-то, а линейка - это счетчик с коэффициентом и все... не интересно
А вот зависимости яркость от напряжения мало интересна, ведь напряжение то всегда одно, вместо лампы будет скорее всего диод, и гореть будет на максимум, разница яркости будет достигаться разницей времени горения и не горения... Даже в случае лампы накаливания вряд ли она достаточно зафилтрует шим чтобы сделать его напряжением зависящим от скважности...
Go to the top of the page
 
+Quote Post
shtunder
сообщение Sep 28 2014, 16:44
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 14-07-14
Пользователь №: 82 243



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


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

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

Спасибо за дельные комменты!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 28 2014, 17:00
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(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. в своём первом сообщении.
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 28 2014, 17:51
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



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

"Хоть что-то сделать на МК" - это интересно, конечно, но гораздо лучше сделать что-то осмысленное, а не сферического коня в вакууме.
Ну и я бы советовал перед первым подходом к МК выучить язык Си, чтобы всё это не превратилось в мучительное убожество.
Просто мои 5 копеек :-)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 28 2014, 18:09
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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


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

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

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


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

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



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

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


хотя вашу тему переместили.... а в этот раздел я редко заглядываюsad.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 28 2014, 18:13
Сообщение #14


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



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


Откуда это?
Действительно так программируете?
Вот так сидите, формализуете задачу с умным видом, разбиваете на этапы, и все это месяцами прежде чем написать хоть одну строчку кода?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 28 2014, 18:20
Сообщение #15


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



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

Правильно. Только это называется не "экспоненциально", а "логарифмически". А подавать нужно экспоненту, чтобы воспринималось, как линейное изменение.
Go to the top of the page
 
+Quote Post

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

 


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


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