WAVEFORM ГЕНЕРИРАНЕ използвайки PWM техника

S

SWETA

Guest
Аз wud б радвам, ако anyboby преживяна храна ми помогне да providin разтвор 2 покаже querry ми ..
Използвам ATmega 8L за функция генератор .. дере m използваш PWM техника за generatin греха (до 4 м Luk таблицата), квадратни и наземни вълни .. аз HV успя да развие всички г 3, BT m изправени пред проблем в generatin вълни амплитуда, както и честотата на потребителя изискване ..
Какви промени мога да направя, за да таймера и контрол регистър стойност, ако requirin променлива честота и амплитуда?
или просто трябва да се използва вместо да превключвате случаи извършване на промени, както беше споменато по-горе?

 
Ще бъде добре, ако ти дам предложения за въз основа на Atmel 89c52 контролер, може да решите да реализирате логиката за вашия контролер.Дали това много години назад.

 
неподписан овъглявам valuePWM, амплитуда, variableAmplitude;

/ / ValuePWM (0 .. 0xff да се 0 .. 5 волта)
/ / Амплитуда (0 .. 0xff да се MIN .. MAX амплитуда)

/ / Да се променлива амплитуда

variableAmplitude = (valuePWM * (амплитуда 1)) / 256;

/ / Ако (амплитуда == 0xff) после variableAmplitude = valuePWM (макс стойност)
/ / Ако (амплитуда == 0x00), тогава variableAmplitude = valuePWM/256 (мин. стойност)

/ / Да се променлива честота на употреба DDS Директен цифров синтез

/ *
Директен цифров синтез (DDS) е електронен метод за цифрово създаване на произволни waveforms и честотите от един, определен източник честота.

от http://en.wikipedia.org/wiki/Direct_Digital_Synthesis
* /

 
ОК .. ще направя chek покаже код svicent .. изглежда лесно .. благодаря 4 г помогне ..
и да ckshivaram, PLZ направи DAT .. въпреки че аз се опитах четене му дейташитове 2 в код по КН, ако му се използват в ATmega 8L, BT wud се оправи, ако и ми wid Ур подход N рова i'l потвърди, ако може да б от сумата Помощ докато работех върху ATmega 8L, cuz във всеки случай аз ще се работи върху microcontroller както е споменато abuv ..
neways благодаря.

 
SWETA написа:

Аз wud б радвам, ако anyboby преживяна храна ми помогне да providin разтвор 2 покаже querry ми ..

Използвам ATmega 8L за функция генератор .. дере m използваш PWM техника за generatin греха (до 4 м Luk таблицата), квадратни и наземни вълни .. аз HV успя да развие всички г 3, BT m изправени пред проблем в generatin вълни амплитуда, както и честотата на потребителя изискване ..

Какви промени мога да направя, за да таймера и контрол регистър стойност, ако requirin променлива честота и амплитуда?

или просто трябва да се използва вместо да превключвате случаи извършване на промени, както беше споменато по-горе?
 
Работя за г код, който аз HV копирани тук ... г логика DT svicent предвидени мен, 2 HV variabl амплитуда, изисква много 2 б промени в DS код .. findin тромаво, КН U предполагат 4 г същото ..
N Да .. чрез правиш промени в г Luk нагоре таблетки nly, аз генерирани г Одер вълни .. така че се надявам доза промени wud б applicabl 4 Одер вълни както wel ..
НЕ мога sum1 ясно покаже съмнение мой ... OCR1A определят горната стойност за брояч, което също му resolution.The Counter стойност увеличава до Сравнете Мач случва с OCR1A и после Counter се изчиства.
Исках 2 knw Уот точно това означава 2 за определяне г горната стойност на брояч, как заедно сравни мач възниква в началото на стойност Counter .. може да се направи по всяко стойност Предполагам N DT shud реши PWM следва Тим ...
PLZ предлагаме ...
Благодаря ви alll ..Код за генериране на хня вълна

# включват <avr\io.h>
# включват <avr\interrupt.h>
# включват <avr/pgmspace.h>
const uint8_t sinewave [] = PROGMEM
(
0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae,
0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xc9, 0xcc, 0xce, 0xd1, 0xd3, 0xd5, 0xd8,
0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf5,
0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7,
0xf6, 0xf5, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, 0xde, 0xdc,
0xda, 0xd8, 0xd5, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb3,
0xb0, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x98, 0x95, 0x92, 0x8f, 0x8c, 0x89, 0x86, 0x83,
0x80, 0x7c, 0x79, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x63, 0x60, 0x5d, 0x5a, 0x57, 0x54, 0x51,
0x4f, 0x4c, 0x49, 0x46, 0x43, 0x40, 0x3e, 0x3b, 0x38, 0x36, 0x33, 0x31, 0x2e, 0x2c, 0x2a, 0x27,
0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x13, 0x12, 0x10, 0x0f, 0x0d, 0x0c, 0x0a,
0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0c, 0x0d, 0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f, 0x21, 0x23,
0x25, 0x27, 0x2a, 0x2c, 0x2e, 0x31, 0x33, 0x36, 0x38, 0x3b, 0x3e, 0x40, 0x43, 0x46, 0x49, 0x4c,
0x4f, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x60, 0x63, 0x67, 0x6a, 0x6d, 0x70, 0x73, 0x76, 0x79, 0x7c
);
uint8_t I = 0;
ISR (TIMER1_COMPA_vect) (
OCR1A = pgm_read_byte (& sinewave);
I ;
)
INT главната (нищожна) (
/ / Port D пина като вход
DDRD = 0x00;
/ / Разрешаване на вътрешния издърпайте UPS
PORTD = 0xFF;
/ /
Задаване на PORTB1 ПИН като продукция
DDRB = 0xFF;
/ / Начална OCR1A стойност
OCR1A = 0x80;
/ / Изход сравни OC1A 8 битов без кавички PWM
TCCR1A = 0x91;
/ / проекта таймер, без prescaler
TCCR1B = 0x01;
/ / изход позволява сравняване прекъсне за OCR1A
TIMSK = 0x10;
/ / даде възможност на глобалната прекъсва
sei ();
докато (1) (
/ / цикъл за винаги.Прекъсва ще вършат работа.
)
)

 
таймера в този код по-горе ще се брои от нула до ТОП стойност, която е определена от OCR1A регистрирайте.Налице е механизъм, който, когато стойността на таймера равен с OCR1A регистър, таймерът ще се разчита да се върнете към нула (изглеждам като над поток).Някои друго събитие настъпи като прекъсне флаг или OC ПИН, активни, когато таймерът нулиране.И тъй като тази прекъсне е включено (по TIMSK и sei ()), тогава програмата отидете в прекъсне услуга рутинни (ISR (TIMER1_COMPA_vect)).В тази рутинна стойността на OCR1A е актуализиран с синусите стойност (uint8_t sinewave).Правейки това, ако сте филтрира изходящите ПИН от highpass филтъра, вие ще получите синусоидална waveform.

 
wel .. Да тя е като DAT nly .. просто DAT г използва филтър, shud б ниска мине като ниска честота синусоидална сигнал е 2 б извлечени 4 метра PWM високата честота на сигнала ... благодаря 4 г помогне neways .. КН U направи ми друга полза ... да sugest път в findin променлива амплитуда, както wel като променлива честота изход синусоидална вълна 4 метра покаже код .. Предполагам, че е необходимо промяна 2 г comlete код 4 г същото .. cuz 4 havin един varyin амплитуда на вълната на продукция, промени арго б направени 2 г Luk нагоре таблетки .. така че sugest решение .. wub ба gr8 помогне ..

 
Тя ще бъде трудно да се коригира амплитуда от софтуера.Можете да го лющене в софтуера, просто умножи стойността на синусите на масата, преди да го сложите на OCR1A регистрирайте.Но трябва да се грижи с преливник издава и други неща.
Най-лесният начин да се постигне променлива амплитуда е по-аналог.От филтъра можете мащаб с оп-ампер чрез обърнат или не обърнат усилвател верига.И BTW можете да използвате OP-усилвател за да вършат филтриране.

 
Първо, благодаря inverta 4 г предложение .. БТ г въпрос е Im TLD 2 направим Ал чрез programin, освен 4D филтър DT I wud б използваш най г мощност 2 г получи желания сигнали ...
Предполагам, че трябва 2 използвате различни логика .. сума начин чрез който може да варира г изхода
на усилвател с правиш промени в г мито цикъл на PWM сигнал ...
направи коментар относно покаже ..
Благодарение neways ...

<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="Неутрално" border="0" />
 
SWETA, моля използвайте правилен английски правопис.Това е международен форум.Някои хора могат да имат затруднения четене съобщенията си.

 
Да, аз правя съгласни ... Аз ще се погрижа да я от сега.

 
О благодаря ти echo47 ....
На първо открих, че е интересен начин да публикувате съобщение, така, предизвикателни за намиране на истинския смисъл на посланието .... но тя е станала притеснява ...: P и аз мисля, че направи някои хора мързеливи да отговори.

да sweta, ти са прави, като твърдят, че различни митото цикъл ще се различават от PWM продукция.Това какво точно програмата горе направя.Синусоидално waveform не е постоянен сигнал, се различават по своето време.Този защо програмата промяна митото цикъл (OCR2 Регистрация) периодично.BTW Аз мисля, че е направил грешка, като твърдят, че таймерът ще се върнете, когато се сравни мач настъпят.прочетете AVR информационен лист внимателно, особено в таймер раздел.Мисля, че обяснението, че в информационния лист е разбираем и лесен за да следват.

 
Това, което само говори за "Таймер възстановяване", аз съм v.much наясно, че вече (чрез дейташитове само) че тя не Нулиране но това се брои, докато тя не достигне до топ стойност ..и когато я достигне там, OC1A пинов toggles (който се определя на превключване на готовност), означава високата си толкова дълго, колкото таймер или Counter стойност е по-малка от стойността, дадени от OCR1A ПИН чрез периодични прекъсва за достигане ТОП стойност всеки .. и след това таймерът брои до крайната стойност на таймера и след това отново идва в дъното (който се допълва таймера
на цикъла) ... по този начин ние можем да кажем, че митото цикъл се променя чрез промяна на стойността на OCR1A ПИН от Luk горе таблица (например PWM висока честота на вълната на сигнала се получава в OC1A ПИН ).... и това мито цикъл явно дава средната ANALOG DC изход ...
Но ми се отнасят винаги е била по искане на логиката, която може да impliment това ..
Аз питам за код, ако можете да ми с ..
И да .. аз го чувствам, че ми постове да са разбрали, когато echo47 подчерта той .. и аз правя зачитане мнението си ..но inverta казва,
като се използват кратки форми в публикациите прави хората мързеливи да отговори ... Предполагам, че няма значение за този, който знае за решение на проблема и вярва в споделянето негово знание за едно и също ..
Да, но аз правя съгласни, че това е моето невежество и съм много много не притеснява хората вече чрез моя правопис ..
TC

 
в предишната си отговорете вие току-що каза нужда коментар ....

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Много щастлив" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Много щастлив" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Много щастлив" border="0" />и на първо място
аз ще ви кажа, че промяна на амплитуда, ще бъде чудесно, извършена от аналог, защото нейният аналог, имам предвид амплитуда диапазон може да се направи много по-дълъг от цифров, цифрови, защото е дискретно.

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Много щастлив" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Много щастлив" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Много щастлив" border="0" />Но ако вие настоявате да се направи, че в софтуера, мисля, че просто трябва да модифицирани вашата програма,
на първо място трябва да се предвидят рутинни приеме приноса на желаната амплитуда на вашата вълна форма, неговата зависи от вас метод за приемете вход (използвайки натиснете бутона, или potensio през adc, от избирателните секции се прекъсне или периодично).за малко нека просто кажем ли, че стойността в AMP.
след това в прекъсне rutin за таймера, Вие просто скала актуализираната стойност за ocr2a, така че кодът ще бъдеOCR1A = AMP * pgm_read_byte (& sinewave);този на всички, както споменах и преди, ще трябва да се грижи за преливане и други.и също така, може би трябва да се променили синусите таблица.

благодаряorrect M
e I
f I
'm W
rong)

cmiiw (C
orrect М
е д Аз съм W
rong)

 
WELL .. това е наистина добро предложение сте направили .. аз ще се опитам implimenting то веднага, но ще отнеме време, за да,
тъй като са започнали друг проект по FAT файлова система, като част от Стажантска програма ..
Трябва да ви помогне късно ... благодаря все пак ..
и там не е необходима корекция ..

 

Welcome to EDABoard.com

Sponsor

Back
Top