DIY dijital sinyal üreteci. Fonksiyonel DDS jeneratörü. Cihaz bir muhafazaya monte edilmiştir

Sinyallerin bu DDS fonksiyon üreteci (versiyon 2.0) bir AVR mikro denetleyicisine monte edilmiştir, iyi işlevselliğe sahiptir, genlik kontrolüne sahiptir ve ayrıca tek taraflı bir baskılı devre kartı üzerine monte edilmiştir.

Bu jeneratör, Jesper DDS jeneratör algoritmasını temel alır; program, montaj kodu ekleriyle AVR-GCC C için modernize edilmiştir. Jeneratörün iki çıkış sinyali vardır: birincisi DDS sinyalleridir, ikincisi yüksek hızlı (1..8 MHz) "dikdörtgen" çıkıştır ve bu, MK'yi yanlış tüylerle ve başka amaçlarla canlandırmak için kullanılabilir.
Yüksek hızlı HS (Yüksek Hız) sinyali doğrudan Atmega16 OC1A (PD5) mikro denetleyicisinden alınır.
DDS sinyalleri, dirençli bir R2R matrisi aracılığıyla ve sinyal genliğinin ve ofsetinin (Ofset) ayarlanmasına izin veren LM358N mikro devresi aracılığıyla diğer MC çıkışlarından üretilir. Ofset ve genlik iki potansiyometre kullanılarak ayarlanır. Ofset +5V..-5V aralığında ayarlanabilir ve genlik 0...10V'dir. DDS sinyallerinin frekansı 0... 65534 Hz ​​aralığında ayarlanabilir; bu, ses devrelerini ve diğer amatör radyo görevlerini test etmek için fazlasıyla yeterlidir.

DDS jeneratörü V2.0'ın ana özellikleri:
- basit devre yaygın ve ucuz radyo elemanlarıyla;
- tek taraflı baskılı devre kartı;
- dahili güç kaynağı;
- 8 MHz'e kadar ayrı yüksek hızlı çıkış (HS);
- Değişken genlik ve ofset ile DDS sinyalleri;
- DDS sinyalleri: sinüs, dikdörtgen, testere ve ters testere, üçgen, EKG sinyali ve gürültü sinyali;
- 2×16 LCD ekran;
- sezgisel 5 düğmeli klavye;
- frekans ayarlama adımları: 1, 10, 100, 1000, 10000 Hz;
- gücü açtıktan sonraki son durumu hatırlamak.

Aşağıdaki blok diyagram bir fonksiyon oluşturucunun mantıksal yapısını göstermektedir:

Gördüğünüz gibi cihaz birkaç besleme voltajına ihtiyaç duyuyor: +5V, -12V, +12V. +12V ve -12V voltajları sinyal genliğini ve ofsetini düzenlemek için kullanılır. Güç kaynağı, bir transformatör ve birkaç voltaj dengeleyici yonga kullanılarak tasarlanmıştır:

Güç kaynağı ayrı bir karta monte edilmiştir:

Güç kaynağını kendiniz monte etmek istemiyorsanız, gerekli tüm voltajların zaten mevcut olduğu bir bilgisayardan normal bir ATX güç kaynağı kullanabilirsiniz. .

LCD ekran

Tüm eylemler LCD ekran aracılığıyla görüntülenir. Jeneratör beş tuşla kontrol edilir

Yukarı/aşağı tuşları menüde gezinmek için, sol/sağ tuşları ise frekans değerini değiştirmek için kullanılır. Orta tuşa basıldığında seçilen sinyal üretilmeye başlar. Tuşa tekrar basıldığında jeneratör durdurulur.

Frekans değişim adımını ayarlamak için sağlanmıştır ayrı anlam. Frekansı geniş bir aralıkta değiştirmeniz gerekiyorsa bu kullanışlıdır.

Gürültü üretecinin herhangi bir ayarı yoktur. Sürekli olarak DDS üretecinin çıkışına beslenen olağan Rand() fonksiyonunu kullanır.

HS yüksek hızlı çıkışının 4 frekans modu vardır: 1, 2, 4 ve 8 MHz.

Şematik diyagram

Fonksiyon üreteci devresi basittir ve kolayca erişilebilen öğeler içerir:
- AVR mikrodenetleyici Atmega16, 16 MHz'de harici kuvars ile;
- standart HD44780 tipi LCD ekran 2×16;
- Sıradan dirençlerden yapılmış R2R DAC matrisi;
- işlemsel amplifikatör LM358N (KR1040UD1'in yerli analogu);
- iki potansiyometre;
- beş anahtar;
- birkaç konektör.

Ödemek:

Fonksiyonel jeneratör plastik bir kutuya monte edilmiştir:


Yazılım

Yukarıda da söylediğim gibi programımı Jesper DDS üreteç algoritması üzerine kurdum. Üretim durdurmayı uygulamak için birkaç satır montaj kodu ekledim. Artık algoritma 9 yerine 10 CPU döngüsü içeriyor.

void statik satır içi Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)(
asm volatile("eor r18, r18 ;r18<-0″ "\n\t"
"veya r19, r19 ;r19<-0″ "\n\t"
"1:" "\n\t"
"r18 ekle, %0 ;1 çevrim" "\n\t"
"adc r19, %1 ;1 çevrim" "\n\t"
"adc %A3, %2 ;1 çevrim" "\n\t"
"lpm ;3 döngü" "\n\t"
"out %4, __tmp_reg__ ;1 döngü" "\n\t"
"sbis %5, 2 ;1 döngü, eğer atlama yoksa" "\n\t"
"rjmp 1b ;2 döngü. Toplam 10 döngü" "\n\t"
:
:"r" (ad0),"r" (ad1),"r" (ad2),,"e" (sinyal),,"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR) ))
:"r18", "r19"
);}

DDS sinyal formlarının tablosu, adresi 0xXX00 ile başlayan MK'nin flash belleğinde bulunur. Bu bölümler makefile'da uygun hafıza konumlarında tanımlanmıştır:
#Sinyal tablolarının saklanacağı bölümleri tanımlayın
LDFLAGS += -Wl,-section-start=.MySection1=0x3A00
LDFLAGS += -Wl,-section-start=.MySection2=0x3B00
LDFLAGS += -Wl,-section-start=.MySection3=0x3C00
LDFLAGS += -Wl,-section-start=.MySection4=0x3D00
LDFLAGS += -Wl,-section-start=.MySection5=0x3E00
LDFLAGS += -Wl,-section-start=.MySection6=0x3F00

LCD ile çalışmak için kütüphaneyi alabilirsiniz.

Program kodunun ayrıntılı bir açıklamasına girmek istemiyorum. Kaynak kodu iyi bir şekilde yorumlanmıştır (İngilizce olmasına rağmen) ve bu konuda herhangi bir sorunuz varsa, her zaman bizimkini veya makalenin yorumlarını kullanabilirsiniz.

Test

Jeneratörü bir osiloskop ve bir frekans sayacıyla test ettim. Tüm sinyaller tüm frekans aralığında (1...65535 Hz) iyi bir şekilde üretilir. Genlik ve ofset ayarları iyi çalışıyor.

Jeneratörün bir sonraki versiyonunda yükselen bir sinüs dalgası sinyali uygulamayı düşünüyorum.

Yazılımın son sürümünü (), kaynağını, dosyalarını aşağıdan indirebilirsiniz.

Radyo elemanlarının listesi

Tanım Tip Mezhep Miktar NotMağazanot defterim
Doğrusal regülatör

LM7805

1 Not defterine
Doğrusal regülatör

LM7812

1 Not defterine
Doğrusal regülatör

LM7912

1 Not defterine
B1 Diyot köprüsü 1 Not defterine
C1, C7 2000 uF2 Not defterine
C3, C5, C9 Elektrolitik kapasitör100 uF3 Not defterine
C4, C6, C10 Kapasitör0,1 uF3 Not defterine
TR1 Trafo220V - 2x15V1 Not defterine
F1 Sigorta 1 Not defterine
S1 Anahtar220V1 Not defterine
X1 BağlayıcıAğ 220V1 Not defterine
JP1 Bağlayıcı4 kişi1 PSU çıkışı Not defterine
Ana kart
IC1 MK AVR 8 bit

ATmega16

1 Not defterine
IC2 Operasyonel amplifikatör

LM358N

1 KR1040UD1 Not defterine
C2, C3 Kapasitör0,1 uF2 Not defterine
C6, C7 Kapasitör18pF2 Not defterine
R1 Direnç

500Ohm

1 Not defterine
R2, R6, R8, R10, R12, R14, R16, R18 Direnç

10 kOhm

8 Not defterine
R3, R21 Direnç

100 kOhm

2 Not defterine
R20 Direnç

100Ohm

1 Not defterine
R22 Direnç

12 kOhm

1 Not defterine
tencere Düzeltici direnci10 kOhm1

Elektronik kurucular konusuna devam edersek, bu sefer acemi bir radyo amatörünün ölçüm aletleri cephaneliğini yenilemek için kullanılan cihazlardan birinden bahsetmek istiyorum.
Doğru, bu cihaza ölçüm cihazı denemez, ancak ölçümlere yardımcı olduğu açıktır.

Çoğu zaman, radyo amatörleri ve sadece diğerleri değil, çeşitli elektronik cihazları kontrol etme ihtiyacıyla karşı karşıya kalırlar. Bu hem hata ayıklama aşamasında hem de onarım aşamasında gerçekleşir.
Kontrol etmek için, bir sinyalin cihazın farklı devrelerinden geçişini izlemek gerekebilir, ancak cihazın kendisi bunun harici sinyal kaynakları olmadan yapılmasına her zaman izin vermez.
Örneğin, çok aşamalı bir düşük frekanslı güç amplifikatörünü kurarken/kontrol ederken.

Başlangıç ​​​​olarak, bu incelemede nelerin tartışılacağı hakkında biraz açıklamaya değer.
Size bir sinyal üreteci monte etmenizi sağlayan bir kurucudan bahsetmek istiyorum.

Farklı jeneratörler var, örneğin aşağıda da jeneratörler var :)

Ama bir sinyal üreteci kuracağız. Uzun yıllardır eski bir analog jeneratör kullanıyorum. Sinüzoidal sinyal üretme açısından çok iyidir, frekans aralığı 10-100000 Hz'dir ancak boyutu büyüktür ve diğer formlarda sinyal üretemez.
Bu durumda bir DDS sinyal üreteci kuracağız.
Bu DDS veya Rusça - doğrudan bir dijital sentez devresi.
Bu cihaz, ana olarak tek frekanslı dahili bir osilatör kullanarak isteğe bağlı şekil ve frekansta sinyaller üretebilir.
Bu tip jeneratörün avantajları, çok ince adımlarla geniş bir ayar aralığına sahip olunabilmesi ve gerekirse karmaşık şekillerde sinyaller üretilebilmesidir.

Her zaman olduğu gibi, önce ambalajlama hakkında biraz bilgi verelim.
Tasarımcı, standart ambalajın yanı sıra beyaz kalın bir zarfla paketlendi.
Tüm bileşenlerin kendisi mandallı antistatik bir torbanın içindeydi (bir radyo amatör için oldukça faydalı bir şey :))

Paketin içindeki bileşenler gevşekti ve paketten açıldığında buna benzer bir şeye benziyorlardı.

Ekran kabarcıklı polietilenle sarıldı. Yaklaşık bir yıl önce bunu kullanarak zaten böyle bir gösteri yapmıştım, bu yüzden üzerinde durmayacağım, sadece olaysız bir şekilde geldiğini söyleyeceğim.
Kit ayrıca iki BNC konektörü içeriyordu, ancak osiloskop incelemesinden daha basit bir tasarıma sahipti.

Ayrı olarak, küçük bir polietilen köpük parçasının üzerinde onlar için mikro devreler ve prizler vardı.
Cihaz, Atmel'in ATmega16 mikrokontrolcüsünü kullanıyor.
Bazen insanlar bir mikrodenetleyiciye işlemci adını vererek isimleri karıştırırlar. Aslında bunlar farklı şeylerdir.
Bir işlemci aslında sadece bir bilgisayardır; mikrodenetleyici ise işlemciye ek olarak RAM ve ROM'u içerir ve ayrıca çeşitli çevre birimleri, DAC, ADC, PWM denetleyicisi, karşılaştırıcılar vb. içerebilir.

İkinci çip, çift işlemsel amplifikatör LM358'dir. En yaygın, yaygın işlemsel yükselteç.

Öncelikle tüm seti yerleştirelim ve bize ne verdiklerini görelim.
PCB'ler
Ekran 1602
İki BNC konektörü
İki değişken direnç ve bir düzeltici
Kuvars rezonatör
Dirençler ve kapasitörler
Mikro devreler
Altı düğme
Çeşitli konektörler ve bağlantı elemanları

Çift taraflı baskıya sahip baskılı devre kartı, üst tarafta elemanların işaretleri vardır.
Devre şeması kite dahil olmadığından kartta elemanların konum tanımları değil değerleri bulunur. Onlar. Her şey bir diyagram olmadan monte edilebilir.

Metal kaplama yüksek kalitede yapıldı, yorum yapmadım, temas pedlerinin kaplaması mükemmeldi ve lehimlenmesi kolaydı.

Baskının kenarları arasındaki geçişler çift yapılmıştır.
Bunun neden her zamanki gibi değil de bu şekilde yapıldığını bilmiyorum, ancak bu yalnızca güvenilirliği artırıyor.

İlk olarak baskılı devre kartını kullanarak devre şeması çizmeye başladım. Ancak zaten çalışma sürecinde, bu kurucuyu oluştururken muhtemelen zaten bilinen bazı şemaların kullanıldığını düşündüm.
Ve böylece ortaya çıktı ki, internette yapılan bir arama beni bu cihaza getirdi.
Bağlantıda bir şema, baskılı devre kartı ve ürün yazılımı içeren kaynaklar bulabilirsiniz.
Ama yine de diyagramı olduğu gibi tamamlamaya karar verdim ve orijinal versiyonla %100 tutarlı olduğunu söyleyebilirim. Tasarımcının tasarımcıları, baskılı devre kartının kendi versiyonunu geliştirdiler. Bu, eğer bu cihaz için alternatif donanım yazılımı varsa, bunların burada da çalışacağı anlamına gelir.
Devre tasarımı ile ilgili bir not var, HS çıkışı direkt işlemci çıkışından alınıyor, herhangi bir koruma yok yani bu çıkışın yanlışlıkla yanma ihtimali var :(

Madem bundan bahsediyoruz, bu devrenin fonksiyonel birimlerini anlatmakta ve bazılarını daha detaylı anlatmakta fayda var.
Ana bileşenleri renkli olarak vurguladığım devre şemasının renkli bir versiyonunu yaptım.
Renklere isim bulmak benim için zor ama sonra elimden geldiğince anlatacağım :)
Soldaki mor olan, bir düğme kullanılarak yapılan ilk sıfırlama ve zorunlu sıfırlama düğümüdür.
Güç uygulandığında C1 kondansatörü boşalır, bu nedenle işlemcinin Reset pini düşük olur; kondansatör R14 direnci üzerinden şarj edildiğinde Reset girişindeki voltaj yükselecek ve işlemci çalışmaya başlayacaktır.
Yeşil - Çalışma modlarını değiştirmek için düğmeler
Açık mor mu? - Ekran 1602, arka ışık akımı sınırlama direnci ve kontrast kesme direnci.
Kırmızı - sinyal amplifikatörü ve sıfıra göre ofset ayar ünitesi (incelemenin sonuna doğru ne yaptığı gösterilir)
Mavi - DAC. Dijitalden Analoga Dönüştürücü. DAC devreye göre monte edilir, bu en basit DAC seçeneklerinden biridir. Bu durumda bir mikrodenetleyici portunun tüm pinleri kullanıldığı için 8 bitlik bir DAC kullanılır. İşlemci pinlerindeki kodu değiştirerek 256 voltaj seviyesi (8 bit) elde edebilirsiniz. Bu DAC, R ve 2R olmak üzere iki bölümden oluşan, adının geldiği yer olan 2 faktörü ile birbirinden farklı olan iki değerden oluşan bir dizi dirençten oluşur.
Bu çözümün avantajları, ucuz maliyetle yüksek hızdır; hassas dirençlerin kullanılması daha iyidir. Arkadaşım ve ben bu prensibi kullandık, ancak ADC için tam direnç seçimi küçüktü, bu yüzden biraz farklı bir prensip kullandık, tüm dirençleri aynı değere kurduk, ancak 2R'nin gerekli olduğu yerde 2 direnç bağladık seri halinde.
Dijitalden analoğa dönüşümün bu prensibi ilk "ses kartlarından" birinde mevcuttu - . LPT bağlantı noktasına bağlı bir R2R matrisi de vardı.
Yukarıda yazdığım gibi, bu tasarımcıda DAC'nin çözünürlüğü 8 bit veya 256 sinyal seviyesidir ve bu, basit bir cihaz için fazlasıyla yeterlidir.

Yazarın sayfasında şemaya ek olarak ürün yazılımı vb. Bu cihazın blok şeması keşfedildi.
Düğümlerin bağlantısını daha net hale getirir.

Açıklamanın ana kısmını bitirdik, genişletilmiş kısım metnin ilerleyen kısımlarında olacak ve doğrudan montaja geçeceğiz.
Önceki örneklerde olduğu gibi dirençlerle başlamaya karar verdim.
Bu tasarımcıda çok sayıda direnç var, ancak yalnızca birkaç değer var.
Dirençlerin çoğunluğunun 20k ve 10k olmak üzere yalnızca iki değeri vardır ve bunların neredeyse tamamı R2R matrisinde kullanılır.
Montajı biraz kolaylaştırmak adına dirençlerini belirlemenize bile gerek yok diyeceğim sadece 20k dirençler 9 adet, 10k dirençler ise 8 adet :)

Bu sefer biraz farklı bir kurulum teknolojisi kullandım. Öncekilere göre daha az beğendim ama onun da yaşam hakkı var. Bazı durumlarda bu teknoloji, özellikle çok sayıda aynı eleman üzerinde kurulumu hızlandırır.
Bu durumda, direnç terminalleri öncekiyle aynı şekilde oluşturulur, ardından aynı değerdeki tüm dirençler önce karta, sonra ikinciye monte edilir, böylece bu tür iki bileşen hattı elde edilir.

Arka tarafta, uçlar biraz bükülmüş, ancak çok fazla değil, asıl mesele elemanların düşmemesi ve tahtanın uçlar yukarı bakacak şekilde masanın üzerine yerleştirilmesidir.

Daha sonra bir elinize lehimi, diğer elinize havyayı alın ve dolu tüm temas yüzeylerini lehimleyin.
Bileşen sayısı konusunda fazla kıskanç olmamalısınız çünkü tahtanın tamamını bir kerede doldurursanız bu "ormanda" kaybolabilirsiniz :)

Sonunda lehime yakın bileşenlerin çıkıntılı uçlarını ısırıyoruz. Yan kesiciler aynı anda birden fazla ucu yakalayabilir (bir seferde 4-5-6 parça).
Şahsen ben bu kurulum yöntemini pek hoş karşılamıyorum ve bunu sadece çeşitli montaj seçeneklerini göstermek adına gösterdim.
Bu yöntemin dezavantajları:
Kırpma keskin, çıkıntılı uçlarla sonuçlanır.
Bileşenler arka arkaya değilse, her şeyin karışmaya başladığı ve bu yalnızca işi yavaşlattığı karmaşık sonuçlara ulaşmak kolaydır.

Avantajları arasında:
Bir veya iki sıra halinde monte edilen benzer bileşenlerin yüksek kurulum hızı
Uçlar çok fazla bükülmediğinden bileşenin sökülmesi daha kolaydır.

Bu kurulum yöntemi genellikle ucuz bilgisayar güç kaynaklarında bulunabilir, ancak terminaller ısırılmaz, ancak kesme diski gibi bir şeyle kesilir.

Ana direnç sayısını taktıktan sonra, farklı değerde birkaç parçamız kalacak.
Çift açık, bunlar iki adet 100k direnç.
Son üç direnç -
kahverengi - kırmızı - siyah - kırmızı - kahverengi - 12k
kırmızı - kırmızı - siyah - siyah - kahverengi - 220 Ohm.
kahverengi - siyah - siyah - siyah - kahverengi - 100 Ohm.

Son dirençleri lehimliyoruz, bundan sonra kart böyle görünmeli.

Renk kodlu dirençler iyi bir şeydir ancak bazen işaretlemenin başlangıcının nerede sayılacağı konusunda kafa karışıklığı olabilir.
Ve eğer işaretin dört şeritten oluştuğu dirençlerde genellikle sorun ortaya çıkmazsa, son şerit genellikle gümüş veya altın olduğundan, işaretin beş şeritten oluştuğu dirençlerde sorunlar ortaya çıkabilir.
Gerçek şu ki, son şerit mezhep şeritleriyle aynı renge sahip olabilir.

İşaretlemenin daha kolay tanınmasını sağlamak için son şerit diğerlerinden aralıklı olarak yerleştirilmelidir, ancak bu idealdir. Gerçek hayatta her şey amaçlanandan tamamen farklı oluyor ve şeritler birbirine aynı mesafede arka arkaya yer alıyor.
Ne yazık ki, bu durumda, bilinen tüm mezhepler basitçe kaldırıldığında ve geri kalanlardan ne tür bir mezhep olduğunu anlayabileceğiniz bir multimetre yardımcı olabilir veya basitçe mantık (bir cihazın bir kitten monte edilmesi durumunda) olabilir. önümüzde.
Örneğin, bu setteki direnç işaretleme seçeneklerinin birkaç fotoğrafı.
1. İki bitişik direncin üzerinde değeri nereden okuduğunuz önemli olmayan "ayna" işaretleri vardı :)
2. Dirençler 100k'dir, son şeridin ana şeritlerden biraz daha uzakta olduğunu görebilirsiniz (her iki fotoğrafta da değer soldan sağa okunur).

Tamam dirençler ve onların markalama zorlukları bitti, daha basit konulara geçelim.
Bu sette yalnızca dört kapasitör var ve bunlar eşleştirilmiş durumda. Her birinden iki tane olmak üzere yalnızca iki mezhep vardır.
Kitte ayrıca 16 MHz'lik bir kuvars rezonatör de vardı.

Önceki incelemede kapasitörler ve kuvars rezonatörden bahsetmiştim, bu yüzden size sadece nereye kurulmaları gerektiğini göstereceğim.
Görünüşe göre, başlangıçta tüm kapasitörler aynı tipte tasarlandı, ancak 22 pF kapasitörlerin yerini küçük disk kapasitörler aldı. Gerçek şu ki, tahtadaki boşluk, pimler arasında 5 mm'lik bir mesafe için tasarlandı ve küçük disklerde yalnızca 2,5 mm var, bu nedenle pimleri biraz bükmeleri gerekecek. Kasanın yakınında bükmeniz gerekecek (neyse ki pimler yumuşaktır), çünkü üstlerinde bir işlemci olduğu için tahta üzerinde minimum bir yükseklik elde etmek gerekir.

Mikro devrelere birkaç soket ve birkaç konektör dahil edildi.
Bir sonraki aşamada onlara ihtiyacımız olacak ve bunlara ek olarak uzun bir konektör (dişi) ve dört pinli bir erkek konektör (fotoğrafta yer almıyor) alacağız.

Mikro devreleri kurmak için kullanılan prizler en sıradan olanıydı, ancak SSCB zamanlarındaki prizlerle karşılaştırıldığında şıktı.
Aslında, uygulamanın gösterdiği gibi, gerçek hayatta bu tür paneller cihazın kendisinden daha uzun süre dayanır.
Panellerin üzerinde bir anahtar var, kısa kenarlardan birinde küçük bir kesik var. Aslında soketin kendisi onu nasıl kurduğunuzla ilgilenmiyor, sadece mikro devreleri kurarken kesmeyi kullanarak gezinmek daha kolay.

Soketleri takarken baskılı devre kartındaki işaretle aynı şekilde takıyoruz.

Panelleri kurduktan sonra tahta bir şekil almaya başlar.

Cihaz altı düğme ve iki değişken direnç kullanılarak kontrol edilir.
Orijinal cihazda beş düğme kullanıldı, tasarımcı altıncısını ekledi; sıfırlama işlevini gerçekleştiriyor. Dürüst olmak gerekirse, gerçek kullanımdaki anlamını henüz tam olarak anlamadım çünkü tüm testler sırasında buna hiç ihtiyacım olmadı.

Yukarıda kitin iki adet değişken direnç içerdiğini ve kitin ayrıca bir kesme direnci içerdiğini yazmıştım. Size bu bileşenlerden biraz bahsedeceğim.
Değişken dirençler, direnci hızlı bir şekilde değiştirmek için tasarlanmıştır; nominal değere ek olarak işlevsel bir özellik ile de işaretlenmiştir.
İşlevsel özellik, düğme çevrildiğinde direncin direncinin nasıl değişeceğidir.
Üç ana özellik vardır:
A (içe aktarılan B versiyonunda) - doğrusal, dirençteki değişiklik doğrusal olarak dönme açısına bağlıdır. Bu tür dirençler, örneğin güç kaynağı voltaj düzenleme birimlerinde kullanıma uygundur.
B (içe aktarılan C versiyonunda) logaritmiktir, direnç ilk başta keskin bir şekilde değişir ve ortaya daha yumuşak bir şekilde yaklaşır.
B (içe aktarılan A versiyonunda) - ters logaritmik, direnç ilk başta yumuşak bir şekilde değişir, ortaya daha keskin bir şekilde yaklaşır. Bu tür dirençler genellikle ses kontrollerinde kullanılır.
Ek tip - W, yalnızca ithal versiyonda üretilir. S-şekilli ayarlama özelliği, logaritmik ve ters logaritmik melezidir. Dürüst olmak gerekirse bunların nerede kullanıldığını bilmiyorum.
İlgilenenler devamını okuyabilir.
Bu arada, ayar karakteristiğinin harfinin bizimkiyle çakıştığı ithal değişken dirençlerle karşılaştım. Örneğin, doğrusal bir karakteristiğe ve atamada A harfine sahip modern bir ithal değişken direnç. Şüpheniz varsa, web sitesinde ek bilgi aramak daha iyidir.
Kit iki değişken direnç içeriyordu ve yalnızca biri işaretlendi :(

Ayrıca bir trim direnci de dahil edildi. özünde bir değişkenle aynıdır, yalnızca operasyonel ayarlama için tasarlanmamıştır, daha ziyade onu ayarlayın ve unutun.
Bu tür dirençlerde genellikle bir tornavida için bir yuva bulunur, bir tutamak yoktur ve direnç değişiminin yalnızca doğrusal bir özelliği vardır (en azından diğerlerine rastlamadım).

Dirençleri ve düğmeleri lehimleyip BNC konektörlerine geçiyoruz.
Cihazı bir durumda kullanmayı planlıyorsanız, kit içinde sağlanan düğmeleri artırmamak için daha uzun saplı düğmeler satın almaya değer olabilir, daha uygun olacaktır.
Ancak aralarındaki mesafe çok küçük olduğu ve bu formda kullanılması sakıncalı olacağı için değişken dirençleri kabloların üzerine koyardım.

BNC konnektörleri osiloskop incelemesindekilerden daha basit olmasına rağmen onları daha çok beğendim.
Önemli olan lehimlemenin daha kolay olmasıdır ki bu da yeni başlayanlar için önemlidir.
Ancak bir de not vardı: Tasarımcılar konektörleri tahtaya o kadar yakın yerleştirdiler ki, biri her zaman diğerinin üstünde olacak iki somunu sıkmak neredeyse imkansızdı;
Genel olarak, gerçek hayatta her iki konektöre aynı anda ihtiyaç duyulması nadirdir, ancak tasarımcılar bunları en az birkaç milimetre birbirinden ayırmış olsaydı çok daha iyi olurdu.

Ana kartın asıl lehimleme işlemi tamamlandı, artık işlemsel amplifikatörü ve mikro denetleyiciyi yerine takabilirsiniz.

Kurulumdan önce genellikle pinleri çipin merkezine daha yakın olacak şekilde biraz büküyorum. Bu çok basit bir şekilde yapılır: mikro devreyi iki elinizle kısa kenarlarından alın ve uçları düz bir tabana, örneğin bir masaya doğru olacak şekilde dikey olarak bastırın. Kabloları çok fazla bükmenize gerek yok, bu daha çok bir alışkanlık meselesi, ancak mikro devreyi sokete takmak çok daha uygun.
Takarken, geriye doğru büküldüğünde kopabilecekleri için kabloların mikro devrenin altında yanlışlıkla içe doğru bükülmediğinden emin olun.

Mikro devreleri, karttaki işaretlere uygun olarak takılan soket üzerindeki anahtara göre kuruyoruz.

Tahtayı bitirdikten sonra ekrana geçiyoruz.
Kit, konektörün lehimlenmesi gereken bir pim kısmını içeriyordu.
Konektörü taktıktan sonra, önce bir dış pimi lehimliyorum, güzel lehimlenip lehimlenmediği önemli değil, asıl önemli olan konektörün tahta düzlemine sıkı ve dik durmasını sağlamaktır. Gerekirse lehimleme alanını ısıtıyoruz ve konektörü kesiyoruz.
Konektörü hizaladıktan sonra kalan kontakları lehimleyin.

İşte bu, tahtayı yıkayabilirsin. Bu sefer bunu testten önce yapmaya karar verdim, ancak bazen başka bir şeyi lehimlemeniz gerektiğinden, genellikle ilk açılıştan sonra yıkamayı yapmanızı tavsiye ederim.
Ancak uygulamanın gösterdiği gibi, yapıcılarla her şey çok daha basittir ve montajdan sonra nadiren lehim yapmanız gerekir.

Farklı şekil ve yöntemlerle yıkayabilirsiniz, kimisi alkol kullanıyor, kimisi alkol-benzin karışımı kullanıyor, ben tahtaları asetonla yıkıyorum, en azından şimdilik satın alabiliyorum.
Yıkadığımda, pamuk yünü kullandığım için önceki incelemedeki fırçayla ilgili tavsiyeyi hatırladım. Sorun değil, bir dahaki sefere deneyi yeniden planlamamız gerekecek.

Çalışmamda, konnektörlerin üzerine vernik bulaşması kabul edilemez olduğundan, tahtayı yıkadıktan sonra genellikle alttan koruyucu vernikle kaplama alışkanlığı geliştirdim.
Çalışmalarımda Plastic 70 vernik kullanıyorum.
Bu vernik çok "hafiftir", yani. Gerekirse asetonla yıkanır ve havya ile lehimlenir. Ayrıca iyi bir Üretan verniği var, ancak onunla her şey gözle görülür şekilde daha karmaşık, daha güçlü ve bir havya ile lehimlenmesi çok daha zor. BU vernik, zorlu çalışma koşulları için ve en azından uzun bir süre tahtayı artık lehimlemeyeceğimize dair güven oluştuğunda kullanılır.

Verniklemeden sonra tahta daha parlak ve dokunuşu hoş hale gelir ve sürecin belli bir tamamlanma hissi vardır :)
Fotoğrafın genel resmi yansıtmaması çok yazık.
Bazen insanların şu sözlerine güldüm: Bu kayıt cihazı/TV/alıcı tamir edildi, lehim izleri görülüyor :)
İyi ve doğru lehimleme ile herhangi bir onarım belirtisi görülmez. Cihazın tamir edilip edilmediğini ancak bir uzman anlayabilir.

Şimdi ekranı kurmanın zamanı geldi. Bunu yapmak için kitte dört adet M3 vida ve iki adet montaj direği bulunuyordu.
Ekran, konektör tarafında konektörün kendisi tarafından tutulduğundan yalnızca konektörün karşı tarafına takılır.

Rafları ana karta takıyoruz, ardından ekranı takıyoruz ve sonunda kalan iki vidayı kullanarak tüm bu yapıyı sabitliyoruz.
Deliklerin bile kıskanılacak bir doğrulukla çakışması hoşuma gitti ve ayar yapmadan vidaları takıp vidaladım :).

İşte bu kadar, deneyebilirsiniz.
İlgili konnektör kontaklarına 5 Volt uyguluyorum ve...
Ve hiçbir şey olmuyor, sadece arka ışık açılıyor.
Korkmayın ve hemen forumlarda çözüm arayın, her şey yolunda, olması gereken de bu.
Kartta bir ayar direnci olduğunu ve bunun iyi bir nedeni olduğunu hatırlıyoruz :)
Ekranın kontrastını ayarlamak için bu kırpma direncinin kullanılması gerekiyor ve başlangıçta orta konumda olduğu için hiçbir şey görmememiz oldukça doğal.
Bir tornavida alıyoruz ve bu direnci ekranda normal bir görüntü elde edene kadar döndürüyoruz.
Çok fazla bükerseniz, aşırı kontrast olur, tüm tanıdık yerleri aynı anda görürüz ve aktif bölümler zar zor görünür olur; bu durumda, aktif olmayan elemanlar neredeyse kaybolana kadar direnci ters yönde bükeriz. Hiçbir şey.
Etkin olmayan öğelerin hiç görünmeyeceği şekilde ayarlayabilirsiniz, ancak ben genellikle onları zar zor farkedilir halde bırakıyorum.

Daha sonra testlere geçebilirdim ama durum böyle değildi.
Anakartı elime aldığımda ilk fark ettiğim şey 5 Volt'a ek olarak +12 ve -12'ye ihtiyaç duymasıydı, yani. yalnızca üç voltaj. Az önce +5, +12 ve -5 Volta sahip olmanın gerekli olduğu ve bunların belirli bir sırayla beslenmesi gereken RK86'yı hatırladım.

Eğer 5 Volt'ta da sorun yoksa, +12 Volt'ta da -12 Volt küçük bir sorun haline geliyordu. Küçük bir geçici güç kaynağı yapmam gerekiyordu.
Bu süreçte, namlunun altından neyin monte edilebileceğini arayan, takip eden ve bir tahta yapan bir klasik vardı.

Tek sargılı bir transformatörüm olduğundan ve dürtü jeneratörünü çitle çevirmek istemediğim için, güç kaynağını voltajı iki katına çıkaran bir devreye göre monte etmeye karar verdim.
Dürüst olmak gerekirse, bu en iyi seçenek olmaktan çok uzak, çünkü böyle bir devre oldukça yüksek bir dalgalanma seviyesine sahip ve stabilizatörlerin onu tamamen filtreleyebilmesi için çok az voltaj rezervim vardı.
Yukarıda bunu yapmanın daha doğru olduğu şema, aşağıda benim yaptığım şema.
Aralarındaki fark, ek transformatör sargısı ve iki diyottur.

Ayrıca neredeyse hiç rezerv sağlamadım. Ancak aynı zamanda normal şebeke voltajında ​​da yeterlidir.
En az 2 VA, tercihen 3-4 VA ve her biri 15 Volt'luk iki sargıya sahip bir transformatör kullanmanızı tavsiye ederim.
Bu arada, kartın tüketimi küçüktür, arka ışıkla birlikte 5 Volt'ta akım yalnızca 35-38 mA'dır, 12 Volt'ta akım tüketimi daha da azdır, ancak bu yüke bağlıdır.

Sonuç olarak, kibrit kutusundan biraz daha büyük, çoğunlukla yüksekliğinde küçük bir eşarp buldum.

İlk bakışta panonun düzeni biraz tuhaf görünebilir, çünkü transformatörü 180 derece döndürmek ve daha doğru bir düzen elde etmek mümkündü, ben de ilk başta öyle yaptım.
Ancak bu versiyonda, şebeke voltajına sahip izlerin cihazın ana kartına tehlikeli derecede yakın olduğu ortaya çıktı ve kabloları biraz değiştirmeye karar verdim. Harika olduğunu söylemeyeceğim ama en azından biraz daha güvenli.
Sigortanın yerini kaldırabilirsiniz, çünkü kullanılan transformatörle buna özel bir ihtiyaç yoktur, o zaman daha da iyi olacaktır.

Cihazın tam seti böyle görünüyor. Güç kaynağını cihaz kartına bağlamak için 4x4 pinli küçük bir sert konektörü lehimledim.

Güç kaynağı kartı, bir konnektör kullanılarak ana karta bağlanır ve artık cihazın çalışması ve testine ilişkin açıklamalara geçebilirsiniz. Bu aşamada montaj tamamlanmıştır.
Elbette tüm bunları bir araya getirmek mümkündü, ancak benim için böyle bir cihaz daha çok yardımcı bir cihaz, çünkü zaten daha karmaşık DDS jeneratörlerine bakıyorum, ancak bunların maliyeti yeni başlayanlar için her zaman uygun değil, bu yüzden olduğu gibi bırakmaya karar verdim.

Test başlamadan önce cihazın kontrollerini ve yeteneklerini anlatacağım.
Kartta 5 adet kontrol butonu ve bir adet reset butonu bulunmaktadır.
Ancak sıfırlama düğmesiyle ilgili olarak her şeyin açık olduğunu düşünüyorum ve gerisini daha detaylı anlatacağım.
Sağ/sol düğmeyi değiştirirken hafif bir "sıçramaya" dikkat etmek önemlidir, belki de "anti-sıçrama" yazılımının süresi çok kısadır, kendisini esas olarak yalnızca HS modunda ve çıkış frekansını seçme modunda gösterir. frekans ayarlama adımında diğer modlarda herhangi bir sorun fark edilmedi.
Yukarı ve aşağı düğmeleri cihazın çalışma modlarını değiştirir.
1. Sinüzoidal
2. Dikdörtgen
3. Testere dişi
4. Ters testere dişi

1. Üçgen
2. Yüksek frekans çıkışı (ayrı HS konektörü, DDS çıkışı için diğer formlar verilmiştir)
3. Gürültü benzeri (DAC çıkışındaki kombinasyonların rastgele seçilmesiyle oluşturulur)
4. Kardiyogram sinyalinin emülasyonu (her türlü sinyalin üretilebileceğinin bir örneği olarak)

1-2. DDS çıkışındaki frekansı 1-65535Hz aralığında 1Hz adımlarla değiştirebilirsiniz.
3-4. Ayrı olarak, ayar adımını varsayılan olarak seçmenize izin veren bir öğe vardır; adım 100Hz'dir.
Çalışma frekansını ve modlarını yalnızca üretim kapalıyken değiştirebilirsiniz. Değişiklik sol/sağ tuşlarını kullanarak gerçekleşir.
Üretim START butonu ile açılır.

Ayrıca kartta iki adet değişken direnç bulunmaktadır.
Bunlardan biri sinyalin genliğini, ikincisi ise ofseti düzenler.
Osilogramlarda neye benzediğini göstermeye çalıştım.
Üstteki ikisi çıkış sinyali seviyesini değiştirmek içindir, alttaki ikisi ofseti ayarlamak içindir.

Test sonuçları takip edecek.
Tüm sinyaller (gürültü benzeri ve HF hariç) dört frekansta test edildi:
1. 1000Hz
2.5000 Hz
3. 10000 Hz
4. 20000Hz.
Daha yüksek frekanslarda büyük bir düşüş olduğu için bu osilogramları göstermenin pek bir anlamı yok.
Başlangıç ​​olarak sinüzoidal bir sinyal.

Testere dişi

Ters testere dişi

üçgen

DDS çıkışlı dikdörtgen

Kardiyogram

RF çıkışlı dikdörtgen
Burada sadece dört frekans arasından seçim yapabilirsiniz, onları kontrol ettim
1.1MHz
2.2MHz
3.4MHz
4.8MHz

Osiloskopun iki tarama modunda gürültüye benzer, böylece ne olduğu daha net anlaşılır.

Testler, sinyallerin yaklaşık 10 kHz'den itibaren oldukça bozuk bir şekle sahip olduğunu göstermiştir. İlk başta basitleştirilmiş DAC'den ve sentez uygulamasının basitliğinden dolayı suçluydum, ancak bunu daha dikkatli bir şekilde kontrol etmek istedim.
Kontrol etmek için doğrudan DAC çıkışına bir osiloskop bağladım ve sentezleyicinin mümkün olan maksimum frekansını 65535 Hz olarak ayarladım.
Burada resim daha iyi, özellikle de jeneratörün maksimum frekansta çalıştığı göz önüne alındığında. Op-amp'ten önceki sinyal belirgin şekilde daha "güzel" olduğundan, basit amplifikasyon devresinin suçlanacağından şüpheleniyorum.

Acemi bir radyo amatörünün küçük bir "standının" grup fotoğrafı :)

Sürdürmek.
Artıları
Yüksek kaliteli tahta üretimi.
Tüm bileşenler stokta mevcuttu
Montaj sırasında herhangi bir zorluk yaşanmadı.
Mükemmel işlevsellik

Eksileri
BNC konnektörleri birbirine çok yakın
HS çıkışı için koruma yok.

Benim fikrim. Elbette cihazın özelliklerinin çok zayıf olduğu söylenebilir, ancak bunun çok giriş seviyesi bir DDS jeneratörü olduğunu ve ondan daha fazlasını beklemek tamamen doğru olmayacağını düşünmekte fayda var. Tahtanın kalitesinden memnun kaldım, montajı zevkliydi, "bitmesi" gereken tek bir yer yoktu. Cihazın oldukça iyi bilinen bir şemaya göre monte edildiği göz önüne alındığında, işlevselliği artırabilecek alternatif ürün yazılımı için umut var. Tüm artıları ve eksileri göz önünde bulundurarak, bu seti yeni başlayan radyo amatörleri için bir başlangıç ​​seti olarak tamamen tavsiye edebilirim.

Eh, öyle görünüyor, bir yerde yanlışım varsa yazın, düzeltirim/eklerim :)

Ürün mağaza tarafından yorum yazılması için sağlandı. İnceleme Site Kuralları'nın 18. maddesine uygun olarak yayınlandı.

+47 almayı planlıyorum Favorilere ekle İncelemeyi beğendim +60 +126

Sinyallerin bu DDS fonksiyon üreteci (versiyon 2.0) bir AVR mikro denetleyicisine monte edilmiştir, iyi işlevselliğe sahiptir, genlik kontrolüne sahiptir ve ayrıca tek taraflı bir baskılı devre kartı üzerine monte edilmiştir.

Bu jeneratör, Jesper DDS jeneratör algoritmasını temel alır; program, montaj kodu ekleriyle AVR-GCC C için modernize edilmiştir. Jeneratörün iki çıkış sinyali vardır: birincisi DDS sinyalleridir, ikincisi yüksek hızlı (1..8 MHz) "dikdörtgen" çıkıştır ve bu, MK'yi yanlış tüylerle ve başka amaçlarla canlandırmak için kullanılabilir.
Yüksek hızlı HS (Yüksek Hız) sinyali doğrudan Atmega16 OC1A (PD5) mikro denetleyicisinden alınır.
DDS sinyalleri, dirençli bir R2R matrisi aracılığıyla ve sinyal genliğinin ve ofsetinin (Ofset) ayarlanmasına izin veren LM358N mikro devresi aracılığıyla diğer MC çıkışlarından üretilir. Ofset ve genlik iki potansiyometre kullanılarak ayarlanır. Ofset +5V..-5V aralığında ayarlanabilir ve genlik 0...10V'dir. DDS sinyallerinin frekansı 0... 65534 Hz ​​aralığında ayarlanabilir; bu, ses devrelerini ve diğer amatör radyo görevlerini test etmek için fazlasıyla yeterlidir.

DDS jeneratörü V2.0'ın ana özellikleri:
- yaygın ve ucuz radyo elemanlarına sahip basit bir devre;
- tek taraflı baskılı devre kartı;
- dahili güç kaynağı;
- 8 MHz'e kadar ayrı yüksek hızlı çıkış (HS);
- Değişken genlik ve ofset ile DDS sinyalleri;
- DDS sinyalleri: sinüs, dikdörtgen, testere ve ters testere, üçgen, EKG sinyali ve gürültü sinyali;
- 2×16 LCD ekran;
- sezgisel 5 düğmeli klavye;
- frekans ayarlama adımları: 1, 10, 100, 1000, 10000 Hz;
- gücü açtıktan sonraki son durumu hatırlamak.

Aşağıdaki blok diyagram bir fonksiyon oluşturucunun mantıksal yapısını göstermektedir:

Gördüğünüz gibi cihaz birkaç besleme voltajına ihtiyaç duyuyor: +5V, -12V, +12V. +12V ve -12V voltajları sinyal genliğini ve ofsetini düzenlemek için kullanılır. Güç kaynağı, bir transformatör ve birkaç voltaj dengeleyici yonga kullanılarak tasarlanmıştır:

Güç kaynağı ayrı bir karta monte edilmiştir:

Güç kaynağını kendiniz monte etmek istemiyorsanız, gerekli tüm voltajların zaten mevcut olduğu bir bilgisayardan normal bir ATX güç kaynağı kullanabilirsiniz. ATX konnektör düzeni.

LCD ekran

Tüm eylemler LCD ekran aracılığıyla görüntülenir. Jeneratör beş tuşla kontrol edilir

Yukarı/aşağı tuşları menüde gezinmek için, sol/sağ tuşları ise frekans değerini değiştirmek için kullanılır. Orta tuşa basıldığında seçilen sinyal üretilmeye başlar. Tuşa tekrar basıldığında jeneratör durdurulur.

Frekans değişim adımını ayarlamak için ayrı bir değer sağlanır. Frekansı geniş bir aralıkta değiştirmeniz gerekiyorsa bu kullanışlıdır.

Gürültü üretecinin herhangi bir ayarı yoktur. Sürekli olarak DDS üretecinin çıkışına beslenen olağan Rand() fonksiyonunu kullanır.

HS yüksek hızlı çıkışının 4 frekans modu vardır: 1, 2, 4 ve 8 MHz.

Şematik diyagram

Fonksiyon üreteci devresi basittir ve kolayca erişilebilen öğeler içerir:
- 16 MHz'de harici kuvarslı AVR Atmega16 mikro denetleyici;
- standart HD44780 tipi LCD ekran 2×16;
- Sıradan dirençlerden yapılmış R2R DAC matrisi;
- işlemsel amplifikatör LM358N (KR1040UD1'in yerli analogu);
- iki potansiyometre;
- beş anahtar;
- birkaç konektör.

Ödemek:

Fonksiyonel jeneratör plastik bir kutuya monte edilmiştir:


Yazılım

Yukarıda da söylediğim gibi programımı Jesper DDS üreteç algoritması üzerine kurdum.

void statik satır içi Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)(
asm volatile("eor r18, r18 ;r18<-0″ "\n\t"
"veya r19, r19 ;r19<-0″ "\n\t"
"1:" "\n\t"
"r18 ekle, %0 ;1 çevrim" "\n\t"
"adc r19, %1 ;1 çevrim" "\n\t"
"adc %A3, %2 ;1 çevrim" "\n\t"
"lpm ;3 döngü" "\n\t"
"out %4, __tmp_reg__ ;1 döngü" "\n\t"
"sbis %5, 2 ;1 döngü, eğer atlama yoksa" "\n\t"
"rjmp 1b ;2 döngü. Toplam 10 döngü" "\n\t"
:
:"r" (ad0),"r" (ad1),"r" (ad2),,"e" (sinyal),,"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR) ))
:"r18", "r19"
);}

Üretim durdurmayı uygulamak için birkaç satır montaj kodu ekledim. Artık algoritma 9 yerine 10 CPU döngüsü içeriyor.
#Sinyal tablolarının saklanacağı bölümleri tanımlayın
LDFLAGS += -Wl,-section-start=.MySection1=0x3A00
LDFLAGS += -Wl,-section-start=.MySection2=0x3B00
LDFLAGS += -Wl,-section-start=.MySection3=0x3C00
LDFLAGS += -Wl,-section-start=.MySection4=0x3D00
LDFLAGS += -Wl,-section-start=.MySection5=0x3E00
LDFLAGS += -Wl,-section-start=.MySection6=0x3F00

Maksimum frekans - 65534 Hz ​​(ve kare dalga ile 8 MHz'e kadar HS çıkışı). Daha sonra jeneratörün FPGA'nın kendisini en iyi şekilde gösterebileceği mükemmel bir görev olduğunu düşündüm. Spor meselesi olarak, iki hafta sonu içinde son teslim tarihlerini karşılarken ve parametreleri kesin olarak tanımlanmamış, ancak mümkün olan maksimum değerde alırken projeyi FPGA üzerinde tekrarlamaya karar verdim. Bundan ne çıktığını kesimin altından öğrenebilirsiniz.

Sıfır gün

Hafta sonu gelmeden önce uygulama hakkında düşünmek için biraz zamanım oldu. Görevimi basitleştirmek için jeneratörü düğmeleri ve LCD ekranı olan ayrı bir cihaz olarak değil, USB üzerinden PC'ye bağlanan bir cihaz olarak yapmaya karar verdim. Bunun için bir USB2RS232 kartım var. Anakart sürücülere (CDC) ihtiyaç duymuyor, bu nedenle Linux altında çalışacağını düşünüyorum (bazıları için bu önemli). Ayrıca RS232 üzerinden mesaj alma konusunda zaten çalıştığımı saklamayacağım. Opencores.com'dan RS232 ile çalışmak için hazır modüller alacağım.

Sinüs dalgası sinyali oluşturmak için bir DAC'ye ihtiyacınız olacaktır. Orijinal projede olduğu gibi DAC tipini seçtim - R2R 8-bit. Megahertz mertebesinde yüksek frekanslarda çalışmanıza izin verecektir. FPGA'nın bununla başa çıkması gerektiğine inanıyorum

COM bağlantı noktası üzerinden veri aktarımı için bir programın nasıl yazılacağını düşünüyordum. Bir yandan Delphi7'de yazabilirsiniz; zaten böyle bir program yazma deneyiminiz var ve ayrıca çalıştırılabilir dosyanın boyutu büyük olmayacak. Ayrıca Serial ile çalışacak bir html sayfasında Java betiği biçiminde bir şeyler çizmeye çalıştım, ancak bu az çok yalnızca Chrome seri API'si aracılığıyla çalıştı, ancak bunun için bir eklenti yüklemeniz gerekiyor... genel olarak , bu da söz konusu olamaz. PyQt5'i kendim için bir yenilik olarak denedim ama böyle bir projeyi dağıtırken bir sürü kütüphaneyi sürüklemeniz gerekiyor. Bir PyQt projesini bir exe dosyasına derlemeye çalıştığımda, 10 MB'tan fazla olduğu ortaya çıktı. Yani C++\Qt5 ile yazılmış bir uygulamadan daha iyi olmayacaktır. Python'da geliştirme deneyimim olmadığını, ancak Qt5'te deneyimim olduğunu da dikkate almakta fayda var. Bu nedenle seçim Qt5'e düştü. Beşinci versiyondan beri seri ile çalışmaya yönelik bir modül ortaya çıktı ve ben zaten onunla çalıştım. Ve Qt5 tabanlı bir uygulama Linux ve Mac'e aktarılabilir (bazıları için bu önemlidir) ve sürüm 5.2'den itibaren QWidgets tabanlı uygulamalar bir akıllı telefona bile aktarılabilir!

Başka neye ihtiyacın var? Doğal olarak anakartın bir FPGA'sı var. Bende bunlardan iki tane var (10 bin hücre için Cyclone iv EP4CE10E22C8N ve 5 bin hücre için Cyclone ii EP2C5). Soldaki konnektörü daha kullanışlı olduğu için seçeceğim. Hacim açısından projenin çok büyük olması planlanmıyor, dolayısıyla ikisinden birine sığacak. Çalışma hızları bakımından farklılık göstermezler. Her iki kartın da üzerinde 50 MHz osilatörler var ve FPGA'nın içinde frekansı planlanan 200 MHz'e çıkarabileceğim bir PLL var.

Birinci gün

Zaten sentezleyici projemde DDS modülünü yapmış olduğum için hemen havyayı elime aldım ve DAC'yi dirençlerle lehimlemeye başladım. Bir prototip tahtası aldım. Kurulum kullanılarak yapıldı. Teknolojiyi etkileyen tek değişiklik, standları kalaylamak için kullanılan F38N asidini bırakıp TT gösterge akı jelini tercih etmemdi. Teknolojinin özü basit: Rafları baskılı devre kartına lehimliyorum ve dirençleri baskılı devre kartı tarafından lehimliyorum. Eksik bağlantıları bükerek yapıyorum. Ayrıca raflar kullanışlı çünkü onları doğrudan FPGA kartına yerleştirebiliyorum.

Ne yazık ki evde 1 ve 2 kiloohm'luk dirençler yoktu. Mağazaya gidecek zaman yoktu. Kurallarımdan birinden vazgeçmek ve eski gereksiz tahtadaki dirençleri kaldırmak zorunda kaldım. Orada 15K ve 30K dirençler kullanıldı. Sonuç şu Frankenstein:


Projeyi oluşturduktan sonra hedef cihazı ayarlamanız gerekir: Menü Atamalar -> Cihaz


Projede kontrol edilemeyen ana DDS modülünü sabit bir frekansa kodladım.

1000 Hz Jeneratör Modülü

modül signal_generator(clk50M, signal_out); giriş kablosu clk50M; tel çıkış sinyali_çıkışı; tel clk200M; osc osc_200M reg akümülatörü; signal_out = akümülatörü ata; //1000 Hz üretmeye çalışın //50.000.000 Hz - harici jeneratörün saat frekansı //2^32 = 4.294.967.296 - DDS bit derinliği - 32 bit //1000Hz / 50.000.000 Hz / 2'ye bölün * 4294967296 => 42949, 67296 her zaman @ (posge clk50M) akümülatöre başlayın<= accumulator + 32"d42949; end endmodule


Daha sonra geliştirme ortamının projenin ana modülünde hangi giriş/çıkış hatlarının bulunduğunu ve bunların hangi fiziksel PIN'lere bağlı olduğunu sorması için "Derlemeyi Başlat"a tıkladım. Derleme sonrasında hemen hemen herkese bağlanabilirsiniz. görünen satırları çip FPGA'nın gerçek PIN'lerine atayın:

Menü öğesi Atamalar -> Pin Planlayıcı

Lütfen şimdilik HS_OUT, key0 ve key1 satırlarını dikkate almayın, projede daha sonra görünüyorlar ancak başlangıçta ekran görüntüsü alacak zamanım olmadı.

Prensip olarak, Konum sütununda yalnızca PIN_nn'yi "kaydetmek" yeterlidir ve geri kalan parametreler (G/Ç standardı, Geçerli Uzatma ve Dönüş Hızı) varsayılan olarak bırakılabilir veya PIN_nn'nin sunduğu parametrelerin aynılarını seçebilirsiniz. varsayılan (varsayılan), böylece "ov.txt" uyarısı olmaz.

Karttaki konnektör numarasına hangi PIN'in karşılık geldiğini nasıl öğrenebilirim?

Konektör pin numaraları kartta işaretlenmiştir


Konektör kontaklarının bağlı olduğu FPGA pinleri ise FPGA kartıyla birlikte gelen belgelerde açıklanmaktadır.




Pinler atandıktan sonra projeyi tekrar derleyip USB programlayıcı kullanarak flashlıyorum. USB Byte blaster programlayıcı için sürücüleriniz kurulu değilse, Windows'a bunların Quartus'un kurulu olduğu klasörde bulunduğunu söyleyin. Daha sonra bunu kendisi bulacaktır.

Programlayıcının JTAG konektörüne bağlı olması gerekir. Ve programlamaya yönelik menü öğesi “Araçlar -> Programcı”dır (veya araç çubuğundaki simgeye tıklayın). "Başlat" düğmesi, neşeli "Başarı" ve ürün yazılımı zaten FPGA'nin içindedir ve zaten çalışmaktadır. Sadece FPGA'yı kapatmayın, aksi takdirde her şeyi unutacaktır.

Araçlar -> Programcı


DAC, FPGA kartı konektörüne bağlanır. S1-112A osiloskopunu DAC çıkışına bağlıyorum. Sonuç bir "testere" olmalıdır çünkü faz akümülatörünün DDS sözcüğünün yüksek dereceli kısmı 8 bitlik çıkışa verilir. Ve taşıncaya kadar daima artar.

Yaklaşık 1,5 saat ve 1000 Hz frekans için aşağıdaki osilogramı görüyorum:

“Testerenin” ortasında küçük bir kırık olduğunu belirtmek isterim. Bunun nedeni dirençlerin çeşitli değer aralıklarına sahip olmasıdır.

Bir diğer önemli nokta, bulunması gereken - bu, DDS jeneratörünün çalışacağı mümkün olan maksimum frekanstır. Doğru yapılandırılmış TimeQuest parametreleri ile “Derleme Raporu”nda derlendikten sonra devrenin hızının bir farkla 200 MHz'in üzerinde olduğunu görebilirsiniz. Bu da 50 MHz olan jeneratör frekansını PLL kullanarak 4 ile çarpacağım anlamına geliyor. DDS faz akümülatörünün değerini 200 MHz frekansına yükselteceğim. Bizim koşullarımızda elde edilebilecek son frekans aralığı 0 - 100 MHz'dir. Frekans ayarı doğruluğu:

200.000.000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
Yani ~0,05 Hz'den daha iyidir. Böyle bir çalışma frekansı aralığına (0...100 MHz) sahip bir jeneratör için bir hertz kesirinin doğruluğunun yeterli olduğunu düşünüyorum. Birisinin doğruluğu artırması gerekiyorsa, bunu yapmak için DDS bit derinliğini artırabilirsiniz (TimeQuest Zamanlama Analiz Cihazında mantık devresinin hızının CLK=200 MHz dahilinde olduğunu kontrol etmeyi unutmayın, çünkü bu bir toplayıcıdır) veya basitçe azaltmak saat frekansı eğer öyleyse geniş aralık frekans gerekmez.

TimeQuest Zamanlama Analizörü


Ekranda “gördüm”ü gördükten sonra ailevi meseleler beni taşraya gitmeye zorladı (izin günümdü). Orada biçtim, pişirdim, mangal yaptım ve akşam beni bekleyen sürprizden habersizdim. Geceye yaklaştıkça yatmadan önce diğer frekanslar için sinyal şekline bakmaya karar verdim.

100 kHz frekansı için

250 kHz frekansı için

500 kHz frekansı için

1 MHz frekans için

İkinci gün

DAC'ın 100 ve 200 Ohm'luk dirençler üzerinde nasıl çalışacağının ilginç olması nedeniyle hemen havyayı elime aldım. Bu sefer DAC'nin daha doğru olduğu ortaya çıktı ve kurulumu daha az zaman aldı.

DAC'yi FPGA kartına yerleştirip osiloskopa bağlıyoruz

1 MHz kontrol ediliyor - VO! Bu tamamen farklı bir konu!

10 MHz'i gördüm

25 MHz'i gördüm


10 MHz testerenin şekli hala doğru olana benzer. Ancak 25 MHz'de artık hiç de "güzel" değil. Bununla birlikte, C1-112a'nın bant genişliği 10 MHz'dir, dolayısıyla bu durumda sebep zaten osiloskopta olabilir.

Prensip olarak DAC ile ilgili bu sorunun kapalı olduğu düşünülebilir. Şimdi yüksek hızlı çıkışın dalga biçimlerini alalım. Bunu yapmak için, en anlamlı biti FPGA'nın ayrı bir PIN'ine göndereceğiz. Bu satıra ait verileri DDS akümülatörünün en önemli bitinden alacağız.

hs_out = akümülatörü atayın;

Kare dalga 1 MHz

Kare dalga 5 MHz

Kare dalga 25 MHz

50 MHz kare dalga artık neredeyse görünmez


Ancak FPGA çıkışının dirençle yüklenmesi gerektiğini düşünüyorum. Belki cepheler daha dik olurdu.

Sinüs tabloya göre yapılır. Tablo boyutu 8 bitlik 256 değerdir. Daha fazlasını almak mümkün olabilirdi ama zaten hazır bir mif dosyam vardı. Sihirbazı kullanarak mif dosyasından sinüs tablosu verilerini içeren bir ROM öğesi oluşturuyoruz.

ROM Oluşturma - Araçlar -> Mega Sihirbazı Eklenti yöneticisi


1 portlu ROM'u seçin ve modüle bir ad verin

Katılıyoruz

Burada da aynı fikirdeyiz

Gözat'ı kullanarak mif dosyamızı sinüs tablosuyla buluyoruz

Burada da hiçbir şeyi değiştirmiyoruz.

sine_rom_bb.v modülünün işaretini kaldırın - buna gerek yoktur. Sonraki bitiş. Quartus sizden projeye bir modül eklemenizi isteyecek, kabul ediyoruz. Bundan sonra modül Verilog'daki diğer modüller gibi kullanılabilir.


DDS akümülatör kelimesinin üst 8 biti ROM adresi olarak kullanılacak ve veri çıkışı sinüs değeri olacaktır.

Kod

//sinüs rom teli sinüs_out; sine_rom sinüs1(.clock(clk200M), .address(akümülatör), .q(sine_out));


Farklı frekanslardaki sinüs dalgasının osilogramı... aynı görünür.

İstenirse direnç yayılmasıyla ilişkili DAC sorunlarını göz önünde bulundurabilirsiniz:

Neyse, hafta sonunun sonu. Ancak bilgisayardan kontrol için yazılım henüz yazılmadı. Planlanan son teslim tarihlerine uymadığımı itiraf etmek zorundayım.

Üçüncü gün

Çok az zamanımız var bu yüzden programı yazıyoruz. hızlı düzeltme(en iyi geleneklerde). Bazı yerlerde harf sayısını azaltmak ve klavyeden bilgi girmeyi kolaylaştırmak için widget adına göre bir olay filtresi kullanılır. Lütfen anlayın ve affedin.

Arayüz

Analoglarla bağlantılar

Tam liste değil
Fonksiyonel DDS jeneratörü. AVR'ye dayalı olarak oluşturulmuştur. Frekanslar 0...65534 Hz.
DDS jeneratörü GK101'in incelemesi. Altera MAX240 FPGA kullanılarak oluşturulmuştur. 10 MHz'e kadar frekanslar.
PIC16F870 üzerinde çok işlevli jeneratör. Frekans aralığı: 11 Hz - 60 kHz.
jeneratörler
  • Qt5
  • Etiket ekle