|
|
  |
Генератор sin, mega8 |
|
|
|
Jul 24 2009, 15:01
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316

|
Решил сделать генератор синусоиды на меге8. Я так понял, надо сделать ШИМ, а потом поставить RC-цепочку. Подскажите, правильно ли это и какие могут быть тогда параметры R и C. СУВ
|
|
|
|
|
Jul 24 2009, 16:15
|
Местный
  
Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154

|
Цитата(stells @ Jul 24 2009, 21:58)  все зависит от частоты синусоидального сигнала и частоты ШИМ, а об этом ничего сказано не было Тут Вы правы! Я рассматривал вариант получения синусоиды из меандра генерируемого ШИМ, и не учел и второй метод.
|
|
|
|
|
Jul 25 2009, 13:36
|
Местный
  
Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154

|
Цитата(Microwatt @ Jul 25 2009, 19:23)  Не, не понимаю я этих гугенотов.... Мега, ШИМ, ЦАП, унитаз с лазерным прицелом.... Два операционника всего делов-то! И сервопривод - частоту менять...
|
|
|
|
|
Jul 25 2009, 22:13
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Всё же если без пантов, так как раздел "В помощь начинающему": в гугле "Интегрирующие цепи" высыпает груду инфы и не сразу незнающему разобраться, а какой собснно предельной частоты синусоиду можно получить с данной элементарной RC цепочки и какой частоты должен быть ШИМ для заданной пульсации? Несомненно, метод тыка, предыдущий опыт и гора симуляторов, но всё-таки если ручкой на бумажке: 1) напряжение на кондёре Uc=Uвходное*(1-e^(-t/(R*C))), если прикинуть Uc как 90% от входного, значит требуемое для заряда время равно 2.3RC и столько же требуется для разряда со 100% до 10%.Выходит максимальная частота чего-то далёкого от синусоиды(пилы), но ещё с размахом от 0.1 до 0.9 от входного напряжения для RC цепочки будет F=1/(4.6RC) . 2) частоту ШИМ-а я так понимаю должна определять требуемая пульсация относительного идеального сигнала. Есть у кого-нибудь обоснованный ответ или ссылка, как выбрать частоту?
|
|
|
|
|
Jul 25 2009, 23:00
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(DpInRock @ Jul 26 2009, 01:28)  НУ, Атмел старается, аппликейшины пишет, а людям влом их посмотреть. а что до англоязычных аппликух от атмэля жизни не было? Особенно запись An additional output filter will help to achieve a good sinusoid. полностью отвечает на вопрос о номиналах RC цепи.
|
|
|
|
|
Jul 26 2009, 05:52
|
Местный
  
Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154

|
Цитата(Wano @ Jul 26 2009, 04:13)  Всё же если без пантов, так как раздел "В помощь начинающему": в гугле "Интегрирующие цепи" высыпает груду инфы и не сразу незнающему разобраться, а какой собснно предельной частоты синусоиду можно получить с данной элементарной RC цепочки и какой частоты должен быть ШИМ для заданной пульсации? Несомненно, метод тыка, предыдущий опыт и гора симуляторов, но всё-таки если ручкой на бумажке: 1) напряжение на кондёре Uc=Uвходное*(1-e^(-t/(R*C))), если прикинуть Uc как 90% от входного, значит требуемое для заряда время равно 2.3RC и столько же требуется для разряда со 100% до 10%.Выходит максимальная частота чего-то далёкого от синусоиды(пилы), но ещё с размахом от 0.1 до 0.9 от входного напряжения для RC цепочки будет F=1/(4.6RC) . 2) частоту ШИМ-а я так понимаю должна определять требуемая пульсация относительного идеального сигнала. Есть у кого-нибудь обоснованный ответ или ссылка, как выбрать частоту? Все зависит от метода получения синусоиды (я тут попытаюсь несколько реабилитироваться): 1. Синусоиду формируем из меандра получаемого с помощью ШИМ - тогда частота ШИМ не имеет значения: главное - частота меандра равна частоте синусоиды. 2. Синусоида формируется коэффициентом заполнения ШИМ (коэффициент заполнения ШИМ изменяется по sinX): в этом случае частота определяется так: Fшим=Fsin*n, где n- дискретизация периода синусоиды. Естественно, чем больше n - тем лучше, и соответственно меньше постоянная RC.
|
|
|
|
|
Jul 26 2009, 09:39
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(Vishv @ Jul 26 2009, 08:52)  Все зависит от метода получения синусоиды (я тут попытаюсь несколько реабилитироваться): 1. Синусоиду формируем из меандра получаемого с помощью ШИМ - тогда частота ШИМ не имеет значения: главное - частота меандра равна частоте синусоиды. 2. Синусоида формируется коэффициентом заполнения ШИМ (коэффициент заполнения ШИМ изменяется по sinX): в этом случае частота определяется так: Fшим=Fsin*n, где n- дискретизация периода синусоиды. Естественно, чем больше n - тем лучше, и соответственно меньше постоянная RC. Дабы прояснить: 1)Первый вариант, со сглаживанием верхушек, есть тут http://electronix.ru/forum/index.php?showtopic=62769 Но цепь формирования синусоиды должна быть забита под частоту меандра и получить (к примеру) диапазон 10кГц-100кГц будет сложно,или ошибаюсь? Надо будет ставить что-то типа MAX7418-MAX7425 2)В аппликухе http://www.gaw.ru/html.cgi/txt/app/micros/msp430/slaa116.htm - "следует выбирать частоту среза выше границы полосы сигнала, но намного ниже частоты ШИМ-сигнала" Советуют дискретизацию брать не менее 16.
|
|
|
|
|
Jul 26 2009, 10:49
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141

|
Любопытно, человек вбросил тему, но участвовать в обсуждении не желает. А обсуждать ее без толку, если неизвестна требуемая частота синусоиды, точность ее формирования и т.д. Во многих случаях, проще и дешевле использовать полноценный ЦАП, нежели избавляться от грязи после ШИМ.
|
|
|
|
|
Jul 26 2009, 11:55
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(Microwatt @ Jul 26 2009, 14:07)  Вы полагаете, что ЦАП "грязи" не имеет? Вроде как для забивания частоты дескритизации тоже нужно(или полезно) ставить фильтры.
|
|
|
|
|
Jul 26 2009, 19:44
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141

|
Цитата(Microwatt @ Jul 26 2009, 17:07)  Вы полагаете, что ЦАП "грязи" не имеет? Если говорить о спектральном составе, "грязь" после ЦАП гораздо чище, чем после ШИМ. При достаточном количестве отсчетов на период, нефильтрованный сигнал на выходе ЦАП имеет очень незначительные отклонения от формы идеальной синусоиды, соответственно, мизерный коэффициент гармонических искажений.
|
|
|
|
|
Jul 29 2009, 11:48
|

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

|
Цитата(Microwatt @ Jul 29 2009, 15:20)  Да, такие мы темные, что поделать... Поясните, пожалуйста, попроще. В генераторах DDS меняется не тактовая частота, а а отсчеты синуса, типа, чем выше, тем синус -"реже"  Берутся не смежные отсчеты, а через один и т.п.
Прикрепленные файлы
MyDDS.pdf ( 758.56 килобайт )
Кол-во скачиваний: 108
|
|
|
|
|
Jul 29 2009, 12:13
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(muravei @ Jul 29 2009, 17:48)  В генераторах DDS меняется не тактовая частота, а а отсчеты синуса, типа, чем выше, тем синус -"реже"  Берутся не смежные отсчеты, а через один и т.п. Не так. Не через один, а наоборот - один и тот же отсчет повторяется. В противном случае будет искажение синуса. А фильтрация происходит именно этой частоты сэмплирования. Допустим, нам нужно сформировать синус до 1кГц при 50 отсчетах на период. Соответственно частота сэмплирования будет 50*1000=50кГц. Характеристика выходного фильтра должна быть такой, чтобы частоты до 1кГц пропускать без искажений, а 50кГц и выше ослабить до требуемого уровня. Чем меньше отсчетов на период синуса, тем ближе эти частоты и тем более высокого порядка фильтр требуется.
|
|
|
|
|
Jul 29 2009, 14:08
|
Гуру
     
Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802

|
Цитата(rx3apf @ Jul 29 2009, 14:26)  А что по этому поводу говорит теорема Котельникова ? И почему Вас не удивляет фильтр с фиксированной частотой среза на выходе звукового DAC ? А давайте оставим на это раз Котельникова в стороне. Как Фурье, Лапласа и прочих декартов с дюамелями. Наугад из коробки можно много фамилий вытащить. Теорема Котельникова совершенно не касается частоты среза фильтра в том смысле, который мы сейчас обсуждаем. Она всего лишь утверждает, что для данной схемы нужен ЦАП с частотой, как минимум, 100кГц. Хорошо, пусть в схеме есть такой ЦАП. Имеется перестраиваемый генератор, синтезирующий потребную форму и частоту с помощью ЦАП. И на выходе присобачен многозвенный фильтр с ФИКСИРОВАНОЙ частотой среза. Так вопрос: зачем? Если этот фильтр настроен на верхнюю частоту диапазона (50кГц), то как он помогает почистить от гармоник 5 или даже 10 кГц. Если же он настроен на частоту ниже 50 кГц, то что он вообще тут делает? Губит выходной сигнал? Вот ниже Resident подсказывает стоящим у доски. И мне кажется - правильно.
|
|
|
|
|
Jul 29 2009, 14:22
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Microwatt @ Jul 29 2009, 18:08)  Так вопрос: зачем? Если этот фильтр настроен на верхнюю частоту диапазона (50кГц), то как он помогает почистить от гармоник 5 или даже 10 кГц. А Вы вначале разберитесь, что порождает эти гармоники и каков их уровень. Цитата Если же он настроен на частоту ниже 50 кГц, то что он вообще тут делает? А, может быть, прочитать ту статью внимательнее, чтобы не было всяких домыслов типа "если он настроен". Там сказано, какую частоту среза имеет выходной ФНЧ. Цитата Вот ниже Resident подсказывает стоящим у доски. И мне кажется - правильно. Можно было бы и без подсказок обойтись - ключевое слово "DDS". Подсказка эта, между прочим, для частного случая, при генерируемой частоте 1 kHz и дискретизации 50 kHz. Я Вам не случайно назвал фамилию и не случайно намекнул на схемотехнику звуковой карты. Вот и ответьте (себе самому), как там (в звуковых картах) обходятся без перестраиваемых фильтров для воспроизводимого диапазона частот 20...20K Hz (а кто сказал, что обязательно музыку или речь ? Почему не однотональный синусоидальный сигнал ?) и чем определяется уровень гармоник выходного сигнала...
|
|
|
|
|
Jul 29 2009, 14:31
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(muravei @ Jul 29 2009, 18:31)  А как же тогда повысится выходная частота? Если кол-во отсчетов не изменится.  Выходная частота не может повысится выше максимальной - 1кГц при 50 отсчетах на период и 50кГц сэмплирования в моем примере. Она только понижается от максимальной, а вот количество отсчетов при этом пропорционально повышается. Пример (упрощенный для облегчения понимания). Пускай будет 10 отсчетов на период синуса. Частота сэмплирования - 10кГц. Максимальная выходная частота 10кГц/10=1кГц. Амплитуда - 128 единиц (256 - полный размах). Таблица с отсчетами синуса: 128, 203, 250, 250, 203, 128, 53, 6, 6, 53 Задача: получить выходную частоту синуса 200Гц. Считаем шаг для таблицы отсчета 200Гц/1000Гц=0,2 Индексы для выборки из таблицы отсчетов будут такие INT(0)= 0, INT(0,2)= 0, INT(0,4)= 0, INT(0,6)= 0, INT(0,8)= 0, INT(1,0)= 1, INT(1,2)= 1, INT(1,4)= 1, INT(1,6)= 1, INT(1,8)= 1, INT(2,0)= 2, INT(2,2)= 2 и т.д. Значит для формирования выходной частоты 200Гц на частоте сэмплирования 10кГц каждый отсчет будет повторен по 5 раз. В результате для формирования одного периода синуса частотой 200Гц в выходной ЦАП на частоте 10кГц будем записывать следующую последовательность 128, 128, 128, 128, 128, 203, 203, 203, 203, 203, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 203, 203, 203, 203, 203, 128, 128, 128, 128, 128, 53, 53, 53, 53, 53, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 53, 53, 53, 53, 53.
|
|
|
|
|
Jul 29 2009, 16:42
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Microwatt @ Jul 29 2009, 20:27)  То-есть, частота среза равна наивысшей синтезируемой частоте? На нижних частотах больше отсчетов, более подробно задается форма и необходимость в дополнительной фильтрации отпадает? Опять Вы не улавливаете ключевую идею. При идеальном DAC вообще нет составляющих меньше частоты дискретизации, а теоретически генерируемая частота достигает половины от частоты дискретизации. Вот фильтр под это и считается. Цитата Если так - можно согласиться. Хотя, три каскада ФНЧ (шестой порядок) ,на первый взгляд, кажутся избыточными. Это если только на первый и весьма поверхностный взгляд. Конечно, если генерируется 1 kHz при частоте дискретизации в 100 kHz, то там и RC-цепочки хватит. А вот если вблизи максимальной границы - то шестой порядок это только компромисс между качеством и сложностью...
Сообщение отредактировал rx3apf - Jul 29 2009, 16:48
|
|
|
|
|
Jul 29 2009, 17:46
|

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

|
Цитата(rezident @ Jul 29 2009, 18:31)  Выходная частота не может повысится выше максимальной - 1кГц при 50 отсчетах на период и 50кГц сэмплирования в моем примере. Она только понижается от максимальной, а вот количество отсчетов при этом пропорционально повышается. Выходит, чем нмже частота, тем хуже форма- в действительности, помоему, наоборот. И в прицепленной статье подругому. "Если значение приращения велико, аккумулятор фазы будет быстро пробегать всю таблицу синуса, хранящуюся в ПЗУ, и частота сигнала при этом будет высока. Если значение приращения фазы мало, аккумулятору фазы понадобится больше шагов, чтобы пройти всю таблицу ПЗУ, и соответственно частота сигнала на выходе будет низкой." Коряво, но "на пальцах" : ссылка
|
|
|
|
|
Jul 29 2009, 20:13
|
Гуру
     
Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802

|
Цитата(rezident @ Jul 29 2009, 21:06)  А кто-то разве спорит с тем, что форма синуса зависит от количества отсчетов?  Можно в таблицу и 1024 отсчета забить, а потом прореживать их до минимального. В пределе вообще два отсчета на период останутся. Не, ну все далее понятно.... И предельныя частота выборки и требуемая крутизна среза. Э-.мм.... Много лет назад сам считал фильтр для подобного случая, так , кажется, только в 8-й порядок уложился при неравномерности 3 дБ.... Я просто не понимал МЕТОД формирования, полагая частоту выборки кратной выходному сигналу.
|
|
|
|
|
Jul 30 2009, 17:19
|
Гуру
     
Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802

|
Да, в целочисленной арифметике, наверное, это неидеально, но относительно быстро и просто. Гм, в плавающей арифметике проблемы постоянного отслеживания фазы? Т.е в соседних периодах уже нужно брать разные выборки. Это сильно перегружает объем вычислений, не говоря уж о дробях, как таковых. Ладно, общий подход ясен, положим на полку. Но мне он в ближайшую пятницу пока не понадобится. А стартеру уже неделю назад ничего не нужно стало.
|
|
|
|
|
Jan 29 2010, 18:25
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 13-11-09
Из: Украина Шостка
Пользователь №: 53 609

|
Вери биг сенкс всем учавствовавшим, темка то что доктор прописал как раз то что меня интересует оч нужно сгородить ген синусоиды на частоту от 10Гц до 5кГц . пофиг что пропал топик стартер, ему уже до лампы эта тема , но поверте многим нужна. И еще небольшая просьба гуру: поделитесь кусочком кода на Си в теме формирования синуса , а то уже голову сломал подсказать некому, вот шляюсь по форумам , а тут такая тема... сорри что распыляюсь просто за 2 недели единственная толковая ветка..
|
|
|
|
|
Jan 30 2010, 09:27
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 13-11-09
Из: Украина Шостка
Пользователь №: 53 609

|
по 1 Гц если можно.... ткните еще носом в заполнение синуса на F=10 Гц и 10кГц естественно разное??? или не.. ???
|
|
|
|
|
Jan 30 2010, 11:26
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(KaMa3eR @ Jan 29 2010, 20:25)  оч нужно сгородить ген ему уже до лампы или не.. ??? На этом форуме принят более литературный вариант русского языка. Старайтесь придерживаться его, иначе вам просто не будут отвечать. Код #include "avr/io.h" #include "avr/pgmspace.h" #include "avr/interrrupts.h"
uint8_t const PROGMEM Table[65] = // Таблица значений синуса от 0 до Пи/2 включительно. Диапазон значений от 0x80 до 0xFF { ..... };
uint16_t Phase; // 8.8 fixed point uint16_t Phase_delta; // 8.8 fixed point
static uint8_t get_sinus() { Table_index = (Phase >> 8) & 0x3F; if(Phase & (1<<14)) Table_index = 64 - Table_index; uint8_t Result = pgm_read_byte(&Table[Table_index]); if(Phase & (1<<15)) Result = 0x80 - Result; Phase += Phase_delta; return Result; }
ISR(TIMER2_COMP_vect) { OCR2 = get_sinus(); }
int main() { // Fast PWM, T2CLK = F_CPU/32 TCCR2 = (0<<FOC2)|(1<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(1<<CS21)|(1<<CS20); TIMSK = (1<<OCIE2);
Phase_delta = 1234;
sei(); for(;;) { }
} Это идея реализации. Как рассчитать приращение фазы и какой предделитель таймера вам лучше подойдет - разберитесь сами.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 30 2010, 20:01
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 13-11-09
Из: Украина Шостка
Пользователь №: 53 609

|
за конструктивную критику спасибо , учту, а за подсказку двойной СПАСИБО суть движения уловил, только маленькое уточнение Phase_delta равен величине предыдущего импульса или фиксированная величина uint16_t Phase; // 8.8 fixed point uint16_t Phase_delta; // 8.8 fixed point
далее по тексту программы
|
|
|
|
|
Feb 14 2010, 10:20
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 13-11-09
Из: Украина Шостка
Пользователь №: 53 609

|
Снова возник вопрос как рассчитать заполнение и регулирование амплитуды на разных диапазанах частот даташит по етому повуду
|
|
|
|
|
Jun 26 2011, 18:49
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 13-11-09
Из: Украина Шостка
Пользователь №: 53 609

|
ну вот не прошло и несколько лет как практически готов ген синуса по Ридико.. Так вот вопросец возник такой мега 16 частота 16Мгц ------------ accumulator += add_value; temp = accumulator;
с переменной типа int accumulator, add_value, temp, accumulator; все ок, только смысла с переменной типа float не помещается в прерывании... OCR = 16E6/2*2^16 = 122,0703125 это значение должно быть больше значения времени обработки прерывания в тактах процессора OCR1 = 122 (0x7A)..... Как быть ????Подскажите ПЛЗ..
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|