-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
.pl!news.nask.org.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl
!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.
POSTED!not-for-mail
From: "Robbo" <r...@h...com>
Newsgroups: pl.misc.elektronika
Subject: ATmega, 2-kanały PWM z przesunięciem fazowym
Date: Mon, 25 Jul 2011 16:47:24 +0200
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.5512
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5512
X-RFC2646: Format=Flowed; Original
Lines: 96
Message-ID: <4e2d81fd$0$3488$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 83.24.135.38
X-Trace: 1311605245 unt-rea-b-01.news.neostrada.pl 3488 83.24.135.38:3712
X-Complaints-To: a...@n...neostrada.pl
Xref: news-archive.icm.edu.pl pl.misc.elektronika:614383
[ ukryj nagłówki ]Witam,
Pracuję nad układem na bazie ATmega128, który będzie sterował tranzystorami
za pomocą dwóch kanałów PWM. Kanały te powinny być przesunięte względem
siebie. Przygotowałem rysunek, który obrazuje to, o co mi chodzi:
http://img828.imageshack.us/img828/9135/pwm.png
Częstotliwość PWM ok. 20kHz (częstotliwość okresu pojedynczego kanału).
Rozdzielczość regulacji wypełnienia ok. 500 (najlepiej byłoby ok. 1000, ale
tak się chyba nie da przy zachowaniu częstotliwości na wymaganym poziomie).
(Zapewne jakoś będę musiał kosztem rozdzielczości regulacji wypełnienia
podbić częstotliwość albo na odwrót).
Przerwa między kanałami przy max. wypełnieniu to 2 mikrosekundy (jest to
czas potrzebny na wyłączenie tranzystorów).
Wypełnienia obydwu kanałów muszą być równe parami (żeby nie było niesymetrii
w sterowaniu par tranzystorów).
Napisałem też już kod na ATmega128. Niemniej może da się to prościej /
lepiej rozwiązać. Poza tym mam z tym programem mały problem (o tym poniżej).
Ewentualnie w grę wchodzi także rozwiązanie z jednym PWM (dwa razy szybszym)
i wyjściem, które przełączałoby sygnał z PWM raz na jedną parę, a raz na
drugą parę tranzystorów. Będę bardzo wdzięczny za sugestie, jak inaczej
można rozwiązać to, nad czym pracuję. Chciałbym, aby procesor nie był za
bardzo obciążony generowaniem PWM, gdyż oprócz tego będzie działał w pętli
głównej regulator sprzężenia zwrotnego sterujący wypełnieniem PWM oraz kilka
innych rzeczy.
Oto mój kod (wykorzystuję ATmega128, dwa 16-bitowe PWM-y Timer1 i Timer3).
Na razie wypełnienia zmieniają się parami (taki test): raz 100, raz 400, raz
100, raz 400 itd. Potem będzie regulator ze sprzężeniem zwrotnym.
Mam z tym programem mały problem. Polega on na tym, że ustawiam TCNT3 = 511
oraz TCNT1 = 0, aby uzyskać przesunięcie fazowe między kanałami PWM. Przy
czym te ustawienia odbywają się na pracujących PWM i po ustawieniu TCNT3 =
511 PWM już pracuje i liczy, zatem w momencie gdy ustawiam TCNT1 = 0, to
TCNT3 już kilka wartości zliczyło i przesunięcie między kanałami nie będzie
idealnie w połowie. Nie wiem na razie, jak zrobić, aby mieć idelnie w
połowie przesunięcie między kanałami, czy ktoś z Was ma pomysł?
Program ten daje taki obraz na oscyloskopie:
http://img849.imageshack.us/img849/8677/newfile2.png
#define __AVR_ATMEGA128__
#include <stdio.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/io.h>
#include <inttypes.h>
SIGNAL (SIG_OVERFLOW3)
{
static uint8_t f2 = 0;
if (f2 == 0)
OCR1B = OCR3B = 100, f2 = 1;
else
OCR1B = OCR3B = 480, f2 = 0;
}
int main(void)
{
DDRA = 0xff;
DDRB = 0xff;
DDRC = 0xff;
DDRD = 0xff;
DDRE = 0xff;
DDRG = 0xff;
cli();
TCCR3A = _BV(COM3A1) | _BV(COM3B1) | _BV(WGM31) | _BV(WGM30);
TCCR3B = _BV(WGM32) | _BV(CS30);
TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM11) | _BV(WGM10);
TCCR1B = _BV(WGM12) | _BV(CS10);
TCNT3 = 511;
TCNT1 = 0;
ETIMSK |= _BV(TOIE3);
sei();
while (1) {
}
return 0;
}
Z góry dziękuję za pomoc.
Robbo
Najnowsze wątki z tej grupy
- Coś dusi.
- akumulator napięcie 12.0v
- Podłączenie DMA 8257 do 8085
- pozew za naprawę sprzętu na youtube
- gasik
- Zbieranie danych przez www
- reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- Problem z odczytem karty CF
- 74F vs 74HCT
- Newag ciąg dalszy
- Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- Szukam: czujnik ruchu z możliwością zaączenia na stałe
- kabelek - kynar ?
- Podnieść masę o 0.6V
- Moduł BT BLE 5.0
Najnowsze wątki
- 2025-01-13 Warszawa => Key Account Manager <=
- 2025-01-13 Szczecin => Senior Field Sales (system ERP) <=
- 2025-01-13 Rzeszów => International Freight Forwarder <=
- 2025-01-13 Bydgoszcz => Specjalista ds. Sprzedaży (transport drogowy) <=
- 2025-01-13 Poznań => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-01-13 Warszawa => Staż w dziale Sprzedaży B2B <=
- 2025-01-13 Wydajność klimy w obecnych temperaturach
- 2025-01-13 Błonie => Analityk Systemów Informatycznych (TMS SPEED) <=
- 2025-01-13 Kraków => UX Designer <=
- 2025-01-13 Katowice => Key Account Manager (ERP) <=
- 2025-01-13 Mińsk Mazowiecki => Spedytor Międzynarodowy <=
- 2025-01-12 USB3.x->HDMI/DP ze sterownikami w win11
- 2025-01-12 Jak na naszych oczach odradza się cenzura :-)
- 2025-01-11 Koszty prowadzenia firmy za granicą
- 2025-01-11 19 migrantów