-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!wsisiz.edu.pl!.POSTED!not-for-mail
From: Atlantis <m...@w...pl>
Newsgroups: pl.misc.elektronika
Subject: Fast PWM - trójkąt zamiast sinusa na wyjściu
Date: Sat, 16 Feb 2013 16:27:53 +0100
Organization: http://www.wit.edu.pl
Lines: 62
Message-ID: <kfo8i2$v93$1@portraits.wsisiz.edu.pl>
NNTP-Posting-Host: abmu44.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: portraits.wsisiz.edu.pl 1361028483 32035 83.7.240.44 (16 Feb 2013 15:28:03
GMT)
X-Complaints-To: a...@w...edu.pl
NNTP-Posting-Date: Sat, 16 Feb 2013 15:28:03 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130107
Thunderbird/17.0.2
Xref: news-archive.icm.edu.pl pl.misc.elektronika:642717
[ ukryj nagłówki ]Eksperymentuję właśnie z generowaniem przebiegu sinusoidalnego za pomocą
Atmegi8. Oparłem się na drugim przykładzie z tej strony:
http://tinyurl.com/d3tyvex
Przebieg ma być dialtonem o częstotliwości około 425 Hz.
Wzór przebiegu znajduje się w tabeli, wypełnionej w następujący sposób:
for (i=0; i<256; i++) sinus_buffer[i]=128+126*sin(6.26/256*1);
PWM generowany jest za pomocą TIMER1 ustawionego na Fast PWM (tryb 14).
Funkcja włączająca generowanie przebiegu wygląda następująco:
void StartDialtone (void)
{
TCCR1A |= _BV(COM1A1) | _BV(WGM11);
TCCR1B |= _BV(WGM13) | _BV(WGM12) | _BV(CS10);
ICR1 = 255;
OCR1A = 0;
sinus_ind = 0;
TCNT0 = 182;
TCCR0 |= _BV(CS00);
TIMSK |= _BV(TOIE0);
}
Z kolei wyłączająca wygląda następująco:
void StopDialtone (void)
{
TCCR0 &= ~_BV(CS00);
TIMSK &= ~_BV(TOIE0);
TCCR1A &= ~(_BV(COM1A1) | _BV(WGM11));
TCCR1B &= ~(_BV(WGM13) | _BV(WGM12) | _BV(CS10));
ICR1 = 0;
PORTB &= ~_BV(1);
}
Zmiana współczynnika wypełnienia odbywa się w przerwaniu, po
przepełnieniu TIMER0:
ISR (TIMER0_OVF_vect)
{
OCR1A = sinus_buffer[sinus_ind];
if (sinus_ind < 255) sinus_ind++;
else sinus_ind=0;
TCNT0 = 182;
}
Za wyjściem PB1/OC1A znajduje się filtr dolnoprzepustowy RC złożony z
rezystora 330 omów oraz kondensatora 1uF do masy. Za filtrem nie mam
jednak sinusoidy, a coś przypominające trójkąt:
http://imageshack.us/photo/my-images/4/img8927kj.jpg
/
Gdzie mogłem popełnić błąd? Problem będzie leżał raczej po stronie softu
czy sprzętu?
Następne wpisy z tego wątku
- 16.02.13 16:36 Atlantis
- 16.02.13 17:41 Anerys
- 16.02.13 17:46 Atlantis
- 16.02.13 17:52 AlexY
- 16.02.13 18:08 J.F.
- 17.02.13 10:07 Atlantis
- 17.02.13 17:46 AlexY
- 18.02.13 16:02 J.F
- 18.02.13 21:15 Jakub Rakus
- 18.02.13 21:55 Atlantis
- 19.02.13 00:56 Michoo
- 20.02.13 18:20 Atlantis
- 20.02.13 18:32 Atlantis
- 11.03.13 16:43 Michal Schulz
- 11.03.13 16:49 Michal Schulz
Najnowsze wątki z tej grupy
- Dławik CM
- JDG i utylizacja sprzetu
- Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- DS1813-10 się psuje
- Taki tam szkolny problem...
- LIR2032 a ML2032
- SmartWatch Multimetr bezprzewodowy
- olej psuje?
- Internet w lesie - Starlink
- Opis produktu z Aliexpress
- No proszę, a śmialiście się z hindusów.
- Zewnętrzne napięcie referencyjne LM385 1,2V -> 100mV dla ICL7106, Metex M-3800
- karta parkingowa
- Wl/Wyl (On/Off) bialy/niebieski
- I3C
Najnowsze wątki
- 2024-11-29 Dławik CM
- 2024-11-29 [OT] Lewe oprogramowanie
- 2024-11-29 Błonie => Sales Specialist <=
- 2024-11-29 Warszawa => IT Expert (Network Systems area) <=
- 2024-11-29 Warszawa => Ekspert IT (obszar systemów sieciowych) <=
- 2024-11-29 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-29 Białystok => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-29 Pómpy ciepła darmo rozdajoo
- 2024-11-29 Białystok => Application Security Engineer <=
- 2024-11-29 Białystok => Programista Full Stack (.Net Core) <=
- 2024-11-29 Gdańsk => Software .Net Developer <=
- 2024-11-29 Wrocław => Key Account Manager <=
- 2024-11-29 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-29 Chrzanów => Specjalista ds. public relations <=
- 2024-11-27 Re: UseGalileo -- PRODUKTY I APLIKACJE UŻYWAJĄ JUŻ DZIŚ SYSTEMU GALILEO