|
ШИМ Сortex-M0, реализация синусоиды |
|
|
|
Sep 28 2014, 00:20
|
Участник

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

|
Всем добрый день!
Я начинающий чел в этом деле. Хочу попробовать сделать, чтобы лампочка изменяла яркость как функция синус. Т.е мне надо сделать шим. Я разобрался как например работает шим, но теперь не могу понять, как реализовать это програмно. Т.е. пусть я делаю счетчик. Дальше что? Т.е мне надо считать тики (пример: в течении 75% от периода подавать на ножку логическую единицу.) и в течении определенного кол-ва тиков подавать на ножку 1? Но возникает вопрос: Т.е к примеру я хочу получить синусоиду. В начале я должен подать 1 в течении 3 тиков, потом в течении 20 и т.д. (цифры конечно рандомные. надо все говорить относительно периода сигнала). Потом меняю полярность (есть в hal drivers функция). Но как сделать чтобы с каждым периодом менялась скважность сигнала?
не могу понять как это реализовать программно. Буду рад любым объяснениям блок схемам и программам.
З.Ы. Может кто скинет кодик с пояснением, что как почему и зачем. А то что-то мне тяжело это дается.
|
|
|
|
|
 |
Ответов
|
Sep 28 2014, 10:20
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
да все тут понятно надо синус на шиме генерить.
задача разбивается на 2.
1. - это ШИМ. Обычно надо взять таймер (это железный модуль в проце) и запустить его в режиме ШИМ. И выдать его выход на ножку. Это работает так. Таймер - счетчик который считает с заданной частотой для него задается максимальное число счета (до максимума таймера или до заданного числа), досчитав до него таймер сбрасывает в ноль и считает заново. Это число определяет период ШИМ. Вторым задает скважность - это число регистра сравнения, от 0 до максимума таймера. И на железном уровне задается что когда таймер от 0 до этого числа он на ножку выдает 1, а за пределами этого числа 0 (или наоборот, как вам больше нравиться). Дальше вам остается задавать скважность, и выходной сигнал генериться автоматически на железном уровне.
2. - это сам синус. Тут уже много творческих реализаций имеется. Наиболее часто делают так. Берут второй таймер который генерит прерывания с заданным периодом. Каждое прерывание внутри вычисляют очередную точку синуса (х координату точки) по формуле W*t+fi, то есть на самом деле есть sum=fi в начальный момент и каждое прерывание считают sum = sum + W*dt. где dt - период таймера. А дальше по полученному значению вычисляют синус либо по таблице, либо приближенно каким то рядом аля фурье и так дальее... И вот это вычисленное значение пихаете в ваш первый ШИМ, который и выдаст его на ружу.
Как то так. Период таймера выбирает в зависимости от мощности проца, как быстро он сможет считать новые точки.
|
|
|
|
|
Sep 28 2014, 14:35
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(scifi @ Sep 28 2014, 16:22)  Да? А при чём тут лампочка? Вот зачем лампочке синус, объясните мне, раз уж вам всё понятно. Если чисто для визуализации, то лучше не синус, а треугольник - визуально будет лучше восприниматься. Ну и по-хорошему - нужно учесть зависимость яркости лампочки от приложенного напряжения. PS: Хотя конечно сначала ТСу нужно научиться программировать. Именно программировать, без привязки к ембеддед. А это значит - научиться формализовывать задачу, разбивать её на этапы и т.п. Что как видно он не умеет. А иначе, да - всё это бессмыслица  Цитата(Golikov A. @ Sep 28 2014, 16:20)  Как то так. Период таймера выбирает в зависимости от мощности проца, как быстро он сможет считать новые точки. Странное однако умозаключение... Т.е. (следуя вашей логике) - если ТС возьмёт Cortex на 100МГц, то ему нужно выбирать частоту генерации новых отсчётов синуса == 1МГц? Ведь потянет-же! Вообще-то следует действовать как раз наоборот - CPU выбирать под задачу, а не задачу подгонять под CPU. Если задача - динамическое управление яркостью лампочки, то первым делом выбирается период обновления ШИМ. А он выбирается исходя из инертности глаза. Думаю - достаточно будет 100Гц максимум. Далее определяется необходимая дискретность установки яркости (сколько уровней яркости нужно). Это значение (уменьшенное на 1) умножается на 100Гц и получается частота ШИМ.
|
|
|
|
|
Sep 28 2014, 16:44
|
Участник

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

|
Цитата(jcxz @ Sep 28 2014, 14:35)  PS: Хотя конечно сначала ТСу нужно научиться программировать. Именно программировать, без привязки к ембеддед. А это значит - научиться формализовывать задачу, разбивать её на этапы и т.п. Что как видно он не умеет. А иначе, да - всё это бессмыслица  Что подразумевается под прогать? Одно дело прогать софт (этим я занимался), другое дело прогать МК! Здесь другая логика(и если начинать с 0 долго доходит). Это не лаба и не курсач. Просто пытаюсь освоить МК. Конечно можно забить на все и после учебы спать, а можно брать и пытаться хоть что-то сделать на МК! Спасибо за дельные комменты!
|
|
|
|
|
Oct 5 2014, 20:31
|

Практикующий маг
     
Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576

|
Цитата(scifi @ Sep 28 2014, 21:51)  "Хоть что-то сделать на МК" - это интересно, конечно, но гораздо лучше сделать что-то осмысленное, а не сферического коня в вакууме. Зря вы так. Помоему вполне полезная задача, потом можно сделать регулировку частоты кнопками, добавить ФНЧ по выходу и использовать как лаб.генератор для других поделок. Можно конечно найти готовое решение в инете, на тойже atmege их полно - просто собрать по схеме автора, залить его прошивку и готово, а можно даже пойти в магазин и купить готовый генератор. Но то что парень сам хочет разобраться и сделать чтото свое это ведь очень здорово. Можно кстати приспособить для светодиодной ленты, там как раз ШИМом очень удобно регулировать.
|
|
|
|
Сообщений в этой теме
shtunder ШИМ Сortex-M0 Sep 28 2014, 00:20 domowoj Цитата(shtunder @ Sep 28 2014, 07:20) Хоч... Sep 28 2014, 03:00 muravei Цитата(Golikov A. @ Sep 28 2014, 14:20) к... Sep 28 2014, 11:45 Golikov A. лампочка - индикация. Меняла яркость как функция с... Sep 28 2014, 11:28 scifi Цитата(Golikov A. @ Sep 28 2014, 15:28) л... Sep 28 2014, 12:57 Golikov A. Столько слов и все по делу.... И лампочка не такая... Sep 28 2014, 15:30 jcxz Цитата(Golikov A. @ Sep 28 2014, 21:30) в... Sep 28 2014, 17:00  AlexandrY Цитата(jcxz @ Sep 28 2014, 20:00) До того... Sep 28 2014, 18:13   jcxz Цитата(AlexandrY @ Sep 29 2014, 00:13) Во... Sep 29 2014, 13:44 muravei Цитата(Golikov A. @ Sep 28 2014, 19:30) к... Sep 28 2014, 18:22 Golikov A. ЦитатаНадеюсь Вы это и к себе тоже относите?
конеч... Sep 28 2014, 18:09 ViKo Цитата(Golikov A. @ Sep 28 2014, 21:09) П... Sep 28 2014, 18:20 AlexandrY Цитата(Golikov A. @ Sep 28 2014, 21:09) П... Sep 28 2014, 18:21 Golikov A. ЦитатаЕсть такая штука, DDS называется.
именно его... Sep 28 2014, 20:08 AlexandrY Цитата(Golikov A. @ Sep 28 2014, 23:08) В... Sep 29 2014, 16:58 Plain Вообще-то, автор просто хотел пару готовых строчек... Sep 28 2014, 21:06 Golikov A. Меня немного озадачивают ваши вопросы....
Если хо... Sep 29 2014, 18:20 AlexandrY Цитата(Golikov A. @ Sep 29 2014, 21:20) Е... Sep 29 2014, 20:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|