Страница 1 из 1

генератор произвольных сигналов или ЦАП на МК класса тини

Добавлено: Чт окт 17, 2013 12:35:35
c2n
Доброго дня.

Понадобился мне внезапно задающий генератор произвольной формы сигналов... в частности SIN - формы. Прочитал про "генератор сисек" толи у товарисча DI, толи еще у кого...
вроде все устраивает, но! Похоже я восьмибитным ЦАП R2R в 256 отсчетов на 1 выходной такт, более 70кГц не разгонюсь на тини или даже меге 16й... на кристале в 20МГц. Можно конечно отсчеты уменьшить - но не хочется...


Есть ли какие нибудь интегральные микросхемы работающие:
например: Загнал последовательность уровней, щелкнул защелку и оно начало крутить по сигналам с генератора тактовых импульсов, пока защелку не отжали.
По принципу сдвигового регистра 74HC595 (Кажысь). Можно и на них собрать... но это мне прийдется 256 регистров в одну сеть городить... а потом к ней пристраивать R2R а это и деньги и место.... и трудоемкость монтажа...

или вобще генератор такого типа: Дается верхнее максимальное напряжение, дается "0", дается значение частоты, например в виде эквивалентного напряжения (резистором/цифровым потонциометром - задается), или в виде цифры, или в виде ШИМ... и оно начинает генерировать гармонику....

Собственно из гармонического сигнала можно сделать и меандр, и пилу, и горы... это уже другая песня :)

Частота мне нужна от нуля до пары сотен килогерц. 200 кГц в принципе достаточно.
по задумке - на нагрузку сигнал будет подаваться через ОУ управляющий транзисторным каскадом... поэтому выходной ток с ИМС - меня волнует не очень сильно.
точность... ну чем выше тем лучше.. отклонение до 5% при 100кГц - устроит более чем полностью.

Подскажите, может есть чтото на подобие....

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Чт окт 17, 2013 14:07:12
akl
Параллельное ОЗУ(или FRAM)+счетчик адресов+регистр-защёлка на выходе. Загружается необходимая последовательность, потом счетчик адресов быстро считывает по кругу.

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Чт окт 17, 2013 16:24:03
c2n
Круто :)

а если взять:
LC7218 синтезатор частоты для AM/FM тюнеров dip24s
M52313SP PLL синтезатор для тюнера
SAA1057 синтезатор радиоприемника dip18
LM7001(J) синтезатор (direct PLL) obs!
TSA5511 PLL синтезатор 1,7ГГц i2c dip18
TSA5512AT синтезатор 1.6 ГГц с i2c управлением
AD9835BRUZ DDS синтезатор 50МГц serial tssop16


что нибудь из этого????? или это не совсем то, что мне надо?

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Чт окт 17, 2013 16:50:09
akl
c2n писал(а):AD9835BRUZ DDS синтезатор 50МГц serial tssop16
Ну, разве попытаться её приспособить с учетом этого.

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пт окт 18, 2013 10:07:44
c2n
Дорогая игрушка... у меня вся остальная схема - дешевле...

А если заставить МК Тини/Мега на максимальной частоте от внешнего кварца(20МГц) воспроизводить данные загнаные в него через SPI или иными методами.

например пересчитанную таблицу синуса относительно 8бит. (показаны первые несколько тактов. Всю таблицу в экселе составить за 5 минут)
СпойлерШАГ Доля градуса Радианное значение Sin Уровень +0,5 8-битное значение
0 0 0 0 0,5 128
1 1,411764706 0,024639942 0,024637449 0,512318725 131
2 2,823529412 0,049279885 0,049259941 0,524629971 134
3 4,235294118 0,073919827 0,073852527 0,536926264 137
4 5,647058824 0,09855977 0,098400278 0,549200139 141
5 7,058823529 0,123199712 0,122888291 0,561444145 144
6 8,470588235 0,147839654 0,147301698 0,573650849 147
7 9,882352941 0,172479597 0,171625679 0,58581284 150
8 11,29411765 0,197119539 0,195845467 0,597922734 153
9 12,70588235 0,221759481 0,219946358 0,609973179 156
10 14,11764706 0,246399424 0,24391372 0,62195686 159
11 15,52941176 0,271039366 0,267733003 0,633866502 162
12 16,94117647 0,295679309 0,291389747 0,645694873 165
13 18,35294118 0,320319251 0,314869589 0,657434794 168
14 19,76470588 0,344959193 0,338158275 0,669079137 171
15 21,17647059 0,369599136 0,361241666 0,680620833 174
16 22,58823529 0,394239078 0,384105749 0,692052875 177
17 24 0,41887902 0,406736643 0,703368322 180
18 25,41176471 0,443518963 0,429120609 0,714560304 183
Возьму максимально дискретезация - 8 бит.
Максимальное чисто отсчетов 256. (8 бит)

и выводить в основном цикле программы элемент массива в порт.

На какую максимальную частоту воспроизведения я могу расчитывать?

И второй вопрос.
ЦАП DAC08CP мне подойдет? что-бы не городить R2R цепь?

И самый главный вопрос: в этом случае я смогу разогнаться до 100кГц (выходной сигнал) или чуть больше на синусе в 256 отсчетов? после обработки этим ЦАПом. ?

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Вс дек 01, 2013 23:39:56
c2n
кварц 20мгц, 4бита - 100кГц синус на выходе.
и спаленый Драгон :(

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пн дек 02, 2013 17:08:19
Gudd-Head
c2n писал(а):Похоже я восьмибитным ЦАП R2R в 256 отсчетов на 1 выходной такт, более 70кГц не разгонюсь на тини или даже меге 16й... на кристале в 20МГц.
Вот это можно попобробней? R2R ЦАП параллельный, для формирования отсчёта необходимо просто выкинуть данные в 8-битный порт.
Команда IN/OUT — 2 такта, загрузка из памяти — 2 такта, ещё пара тактов модификация счётчика адреса памяти.

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пн дек 02, 2013 17:23:53
balmer
Можно взять самую дешевую STM32 c DAC - она без проблем выдаст 1 мегасэмпл на выходе DAC. Это значит что синус 100 кгц будет довольно чистым.

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пн дек 02, 2013 19:40:23
c2n
да... именно r2r ЦАП. тиньи 2313 с кварцем

и такой быдлокод:

Код: Выделить всё

#include <avr/io.h>
////////1 - выход
#define discretiz 0b1111

int Sinusoida[discretiz];

int ololo3(void)
{
	{
		double X,Y;
		
		for (unsigned char iter;iter<= discretiz; iter++)
		{
			PORTB=iter;
			X=((2*3.14)/discretiz)*iter;
			Y=((sin(X))+1)*127;
			Sinusoida[iter] = round(Y);
		}
		
	}
	
}


int main(void)
{
	DDRB = 0b111111111; // порт в режиме вывода
	PORTB = 0b00000000; // обнулить порт
	DDRA = 0b111;
	PORTA = 0;
	
	ololo3();
	
	while (1) 
	{
		//PORTB=1;
		for (unsigned char posMas = 0;posMas<=discretiz;posMas++)
		{
		PORTB = Sinusoida[posMas];	
		}
		PORTA=~PORTA;
		//ololo3();
		

	} 
}
соответственно можно модернизировать... выкинув расчет синуса, но практически я достиг 100кГц

форма сигнала косоватый такой, но больше синус. чем пила :)

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пн дек 09, 2013 16:46:41
zero648
Так эта, можно взять тиньку 85 или типа нее 45, 25, у них на борту есть PLL генератор на 64МГц, 8-ми битный ШИМ 250КГц выдает, во как.

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пн дек 09, 2013 17:02:48
c2n
Хорошая мысль! надо попробовать :) Спасибо за идею :)

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Чт дек 12, 2013 23:07:17
c2n
Курю про PLL. Получается, что с этой фишкой я без внешнего кварца смогу разогнать МК до 16МГЦ? и все?

Но этого маловато, т.к. мне сигнал не ШИМ нужен а "произвольный", 4х битный. ШИМ сигнал частный случай

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пт дек 13, 2013 03:10:12
zöner

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пт дек 13, 2013 09:46:46
zero648
c2n писал(а):Курю про PLL. Получается, что с этой фишкой я без внешнего кварца смогу разогнать МК до 16МГЦ? и все?

Но этого маловато, т.к. мне сигнал не ШИМ нужен а "произвольный", 4х битный. ШИМ сигнал частный случай
Почему 16МГц, плохо значит разобрался, еще раз повторю 64 МГц, а не 16. Что есть "произвольный не ШИМ", не совсем дошло. Так то можно сделать и 4х и 5ти и 6ти битный ШИМ.

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пт дек 13, 2013 10:29:27
c2n
не не не.. в ДШ вроде как написано, что Fcpu = 1/4Fpll
а Fio=Fcpu

так что хрена там...
Ну или если можно киньтесь сишным кодом.. я хоть разберусь какие регистры куда

ЦАП - пускай будет R2R

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пт дек 13, 2013 11:36:58
zero648
Поглядел ДШ, 64МГц можно сделать только для timer1, системная частота тогда будет 16МГц, а в протеусе у меня системная была 64МГц. :o
Изображение

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пт дек 13, 2013 13:54:54
c2n
не.. не катит :)

Значит будем использовать кварц в 20 МГц....

Re: генератор произвольных сигналов или ЦАП на МК класса тин

Добавлено: Пт дек 27, 2013 01:15:54
ua1arn
Пять копеек от меня:
http://www.cqham.ru/forum/showthread.php?t=26353 (проект с исходниками там тоже выложен).
9 тактов на цикл с внутренней таблицей трансляции или 7 тактов на цикл без. На 20 МГц контроллерах вроде ATMEGA88 или ATMEGA324 тактовая DDS как-бы 2.2 МГц. И без разрывов фазы при изменении частоты.
c2n писал(а):точность... ну чем выше тем лучше.. отклонение до 5% при 100кГц - устроит более чем полностью.
Если укоротите аккумулятор с 32-х бит до 24 или даже до 16, можете существенно ускорить работу (и повысить качество формирования выходного сигнала).