EV Vizeler Yunanistan'a vize 2016'da Ruslar için Yunanistan'a vize: gerekli mi, nasıl yapılmalı

DC-DC düşürücü gerilim dönüştürücü modülü. LM2596 - düşürücü DC-DC voltaj dönüştürücü Kendin yap darbe düşürücü DC dönüştürücü

LM2596, kademeli bir DC-DC dönüştürücüdür, genellikle hazır modüller şeklinde üretilir ve maliyeti yaklaşık 1 ABD dolarıdır (LM2596S DC-DC 1.25-30 V 3A'yı arayın). 1,5 $ ödeyerek, Ali'de giriş ve çıkış voltajını LED olarak gösteren, çıkış voltajını kapatan ve dijital göstergelerde değerleri görüntüleyen ince ayar düğmelerine sahip benzer bir modül satın alabilirsiniz. Katılıyorum - teklif cazip olmaktan çok daha fazlası!

Aşağıda bu dönüştürücü kartının şematik diyagramı bulunmaktadır (temel bileşenler sondaki resimde işaretlenmiştir). Girişte polaritenin tersine çevrilmesine karşı koruma vardır - diyot D2. Bu, regülatörün yanlış bağlanan giriş voltajından zarar görmesini önleyecektir. Her ne kadar lm2596 yongası veri sayfasına göre 45 V'a kadar giriş voltajlarını işleyebiliyor olsa da pratikte uzun süreli kullanım için giriş voltajının 35 V'u geçmemesi gerekiyor.

lm2596 için çıkış voltajı aşağıdaki denklemle belirlenir. R2 direnci ile çıkış voltajı 1,23 ila 25 V arasında ayarlanabilir.

Her ne kadar lm2596 çipi maksimum 3 A sürekli çalışma akımı için tasarlanmış olsa da, folyo kütlesinin küçük yüzeyi, üretilen ısıyı devrenin tüm çalışma aralığı boyunca dağıtmak için yeterli değildir. Ayrıca bu dönüştürücünün verimliliğinin giriş voltajına, çıkış voltajına ve yük akımına bağlı olarak büyük ölçüde değiştiğini unutmayın. Verimlilik, çalışma koşullarına bağlı olarak %60 ila %90 arasında değişebilir. Bu nedenle, 1 A'nın üzerindeki akımlarda sürekli çalışma meydana gelirse ısının uzaklaştırılması zorunludur.

Veri sayfasına göre, ileri besleme kapasitörü, özellikle çıkış voltajı 10 V'u aştığında R2 direncine paralel olarak kurulmalıdır - bu, stabiliteyi sağlamak için gereklidir. Ancak bu kapasitör genellikle Çin'deki ucuz invertör kartlarında mevcut değildir. Deneyler sırasında, çeşitli çalışma koşulları altında DC dönüştürücülerin birkaç kopyası test edildi. Sonuç olarak, LM2596 stabilizatörün dijital devrelerin düşük ve orta besleme akımları için çok uygun olduğu, ancak daha yüksek çıkış gücü değerleri için bir soğutucunun gerekli olduğu sonucuna vardık.

Darbe dönüştürücüler ve güç elektroniği genel olarak elektronik geliştirme alanındaki çoğu amatör ve profesyonel için her zaman kutsal bir şey olarak kalmıştır. Makale, DIY'ciler ve alternatif enerji hayranları arasındaki belki de en ilginç konuyu ele alıyor - sabit olandan sinüzoidal bir voltaj/akım oluşumu.

Sanırım birçoğunuz muhtemelen “saf sinüs” ifadesini içeren reklamlar görmüş veya makaleler okumuşsunuzdur. Tam olarak bundan bahsedeceğiz, ancak pazarlama bileşeniyle ilgili değil, yalnızca teknik uygulamayla ilgili. Çalışma prensiplerini, standart (ve çok standart olmayan) devre çözümlerini olabildiğince açık bir şekilde açıklamaya çalışacağım ve en önemlisi STM32 mikrodenetleyici için bizim için gerekli sinyalleri üretecek yazılım yazıp analiz edeceğiz.

Neden STM32? Evet, çünkü artık bu BDT'deki en popüler MK: onlar hakkında Rusça pek çok eğitim bilgisi var, pek çok örnek var ve en önemlisi, bu MK'ler ve onlar için hata ayıklama araçları çok ucuz. Size doğrudan söyleyeceğim - ticari bir projede yalnızca TMS320F28035'i veya TI'nin Piccolo serisinden benzer bir DSP'yi kurardım, ancak bu tamamen farklı bir hikaye.

Önemli olan bir şey var - STM32, dünyanın kaderinin herhangi bir nükleer santralin veya veri merkezinin çalışmasına bağlı olmadığı basit "ev tipi" güç dönüştürücülerini istikrarlı bir şekilde kontrol etmenize olanak tanır.

Doğru akımı alternatif akıma dönüştürmek için elde edilmesi gereken kontrol sinyallerinin resmi budur. Ve evet - bu tam olarak sinüs! O filmdeki gibi: “Sincapı görüyor musun? - HAYIR. - Ve o..."

Bir sinüsün nasıl oluştuğunu bilmek ister misiniz? Petrole kaç kilovat enerjinin pompalandığını bilmek ister misiniz? O halde kesime hoş geldiniz!

1. Sinüzoidal bir sinyal üretmek için topolojiler

Bir grup elektronik mühendisine "Sinüzoidal bir sinyali nasıl üretebilirsiniz?" diye sorarsanız, bir düzine farklı yöntem içeren öneriler akacaktır, ama hangisine ihtiyacımız var? Orijinal görevden başlayalım - örneğin 380V 10A'yı 230V alternatif voltaja dönüştürmemiz gerekiyor. Genel olarak bu “klasik” bir durumdur, bunu herhangi bir iyi çevrimiçi UPS veya invertörde görebiliriz. Görünüşe göre yaklaşık 4 kW gücü dönüştürmemiz gerekiyor ve bunda iyi bir verimlilik var, fena değil, değil mi? Böyle bir durumun sinüsü “çizmek” için seçeneklerin sayısını azaltacağını düşünüyorum. Peki elimizde ne kaldı?

6-10 kW'a kadar güç dönüştürücülerinde iki ana topoloji kullanılır: tam köprü ve nötr geçişli "yarım köprü". Bakarlar Aşağıdaki şekilde:

1) Nötr yoluyla topoloji

Bu topoloji çoğunlukla sinüs dalga çıkışlı bütçe UPS'lerinde bulunur, ancak APC ve GE gibi yetkililer bunu oldukça yüksek güçlerde bile kullanmaktan çekinmezler. Onları bunu yapmaya motive eden şey nedir? Bu topolojinin avantaj ve dezavantajlarına bakalım.

Artıları:

  • Mümkün olan minimum güç transistörü sayısı, bu da kayıpların 2 kat daha az olduğu ve cihazın maliyetinin de daha düşük olduğu anlamına gelir
  • Sıfır aracılığıyla. Bu, özellikle CE ve ATEX olmak üzere sertifikasyon sürecini basitleştirir. Bunun nedeni, sıfırdan sıfıra kadar giriş koruma sistemlerinin (örneğin RCD'ler) dönüştürücüden sonra çıkış devrelerinde bir kaza meydana gelmesi durumunda da çalışmasına izin vermesidir.
  • Küçük maliyetlerle ürünün maliyetini en aza indirmemizi sağlayan basit topoloji
    ve orta ölçekli üretim

Eksileri:

  • Bipolar güç kaynağına duyulan ihtiyaç. Gördüğünüz gibi invertör devresine ±380V ve bir sıfır daha beslenmelidir.
  • Yüksek gerilim kapasitörlerinin sayısını iki katına çıkarın. 3-4 kW arası güçlerde, büyük kapasiteli ve düşük ESR'li yüksek voltajlı kapasitörler %20 ila %40 arasında değişmeye başlar
    bileşen maliyetleri
  • “Bölücüde” elektrolitik kapasitörlerin kullanımı. Kururlar, aynı parametrelere sahip kapasitörleri seçmek neredeyse imkansızdır ve elektrolit parametrelerinin çalışma sırasında değiştiğini düşünürseniz, o zaman anlamsızdır. Filmle değiştirebilirsiniz ama pahalıdır
Ana artılar ve eksiler belirlendi, peki bu topolojiye ne zaman ihtiyaç duyulur? Benim öznel görüşüm: 500-1000 W'a kadar güçlerde, temel gereksinimin güvenilirlik değil maliyet olduğu durumlarda. Bu tür tüketim mallarının açık bir temsilcisi, A-Electronics'in stabilizatörleridir: ucuzdurlar, bir şekilde çalışırlar ve bunda bir sorun yoktur. Ülkemizdeki tüketicilerin yüzde 60'ı için bu yeterli ve uygun fiyatlı. Sonuç çıkaralım.

2) Köprü topolojisi

Köprü topolojisi... muhtemelen güç dönüştürücülerdeki en anlaşılır ve en yaygın topolojidir ve en önemlisi, çok az deneyimi olan geliştiriciler için bile erişilebilirdir. 10 kW'tan sonra tek veya üç fazlı köprüden başka bir şey bulamazsınız. Neden bu kadar seviliyor?

Artıları:

  • Çok yüksek güvenilirlik. Bu esas olarak güç transistörü kontrol sisteminin kalitesinden kaynaklanır ve bileşen bozulmasına bağlı değildir.
  • Gereken giriş kapasitansı birkaç kat, hatta daha az büyüklüktedir. Yalnızca hesaplanan ESR değerini sağlamak gerekir. Bu, maliyeti korurken film kapasitörlerinin kullanılmasına olanak tanır. Film kapasitörler - kurumaz, sert sıcaklıklarda daha iyi performans gösterir, çalışma ömrü elektrolitlerinkinden çok daha yüksektir
  • Transistörlerde minimum voltaj dalgalanması; bu, daha düşük voltajlı transistörleri kullanabileceğiniz anlamına gelir
  • İşletim algoritmalarının basitliği ve netliği. Bu, ürün geliştirme ve devreye alma sürelerinde önemli bir azalmaya yol açar.

Eksileri:

  • Artan sayıda güç transistörü, daha ciddi soğutmanın gerekli olduğu anlamına gelir. Transistörlerin fiyatında bir artış, ancak daha az sayıda kapasitör nedeniyle bu oldukça bir artı
  • Özellikle galvanik izolasyon gereklilikleri nedeniyle artan sürücü karmaşıklığı
Köprü topolojisinin gerçek dezavantajlarından da görebileceğiniz gibi, transistörlerin soğutulması için yalnızca artan bir gereksinim vardır. Birçoğu şöyle düşünecektir: "Daha fazla ısı üretilir, bu da verimliliğin daha düşük olduğu anlamına gelir!" Pek öyle değil... Azalan EMF emisyonları ve daha "sert" bir kontrol sistemi nedeniyle, iki topolojinin verimliliği yaklaşık olarak eşittir.

Vakaların %70'inde yalnızca DC/AC invertörlerde değil diğer dönüştürücülerde de köprü devresi kullanmak zorunda kalıyorum. Bunun nedeni, ağırlıklı olarak endüstriyel çözümler tasarlamam ve giderek daha çok Avrupalı ​​müşterilere yönelik olmam ve orada pahalı endüstriyel cihazlar için 5-15 yıl garanti vermenin geleneksel olmasıdır. Klasik gereklilik: "10 yıl garantili bir donanım istiyoruz", artık başka seçenek yok. Elbette insanlar en düşük fiyata sahip bir cihaz istediklerinde topoloji seçerken belirli bir görevden başlamak gerekiyor.

Kısa bir özet: Bu makale bir köprü dönüştürücünün (H-köprü veya Tam Köprü) çalıştırılması için yazılım sağlayacaktır, ancak sinüs üretimi ilkesi tüm topolojiler için aynıdır. Kod 1. topolojiye de uyarlanabilir ancak tek başınızasınız.

2. Köprü dönüştürücü kullanılarak alternatif akımın oluşturulması

Öncelikle bir köprü dönüştürücünün genel olarak nasıl çalıştığına bakalım. Devreye bakıyoruz ve VT1-VT4 transistörlerini görüyoruz. Soyut yükümüze (örneğin bir direnç) şu veya bu potansiyeli uygulamamıza izin verirler. VT1 ve VT4 transistörlerini açarsak aşağıdakileri elde ederiz: VT4 yükün bir ucunu negatife (GND) bağlar ve transistör VT1 +380V'ye bağlanır, yük boyunca "380V - 0V" potansiyel farkı belirir. sıfır, bu da akımın yüke akmaya başlayacağı anlamına gelir. Sanırım herkes bilim adamlarının aynı fikirde olduğunu hatırlıyor - akım "artıdan eksiye" akıyor. Bu resmi elde ediyoruz:

VT1 ve VT4'ü açarak ne elde ettik? Yükümüzü ağa bağladık! Direnç bir ampulle değiştirilirse, basitçe yanar. Ve biz sadece yükü açmakla kalmadık, içinden geçen akımın yönünü de belirledik. Bu çok önemli! O dönemde VT2 ve VT3'te ne oldu? Tamamen... sıkı bir şekilde kapatılmışlardı... Sonuçta VT2 veya VT3 de açık olsaydı ne olurdu? Haydi bakalım:

VT1, VT4 ve VT2 transistörlerinin açıldığını varsayalım. Ohm yasasını hatırlayalım, yüksek voltaj transistörlerinin kanal direncine bakalım, örneğin IPP60R099P7XKSA1 ve 0,1 Ohm'u görelim, bunlardan 2 tanesi seri bağlı - bu, VT1 ve VT2 devresinin direncinin yaklaşık 0,2 Ohm olduğu anlamına gelir. Şimdi bu devreden geçecek akımı hesaplayalım: 380V / 0,2 Ohm = 1900A. Sanırım herkes bunun bir kısa devre olduğunu anladı mı? Ayrıca herkesin VT2 ve VT3'ün neden kapatılması gerektiğini anladığını düşünüyorum.

Bu “fenomen” denir - akım yoluyla. Ve güç elektroniğinde büyük savaş onunla sürüyor. Bundan nasıl kaçınılır? Algoritması ekstra bir transistörün aynı anda açılmasını kesinlikle yasaklayacak bir kontrol sistemi oluşturun.

O halde neden VT2 ve VT3 transistörlerine ihtiyaç var? Akıntının yönünün çok önemli olduğunu yazdığımı hatırlıyor musun? Alternatif akımın ne olduğunu hatırlayalım. Aslında bu, değişken bir şeye sahip olan bir akımdır, bu durumda akımın yönü. Soketimizde saniyede 100 kez yön değiştiren bir akım akmaktadır. Şimdi VT1 ve VT4'ü kapatalım ve ardından VT2 ve VT3 transistörlerini açalım ve şu resmi elde edelim:

Gördüğünüz gibi akıntının yönü (oklarla gösterilen) ters yönde değişti. Köprü kullanmak akıntının yönünü değiştirmemize olanak sağladı, bu ne anlama geliyor? Evet, klimamız var!

Köprünün iki köşegeni olduğuna lütfen dikkat edin: ilk köşegen VT1+VT4'ten, ikinci köşegen ise VT2+VT3'ten oluşur. Bu köşegenler sırayla çalışarak akımı önce bir yönde, sonra diğer yönde değiştirir.

Yani alternatif akımımız var diyorsunuz ama her şey o kadar basit değil... Standart bir şebeke voltajımız var. İki ana parametreyle standardize edilmiştir: voltaj ve frekans. Şimdilik frekansla ilgilenelim, çünkü voltaj meselesi basit ve tamamen devre tekniğiyle ilgili.

Ve böylece frekans... onun hakkında bilinen şey 50 Hz'dir (Amerika'da bazen 60 Hz). Sinyal periyodu 20 ms'dir. Bu durumda sinüs dalgası simetriktir, yani 2 yarım dalgamız (pozitif ve negatif) aynı süreye sahiptir, yani 10 ms + 10 ms. Umarım burada her şey açıktır.

Bu fiziksel anlamda ne anlama geliyor? Evet gerçek şu ki yükteki akımın yönünü her 10 ms'de bir değiştirmemiz gerekiyor. Önce VT1+VT4 diyagonalinin 10 ms boyunca açık olduğunu, ardından kapandığını ve sonraki 10 ms boyunca VT2+VT3 diyagonalinin açıldığını görüyoruz.

Bir transistörü açmak ne anlama geliyor ve ona hangi sinyal gönderilecek?

Transistör kontrolü ilkesine biraz dalalım. Yalıtımlı geçit N-kanalı alan etkili transistörleri (Mosfet) kullanıyorum.

“Açık transistör”, kapısı (G) kaynağa (S) göre pozitif bir potansiyel (+10..18V) ile beslenen ve transistörün kanalın (S-D) direncini sonsuz büyükten değiştiren bir transistördür. (2-100 MOhm) ila küçük (genellikle 0,1 - 1 Ohm). Yani transistör akımı iletmeye başladı.

“Kapalı transistör”, kapısı (G) kaynağa (S) doğru çekilen ve direnci küçükten sonsuz büyüğe değişen bir transistördür. Yani transistör akım iletmeyi durdurmuştur.

Alan etkili transistörün veya IGBT'nin çalışma prensibini daha iyi tanımak için, Semenov'un "Güç Elektroniğinin Temelleri" kitabında veya başka bir kaynakta, belki de yeni başlayanlar için Wikipedia'da birkaç bölüm okumanızı tavsiye ederim.

Kontrol için, Darbe Genişliği Modülasyonu veya daha bilinen kısaltma olan PWM ile bir sinyal sağlıyoruz. Bu sinyalin özelliği 2 duruma sahip olmasıdır: düşük voltaj (GND) ve üst voltaj (VCC), yani onu transistörün kapısına uygulayarak ya açarız ya da kapatırız - başka hiçbir şey verilmez. Ayrıca PWM hakkında daha fazla bilgi okumanızı tavsiye ederim çünkü bunu size tembeller için yüzeysel olarak anlattım.


Ve böylece köprümüzün her 10 ms'de bir akımın yönünü değiştirmesi için, periyodu 20 ms ve görev döngüsü %50 olan bir PWM sinyali uygulamamız gerekiyor. Bu, 20 ms'nin yarısı kadar (10 ms) omzumuzun açık olup akımı ilettiği, diğer yarısının ise kapalı olduğu anlamına gelir. Bu tür PWM'yi tüm tuşlara uygulamamız gerekir, ancak bir şartla - VT1+VT4 köşegenine doğrudan PWM ve VT2+VT3 köşegenine ters PWM uygularız. Daha akıllıca ifade etmek gerekirse, köşegenlere sağlanan sinyalin 180 0 kayması olmalıdır. Sanırım şu anda metni anlamaya çalışırken kafanız çalışıyor, o yüzden görsel temsiline bakalım:

Şimdi anlaşıldı? HAYIR? Sonra daha detaylı... Gördüğünüz gibi transistörlerin açılıp kapanma anlarını özellikle not ettim: “artı”da açılıyor, “eksi”de kapanıyorlar. Ayrıca sinyaller zıttır, yani terstir: mavi sinyal "artı" olduğunda yeşil sinyal "eksi" olur. Bir köşegene mavi sinyal, diğerine yeşil sinyal uyguluyoruz - osilogramda görüldüğü gibi köşegenlerimiz asla aynı anda açılmıyor. Alternatif akım hazır!

Döneme bakın. Sözlerimin soyutlama olmaması için özellikle kontrolör çıkışlarından bir osilogram gösterdim. Sinyal periyodu 20 ms olup, bir köşegen 10 ms süreyle açık olup pozitif yarım dalga oluşturur, diğer köşegen de 10 ms süreyle açık olup negatif yarım dalga oluşturur. Umarım herkes anlar ve hala anlamadıysanız bana PM'den yazın, size parmaklarınız hakkında bireysel bir ders vereceğim. Sözlerimi doğrulamak için osilogram değerli 50 Hz'imizi gösteriyor! Rahatlamak için henüz çok erken...

50 Hz frekansında alternatif akım aldık ancak çıkışta sinüs dalgamız var ve burada kıvrımlı bir durum söz konusu değil. Resmi olarak, çıkışa bir kıvrım uygulayabilir ve çoğu yükü bununla çalıştırabilirsiniz; örneğin, anahtarlamalı bir güç kaynağının sinüs veya kıvrımlı olması umurunda değildir. Yani, zaten dizüstü bilgisayarları, telefonları, TV'leri, telefonları ve diğer şeyleri açacak kadar şeye sahipsiniz, ancak bir AC motor bağlarsanız, o zaman her şey çok kötü olacak - ısınmaya başlayacak ve verimliliği gözle görülür şekilde daha az olacak, ve sonunda büyük olasılıkla yanacak. Evinizde motorunuzun olmadığını mı düşünüyorsunuz? Peki ya buzdolabı kompresörü? Isıtma sirkülasyon pompasına ne dersiniz? İkincisi genellikle tahtadan yapılmış gibi yanar. Kuyular için derin kuyu pompalarında ve genel olarak diğer birçok şeyde durum aynıdır. Bir invertörün, dengeleyicinin veya UPS'in çıkışındaki sinüzoidal sinyalin hala önemli olduğu ortaya çıktı. Peki, onu yaratmamız gerekiyor! Artık tam bir beyin patlaması başlayacak...

3. PWM kullanarak sinüzoidal dalga formu oluşturma

Dürüst olmak gerekirse bu bölümü erişilebilir dilde nasıl sunacağımı bilmiyorum. Birisinin anlamaması durumunda, sizden ya daha fazla Google'da aramanızı ya da bir yorum veya özel mesaj yazmanızı rica ediyorum - bunu size kişisel olarak açıklamaya çalışacağım. Gözler korkuyor ama eller yapıyor...

Normal bir sinüs grafiğinin neye benzediğini görelim:

2 eksen görüyoruz: bir eksen pi, pi/2 ve ötesinde bir periyoda sahip, ikincisi -1'den +1'e kadar bir genliğe sahip. Bizim problemimizde periyot saniye cinsinden ölçülür ve her yarım dalga için 20 ms veya 10 ms'dir. Burada her şey basit ve açık, ancak genlikle daha eğlenceli - genliğimizin 0'dan 1000'e kadar olduğunu bir aksiyom olarak alın. Bu, mikro denetleyicinin ayarladığı görev döngüsü değeridir, yani 100% 10'dur, 500 ise %50, 900 %90'dır. Bence mantık açıktır. Bir sonraki bölümde neden 0'dan 1000'e kadar olduğunu anlayacaksınız, ancak şimdilik grafiğimizi değerlerimize uyacak şekilde yeniden oluşturalım:

Sigara içen birinin sinüs grafiği böyle görünüyor ve bu bizim görevimize karşılık geliyor. Gördüğünüz gibi negatif yarı döngüyü belirtmedim çünkü Bizim durumumuzda sinüzoidal bir sinyal kullanılarak değil, köprünün köşegenlerini değiştirerek akımın yönünü değiştirerek gerçekleştirilir.

X ekseninde zamanımız var ve Y ekseninde PWM sinyalimizin görev döngüsü var. PWM kullanarak bir sinüs çizmemiz gerekiyor. Okulda geometriyi hatırlıyor muyuz, grafikleri nasıl yapıyorduk? Bu doğru, noktadan noktaya! Kaç puan? Birkaç O1(0,0) + O2(5,1000) + O3(10,0) + O4(15, -1000) + O5(20, 0) noktaları üzerinde bir sinüs oluşturalım ve aşağıdaki sinüsü elde edelim:

Bunu yaptık ve prensipte bu sinyalin normal bir kıvrımdan ziyade sinüse benzediğini gördük, ancak henüz sinüs değil. Puan sayısını arttıralım. Bu arada buna “sinyal ayrıklığı” veya bu durumda “PWM ayrıklığı” denir. Bu noktaların koordinatlarını nasıl öğrenebilirim? Aşırı olanlarda ise her şey basitti...

Sinüs oluşturmak için değerlerin hesaplanması

Yukarıda söylediğim gibi sinüsümüz oldukça simetrik. Periyodun 1/4'ünü, yani 0'dan 5 ms'ye kadar inşa edersek, bu parçayı daha da çoğaltarak sinüsü sonsuz uzun bir süre boyunca inşa edebiliriz. Ve böylece formül:


Ve böylece sırayla:
  • n - belirli bir ayrı noktadaki görev döngüsü değeri
  • A, sinyal genliğidir, yani maksimum görev döngüsü değeridir. Bizim için 1000
  • pi/2 - sinüs periyodunun 1/4'ü pi/2'ye düşer, periyodun 1/2'sini sayarsak pi olur
  • x - adım numarası
  • N - puan sayısı
Mesela 5 puanımız olması şartını kullanmayı uygun hale getirelim. Görünüşe göre 1 adım = 1 ms'miz var, bu bir grafik oluşturmayı kolaylaştıracak. Örnekleme adımı basit bir şekilde hesaplanır: Grafiği oluşturduğumuz süre (5 ms) nokta sayısına bölünür. Formülü insan formuna getirelim:


1 ms'lik bir örnekleme adımı alıyoruz. Görev döngüsünü hesaplama formülünü örneğin Excel'de yazalım ve aşağıdaki tabloyu elde edelim:

Şimdi sinüs grafiğimize döneceğiz ve onu tekrar çizeceğiz, ancak daha fazla sayıda nokta için ve nasıl değiştiğini göreceğiz:

Gördüğümüz gibi, çizim yeteneğimi veya daha doğrusu tembellik seviyesini hesaba katarsak bile sinyal daha çok sinüse benziyor)) Sanırım sonuç açıklama gerektirmiyor? İnşaat sonuçlarına dayanarak aksiyomu türetiyoruz:

Ne kadar çok nokta olursa, sinyal örneklemesi o kadar yüksek olur ve sinüzoidal sinyal şekli o kadar ideal olur


Peki kaç puan kullanacağız... Ne kadar çok olursa o kadar iyi olacağı açık. Nasıl sayılır:
  1. Bu yazı için eski bir STM32F100RBT6 mikrodenetleyici (STM32VL-Discovery hata ayıklama) kullanıyorum, frekansı 24 MHz.
  2. 20 ms'lik bir periyodun kaç tik süreceğini sayıyoruz: 24.000.000 Hz / 50 Hz = 480.000 tik
  3. Bu, periyodun yarısının 240.000 tik sürediği anlamına gelir, bu da 24 kHz frekansına karşılık gelir. Taşıyıcı frekansını artırmak istiyorsanız daha hızlı bir taş alın. Kulaklarımız hala 24 kHz duyacaktır, ancak testler veya bodrumda duran bir donanım parçası için bu yeterli olacaktır. Biraz sonra F103C8T6'ya geçmeyi planlıyorum ve orada zaten 72 MHz var.
  4. 240.000 tik... Mantıksal olarak dönemin yarısı için 240 puan öneriyor. Zamanlayıcı, görev döngüsü değerini her 1000 tıklamada veya her 41,6 µs'de bir güncelleyecektir.
PWM'nin ayrıklığına karar verdik; en azından ağdakinden daha kötü olmayan bir sinyal şekli elde etmek için yarım dönem başına 240 puan yeterlidir. Şimdi tabloyu yine Excel'de en basit seçenek olarak hesaplıyoruz. Aşağıdaki grafiği elde ederiz:

Tablonun ve değerlerin kaynağı - bağlantısında bulunabilir.

4. Sinüs dalgası oluşturmak için köprü dönüştürücünün kontrolü

Bir sinüs tablosu aldık ve bununla ne yapacağız? Bu değerleri bildiğimiz belli bir örnekleme adımıyla aktarmamız gerekiyor. Her şey zamanlayıcının başlatılmasıyla başlar - zaman 0, görev döngüsü sıfır. Daha sonra, 41,66 μs'lik örnekleme adımını sayıyoruz ve Tablo 13'teki PWM değerini (%0,13) zamanlayıcıya yazıyoruz, başka bir 41,66 μs sayıyoruz ve 26'yı (%0,26) kaydediyoruz ve 240 değerin tümü için bu şekilde devam ediyoruz. Neden 240? 1/4 periyot için 120 adımımız var ama 1/2 periyodu çizmemiz gerekiyor. Görev döngüsü değerleri aynıdır, ancak 1000'e ulaştıktan sonra bunu ters sırada yazıp sinüs çürümesini elde ederiz. Çıkışta aşağıdaki osilograma sahip olacağız:

Gördüğünüz gibi, açıkça tanımlanmış bir sürede bir grup PWM değeri aldık ve süresi şu şekildedir: 240 adım x 41,66(!) μs = 9998,4 μs = 9,9984 ms ~ 10 ms. 50 Hz ağ frekansı için yarım periyot elde ettik. Gördüğünüz gibi yine iki sinyal var ve bunlar antifazda, bu da köprünün köşegenlerini kontrol etmek için tam olarak ihtiyaç duyulan şey. Ama kusura bakmayın, sinüs nerede diye soruyorsunuz? Gerçeğin anı geldi! Şimdi mikrodenetleyicinin çıkışından gelen sinyali bir alçak geçiş filtresine besleyelim.1,5 kOhm ve 0,33 μF nominal değerlerine sahip RC devrelerini kullanarak basit bir alçak geçiş filtresi yaptım (bunları az önce elimde tuttum) ve elde ettim aşağıdaki sonuç:

İşte! İşte uzun zamandır beklenen sinüsümüz! Osiloskopun kırmızı ışını alçak geçiren filtreden önceki sinyaldir ve sarı ışın filtrelemeden sonraki sinyaldir. Alçak geçiren filtre 321 Hz'in üzerindeki tüm frekansları keser. Hala 50 Hz'lik ana sinyale ve tabii ki küçük genlikli harmoniklerine sahibiz. Sinyali mükemmel bir şekilde temizlemek istiyorsanız, kesme frekansı yaklaşık 55-60 Hz olan bir alçak geçiş filtresi yapın, ancak şimdilik bu önemli değil, sadece sinüs olup olmadığını kontrol etmemiz gerekiyordu. Bu arada... osiloskop senkronizasyonum sarı ışın için açık (ekranın sağındaki ok) ve frekansını ekranın alt kısmında görüyoruz - ideal 50 Hz. Daha ne isteyebilirsin? İşte bu, geriye kalan tek şey hangi sinyalin nereye gönderileceğine karar vermek. Bu resme bakalım:

Makaledeki ilk osilograma bakarsanız sarı ve mavi sinyalin aynı faza sahip olmasının daha iyi olduğunu yani aynı anda pozitif hale gelip transistörleri açtığını göreceksiniz. Bu 2 sinyal VT1+VT4 diyagonalini açar. Buna göre diğer 2 sinyal de aynı faza sahiptir ve farklı bir köşegen açar. Şimdi sadece akımın yönünü değiştirmekle kalmıyoruz, aynı zamanda PWM kullanarak genliği de sinüzoidal yasaya göre değişecek şekilde ayarlıyoruz. Şimdi aynı devreye akımlarla bakalım:

Gördüğünüz gibi yükten geçen akım ters yönde akıyor, 50 Hz frekansta yön değiştiriyor ve VT1 ve VT2 transistörlerine sağlanan modüle edilmiş PWM, yarım dalgalar halinde sinüzoidal bir sinyal şekli çizmenize olanak sağlıyor.

LPF (düşük frekans filtresi), L1 endüktansı ve C2 kapasitörü üzerinde yapılır. Bu filtrenin kesme frekansının 100 Hz'den az olmasını dikkate almanızı tavsiye ederim, bu çıkıştaki voltaj dalgalanmasını en aza indirecektir.

Tatlı olarak, size benzer topoloji ve filtreye sahip gerçek bir cihazın devre şemasının bir kısmını göstereceğim, bu büyük, o yüzden PDF'yi indirin.

5. Akıntılara karşı mücadele

Hiçbir şeyin mükemmel olmadığının kimse için bir sır olduğunu sanmıyorum? Mosfetler için de durum aynı, bir takım dezavantajları var ve biz bunlardan birine bakacağız: büyük kapı kapasitansı. Yani, transistörü açmak için sadece voltaj uygulamamız değil, aynı zamanda kapasitörü de aynı voltajla yüklememiz gerekir, böylece sinyalin yükselişi ve düşüşü gecikir. Bu, bir transistörün henüz tamamen kapanmadığı ve diğerinin zaten açılmaya başladığı sinyal sınırında zaman içinde bir anın ortaya çıkabileceği gerçeğine yol açar.

Bu fenomen hakkında daha fazla bilgi edinmenizi tavsiye ederim, örneğin bu makalede. Size sadece bununla nasıl başa çıkacağınızı anlatacağım. Transistörlerin bir sonraki kol açılmadan önce normal şekilde kapanması için zamanları olması için, kontrol sinyalleri arasına ölü zaman eklenir veya daha basit bir ifadeyle bir zaman gecikmesi uygulanır. Bizim durumumuzda, VT3 ve VT4 transistörlerindeki kontrol sinyalleri arasında böyle bir gecikme meydana gelecektir, çünkü Yarım dalga anahtarlamayı sağlayanlar onlardır. Modüle edilmiş PWM'li (VT1 ve VT2) transistörler zaten bu tür gecikmelere sahiptir - sinüs% 0'lık bir görev döngüsüyle başlar ve ayrıca% 0'da biter. Bu gecikme 1 örnekleme adımı uzunluğundadır, yani 41,6 µs'dir.

Ve böylece - mavi ve yeşil ışın/sinyal arasındaki ölü zamanı uygulamamız gerekiyor. Herhangi bir kontrol cihazında böyle bir gecikme programlı olarak yapılabilir, ancak bu iyi değil - program donacak veya gecikecek ve filan filan, cihazınız ve daireniz zaten yanıyor. Bu nedenle güç elektroniğinde sadece donanım kullanılmalıdır. Tüm özel motor kontrollerinde, tüm PWM çıkışlarında ve kanallarında donanım ölü süresi sağlanır, ancak STM32 hala genel amaçlı bir MK olduğundan burada her şey daha basittir, ancak işlevimizi yerine getirecektir.

TIM1 zamanlayıcısına ihtiyacımız olacak, yalnızca sinyaller arasına donanım gecikmesi ekleyebilir, yazılım yazma bölümünde size bunu nasıl yapacağınızı anlatacağım ama şimdi sonuca ve orada ne olması gerektiğine bakalım:

Gecikmeyi görmek için sinyali bir osiloskop üzerinde "uzatıyoruz", çünkü yaklaşık 300 ns'lik kısa bir süreye sahiptir. Transistörleri aşırı akımlardan korumak amacıyla her özel görev için gerekli ölü sürenin hesaplanması gerekir. Gecikme süresi, TIM1 zamanlayıcısı başlatılırken (ayarlanırken) yapılandırılır. Bu gecikme sinyalin hem ön hem de düşen uçlarında mevcuttur.

6. STM32 mikrodenetleyici için firmware yazma

İşte belki de en önemli ve ilginç kısma geliyoruz. Sürecin fiziğini analiz ettik, çalışma prensibi açık görünüyor, gerekli minimum koruma da belirlendi - geriye kalan tek şey tüm bunları gerçek donanımda uygulamak. Bunun için STM32VL-Discovery kartını kullanıyorum, bu arada, onu 2011 yılında ST'nin konferanslarında ücretsiz hata ayıklamaları verdiği bir zamanda geri aldım ve o zamandan beri paketlendi - paketi sadece birkaç ay açtım önce, son kullanma tarihi geçmemiş gibi görünüyor))) Kod yazma konusundaki "standım" şuna benziyor:

Şimdi bağlantıya geçelim. Farklı frekanslarda iki sinyal üretmem gerektiğinden PWM çıkışlarını farklı zamanlayıcılarda kullanmak zorunda kaldım. TIM1, temel frekansı 50 Hz'ye ayarlayan bir sinyal üretir ve bunu VT3 ve VT4 transistörlerine sağlar. PWM kanalı No. 3 + tamamlayıcı çıkışı kullanılır. Evet, evet, STM32'de donanım ölü süresi yalnızca bir kanalın normal ve tamamlayıcı çıkışı arasında yapılandırılabilir ki bu gerçekten hoşuma gitmedi. Sinüs oluşumu sürecinin kendisi TIM2 zamanlayıcısına aktarılır, gecikmeye gerek yoktur (nedenini daha önce yazmıştım) ve VT1 ve VT2'de modüle edilmiş bir sinyal oluşturmak için oldukça uygundur.

Kullanılan çıktılar:

  • PA10, transistör VT3'e 50 Hz üreten, TIM1 zamanlayıcının 3 numaralı kanalı olan normal bir PWM çıkışıdır.
  • PB15 - transistör VT4'e sağlanan TIM1 zamanlayıcının 3 numaralı kanalının tamamlayıcı çıkışı
  • PA0, TIM2 zamanlayıcının 1 numaralı PWM kanalının çıkışıdır. VT1'e modüle edilmiş bir sinyal sağlar
  • PA1, TIM2 zamanlayıcının 2 numaralı PWM kanalının çıkışıdır. VT2'ye modüle edilmiş bir sinyal sağlar
Proje Keil 5 ortamında uygulandı, yazının sonunda arşive eklenecektir. Umarım bir projenin nasıl oluşturulacağını ve benzeri bariz şeyleri anlatmaya değmez, eğer bu tür sorular ortaya çıkarsa, bunu Google'da veya YouTube'da nasıl yapacağınıza bakmanızı tavsiye ederim. Tüm kodlar CMSIS'te (kayıtlar) yazılmıştır, çünkü ... Dönüştürücü kontrol sisteminde herhangi bir ek soyutlama düzeyini kullanmak kesinlikle bir günahtır! ST için bunlar SPL kitaplıkları ve daha alakalı HAL'lerdir. Eğlenmek için ikisiyle de çalıştım, sonuç tamamen saçmalık. HAL genellikle inanılmaz derecede yavaştır ve gerçek zamanlı olarak zor uygulamalar için uygun değildir. Bazı kritik anlarda kayıtlar kat kat daha hızlıydı, bu arada internette bununla ilgili birden fazla makale buldum.

Bazıları muhtemelen şunu soracaktır: "Neden DMA kullanmıyorsunuz?" Bu yapılabilir ve yapılmalıdır, ancak bu makale daha çok bilgilendirme amaçlıdır ve MK'nin kendisi hesaplamalar açısından karmaşık hiçbir şey yapmaz, dolayısıyla çekirdeğin performansında kesinlikle bir sınır yoktur. DMA iyidir, ancak herhangi bir potansiyel sorun yaşamadan DMA olmadan da yapabilirsiniz. Programda yapmamız gerekenleri açıklayalım:

  1. 240 sinüs noktamızla bir dizi oluşturun
  2. Harici bir kuvars rezonatör kaynağı seçerek saat devrelerini 24 MHz frekansına yapılandırın
  3. TIM1 zamanlayıcısını ölü süre etkinken 50 Hz PWM oluşturacak şekilde ayarlayın
  4. TIM2'yi 24 kHz taşıyıcı frekansıyla PWM oluşturacak şekilde yapılandırın
  5. 24 kHz'de kesintiler üreten bir TIM6 zamanlayıcı ayarlayın. İçinde bir sonraki görev döngüsü değerini tablodan TIM2 zamanlayıcıya göndereceğiz ve ayrıca yarım dalgaların oluşumunu değiştireceğiz
Karmaşık bir şey yok, değil mi? O zaman gidelim...

6.1. Sinüs tablosu oluşturma

Burada her şey basit, düzenli bir dizi. Hatırlamaya değer tek şey, 0'dan 1000'e kadar 120 puanımız olduğu. Tabloya 120 puan daha eklememiz gerekiyor, ancak ters sırada:

Uint16_t sin_data = (13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,207,220,233,246,258, 271,284,296,309,321,333,346,358,370,3 82 ,394,406,418,430,442,453,465,477,488,500, 511,522,533,544,555,566,577,587,598,608,619,629,639,649,659,669,678,688,697,707, 71 6,725,734,743,751,760,768,777,785,793,801,809,816,824,831,838,845,852,859,866, 872,878,884,891,896,902,908,913,918,923,92 8,93 3,938,942,946,951,955,958,962,965, 969,972,975,978,980,983,985,987,989,991,993,994,995,996,997,998,999,999,999,1000, 999 ,999, 999,998,997,996,995,994,993,991,989,987,985,983,980,978,975,972,969,965, 962,958,955,951,946,942,938,933,928,923,918,91 3,908, 902,896,891,884,878,872,866, 859,852,845,838,831,824,816,809,801,793,785,777,768,760,751,743,734,725,716,707, 697,688, 678.669 ,659.649.639.629.619.608.598.587.577.566.555.544.533.522.511.500, 488,477,465,453,442,430,418,406,394,382,370,358,346,333,321 ,309,296,284,271,258, 246,233,220,207,195,182,169,156,143,130,1 17,104,91,78,65,52, 39,26,13);

6.2. Saat sisteminin kurulması

STM32'deki saat ayarı çok esnek ve kullanışlıdır ancak birkaç nüans vardır. Sıranın kendisi şöyle görünür:

1) Yerleşik RC zincirinden (HSI) harici kuvarsa (HSE) saat ölçümüne geçin, ardından hazırlık bayrağını bekleyin

RCC->CR |= ((uint32_t)RCC_CR_HSEON); // HSE'yi etkinleştirirken (!(RCC->CR & RCC_CR_HSERDY)); // HSE'yi başlatmaya hazır olun
2) Kontrolörün Flash belleği çekirdeğe göre biraz daha yavaş çalışır; bu amaçla flaş saatini ayarlıyoruz. Bu yapılmazsa program başlayacak, ancak periyodik olarak çökecektir: birkaç kW ve dengesiz yazılım uyumsuz şeylerdir.

FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY; // Saat Flash belleği
3) Sistem saati veri yolu (AHB) ve çevre veri yolları için iki tane olan bölücüler ayarladık: APB1 ve APB2. Maksimum frekansa ihtiyacımız var, bu yüzden hiçbir şeyi bölmeyiz ve bölme katsayılarını 1'e eşit yaparız.

RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // AHB = SYSCLK/1 RCC->CFGR |= RCC_CFGR_PPRE1_DIV1; // APB1 = HCLK/1 RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; // APB2 = HCLK/1
4) Önünde duran frekans çarpanı (PLL) ön ölçekleyicisini ayarlayıp kuvars frekansını 2'ye bölüyoruz. 8 MHz'in 2'ye bölünmesiyle 4 MHz elde ediyoruz. Şimdi çıktının 24 MHz olması için bunları 6 ile çarpmamız gerekiyor. Kayıtları yazmadan önce, her ihtimale karşı içeriklerini silelim.

RCC->CFGR &= ~RCC_CFGR_PLLMULL; // PLLMULL bitlerini temizle RCC->CFGR &= ~RCC_CFGR_PLLSRC; // PLLSRC bitlerini temizle RCC->CFGR &= ~RCC_CFGR_PLLXTPRE; // PLLXTPRE bitlerini temizle RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1; // kaynak HSE RCC->CFGR |= RCC_CFGR_PLLXTPRE_PREDIV1_Div2; // kaynak HSE/2 = 4 MHz RCC->CFGR |= RCC_CFGR_PLLMULL6; // PLL x6: saat = 4 MHz * 6 = 24 MHz
5) Şimdi frekans çarpanını (PLL) açmanız ve hazırlık bayrağını beklemeniz gerekiyor:

RCC->CR |= RCC_CR_PLLON; // PLL'yi etkinleştirirken((RCC->CR & RCC_CR_PLLRDY) == 0) () // PLL hazır olana kadar bekleyin
6) Ve son olarak, sistem veri yolu (AHB) için saat kaynağını yapılandırıyoruz - imrenilen 24 MHz'e sahip frekans çarpanımızın çıkışı. Öncelikle yazmacın içeriğini temizliyoruz, gerekli biti ayarlıyoruz ve hazır bayrağını bekliyoruz:

RCC->CFGR &= ~RCC_CFGR_SW; // SW bitlerini temizle RCC->CFGR |= RCC_CFGR_SW_PLL; // kaynağı seç SYSCLK = PLL while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) () // PLL kullanılıncaya kadar bekleyin
Sonuç olarak, aşağıdaki saat ayarlama fonksiyonunu elde ederiz:

Void RCC_Init (void)( RCC->CR |= ((uint32_t)RCC_CR_HSEON); // HSE'yi etkinleştirirken (!(RCC->CR & RCC_CR_HSERDY)); // HSE'yi başlatmaya hazır FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY; // Flash belleğin saati RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // AHB = SYSCLK/1 RCC->CFGR |= RCC_CFGR_PPRE1_DIV1; // APB1 = HCLK/1 RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; // APB2 = HCLK/1 RCC->CFGR &= ~RCC_CFGR_PLLMULL; // PLLMULL bitlerini temizle RCC->CFGR &= ~RCC_CFGR_PLLSRC; // PLLSRC bitlerini temizle RCC->CFGR &= ~RCC_CFGR_PLLXTPRE; // PLLXTPRE bitlerini temizle RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1; // kaynak HSE RCC->CFGR |= RCC_CFGR_PLLXTPRE_PREDIV1_Div2; // kaynak HSE/2 = 4 MHz RCC->CFGR |= RCC_CFGR_PLLMULL6; // PLL x6: saat = 4 MHz * 6 = 24 MHz RCC->CR |= RCC_CR_PLLON ; // PLL'yi etkinleştirirken((RCC->CR & RCC_CR_PLLRDY) == 0) () // PLL hazır olana kadar bekleyin RCC->CFGR &= ~RCC_CFGR_SW; // SW bitlerini temizleyin RCC->CFGR |= RCC_CFGR_SW_PLL; // kaynağı seç SYSCLK = PLL while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) () // PLL kullanılıncaya kadar bekleyin )

6.3. TIM1 zamanlayıcısını ve "ölü zamanı" ayarlama

Zamanlayıcının genel ayarını vereceğim, referans kılavuzunda ayrıntılı olarak anlatılmıştır - her kaydın amacını okumanızı tavsiye ederim. Evet ve internette PWM ile çalışmaya ilişkin temel makaleler var. Kodumun kendisi oldukça iyi yorumlanmıştır, bu yüzden size sadece TIM1 zamanlayıcı başlatma fonksiyonunun kodunu vereceğim ve en ilginç noktalara bakalım:

Void PWM_50Hz_Init (void)( RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // TIM1 için saati etkinleştir RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // A portu için saati etkinleştir RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // B portu için saati etkinleştir RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // alternatif gpio için saati etkinleştir /************************************ **** PA10 ayarı ** ************************************/ GPIOA->CRH & = ~GPIO_CRH_CNF10; // PWM için alternatif push-pull belirleme GPIOA->CRH |= GPIO_CRH_CNF10_1; GPIOA->CRH &= ~GPIO_CRH_MODE10; GPIOA->CRH |= GPIO_CRH_MODE10; // gpio hızı 50 MHz /**** ******** ***************** PB15 ayarı ********************* *************** ********/ GPIOB->CRH &= ~GPIO_CRH_CNF15; // CH3N için tamamlayıcı ayar GPIOB->CRH |= GPIO_CRH_CNF15_1; GPIOB-> CRH &= ~GPIO_CRH_MODE15; GPIOB->CRH |= GPIO_CRH_MODE15; / /gpio hızı 50 MHz /******************************** *** PWM kanalını yapılandır *************** ***************************** ***/ TIM1->PSC = 480-1; // saat için div: F = SYSCLK / TIM1->ARR = 1000; // 1000'e kadar sayın TIM1->CR1 &= ~TIM_CR1_CKD; // ölü zaman için div: Tdts = 1/Fosc = 41,6 ns TIM1->CCR3 = 500; // görev döngüsü %50 TIM1->CCER |= TIM_CCER_CC3E | TIM_CCER_CC3NE; // PWM tamamlayıcı çıkışını etkinleştirin TIM1->CCER &= ~TIM_CCER_CC3NP; // aktif yüksek seviye: 0 - yüksek, 1 - düşük TIM1->CCMR2 &= ~TIM_CCMR2_OC3M; TIM1->CCMR2 |= TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1; // pozitif PWM TIM1->BDTR &= ~TIM_BDTR_DTG; // kaydı temizle TIM1->BDTR |= TIM_BDTR_DTG_2 | TIM_BDTR_DTG_1 | TIM_BDTR_DTG_0; // ölü zaman değeri TIM1->BDTR |= TIM_BDTR_MOE | TIM_BDTR_AOE; // üretim çıktısını etkinleştir /******************************************** **** **********************************/ TIM1->CR1 &= ~TIM_CR1_DIR; // yukarı sayma: 0 - yukarı, 1 - aşağı TIM1->CR1 &= ~TIM_CR1_CMS; // TIM1-> ön sinyaline hizalandı
Görev döngümüz de tıpkı frekans gibi sabittir ve asla değişmez. Köşegenlerin çalışma zamanını ve sırasını ayarlayan bu zamanlayıcıdır:

TIM1->CCR3 = 500; // görev döngüsü %50
"Ölü zaman" duraklamasının süresi büyük ölçüde burada yapılandırılan TDTS zaman parametresine bağlıdır:

TIM1->CR1 &= ~TIM_CR1_CKD; // ölü zaman için div: Tdts = 1/Fosc = 41,6 ns
Süresi 1 saat tikidir. Referans kılavuzuna bakarsanız, CKD bitlerinin örneğin Tdts'yi 2'ye, 8 tike vb. eşitleyebildiğini görebilirsiniz.

Duraklatma süresinin kendisi burada ayarlanır:

TIM1->BDTR |= TIM_BDTR_DTG_2 | TIM_BDTR_DTG_1 | TIM_BDTR_DTG_0;
RM0041 referans kılavuzunu açarsanız, CE'yi hesaplamak için bu formülleri göreceksiniz. Gördüğünüz gibi Tdts parametresi burada temeldir:

6.4. TIM2 zamanlayıcısını ayarlama, sinüs oluşturma

Burada her şey daha da basit; ayarlarda bir şeyi açıklamanın muhtemelen bir anlamı yok çünkü yorumlar zaten gereksiz. Sorularınız olursa yorumlara bekliyorum.

Void PWM_Sinus_Init (void)( RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // TIM2 için saati etkinleştirin RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // A portu için saati etkinleştirin RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // alternatif gpio için saati etkinleştirin /**************************************** PA0 Ayarı************ ***** **********************/ GPIOA->CRL &= ~GPIO_CRL_CNF0; // PWM1_CH1 için alternatif push-pull belirleme GPIOA-> CRL |= GPIO_CRL_CNF0_1; GPIOA->CRL &= ~GPIO_CRL_MODE0; GPIOA->CRL |= GPIO_CRL_MODE0; // gpio hızı 50 MHz /********************* ***** **** PA1 ayarı ************************************* **********/ GPIOA->CRL &= ~GPIO_CRL_CNF1; // PWM1_CH1 için alternatif itme-çekme belirleme GPIOA->CRL |= GPIO_CRL_CNF1_1; GPIOA->CRL &= ~GPIO_CRL_MODE1; GPIOA-> CRL |= GPIO_CRL_MODE1; // gpio hızı 50 MHz /*** ************************* PWM kanalını yapılandır ******* **************** ************/ TIM2->PSC = 0; // saat için div: F = SYSCLK / TIM2->ARR = 1000; // 1000'e kadar say TIM2->CCR1 = 0; / / görev döngüsü %0 TIM2->CCR2 = 0; // görev döngüsü %0 TIM2->CCER |= TIM_CCER_CC1E; // PA8'e PWM çıkışını etkinleştirin TIM2->CCER &= ~TIM_CCER_CC1P; // aktif yüksek seviye: 0 - yüksek, 1 - düşük TIM2->CCER |= TIM_CCER_CC2E; // PA9'a tamamlayıcı PWM çıkışını etkinleştirin TIM2->CCER &= ~TIM_CCER_CC1P; // aktif yüksek seviye: 0 - yüksek, 1 - düşük TIM2->CCMR1 &= ~(TIM_CCMR1_OC1M | TIM_CCMR1_OC2M); TIM2->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1; // pozitif PWM1_CH1 ve PWM1_CH2 /************************************************ ******** ************************************/ TIM2->CR1 & = ~TIM_CR1_DIR; // yukarı doğru say: 0 - yukarı, 1 - aşağı TIM2->CR1 &= ~TIM_CR1_CMS; // ön sinyale göre hizalanmış: 00 - ön; 01, 10, 11 - merkez TIM2->CR1 |= TIM_CR1_CEN; // sayımı başlat)

6.5. TIM6 zamanlayıcı kesintilerini yapılandırma

Zamanlayıcının kendisini 24 kHz frekansına ayarladık:

Void TIM6_step_init (void)( RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // temel TIM6 için saati etkinleştir TIM6->PSC = 1-1; // div, frekans 24 kHz TIM6->ARR = 1000; // 1000'e kadar say TIM6 ->DIER |= TIM_DIER_UIE; // zamanlayıcı için kesmeyi etkinleştir TIM6->CR1 |= TIM_CR1_CEN; // sayımı başlat NVIC_EnableIRQ(TIM6_DAC_IRQn); // kesmeyi etkinleştir TIM6_DAC_IRQn )

6.6. Ana kontrol algoritmasının uygulanması

Ana olaylar TIM6 zamanlayıcısı tarafından oluşturulan kesintide meydana gelir. Hatırlarsanız bu bizim örnekleme adımımızdır, her 41,66 µs'de bir kesme oluşturulur. Buna göre kesme, görev döngüsü değerini tablodan kayıt defterine yazar. CCRx. Bu kesme aynı zamanda bayrağı ters çevirerek hangi köşegenin çizildiğini de belirler. günah_status her yarım döngüden sonra. 240 noktayı görüntülüyoruz, bayrağı ters çeviriyoruz, bu da kontrolün başka bir kanala geçmesine neden oluyor, zaten çekildiğinde bayrak tekrar ters çevriliyor ve her şey tekrarlanıyor. Ana algoritma kodu:

Void TIM6_DAC_IRQHandler(void)( TIM6->SR &= ~TIM_SR_UIF; if(sin_status == 0)(TIM2->CCR1 = sin_data;) if(sin_status == 1)(TIM2->CCR2 = sin_data;) sin_step++; if (sin_step >= 240)( sin_step=0; sin_status = sin_status ? 0: 1; ))

Sonuçlar

Projeyi indirin, derleyin ve mikrodenetleyicinize yükleyin ve çalışan bir invertör edinin. Tek yapmanız gereken bir köprü oluşturmak ve ona sinyal göndermek:

Köprü diyagramlarımdan birini biraz önce PDF formatında yayınlamıştım, dilediğiniz kadar kullanabilirsiniz, umarım güç elektroniğine hakim olmanıza yardımcı olur.

Umarım makaleyi beğenmişsinizdir. Bu kodu gerçek donanımda kullanma konusunda sorularınız varsa yanıtlamaktan memnuniyet duyarım. Ayrıca, lütfen bu kodu hazır bir şey olarak almayın; bu, ana işlevi uygulayan dönüştürücünün çekirdeğidir. Tüm zilleri ve ıslıkları kendiniz ekleyebilirsiniz. Projenin çıplak çekirdeği, nasıl çalıştığını anlamanıza ve kodu parçalara ayırmak için çok fazla zaman harcamanıza izin vermeyecektir.

Malzemeler

GÜNCELLEME1: Başta sinüs tablosu olmak üzere, bulunan bazı hatalar için kullanıcıya teşekkür etmek istiyorum; tablo değiştirildi. Kodu veya tabloyu kullananlar lütfen tekrar kopyalasınlar, yazının içinde zaten düzeltilmiş hali mevcut.

Önsöz.

İki multimetrem var ve her ikisinin de aynı dezavantajı var - 9 voltluk Krona pille çalışıyorlar.

Her zaman stokta yeni bir 9 voltluk pil bulundurmaya çalıştım, ancak bir nedenden ötürü, bir şeyi işaretçi cihazdan daha yüksek bir doğrulukla ölçmek gerektiğinde, Krona'nın ya çalışmadığı ya da yalnızca bir süre dayandığı ortaya çıktı. birkaç saatlik çalışma.

Darbe transformatörünü sarma prosedürü.

Bu kadar küçük boyutlardaki bir halka göbeğe conta sarmak çok zordur ve çıplak bir göbeğe tel sarmak zahmetli ve tehlikelidir. Halkanın keskin kenarları kablo izolasyonuna zarar verebilir. Yalıtımın hasar görmesini önlemek için, manyetik devrenin keskin kenarlarını anlatıldığı gibi köreltin.

Tel döşenirken sarımların birbirinden ayrılmasını önlemek için çekirdeğin ince bir tabaka “88N” tutkalla kaplanması ve sarmadan önce kurutulması yararlı olur.



İlk olarak, ikincil sargılar III ve IV sarılır (dönüştürücü şemasına bakın). Aynı anda iki kabloya sarılmaları gerekiyor. Bobinler, örneğin "BF-2" veya "BF-4" gibi yapıştırıcıyla sabitlenebilir.

Uygun bir telim yoktu ve hesaplanan çapı 0,16 mm olan tel yerine 0,18 mm çapında tel kullandım, bu da birkaç dönüşlü ikinci bir katmanın oluşmasına yol açtı.


Daha sonra birincil sargılar I ve II de iki kabloya sarılır. Birincil sargıların dönüşleri tutkalla da sabitlenebilir.

Dönüştürücüyü daha önce transistörleri, kapasitörleri ve transformatörü pamuk ipliğiyle bağlayarak menteşeli montaj yöntemini kullanarak monte ettim.


Dönüştürücünün girişi, çıkışı ve ortak veri yolu esnek çok telli bir kabloyla bağlandı.


Dönüştürücüyü ayarlama.

İstenilen çıkış voltajı seviyesini ayarlamak için ayarlama yapılması gerekebilir.

Dönüş sayısını, 1,0 Volt akü voltajında ​​dönüştürücünün çıkışının yaklaşık 7 Volt olacağı şekilde seçtim. Bu voltajda multimetrede düşük pil göstergesi yanar. Bu şekilde pilin çok derinden boşalmasını önleyebilirsiniz.

Önerilen KT209K transistörleri yerine diğerleri kullanılıyorsa, transformatörün sekonder sargısının dönüş sayısının seçilmesi gerekecektir. Bunun nedeni, farklı transistör tipleri için p-n bağlantılarındaki voltaj düşüşünün farklı büyüklüğünden kaynaklanmaktadır.

Bu devreyi, transformatör parametreleri değişmeden KT502 transistörleri kullanarak test ettim. Çıkış voltajı bir volt kadar düştü.

Ayrıca transistörlerin baz-emitör bağlantılarının aynı zamanda çıkış voltajı redresörleri olduğunu da unutmamanız gerekir. Bu nedenle transistör seçerken bu parametreye dikkat etmeniz gerekir. Yani, izin verilen maksimum baz emitör voltajı, dönüştürücünün gerekli çıkış voltajını aşmalıdır.


Üretim gerçekleşmezse tüm bobinlerin fazlarını kontrol edin. Dönüştürücü şemasındaki noktalar (yukarıya bakın) her sarımın başlangıcını işaretler.


Halka manyetik devrenin bobinlerini fazlandırırken karışıklığı önlemek için, tüm sargıların başlangıcını alın, Örneğin, tüm kablolar alttan çıkıyor ve tüm sargıların sonunun ötesinde, tüm kablolar üstten çıkıyor.


Darbe voltaj dönüştürücüsünün son montajı.

Son montajdan önce devrenin tüm elemanları çok telli kabloyla bağlandı ve devrenin enerji alma ve iletme yeteneği test edildi.


Kısa devreleri önlemek için darbe voltaj dönüştürücünün kontak tarafı silikon dolgu ile yalıtıldı.


Daha sonra tüm yapısal elemanlar Krona gövdesine yerleştirildi. Konektörün bulunduğu ön kapağın içeriye girmesini önlemek için ön ve arka duvarlar arasına selüloit plaka yerleştirildi. Daha sonra arka kapak “88N” yapıştırıcı ile sabitlendi.


Modernize edilmiş Krona'yı şarj etmek için bir ucunda 3,5 mm'lik jak bulunan ek bir kablo yapmak zorunda kaldık. Kablonun diğer ucuna kısa devre olasılığını azaltmak için benzer fişler yerine standart cihaz prizleri takıldı.

Multimetrenin iyileştirilmesi.

DT-830B multimetre, yükseltilmiş Krona ile hemen çalışmaya başladı. Ancak M890C+ test cihazının biraz değiştirilmesi gerekiyordu.

Gerçek şu ki çoğu modern multimetrenin otomatik kapanma işlevi vardır. Resimde multimetre kontrol panelinin bu fonksiyonun gösterildiği kısmı gösterilmektedir.


Otomatik Kapanma devresi aşağıdaki gibi çalışır. Akü bağlandığında C10 kondansatörü şarj edilir. Güç açıldığında, C10 kondansatörü R36 direnci üzerinden boşaltılırken, IC1 karşılaştırıcısının çıkışı yüksek bir potansiyelde tutulur, bu da VT2 ve VT3 transistörlerinin açılmasına neden olur. Açık transistör VT3 aracılığıyla besleme voltajı multimetre devresine girer.


Gördüğünüz gibi devrenin normal çalışması için, ana yük açılmadan önce bile C10'a güç sağlamanız gerekir ki bu imkansızdır, çünkü modernize edilmiş "Krona"mız tam tersine yalnızca yük göründüğünde açılacaktır. .


Genel olarak, tüm değişiklik ek bir atlama telinin takılmasından ibaretti. Onun için bunu yapmanın en uygun olduğu yeri seçtim.

Ne yazık ki, elektrik şemasındaki elemanların tanımları multimetremin baskılı devre kartındaki tanımlarla eşleşmedi, bu yüzden jumper'ı bu şekilde takma noktalarını buldum. Numarayı çevirerek anahtarın gerekli çıkışını belirledim ve işlem yükselticisi IC1'in (L358) 8. ayağını kullanarak +9V güç veriyolunu belirledim.


Küçük detaylar.

Tek bir pil satın almak zordu. Çoğunlukla ikili veya dörtlü gruplar halinde satılırlar. Ancak bazı kitler, örneğin "Varta", bir kabarcıklı kutuda beş pille birlikte gelir. Eğer siz de benim kadar şanslıysanız böyle bir seti birisiyle paylaşabileceksiniz. Pili yalnızca 3,3 dolara satın aldım, bir “Krona”nın fiyatı ise 1 ile 3,75 dolar arasında değişiyor. Bununla birlikte, 0,5 dolarlık “Taçlar” da vardır, ancak bunlar tamamen ölü doğmuştur.