DC / ACむンバヌタヌ動䜜原理、回路、ファヌムりェア

䞀般に、パルスコンバヌタヌずパワヌ゚レクトロニクスは、゚レクトロニクス開発の分野のほずんどの愛奜家や専門家にずっお垞に神聖なものです。 この蚘事は、DIYファンや代替゚ネルギヌのファンの䞭で最も興味深いトピック、぀たり定数からの正匊波電圧/電流の圢成をおそらく匷調しおいたす。



おそらく「玔粋なサむン」ずいうフレヌズがあった広告を芋たか、蚘事を読んだのではないでしょうか。 マヌケティングコンポヌネントに぀いおではなく、技術的な実装のみに぀いお説明したす。 私は、仕事自䜓の原理、暙準的なそうではない回路゜リュヌションに぀いお、そしお最も重芁なこずずしお、可胜な限り明確に説明しようずしたす-私たちのために必芁な信号を生成するSTM32マむクロコントロヌラ甚の゜フトりェアを曞いお分析したす。



STM32を遞ぶ理由 はい、珟圚はCISで最も人気のあるMKであるため、ロシア語のトレヌニングに関する倚くの情報があり、倚くの䟋がありたす。そしお最も重芁なのは、これらのMKずデバッグツヌルが非垞に安いこずです。 盎接蚀う-商業プロゞェクトではTMS320F28035たたはTI Piccoloシリヌズの同様のDSPのみを配眮したすが、これはたったく別の話です。



1぀重芁なのは、STM32を䜿甚するず、䞖界の運呜が原子力発電所やデヌタセンタヌの運甚に䟝存しない単玔な「家庭甚」電力倉換噚を安定しお制埡できるこずです。







これは、定電流を亀流に倉えるために取埗する必芁がある制埡信号の写真です。 そしお、はい-ここにサむンがありたす その映画のように「ゎヌファヌを芋る」 -いいえ。 「でも圌は...」



副錻腔がどのように圢成されるかを知るこずは興味深いですか それでも、キロワットの゚ネルギヌポンプオむルを知りたいのですが。 それから、キャットぞようこそ



1.正匊波信号を生成するためのトポロゞ



倚くの電子技術者に「どうやっお正匊波信号を生成できたすか」ず尋ねるず、䜕十もの異なる方法の提案が圓おはたりたすが、どれが必芁ですか 最初のタスクから始めたしょう-たずえば、380V 10Aを230Vの亀流電圧に倉換する必芁がありたす。 䞀般に、これは「叀兞的な」ケヌスであり、優れたオンラむンUPSたたはむンバヌタヌで芋るこずができたす。 箄4 kWの電力を倉換する必芁があり、匱いものではなく、効率が良い堎合でも、正しいこずがわかりたす。 同様の条件は、サむンを「描く」ためのオプションの数を枛らすず思いたす。 それで、私たちには䜕が残っおいたすか



最倧6〜10 kWの電力倉換噚では、フルブリッゞずスルヌニュヌトラルのハヌフブリッゞの2぀の䞻芁なトポロゞが䜿甚されたす。 圌らは次のように芋えたす 



1゚ンドツヌ゚ンドニュヌトラルのトポロゞ







このトポロゞは、正匊波出力を備えた予算のUPSで最もよく芋られたすが、APCやGEなどの圓局は、十分な容量であっおもそれを䜿甚するこずを軜notしおいたせん。 䜕が圌らにこれを促したすか このトポロゞの長所ず短所を芋おみたしょう。



長所





短所





䞻な長所ず短所が特定されおいるので、このトポロゞはい぀必芁ですか 私の䞻芳的な意芋500-1000 Wたでの電力で、基本的な芁件は信頌性ではなくコストです。 そのような消費財の代衚的なものは、A-Electronicsの安定剀です。安䟡で、どういうわけか機胜し、倧䞈倫です。 わが囜の消費者の60にずっお、これは十分で手頃な䟡栌です。 結論を導きたす。



2ブリッゞトポロゞ







ブリッゞトポロゞ...おそらく、電力倉換噚で最も理解可胜で最も䞀般的なトポロゞであり、経隓がほずんどなくおも開発者が利甚できる最も重芁なトポロゞです。 10 kWを超えるず、単盞たたは䞉盞ブリッゞ以倖のものは芋぀かりたせん。 なぜ圌はそんなに愛されおいるのですか



長所





短所





ブリッゞトポロゞの実際の欠点からわかるように、トランゞスタの冷华に察する芁件は増加しおいるだけです。 倚くの人が考えるだろう「より倚くの熱が攟出される-それはより䜎い効率を意味する」 それほどそうではありたせん... EMF゚ミッションの䜎枛ず、より「剛性の高い」制埡システムにより、2぀のトポロゞヌの効率はほが同等です。



70のケヌスでは、DC / ACむンバヌタヌだけでなく、他のコンバヌタヌでもブリッゞ回路を䜿甚する必芁がありたす。 これは、私が䞻に産業甚゜リュヌションを蚭蚈し、ペヌロッパの顧客向けに蚭蚈するこずが倚いためです。高䟡な産業甚デバむスには5〜15幎の保蚌を䞎えるのが慣䟋です。 叀兞的な芁件「10幎間の保蚌を提䟛できるように、鉄片が必芁です」、もう遞択する必芁はありたせん。 もちろん、最䜎䟡栌のデバむスが必芁な堎合は、トポロゞを遞択するずきに特定のタスクから開始する必芁がありたす。



簡単な芁玄 この蚘事では、ブリッゞコンバヌタヌHブリッゞたたはフルブリッゞの動䜜甚の゜フトりェアを玹介したすが、正匊波圢成の原理はすべおのトポロゞで同じです。 コヌドは1番目のトポロゞヌに適合させるこずもできたすが、それはあなた自身です。



2.ブリッゞコンバヌタヌを䜿甚した亀流電流の圢成



たず、ブリッゞコンバヌタヌの䞀般的な動䜜を芋おみたしょう。 回路を芋お、トランゞスタVT1-VT4を確認したす。 これにより、抜象負荷抵抗などに1぀たたは別の可胜性を適甚できたす。 トランゞスタVT1ずVT4を開くず、次のこずがわかりたす。VT4は負荷の䞀端をマむナスGNDに接続し、トランゞスタVT1は+ 380Vに接続し、電䜍差「380V-0V」が負荷に珟れたす。負荷は電流を流し始めたす。 科孊者が同意したこずを誰もが芚えおいるず思いたす-電流は「プラスからマむナスぞ」流れたす。 次の図が衚瀺されたす。







VT1ずVT4を開くず䜕が埗られたしたか 負荷をネットワヌクに接続したした 抵抗噚を電球に亀換するず、点灯したす。 そしお、負荷をオンにするだけでなく、負荷に流れる電流の方向を決定したした。 これは非垞に重芁です そしお、その時にVT2ずVT3に䜕が起こったのですか それらは閉じられおいたした...完党に...き぀い...すべお同じVT2たたはVT3も開いおいたらどうでしょうか 私たちは芋たす







トランゞスタVT1、VT4、およびVT2が開いたずしたす。 オヌムの法則を思い出しおください。たずえば、IPP60R099P7XKSA1などの高電圧トランゞスタのチャネル抵抗を芋るず、0.1オヌムがあり、盎列に2぀ありたす。぀たり、VT1およびVT2回路の抵抗は玄0.2オヌムです。 次に、この回路を流れる電流を蚈算しおみたしょう380V / 0.2 Ohm = 1900A。 私は誰もがこれが短絡であるこずを理解しおいるず思いたすか たた、VT2ずVT3を閉じる必芁がある理由は誰もが理解しおいるず思いたすか



この「珟象」は、 -through currentず呌ばれたす。 そしお、パワヌ゚レクトロニクスに倧きな戊争があるのは圌ず䞀緒です。 それを避ける方法は アルゎリズムが远加トランゞスタの同時オヌプンを厳密に犁止する制埡システムを䜜成したす。



なぜトランゞスタVT2ずVT3が必芁なのですか 電流の方向が非垞に重芁だず曞いたのを芚えおいたすか AC倉数ずは䜕かを思い出したしょう。 実際には、これは䜕か可倉の電流、この堎合は電流の方向です。 コンセントに電流が流れ、1秒間に100回方向を倉えたす。 VT1ずVT4を閉じおから、トランゞスタVT2ずVT3を開いお、次の図を取埗しおみたしょう。







ご芧のずおり、電流の方向矢印で衚瀺が逆になっおいたす。 ブリッゞを䜿甚するず、電流の方向を倉えるこずができたしたが、これはどういう意味ですか はい、亀流が流れたした



ブリッゞには2぀の察角線があるこずに泚意しおください。最初の察角線はVT1 + VT4によっお圢成され、2番目の察角線はVT2 + VT3によっお圢成されたす。 これらの察角線は順番に機胜し、電流を最初に䞀方の方向に通し、次にもう䞀方の方向に通したす。



亀流電流が流れたずおっしゃいたしたが、それほど簡単ではありたせん...暙準電圧がありたす。 これは、電圧ず呚波数の2぀の䞻芁なパラメヌタヌによっお正芏化されたす。 電圧の問題は単玔で玔粋な回路であるため、ここで呚波数を把握したしょう。



そしお、呚波数...それに぀いお知られおいるこず-それは50 Hzです米囜では60 Hzになりたす。 信号呚期は20 msです。 この堎合、正匊波は察称です。぀たり、2぀の半波正ず負の持続時間は同じ、぀たり10 ms + 10 msになりたす。 ここですべおが明確であるこずを願っおいたす。



物理的な意味でこれはどういう意味ですか はい、10ミリ秒ごずに負荷の電流の方向を倉曎する必芁がありたす。 たず、VT1 + VT4の察角線を10ミリ秒間開いた埌、閉じお、次の10ミリ秒でVT2 + VT3の察角線を開きたす。



トランゞスタを開くずはどういう意味で、どの信号を適甚するのか
トランゞスタ制埡の原理に぀いお少し話したしょう。 Nチャネル絶瞁ゲヌトトランゞスタMosfetを䜿甚したす。



「オヌプントランゞスタ」ずは、ゲヌトGが゜ヌスSに察しお正の電䜍+ 10..18Vであり、トランゞスタがチャネル抵抗SDを無限に倧きい2-100MΩから小さい通垞に倉曎したトランゞスタです。 0.1-1オヌム。 ぀たり、トランゞスタは電流を流し始めたした。



「クロヌズドトランゞスタ」ずは、ゲヌトGが゜ヌスSに匕き寄せられ、その抵抗が小さい倀から無限に倧きい倀に倉化したトランゞスタです。 ぀たり、トランゞスタは電流の䌝導を停止しおいたす。



電界効果トランゞスタたたはIGBTの動䜜原理をよく理解するには、Semenovの本「Fundamentals of Power Electronics」たたは別の゜ヌスのいく぀かの章を読むこずをお勧めしたす。Wikipediaを䜿甚しお開始するこずもできたす。



制埡のために、パルス幅倉調たたはより䞀般的な略語-PWMを䜿甚しお信号を䞎えたす。 この信号の特城は、䜎電圧GNDず高電圧VCCの2぀の状態があるこずです。぀たり、トランゞスタのゲヌトにそれを適甚するか、それを開くか閉じるかのいずれかです。他に方法はありたせん。 怠 alsoな人のために衚面的に説明したので、PWMに぀いおも読むこずをお勧めしたす。


したがっお、ブリッゞが10ミリ秒ごずに電流の方向を倉曎するには、20ミリ秒の呚期でデュヌティサむクルが50のPWM信号を送信する必芁がありたす。 これは、20ミリ秒のうち、肩は半分の時間10ミリ秒開いお電流を流し、残りの半分は閉じおいるこずを意味したす。 このようなPWMをすべおのキヌに適甚する必芁がありたすが、1぀の条件がありたす-VT1 + VT4察角線に盎接PWMを適甚し、すでにVT2 + VT3察角線に逆盞を適甚したす。 よりむンテリゞェントに蚀えば、察角線に䟛絊される信号には180 0のシフトが必芁です。 私はこの瞬間にあなたの頭がテキストを理解しようずしお沞隰し始めたず思うので、芖芚的な衚珟を芋たす







今、すべおが明確になっおいたすか いや その埌、より詳现に...ご芧のずおり、トランゞスタの開閉の瞬間に特に泚意したした。プラスで開き、マむナスで閉じたす。 たた、信号は逆、぀たり逆です。青信号が「プラス」の堎合、緑信号は「マむナス」です。 ある察角線䞊の青信号ず別の察角線䞊の緑信号を䞎えたす-波圢に芋られるように、察角線が同時に開くこずはありたせん。 ACの準備ができたした



期間を芋おください。 私の蚀葉が抜象化されないように、圌は特にコントロヌラヌ出力からのオシログラムを瀺したした。 信号呚期は20ミリ秒で、䞀方の察角線は10ミリ秒開いお正の半波を䜜成し、もう䞀方の察角線も10ミリ秒開いお負の半波を䜜成したす。 今、私は皆が理解し、ただ理解しおいないこずを願っおいたす-PMに曞いお、私はあなたのためにあなたの指で個人レッスンを行いたす。 私の蚀葉を確認するず、オシログラムは私たちの倧切な50 Hzを瀺しおいたす 早くリラックスするためだけに...



50 Hzの呚波数の亀流電流を受信したしたが、゜ケットに正匊波があり、ここでは蛇行はありたせん。 正匏には、蛇行を出力に適甚し、ほずんどの負荷に䟛絊するこずができたす。たずえば、パルス電源は、サむンたたは蛇行のいずれでもかたいたせん。 ぀たり、すでにラップトップ、電話、テレビ、電話などをオンにするのに十分なものがありたすが、ACモヌタヌを接続するず、すべおが非垞に悪くなりたす-りォヌムアップが開始され、その効率は著しく䜎䞋したすが、最終的には燃え尜きたす。 自宅に゚ンゞンがないず思いたすか 冷蔵庫のコンプレッサヌはどうですか 円圢加熱ポンプ 埌者は䞀般的に朚でできおいるかのように燃えたす。 井戞甚の深井戞ポンプでも同じ状況があり、実際には倚くのものがありたす。 むンバヌタヌ、スタビラむザヌ、たたはUPSの出力での正匊波信号が䟝然ずしお重芁であるこずがわかりたした。 さお、あなたはそれを䜜成する必芁がありたす 今、脳の爆発が始たりたす...



3. PWMを䜿甚しお正匊波を生成する



率盎に蚀っお、このセクションをアクセシブルな蚀語で衚瀺する方法がわかりたせん。 突然、わからない人は、远加でグヌグルで怜玢するか、コメントやドラッグを曞くように頌みたす。個人的に説明しようず思いたす。 目は怖いが、手はやっおいる...



通垞のサむングラフがどのように芋えるか芋おみたしょう







2぀の軞がありたす。1぀の軞には呚期pi、pi / 2以䞊があり、2番目の軞には-1〜+1の振幅がありたす。 このタスクでは、呚期は秒単䜍で枬定され、半波ごずに20ミリ秒たたは10ミリ秒です。 ここではすべおがシンプルで明確ですが、振幅があればもっず楜しくなりたす-振幅が0から1000であるずいう公理ずしお受け入れおください。これは、マむクロコントロヌラが蚭定するデュヌティサむクルの倀、぀たり100は10、500-50、900-90です。  論理は明確だず思いたす。 次の章では、0〜1000の理由を理解したすが、今のずころは、グラフを倀に再構築したす。







これは喫煙者の掞グラフがどのように芋えるかであり、私たちのタスクに察応しおいたす。 あなたが芋るこずができるように、私は負の半サむクルを指定したせんでした、なぜなら わが囜では、正匊波信号ではなく、ブリッゞの察角線を切り替えるこずで電流の方向を倉えるこずで実珟しおいたす。



X軞に沿っお時間があり、Y軞に沿っおPWM信号のデュヌティサむクルがありたす。 PWMを䜿甚しおサむンを描く必芁がありたす。 孊校でゞオメトリを思い出しおください。グラフィックをどのように䜜成したしたか そう、ポむントで そしお䜕点ですか いく぀かのポむントでサむンを䜜成しおみたしょうO10,0+ O25,1000+ O310,0+ O415、-1000+ O520、0そのようなサむンを取埗したす







私たちはそれを構築し、原則ずしお、この信号は通垞の蛇行よりも正匊波に近いこずを確認したしたが、今のずころただ正匊波ではありたせん。 ポむントの数を増やしたしょう。 ちなみに、これは「信号離散性」たたはこの堎合「PWM離散性」ず呌ばれたす。 そしお、これらの点の座暙をどのように知っおいたすか 極端なこずはただでした...



サむンの圢成の倀の蚈算



䞊で蚀ったように、私たちのサむンは非垞に察称的です。 期間の1/4、぀たり0から5ミリ秒を䜜成し、この郚分をさらに耇補するず、無限に長いサむンを䜜成できたす。 したがっお、匏は次のずおりです。



そしお順番に





たずえば、5぀のポむントがあるずいう条件を簡単に䜜成しおみたしょう。 1ステップ= 1ミリ秒であるこずがわかりたす。これにより、グラフを簡単に䜜成できたす。 サンプリングのステップは単玔であるず考えられたす。プロットする期間5 msをポむント数で陀算したす。 匏を人間の心に持ち蟌もう。





1 msのサンプリングステップを取埗したす。 たずえば、デュヌティサむクルを蚈算するための匏をExcelで定匏化し、次の衚を取埗したす。







次に、サむングラフに戻っお再床䜜成したすが、さらに倚くのポむントに぀いお、それがどのように倉化するかを確認したす。







あなたが芋るこずができるように、信号はサむンのようです、描画の私のスキルを考慮しおも、むしろ、怠lazのレベルで結果は説明を必芁ずしないず思いたすか 構築結果に基づいお、公理を導き出したす。

ドットが倚いほど、信号のサンプリングレヌトが高くなり、正匊波の圢状がより理想的になりたす。



だから、私たちはいく぀のポむントを䜿甚したすか...より良いこずは明らかです。 カりント方法



  1. この蚘事では、叀いマむクロコントロヌラヌSTM32F100RBT6STM32VL-Discoveryのデバッグを䜿甚しおいたす。その呚波数は24 MHzです。
  2. 20ミリ秒の期間が䜕クロックサむクル続くかをカりントしたす24,000,000 Hz / 50 Hz = 480,000ティック
  3. したがっお、呚期の半分は24䞇ティックであり、これは24 kHzの呚波数に盞圓したす。 キャリア呚波数を䞊げたい堎合は、石をより速く取りたす。 24 kHz、私たちの耳にはただ聞こえたすが、テストや地䞋宀の鉄片には聞こえたす。 少し埌にF103C8T6に転送する予定で、すでに72 MHzありたす。
  4. 240,000ティック...半期間で240ポむントが論理的にここに頌みたす。 タむマヌは、1000ティックたたは41.6ÎŒsごずにデュヌティサむクルを曎新したす。


PWMの離散性を決定したした。ネットワヌク内ず少なくずも同等の波圢を埗るには、半呚期あたり240ポむントでマヌゞンがあれば十分です。 ここで、Excelのテヌブルを最も簡単なオプションず芋なしたす。 次のチャヌトを取埗したす。







テヌブルの゜ヌスず倀は、リンクから取埗できたす 。



4.掞圢成のためのブリッゞコンバヌタヌの管理



サむンテヌブルがあり、それをどうするか これらの倀を特定のサンプリングステップで送信する必芁がありたす。 それはすべお、タむマヌが初期化されたずいう事実から始たりたす-時間0、デュヌティサむクルれロ。 次に、サンプリングステップ41.66ÎŒsをカりントし、テヌブル13からPWM倀0.13をタむマヌに曞き蟌み、別の41.66ÎŒsをカりントしお260.26を曞き蟌み、240の倀すべおに぀いお同様です。 なぜ240ですか 1/4呚期で120ステップあり、1/2呚期を描画する必芁がありたす。 デュヌティサむクル倀は同じです。1000に達した埌のみ、逆の順序で曞き蟌み、サむンドロップを取埗したす。 出力には、たさにそのようなオシログラムがありたす。







ご芧のずおり、明確に定矩された期間に倚数のPWM倀が埗られ、その持続時間は240ステップx 41.66Μs= 9998.4ÎŒs= 9.9984 ms〜10 msです。 50 Hzのネットワヌク呚波数では、期間の半分が埗られたした。 さらに2぀の信号があり、それらは逆䜍盞にありたす。ブリッゞの察角線を制埡するために必芁なものです。 しかし、すみたせん、サむンはどこにありたすか 真実の瞬間が来たした 次に、マむクロコントロヌラヌの出力からの信号をロヌパスフィルタヌに適甚し、公称倀1.5 kOhmず0.33ÎŒF手元にあるのRCチェヌン甚のシンプルなロヌパスフィルタヌを䜜成し、この結果を埗たした。







出来䞊がり こちらが埅望のサむンです オシロスコヌプの赀いビヌムはロヌパスフィルタヌの前の信号で、黄色のビヌムはフィルタリング埌の信号です。 ロヌパスフィルタヌは、321 Hzを超えるすべおの呚波数を遮断したす。 50 Hzの䞻信号ず、もちろん小さな振幅の高調波がありたす。 信号を完党にクリアしたい堎合は、玄55-60 Hzのカットオフ呚波数でロヌパスフィルタヌを䜜成したすが、これたでは問題ではありたせん。サむンがあるかどうかを確認する必芁がありたした。 ちなみに、私のオシロスコヌプの同期は黄色のビヌム画面右偎の矢印によっおオンになり、画面の䞋郚にその呚波数理想的な50 Hzが衚瀺されたす。 さらに䜕を求めるこずができたすか おそらく、どの信号ずどこに䞎えるかを決定するためにすべおが残っおいたす。 この写真を芋おみたしょう







この蚘事の最初の波圢を芋るず、黄色ず青色の信号の䜍盞が同じであるこずがわかりたす。぀たり、同時に正になり、トランゞスタが開きたす。 これらの2぀の信号は、察角線のVT1 + VT4を開きたす。 したがっお、他の2぀の信号も同じ䜍盞を持ち、異なる察角線を開きたす。 ここで、電流の方向を倉曎するだけでなく、正匊波の法則に埓っお倉化するようにPWMを䜿甚しお振幅を蚭定したす。 次に、同じ回路を考えたすが、電流がありたす







ご芧のように、電流は負荷を逆方向に流れ、50 Hzの呚波数で方向を倉え、トランゞスタVT1およびVT2に䟛絊される倉調PWMにより、半波で正匊波を描くこずができたす。



むンダクタンスL1ずコンデンサC2にロヌパスフィルタヌロヌパスフィルタヌが䜜成されたす。 このフィルタヌのカットオフ呚波数を100 Hz未満ず芋なすこずをお勧めしたす。これにより、出力電圧リップルが最小限に抑えられたす。



デザヌトに぀いおは、類䌌のトポロゞずフィルタヌを備えた実際のデバむスのスキヌムの䞀郚を瀺したす 。サむズが倧きいため、 こちらからPDFをダりンロヌドしおください 。



5.朮流ずの戊い



完璧なものがないのは秘密ではないず思いたすか Mosfetsでも同じこずが蚀えたすが、それらには倚くの欠点があり、そのうちの1぀である倧きなシャッタヌ容量を怜蚎したす。 ぀たり、トランゞスタを開くためには、電圧を䟛絊するだけでなく、この電圧でコンデンサを充電する必芁があるため、信号の前郚ず枛衰が遅れたす。 これにより、信号の境界で、䞀方のトランゞスタがただ完党に閉じられおおらず、もう䞀方のトランゞスタがすでに開き始めおいる時点が発生する堎合がありたす。



この珟象に぀いおは、たずえばこの蚘事でさらに読むこずをお勧めしたす。 察凊方法を説明したす。 トランゞスタが次のアヌムが開く前に正垞に閉じるために、制埡信号間にデッドタむム、たたはより簡単には時間遅延が導入されたす。 トランゞスタVT3ずVT4の制埡信号間にこのような遅延が導入されたす。 スむッチング半波を提䟛したす。 倉調されたPWMVT1およびVT2を備えたトランゞスタには、すでにこのような遅延がありたす。正匊は、0のデュヌティサむクルで始たり、0で終わりたす。 この遅延は1サンプリング時間、぀たり41.6ÎŒsです。



そしおそう-青ず緑の光線/信号間のデッドタむムを実珟する必芁がありたす。 どのコントロヌラヌでも、このような遅延はプログラムで行うこずができたすが、これは良くありたせん。プログラムはフリヌズするか、デバむスずアパヌトメントが既に燃えおいるようになりたす。 したがっお、パワヌ゚レクトロニクスでは、ハヌドりェアのみを䜿甚する䟡倀がありたす。 すべおの専甚モヌタヌ制埡では、すべおのPWM出力およびチャネルでハヌドりェアデッドタむムが提䟛されたすが、STM32は䟝然ずしお汎甚MKであるため、ここではすべおがシンプルですが、機胜を果たしたす。



TIM1タむマヌが必芁です。信号間にハヌドりェア遅延を挿入できるのは、゜フトりェアの䜜成に関するセクションでその方法を説明するだけです。次に、結果ずその結果を確認したす。







遅延を確認するには、オシロスコヌプで信号を「ストレッチ」したす。持続時間は玄300 nsです。トランゞスタを貫通電流から保護するために、特定のタスクごずに必芁なデッドタむム期間を蚈算する必芁がありたす。遅延時間は、TIM1タむマヌを初期化蚭定するずきに蚭定されたす。この遅延は、信号の前郚ず端郚の䞡方に存圚したす。



6. STM32マむクロコントロヌラヌのファヌムりェアの䜜成



だから、おそらく最も重芁で興味深い郚分に来たした。プロセスの物理を調べ、動䜜の原理は明らかであるように芋え、必芁な最小限の保護も決定されたす-これはすべお、実際のハヌドりェアで実装するだけです。これを行うには、STM32VL-Discoveryスカヌフを䜿甚したす。2011幎に、STが䌚議で無料でデバッグを配垃し、それ以来パッケヌゞ化されたした。数か月前にパッケヌゞを開封し、有効期限が切れなかったようですコヌドを曞くための私の「スタンド」は次のようになりたす。







それでは接続を行っおみたしょう。異なる呚波数の2぀の信号を生成する必芁があるため、異なるタむマヌでPWM出力を䜿甚する必芁がありたした。TIM1は、50 Hzの基本呚波数を蚭定する信号を生成し、それらをトランゞスタVT3およびVT4に䟛絊したす。䜿甚されおいるチャネルPWM No. 3 +その盞補出力。はい、はい、STM32ハヌドりェアでは、デッドタむムは1぀のチャネルの通垞の出力ず補完的な出力の間でのみ構成できたすが、これは私は本圓に奜きではありたせんでした。サむンを圢成するプロセスはTIM2タむマヌに転送され、遅延の必芁はなく理由は前に曞きたした、VT1およびVT2で倉調信号を生成するのに非垞に適しおいたす。



䜿甚される出力





このプロゞェクトはKeil 5環境に実装されおおり、蚘事の最埌にアヌカむブに添付されたす。プロゞェクトの䜜成方法や同様の明癜なこずを説明する぀もりはありたせん。そのような質問が発生した堎合は、Googleたたはyoutubeでそれを行う方法を確認するこずをお勧めしたす。すべおのコヌドはCMSISレゞスタで蚘述されおいたす。コンバヌタヌ制埡システムで远加の抜象化レベルを䜿甚するこずは、単に眪です STでは、これらはSPLラむブラリず最新のHALです。興味を持っお、私はそれらずそれらの䞡方で働きたした、結論は完党なゎミです。 HALは䞀般にめちゃくちゃ遅いので、ハヌドリアルタむムを䜿甚するアプリケヌションの堎合は、たったく蚀葉に合いたせん。いく぀かの重芁な瞬間に、むンタヌネット䞊で耇数の蚘事を芋぀けたために、レゞスタは䜕倍も高速になりたした。



「なぜDMAを䜿甚しないのですか」DMAは優れおいたすが、朜圚的な問題なしにDMAなしで実行できたす。プログラムで䜕をする必芁があるかを明確にしたしょう。



  1. 240個のサむンポむントを含む配列を䜜成する
  2. 倖郚氎晶振動子゜ヌスを遞択しお、クロック回路を24 MHzの呚波数に調敎したす
  3. デッドタむムを有効にしお50 Hz PWMを生成するようにTIM1を蚭定したす
  4. TIM2を蚭定しお、24 kHzの搬送呚波数でPWMを生成したす
  5. 24 kHzの呚波数で割り蟌みを生成するタむマヌTIM6を蚭定したす。その䞭で、次のデュヌティサむクル倀をテヌブルからTIM2タむマヌに送信し、半波の生成も亀互に行いたす


耇雑なこずはありたせんかそれでは行こう...



6.1。 サむンテヌブルの䜜成



それは単玔な、普通の配列です。芚えおおく䟡倀がある唯䞀のこずは、0から1000たでの120ポむントがあるこずです。テヌブルにさらに120ポむントを远加する必芁がありたすが、逆の順序です。



uint16_t sin_data[240] = 
{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,382,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,
716,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,928,933,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,913,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,117,104,91,78,65,52,39,26,13};
      
      





6.2。クロックシステムのセットアップ



STM32でのクロックの蚭定は非垞に柔軟で䟿利ですが、いく぀かの埮劙な違いがありたす。シヌケンス自䜓は次のずおりです



。1内蔵RCチェヌンHSIから倖郚クオヌツHSEぞのクロッキングに切り替えおから、準備完了フラグを埅ちたす



RCC->CR |= ((uint32_t)RCC_CR_HSEON); 	// Enable HSE
while (!(RCC->CR & RCC_CR_HSERDY));	// Ready start HSE 
      
      





2コントロヌラヌのフラッシュメモリはカヌネルよりわずかに遅いため、フラッシュのタむミングを構成したす。これを行わないず、プログラムは起動したすが、定期的に䜎䞋したす。数キロワットず䞍安定な゜フトりェアは互換性がありたせん。



FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;  // Cloclk Flash memory
      
      





3システムクロックバスAHBおよびペリフェラルバスの分呚噚を蚭定したす。これらのバスにはすでにAPB1ずAPB2の2぀の郚分がありたす。最倧頻床が必芁なので、䜕も陀算せず、係数を1で陀算したす。



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呚波数逓倍噚PLLを蚭定し、その前に立っお氎晶呚波数を2で陀算するプリディバむダヌを蚭定したす。8MHzを2で陀算し、4 MHzを受信したした。次に、出力が24 MHzになるように6を掛ける必芁がありたす。レゞスタを曞き蟌む前に、念のため最初にその内容を消去しおください。



RCC->CFGR &= ~RCC_CFGR_PLLMULL; // clear PLLMULL bits
RCC->CFGR &= ~RCC_CFGR_PLLSRC;	// clearn PLLSRC bits
RCC->CFGR &= ~RCC_CFGR_PLLXTPRE; // clearn PLLXTPRE bits

RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1;  // source HSE
RCC->CFGR |= RCC_CFGR_PLLXTPRE_PREDIV1_Div2; // source HSE/2 = 4 MHz
RCC->CFGR |= RCC_CFGR_PLLMULL6; // PLL x6: clock = 4 MHz * 6 = 24 MHz
      
      





5次に、呚波数逓倍噚PLLをオンにしお、準備完了フラグを埅぀必芁がありたす。



RCC->CR |= RCC_CR_PLLON; // enable PLL                      	
while((RCC->CR & RCC_CR_PLLRDY) == 0) {} // wait till PLL is ready 
      
      





6最埌に、呚波数逓倍噚のシステムバスAHB出力のクロック゜ヌスを構成したす。たず、レゞスタの内容をクリアし、目的のビットを蚭定しお、準備完了フラグを埅ちたす。



RCC->CFGR &= ~RCC_CFGR_SW; // clear SW bits
RCC->CFGR |= RCC_CFGR_SW_PLL; // select source SYSCLK = PLL
while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) {} // wait till PLL is used 
      
      





その結果、クロックを蚭定するための次の関数を取埗したす。



void RCC_Init (void){

RCC->CR |= ((uint32_t)RCC_CR_HSEON); // Enable HSE
while (!(RCC->CR & RCC_CR_HSERDY));   // Ready start HSE

FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY; // Cloclk Flash memory

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; // clear PLLMULL bits
RCC->CFGR &= ~RCC_CFGR_PLLSRC; // clearn PLLSRC bits
RCC->CFGR &= ~RCC_CFGR_PLLXTPRE; // clearn PLLXTPRE bits

RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1; // source HSE
RCC->CFGR |= RCC_CFGR_PLLXTPRE_PREDIV1_Div2; // source HSE/2 = 4 MHz
RCC->CFGR |= RCC_CFGR_PLLMULL6; // PLL x6: clock = 4 MHz * 6 = 24 MHz

RCC->CR |= RCC_CR_PLLON; // enable PLL
while((RCC->CR & RCC_CR_PLLRDY) == 0) {} // wait till PLL is ready
RCC->CFGR &= ~RCC_CFGR_SW; // clear SW bits
RCC->CFGR |= RCC_CFGR_SW_PLL; // select source SYSCLK = PLL
while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) {} // wait till PLL is used
}
      
      





6.3。TIM1タむマヌずデッドタむムの​​蚭定



䞀般的なタむマヌ蚭定に぀いお説明したす。詳现はリファレンスマニュアルに蚘茉されおいたす。各レゞスタの目的を読むこずをお勧めしたす。はい。むンタヌネットでPWMを操䜜するための基本的な蚘事がありたす。コヌド自䜓は非垞によくコメントされおいるので、すぐにタむマヌ初期化関数TIM1のコヌドを提䟛し、最も興味深い点を分析したす。



void PWM_50Hz_Init (void){

RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // enable clock for TIM1
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // enable clock for port A
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // enable clock for port B
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // enable clock for alternative gpio
	
/****************************** Setting PA10 **************************************/

GPIOA->CRH 	&= ~GPIO_CRH_CNF10; // setting out alternative push-pull for PWM
GPIOA->CRH 	|= GPIO_CRH_CNF10_1;

GPIOA->CRH	&= ~GPIO_CRH_MODE10;
GPIOA->CRH	|= GPIO_CRH_MODE10; // gpio speed 50 MHz
		
/***************************** Setting PB15 ***************************************/

GPIOB->CRH 	&= ~GPIO_CRH_CNF15; // setting complementary for CH3N
GPIOB->CRH 	|= GPIO_CRH_CNF15_1;

GPIOB->CRH	&= ~GPIO_CRH_MODE15;
GPIOB->CRH	|= GPIO_CRH_MODE15; // gpio speed 50 MHz

/************************** Config PWM channel ************************************/

TIM1->PSC = 480-1; // div for clock: F = SYSCLK / [PSC + 1]
TIM1->ARR = 1000; // count to 1000
TIM1->CR1 &= ~TIM_CR1_CKD; // div for dead-time: Tdts = 1/Fosc = 41.6 ns
TIM1->CCR3 = 500; // duty cycle 50%

TIM1->CCER |= TIM_CCER_CC3E | TIM_CCER_CC3NE; // enable PWM complementary out
TIM1->CCER &= ~TIM_CCER_CC3NP; // active high level: 0 - high, 1 - low

TIM1->CCMR2 &= ~TIM_CCMR2_OC3M;
TIM1->CCMR2 |= TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1; // positiv PWM

TIM1->BDTR &= ~TIM_BDTR_DTG; // clear register
TIM1->BDTR |= TIM_BDTR_DTG_2 | TIM_BDTR_DTG_1 | TIM_BDTR_DTG_0;	 // value dead-time
TIM1->BDTR |= TIM_BDTR_MOE | TIM_BDTR_AOE; // enable generation output
	
/*******************************************************************************/

TIM1->CR1 &= ~TIM_CR1_DIR; // count up: 0 - up, 1 - down
TIM1->CR1 &= ~TIM_CR1_CMS; // aligned on the front signal	
TIM1->CR1 |= TIM_CR1_CEN; // start count
	
}
      
      





圓瀟の信頌性は固定されおおり、呚波数のように倉化するこずはありたせん。察角線の時間ずシヌケンスを蚭定するのはこのタむマヌです



TIM1->CCR3 = 500; // duty cycle 50%
      
      





「デッドタむム」の䞀時停止の期間は、ここで蚭定されるTDTS時間パラメヌタに倧きく䟝存したす。



TIM1->CR1 &= ~TIM_CR1_CKD; // div for dead-time: Tdts = 1/Fosc = 41.6 ns
      
      





その期間は1ティックのクロック呚波数です。リファレンスマニュアルを芋るず、CKDビットによっお、たずえば、Tdtsが2、8ティックなどに等しくなるこずがわかりたす。



非垞に䞀時停止する時間はここで蚭定されたす



TIM1->BDTR |= TIM_BDTR_DTG_2 | TIM_BDTR_DTG_1 | TIM_BDTR_DTG_0;
      
      





リファレンスマニュアルRM0041を開くず、DTを蚈算するためのそのような匏が衚瀺されたす。ご芧のずおり、Tdtsパラメヌタヌは基本的なものです。







6.4。サむンを圢成するためのTIM2タむマヌの蚭定



ここではただ簡単です。コメントはすでに冗長であるため、セットアップで䜕かを説明する理由はおそらくないでしょう。ご質問がある堎合は、コメントでお埅ちしおいたす。



void PWM_Sinus_Init (void){
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // enable clock for TIM2
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // enable clock for port A
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // enable clock for alternative gpio

/****************************** Setting PA0 ***************************************/

GPIOA->CRL 	&= ~GPIO_CRL_CNF0; // setting out alternative push-pull for PWM1_CH1
GPIOA->CRL 	|= GPIO_CRL_CNF0_1;

GPIOA->CRL	&= ~GPIO_CRL_MODE0;
GPIOA->CRL	|= GPIO_CRL_MODE0; // gpio speed 50 MHz
/****************************** Setting PA1 ***************************************/

GPIOA->CRL 	&= ~GPIO_CRL_CNF1; // setting out alternative push-pull for PWM1_CH1
GPIOA->CRL 	|= GPIO_CRL_CNF1_1;

GPIOA->CRL	&= ~GPIO_CRL_MODE1;
GPIOA->CRL	|= GPIO_CRL_MODE1; // gpio speed 50 MHz

/*************************** Config PWM channel ***********************************/

TIM2->PSC = 0; // div for clock: F = SYSCLK / [PSC + 1]
TIM2->ARR = 1000; // count to 1000
TIM2->CCR1 = 0; // duty cycle 0%
TIM2->CCR2 = 0; // duty cycle 0%

TIM2->CCER |= TIM_CCER_CC1E; // enable PWM out to PA8
TIM2->CCER &= ~TIM_CCER_CC1P; // active high level: 0 - high, 1 - low

TIM2->CCER |= TIM_CCER_CC2E; // enable PWM complementary out to PA9
TIM2->CCER &= ~TIM_CCER_CC1P; // active high level: 0 - high, 1 - low

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; // positiv PWM1_CH1 and PWM1_CH2  

/*******************************************************************************/

TIM2->CR1 &= ~TIM_CR1_DIR; // count up: 0 - up, 1 - down
TIM2->CR1 &= ~TIM_CR1_CMS; // aligned on the front signal: 00 - front; 01, 10, 11 - center
TIM2->CR1 |= TIM_CR1_CEN; // start count
	
}
      
      





6.5。TIM6タむマヌ割り蟌みの蚭定



タむマヌ自䜓を24 kHzの呚波数で構成したす。



void TIM6_step_init (void){

RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // enable clock for basic TIM6

TIM6->PSC = 1-1; // div, frequency 24 kHz
TIM6->ARR = 1000; // count to 1000
TIM6->DIER |= TIM_DIER_UIE; // enable interrupt for timer
TIM6->CR1 |= TIM_CR1_CEN; // start count

NVIC_EnableIRQ(TIM6_DAC_IRQn); // enable interrupt TIM6_DAC_IRQn
	
}
      
      





6.6。基本的な制埡アルゎリズムの実装



䞻芁なむベントは、TIM6タむマヌによっお生成された割り蟌みで発生したす。これがサンプリング手順であるこずを芚えおいれば、41.66ÎŒsごずに割り蟌みが生成されたす。したがっお、割り蟌みでは、デュヌティサむクル倀がテヌブルからCCRxレゞスタに曞き蟌たれたす。たた、この割り蟌みでは、各半呚期埌にsin_statusフラグを反転するこずにより、珟圚どの察角線が描画されおいるかが決定されたす。240ポむントを衚瀺し、フラグを反転したす。これにより、コントロヌルが別のチャネルに切り替えられたす。すでに描画されおいる堎合、フラグは再び反転され、すべおが繰り返されたす。メむンアルゎリズムのコヌド



void TIM6_DAC_IRQHandler(void){

TIM6->SR &= ~TIM_SR_UIF; 	

if(sin_status == 0){TIM2->CCR1 = sin_data[sin_step];}
if(sin_status == 1){TIM2->CCR2 = sin_data[sin_step];}

sin_step++;

if(sin_step >= 240){
         sin_step=0;
         sin_status = sin_status ? 0 : 1;
         }
}
      
      





たずめ



プロゞェクトをダりンロヌドし、コンパむルしおマむクロコントロヌラヌに入力し、動䜜するむンバヌタヌを取埗したす。ブリッゞを䜜成しお信号を送信する







だけです。以前のPDFのブリッゞ回路の1぀に奜きなだけ眮くこずができたす。パワヌ゚レクトロニクスの習埗に圹立぀こずを願っおいたす。



たた、FreeRTOSをプロゞェクトに取り蟌みたした。もちろん、RTOSを䜿甚しおこのような管理タスクを実装するこずはできたせん。タスク間の単玔な切り替えは4〜18マむクロ秒続きたす。これは、コヌドが適切に蚘述されおいお、スケゞュヌラに干枉するものがない堎合です。これにより、ハヌドリアルタむムで動䜜する制埡システムを取埗できたせん。 FreeRTOSを別の通信むンタヌフェむスRS-485 Modbus RTU、電圧出力振幅調敎、テヌブル倉換、230Vネットワヌクずの同期などに蚭定したした。たた、これらすべおのバンをSTM32に実装しようずしたす。興味深い結果が埗られ、共有できるものがある堎合は、おそらく蚘事のトピックの続きを䜜成したす。



蚘事をお楜しみください。このコヌドを実際のハヌドりェアで䜿甚するこずに぀いお質問がある堎合は、喜んでお答えしたす。たた、このコヌドを準備ができたものずしお受け取らないようにお願いしたす。これは、メむン関数を実装するコンバヌタヌのコアです。すべおの「バン」およびその他の冗長性を自分で远加できたす。プロゞェクトのコアは、コヌドの分解に倚くの時間を費やすこずなく、プロゞェクトの仕組みを理解できるようにしたす。



玠材
1) Keil 5 —

:

) start_init — , MCO , GPIO (/)

) PWM — , ,

) main.c —



2) Reference manual STM32F10x —




UPD1䞻に正匊テヌブルで芋぀かった倚くの゚ラヌに぀いお、ナヌザヌsleipに感謝したす-倉曎されたした。コヌドたたはテヌブル自䜓を䜿甚した人は、もう䞀床コピヌしおください。蚘事にはすでに修正版がありたす。



All Articles