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

 
 
> ШИМ С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
 
Start new topic
Ответов
Golikov A.
сообщение Sep 28 2014, 10:20
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #3


Гуру
******

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



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

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


Гуру
******

Группа: Свой
Сообщений: 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
shtunder
сообщение Sep 28 2014, 16:44
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
scifi
сообщение Sep 28 2014, 17:51
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- shtunder   ШИМ Сortex-M0   Sep 28 2014, 00:20
- - domowoj   Цитата(shtunder @ Sep 28 2014, 07:20) Хоч...   Sep 28 2014, 03:00
||- - Alexashka   Цитата(scifi @ Sep 28 2014, 21:51) ...   Oct 5 2014, 20:31
|- - 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


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:50
Рейтинг@Mail.ru


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