Формирование синус сигнала с заданной частотой, амплитудой и шим-модуляцией.

Тимон Петровд
Offline
Зарегистрирован: 21.11.2020

Здравствуйте! Вопрос к уважаемым старожилам) Хочу сделать ЦАП. Не могу понять как написать саму программу. В интернете находил скетчи, но они формируют сигнал, который для меня е подходит. Не знаю как под себя подстроить их скетчи.

Тимон Петровд
Offline
Зарегистрирован: 21.11.2020

Например, как поменять саму частоту в скетче. Какая часть скетча отвечает за частоту, амплитуду и шим-модуляцию. Вот пример из интернета

/*
DAC R/2R 50Hz
Ghost D. 2013
Это генератор синусоид с частотой 50Гц
*/

unsigned char sin_tab [256] = {
127,130,133,136,139,142,145,148,151,154,157,160,164,166,169,172,175,178,181,184,187,189,192,195, 197,200,202,205,
207,210,212,214,217,219,221,223,225,227,229,231,232,234,236,237,239,240,242,243, 244,245,246,247,248,249, 250,251,
251,252,252,253,253,253,253,253,254,253,253,253,253,252,252,251, 251,250,249,249,248,247,246,245,243,242,241,239,
238,236,235,233,231,230, 228,226,224,222,220,218, 215,213,211,209,206,204,201,199,196,193,191,188,185,182,180,177,
174,171,168,165,162,159,156,153, 150,147,144,141,137,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,
85,82,79,76, 73,71,68,65,62,60,57,54,52,49,47,44,42,40,38,35,33,31,29,27,25,23,22,20,18,17,15,14, 12,11,10,8,7,6,5,
4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,6,7,8,9,10,11,13,14,16,17,19,21,22,24, 26,28,30,32,34,36,39,41,43,46,
48,51,53,56,58,61,64,66,69,72,75,78,81,84,87,89,93,96, 99,102,105,108,111,114,117,120,123,127};

void setup() 
{ 
  DDRD = 0xFF; 
  DDRC |= 0b00111111; // PC0-PC5
  DDRB |= 0b00011000; // PB3-PB4
}

void pp(unsigned char i)
{
  // (PORTC & 0b11000000) - Обнуляем только используемые биты
  // i >> 2 - сдвигаем (отбрасываем первые 2 бита, которые будем выводить в порт Б
  // (PORTC & 0b11000000) | (i >> 2) выставляем только оставшиеся 5 бит в порту С
  PORTC = (PORTC & 0b11000000) | (i >> 2);
  // (PORTB & 0b11100111) - обнуляем только три используемых бита
  // (i & 0b00000011) - обнуляем неиспользуемые биты
  // (PORTB & 0b11100111) | (i & 0b00000011) - выставляем нужные биты в порту Б
  PORTB = (PORTB & 0b11100111) | (i & 0b00000011);
}

#define offset 128

void loop() { 
for (int i = 0, j = i + offset; i < 256; i++, j++) {
  PORTD = sin_tab[i];
  pp(sin_tab[j]);
  if (j == 255) j = 0;
  delayMicroseconds(75);
}
}
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А если тщательно парозмыслить?  Особенно над строкой #ХЗ

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Если у вас  есть ЦАП, то зачем вам ШИМ для генерации синуса? Или вы генерацию сигнала с помощью ШИМ называете ЦАПом?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Тимон, за частоту отвечает строчка с delayMicroseconds(), за амплитуду - массив sin_tab, а за ШИМ-модуляцию не отвечает ничего, т.к. ее в приведенном Вами исходнике нет.

И скетчи надо не "под себя подстраивать", а писать самому, чтобы Вы отвечали за каждую строчку кода. А то Вы приводите скетч, в котором ничего не смыслите. В этом случае способа "подстроить под себя" не существует.

 

PS. Да и исходник сам по себе кривоватый.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

А если тщательно парозмыслить?  Особенно над строкой #ХЗ

ты о 43 строке говоришь?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

DetSimen пишет:

А если тщательно парозмыслить?  Особенно над строкой #ХЗ

ты о 43 строке говоришь?

Я не щитал, а номеров нету. 

-NMi-
Offline
Зарегистрирован: 20.08.2018

asam пишет:

Если у вас  есть ЦАП, то зачем вам ШИМ для генерации синуса? Или вы генерацию сигнала с помощью ШИМ называете ЦАПом?


Тута весь порт буит цапом с разришением двестиписятпять папугаефф )))

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Не могу в своей больной голове объединить в одно целое ШИМ, синусоиду и ЦАП.
Что я делаю не так ?

-NMi-
Offline
Зарегистрирован: 20.08.2018

Kakmyc пишет:
Не могу в своей больной голове объединить в одно целое ШИМ, синусоиду и ЦАП.
Что я делаю не так ?

Вгалаве твайей апилки, ерунда, тыже кодишъ дурдуину --- дадада!
Здеся адно целое, шо ШИМ, шо r2r, разницы токмо куда плевать, фпорт ильже вригистр таймера )))

Kakmyc
Offline
Зарегистрирован: 15.01.2018

-NMi- пишет:
Kakmyc пишет:
Не могу в своей больной голове объединить в одно целое ШИМ, синусоиду и ЦАП.
Что я делаю не так ?

Вгалаве твайей апилки, ерунда, тыже кодишъ дурдуину --- дадада!
Здеся адно целое, шо ШИМ, шо r2r, разницы токмо куда плевать, фпорт ильже вригистр таймера )))

Я думал у меня одного голова больная...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

Я не щитал, а номеров нету. 

Избаловались, блин, изнежились, "без туалетной бумаги не воюем"!

-NMi-
Offline
Зарегистрирован: 20.08.2018

Kakmyc пишет:

Я думал у меня одного голова больная...


Дык чо, упатриблял давеча? И нипахмелилсо? Нипарядаг.
А по поводу кода - убрать цикл и добавить две строки, будет и шим и р2р. )))

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Похоже ТС помер +

Тимон Петровд
Offline
Зарегистрирован: 21.11.2020

Я в программировании немного понимаю, но с Ардуино работаю впервые. Не разобрался ещё до конца. А какую функцию надо употребить, чтобы сигнал был с шим модуляцией?

Тимон Петровд
Offline
Зарегистрирован: 21.11.2020

Я не правильно высказался. Я хочу сделать цап на основе шим, но где я мог бы менять с помощью кнопок параметры сигнала (амплитуда и частота) . Просто думал найти подомную программу и, разбирая её, понять как создать свою. Если знаете, то можете дать информацию по этому поводу? Ну или банально ссылку на сайт или тему форума, где это разбирается. Не могу найти форум, где это разбирается.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Тимон Петровд пишет:

А какую функцию надо употребить

RTFM !!!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Тимон Петровд пишет:

Я не правильно высказался.

Похоже, что так.

Цитата:

Я хочу сделать цап на основе шим, но где я мог бы менять с помощью кнопок параметры сигнала (амплитуда и частота) .

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

Вам в качестве источника информации желательно использовать два источника:

- дэйташит на тот контроллер, с которым будете работать (например Atmel Atmega328),

- статью, называющуюся примерно "Таймеры в AVR" или "Таймеры в Ардуино". Кстати, скорее всего, в этой статье будет ссылка и на дэйташит, так что начните с нее.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

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

Как это все увязать в одном месте ?
это в голове должны тараканы биотуалет открыть общественный и не следить за ним пару лет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Kakmyc пишет:
Как это все увязать в одном месте ?

Надо открыть схему онлайн бесперебойника на 1.5 киловатта, но и в нём частота строго 50 герц

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Kakmyc пишет:
ТС, я же не просто так тебе тут всеми способами намекаю, что "ЦАП, ШИМ и амплитуда", нигде не пересекаются в принципе. ЦАП выдает аналоговый сигнал пропорциональный входящему цифровому. ШИМ -широтно-импульсная модуляция, выражается параметрами "скважность" и "коофициент заполнения" Амплитуда - это максимально возможное изменение значений сигнала. Как это все увязать в одном месте ? это в голове должны тараканы биотуалет открыть общественный и не следить за ним пару лет.

 

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

Тимон Петровд
Offline
Зарегистрирован: 21.11.2020

Вы попали в точку. Спасибо

Тимон Петровд
Offline
Зарегистрирован: 21.11.2020

Спасибо за наводку.