マイクロコントローラアルゴリズムのソフトウェアPWM。 リッチチャンネルソフトウェアPWMAVR。 新しく必要なソフトウェアPWM

ゴロフナ / 主な機能

たとえば、マイクロコントローラのデジタルアタッチメントは、それに等しい2つの信号で動作します。 0と1、または省略と省略。 このランクでは、ヨガを簡単にオフにして、虚栄心の状態を制御できます。たとえば、ヨガをオフにしたり、ライトをオフにしたりできます。 したがって、電気アクセサリ、vikoristovuyuchi indpovidniドライバー(トランジスタ、トライアック、リレーなど)を問わず、keruvannyaのvikoristovuvatヨガを行うことができます。 光源(またはランプ)の明るさやエンジンの速度を制御したいからです 速いストラム、 それから デジタル信号私はそれを解決することはできません。 この状況はデジタルテクノロジーでよく議論され、 パルス幅変調(PWM)。

最新のすべてのマイクロコントローラーに、PWM信号を一致させるための特別なハードウェアが備わっている場合があります。 このレベルでは、SHIM技術の基本を学ぶ必要があり、AVRマイクロコントローラーの助けを借りてSHIMを実装することをお勧めします。

マイクロコントローラのようなデジタルアドオンは、出力ラインに3つ以上のレベル(高=5Vと低=0V)を生成できます。 Ale sho、yakscho miは、0〜5Vの範囲の電圧であるかどうかにかかわらず、2.5カイ3.1カイを取りたいですか? 出口で一定の流れの定電圧を生成するこの目的のために、高=5Vおよび低=0Vに等しい蛇行を生成します(div。baby1)。

図1

小さなものから、特定の時間の信号が低レベルと高レベルで圧倒されていることがわかります。 T0-低rіven、T1-高rіven。 信号周期 T = T0 + T1. インパルスの期間-2つのsusidnіhіpulsіvの2つの特徴的なポイント間の間隔。 2つの正面、または血管インパルスの後退を伴う2つの正面の間の期間を発音し、ラテン語の偉大な文字Tを意味します。

中間のないインパルスの通過周期は、インパルスシーケンスの周波数とオーバーラップし、次の式を使用して計算できます。 T = 1 / F

T1パルスが周期Tの半分に正確に等しい限り、そのような信号はしばしば「蛇行」と呼ばれます。

インパルスの安定性は、インパルスがその三位一体に移行する期間と呼ばれ、文字Sで示されます。 S = T / T1

優しさは計り知れない価値であり、世界で一人でいることはできませんが、何百人もの女性で表現することもできます。 この用語は英語のテキストでよく使用されます デューティサイクル、Tseは、完了係数またはPWMの動作サイクルの値をランク付けします。 充填係数Dは、火傷スペアリングの値です。

充填係数チャープはvіdsotkahに表示され、次の式に従って計算されます。 D = 1 / Sとか、ぐらい D = T1 / T * 100%

小さい子(図1)では、T1 \u003dT0を30分間吐き出すことができます。 したがって、PWMワークサイクルの値は50%になります。 このようなインパルスの周波数は高いため(たとえば5000 Hz)、5Vのトブトの半分を使用します。 2.5V。 このようなランクでは、総速度の50%が原因で、検査官が(追加のドライバーの助けを借りて)dvigunから削除されたかのようになります。 2つの間の電圧が等しいかどうか(たとえば、0〜12V)を作成するためのテクニックShІMvikoristovuєtseyファクト。 全体の焦点は、動作サイクルの値を0〜100%の間で変更するときに、出力でまったく同じ入力電圧を取り除くという事実にあります。 その下で指摘されているように、PWM信号を別のスペアリング信号に適用します。

出力にR/Cフィルターを配置すると、方形波ではなく、信号に等しい純粋なDCを取得できます。 ただし、コレクターエンジンではなく、発光ダイオードの制御に必要です。 PWM信号をドライバに直接適用することが可能です(たとえば、バイポーラトランジスタ、MOSFETも)。


ロボットモード16-rozrの下で。 タイマーは、動作のアルゴリズムと、それに関連するパルスジェネレータの出力への動作によって学習されます。これは、タイマー動作モード(WGMn3-0)と生成モードを設定するビットの組み合わせによって決定されます。出力信号(COMnx1:0)。 出力信号を形成するモードを指定するには、rahunkaアルゴリズムを追加します。 将来横になるラフンカのアルゴリズムは、ロボットタイマーのモードに設定されます。 PWMビットCOMnx1:0のモードでは、生成されるPWM出力の反転を有効/無効にできます(反転ありのPWMまたは反転なしのPWMを選択するため)。 PWMビットのないモードの場合、COMnx1:0が割り当てられます。これは、出力に障害が発生した場合に無効にするために必要です。出力の破棄、挿入、または反転(「出力信号シェーピングブロック」および「16次元タイマーのタイマークロック図」も参照) -停止」)。

通常動作モード

彼自身 シンプルモードロボットは通常モードです(WGMn3-0 = 0b0000)。 で このモード lichnikは、lichnikが割引されない合計(増分)として機能します。 最大16ビットを移行する場合、lichnikの切り替えは1時間必要です。 値(0xFFFF)から下限(0x0000)まで。 通常の動作では、TCNTnがゼロ値をとると、タイマーリセットフラグTOVnが同じクロックサイクルで設定されます。

実際、TOVn並べ替えフラグは、ウィンクのタイマーリストの17番目のビットであり、ビンは復元されるだけで、破棄されません。 ただし、ソフトウェアの電源を変更してタイマーの分散を増やすことができるため、タイマーの並べ替えに応じてタイマーを変更できます。このとき、TOVnエンサインは自動的にドロップされます。 通常の作業モードでは、特別な状況はないので、新しいリチルニックのエントリはvickonanoになる可能性があります-そのようなミット。

通常モードでは、キャプチャブロックを上書きすることができます。 ただし、トレイルをたどると、等しいポッドのビニフィケーション間の最大間隔が、lichnikの再登録の期間を超えないようになります。 そのような心に達しない場合は、lichilnikまたはタイマーのリセットに勝つ必要があります。

ブレークブロックをハッキングしてブレークを生成することができます。 通常の操作で信号を生成するためにOCnxをオフにすることはお勧めしません。 この時点で、プロセッサの時間のかなりの部分が追跡されます。

タイマースキップモードpіdhzbіgu(STS)

STSモード(WGM01、WGM00 = 0b10)では、OCR0レジスターが賃貸人の家賃を設定するためにチェックされます。 CTCモードが設定され、修飾子の値(TCNT0)がOCR0レジスタの値に設定されるたびに、修飾子はゼロにリセットされます(TCNT0 = 0)。 この順序で、OCR0はlichnikのrahunkaの上部を設定し、また、建物の2番目の区画を設定します。 このモードでは、生成される直線パルスの周波数のより広い範囲の調整が保証されます。 Vіnはまた、ovnishnіhpodіyのlichnikの作業を容易にします。

起動時のタイマリセットモード(WGMn3-0 = 0b0100または0b1100)では、タイマ設定はOCRnAまたはICRnレジスタによって設定されます。 CTCモードでは、チャイムリセット(TCNTn)が必要です。これは、いずれかの値がOCRnAレジスタ(WGMn3-0 = 0b0100)またはICRn(WGMn3-0 = 0b1100)に分類されることを意味します。 レジスタOCRnAまたはICRnの値は、ウィンドウの上限を決定し、他のタイマー設定も決定します。 このモードでは、生成される直線パルスの周波数のより広い範囲の調整が保証されます。 Vіnはまた、ovnishnіhpodіyのlichnikの作業を容易にします。 CTCモードでのタイマー動作の時間図を小さい1で示します。クロック(TCNTn)はその統計をインクリメントし、クロックはOCRnAまたはICRnの値を超えて増加せず、その後クロック(TCNTn)は破棄されます。

図1-STSモードのタイミング図

チャンバーの上部境界に到達すると、追加のエンサインOCFnAまたはICFnの変更を生成できます。後者は、チャンバーの上部境界を管理するための勝利のレジスターです。 リサーフェシングは許可されていますが、リサーフェシング手順を実行して胸の上部境界を更新することができます。 ただし、ラフンカの上部の値はラフンカの間の下部の値に近く、lichnikが差なしで、または差の値が小さい場合は、特別な注意を払って勝つ必要があります。 STSモードには地下鉄のバッファリングはありません。 OCRnAまたはICRnに書き込まれた値がTCNTnの現在の値よりも小さい場合、暗算のリチリカの割引が設定され、値が最大値(0xFFFF)に達した場合は、に進みます。 休日のキャンプ 0x0000で、OCRnAまたはICRnの新しい値に到達します。 豊かな状況では、そのような状況を非難することはできません。 別の方法として、PWMモードに入ることができます。登録を解除すると、OCRnAが上限インターレンジ(WGMn3-0 = 0b1111)を設定します。 このタイプのOCRnAには、不足電流バッファリングがある可能性があります。

CTCモードで信号を生成するには、OCnA出力を切り替えて肌の色調の論理レベルを変更できます。このためには、ミューティングモード(COMnA1、COMnA0 = 0b01)を設定する必要があります。 OCnA値は表示されたポートに表示されますが、その方法でのみジョブが直接出力されます。 生成される信号の最大周波数はfOC0=fclk_I / O / 2であるため、OCRnA=0x0000です。 OCRnの他の値の場合、生成される信号の周波数は次の式で決定できます:

de change Nは、事前除算器の細分割の係数(1、8、32、64、128、256、または1024)を設定します。

したがって、通常の動作モードの場合と同様に、TOV0エンサインは、その値が0xFFFFから0x0000に変更されると、同じタイマーサイクルに設定されます。

高速PWMモード(高速PWM)

駆動周波数でPWMパルスを生成するための手動パルス幅変調(PWM)モード(WGMn3-0 = 0b0101、0b0110、0b0111、0b1110、0b1111)の割り当て。 勝つ他の作業モードに基づいて、lichnikの作業は一方向に行われます。 Rakhunkaの下部から上部の境界まで直線でRakhunokvykonuєtsya。

出力モードが設定されていても、反転されていなければ、TCNTnとOCRnxがアクティブになると、OCnx信号が復元され、上限でドロップされます。 ジョブモードが反転している場合、OCnx出力は実行時にドロップされ、ウィンドウの上部境界にインストールされます。 一方向ラフンカの場合、このデュアル幅モードの動作周波数は、PWMモードと位相補正に等しく、ダブルストレートラフノクの性能を低下させます。 このレジームを奪うための高周波PWM信号の生成の可能性は、生命の安定化、整流、およびデジタルアナログ変換のタスクに似ています。 打ち負かすことができる高周波 外国の要素物理的に小さな拡張(インダクタンス、コンデンサ)、システム全体の変動をシミュレートします。

RazdіlnіzdatnіstSHІMは、8、9、または10桁に固定するか、レジスタICRnまたはOCRnAで設定できますが、2桁以上(ICRnまたはOCRnA = 0x0003)および16桁以下(ICRnまたはOCRnA = 0x0FFFF)です。 上限(VP)の特定の値でのRazdіlnazdatnіstShІMは次のように計算されます。

SchwidkoのモードSchimL_chikaіnkromentuzuzuからZbigayazombina z philosovynaya値の1つ0x00ff、0x01FF Abo 0x03FF(Yakscho WGMN3:0 = 0B0101、0B0110 ABO 0B0111、VІDPOVII)、ICRN(0)で意味、およびPotimm Skidovaty TimkatSynchronizatsaTimer。TimchonovaD_AgramSchwidkoレジームSchimaはMalyunka2によって表されます。 -反転PWM出力。短い水平線は、TCNTnグラフ上の点を示し、OCRnxとTCNTnxの値をずらしています。

図2-PWMモードのタイミング図

タイマーリセットフラグ(TOVn)は、タイマーが上限に達するとすぐにリセットされます。 さらに、フラグTOVnと同時に同じクロックパルスを使用すると、フラグOCnAまたはICFnをインストールできるため、上限を設定するために、レジスタOCRnAまたはICRnは明らかです。 交差点の1つのみが許可されている場合は、交差点を処理する手順は、上限と交差点のしきい値を更新することによっても実行できます。

上限の値を変更する場合は、しきい値のすべてのレジスタで上限の新しい値が大きくなるか、より重要になるように慎重に検討する必要があります。 別のケースでは、TCNTnとOCRnxはまったくウィンクしませんでした。 注意すべき点として、上限値が固定されている場合、OCRnxレジスタのエントリは0回の放電までマスクされ、これは振動しません。

OCRnAの場合、上限を設定するために記述されているため、ICRnレジスタを変更するメカニズムが変更されます。 レジストリICRnはバッファリングできません。 これは、ICRnが店員の勤務時間に対して小さな値で書き込まれる場合、または値がない場合、ICRnレジスタに値を書き込むことは安全ではないことを意味します。これは、値がTCNTnの現在の値。 その結果、そのような状況では、rahunkaの上部でzbіgが見落とされます。 この場合、lichnikは最大値(0xFFFF)まで上がり、値0x0000で再起動してから、winknezbigになります。 OCRnAを登録して、スレーブバッファリングスキームを置き換えます。これにより、いつでも変更できます。

class = "eliadunit">

レコードがOCRnAアドレスに対して署名されるとすぐに、値は実際にOCRnAバッファレジスタに配置されます。 zbіgmizhTCNTnとrahunkaのトップの結果として、タイマー同期の次のサイクルは、バッファレジスタをしきい値レジスタOCRnAにコピーします。 レジスタの更新は、TCNTnをドロップしてフラグTOVnを設定するのと同じ方法で行われます。

ラフンカの上限は定数なので、上限の設定にはICRnレジスタを使用することをお勧めします。 この場合、OCRnAレジスタはOCnA出力でPWM信号を生成するように設定されています。 ただし、PWM周波数は(上限の変更により)動的に変化するため、この場合、上限を設定するためにOCRnAレジスタを変更する必要があります。 Vіnpіdtrimuєsubvіynuバッファリング。

PWMモードでは、PWMブロックを使用してOCnxスイッチでPWM信号を生成できます。 COMnx1:0 = 0b10の場合、PWMは出力反転なしで設定され、COMnx1:0 = 0b11の場合、PWMモードは出力反転で設定されます(div。表59)。 実際のOCnx値は、アウトバウンドダイレクト(DDR_OCnx)に設定されているため、指定されたポートで監視できます。 PWM信号は、OCRnxとTCNTnの間で障害が発生したときにOCnxレジスタを設定(設定)する方法、およびlichnikのリセットと同時にOCnxレジスタをドロップ(設定)する方法によって生成されます(上限から下限への遷移)。

上限(VP)の特定の値に対するPWM出力信号の周波数は、スケールによって決定されます。

de N-分布係数の値(1、8、32、64、128、256、または1024)を設定すると、変更されます。

OCRnxレジスタの境界値の入力は、PWMパルスの生成における特別な変動に関連しています。 OCRnxが下限(0x0000)に等しく設定されている場合、タイマー同期のスキン(VP + 1)サイクルの短いパルスが出力として使用されます。 ビームに等しい定数をインストールする前に、OCRnxでビームの上限に等しい値を記録します。 出力に1または0(出力信号の極性の追加ビットCOMnx1:0の形式でデポジットします)。

いつものように、蛇行の生成が必要です(2または50%の補充を節約するための直接の衝動) 高周波、次に、swidkoy SHIMモードをCOMnA1ビットの設定でオーバーライドする必要があります:0 = 0b01、スキンzbіgu中にOCnA出力で論理レベルが切り替えられる(反転される)ようにします。 これは停止する必要があります。上限の設定でOCRnAが勝つ可能性は低くなります(WGMn3-0 = 0b1111)。 この波形に対して生成される最大方形波周波数fOCnA=fclk_I / O / 2、つまりOCRnA=0x0000。 何が特別なのか PWMモードのように、少しフローティングバッファリングを使用してSTSモードでOCnAを切り替えるのと似ています。

位相補正付きパルス幅変調モード(位相補正)

位相補正を備えたパルス幅変調モード(PWM FC)(WGMn3-0 = 0b0001、0b010、0b0011、0b1010、または0b1011)は、位相補正と高帯域幅を備えたPWM信号を生成します。 双方向ロボットタイマーを設定するためのPWMモード-lichilnik。 lichnikは、下限(0x0000)から上限までの直線で周期的にウィンクし、次に上限から下限まで戻ります。 パルス整形機の出力モードを反転しない設定に加えて、TCNTnとOCRnxの値を直接/逆波形に調整すると、OCnxの出力がリセット/リセットされます。 一方、出力モードが設定されるとすぐに、インストールはその日の直接の時間にインストールされ、OCnx出口は戻りの時間にキャンセルされます。 双方向ロボット付き 最大周波数 PWM信号は小さく、単方向ロボットでは低くなりますが、双方向ロボットを使用したPWMモードでの対称性などの機能により、ドライブ制御が逆になっている場合の回転を改善するには、qiモードが重要です。

このモードのRazdіlnazdatnіstShІMは、修正(8、9、または10回の放電)するか、追加のレジスタICRnまたはOCRnAを要求することができます。 最小容量は2桁以上(ICRnまたはOCRnA = 0x0003)で、最大容量は16桁(ICRnまたはOCRnA = 0xFFFF)です。 上限が設定されている場合、このモードでのSHIMの建物の分離は、次のランクによって決定されます。

PWMモードでは、リチルは固定値0x00FF、0x01FF、または0x03FF(WGMn3-0 = 0b0001、0b0010、または0b0011で有効)のいずれか、および等しいICRn値(00b:01)に達するまでインクリメントされます。 さらに、上限に達すると、lichnikはrahunkaを直接変更します。 TCNTnの値は、タイマー同期の1サイクルの等しい上限間隔によって上書きされます。 PWM FCモードのタイミング図を小さい3に示します。小さい表示では、上端を設定するための追加のレジスタOCRnAおよびICRnを備えたPWMFCモード。 TCNTnミルは、ラフンカの双方向性を説明するための関数グラフとして表示されます。 小規模では、非反転PWM出力と反転PWM出力の両方があります。 短い水平線は、OCRnxの値から外れた、TCNTnを変更するためのグラフ上のポイントを示します。 OCnxフラグは、起動時に復元されています。

図3-PWMFCモードのタイミング図

タイマーリセットフラグ(TOVn)は、タイマーが下限に達するたびにリセットされます。 上限の設定に関しては、レジスタOCRnAまたはICRnが設定され、フラグOCnAまたはICFnは通常、OCRnxレジスタがバッファレジスタ(フレームの上部)から更新される同じクロックパルスで設定されます。 Prapori pererivannyaは、lichnikによって下限または上限に達した後、世代pererivanniaのvikoristovuvatisyaを実行できます。

上位の相互登録の値を変更するときは、すべてのレジスタの値以上になるようにチェックを続ける必要があります。 別のケースでは、TCNTnとOCRnxはまったくウィンクしませんでした。 注意しなければならないのは、上位間質間隔の値が勝利した場合、それが振動されていない場合、それはゼロにリセットされるということです。 小さなものの第3の期間は、上部の河間地域の動的な変化が非対称のインパルスの生成にもたらされた場合、53の例示的な変動です。 この特殊性は、OCRnxレジスタを更新する時間に基づいています。 OCRnx更新のシャードがラフンカの上部に表示され、次にPWM期間がラフンカの上部で開始および終了します。 逆さまのラフンカの三位一体が上限の前方の値に割り当てられ、直接の値が上限の新しい値に割り当てられるという危機に瀕している可能性があります。 違いの重要性については、直接のささいなこととラフンカの帰還もまた見直されます。 出力インパルスの非対称性を生み出すためのVidminnisttrevalosity。

動作中のアイドラーで上限を変更するにはコストがかかるため、モードを変更してPWM PFCモード(位相および周波数補正)に切り替えることをお勧めします。 上限の静的な値は勝利ですが、これらのモード間には実質的に違いはありません。

PWM FCモードでは、ペアリングブロックを使用してOCnx回路でPWM信号を生成できます。 COMnx1:0 = 0b10に設定すると、PWM出力は反転なしになり、COMnx1:0 = 0b11の場合、反転ありになります。 実際、OCnx値は、ポート直接出力ジョブ(DDR_OCnx)に出力するためのレジストリ直接データのように、出力ポートで監視できます。 PWM信号は、OCRnxとTCNTnの値が直接波の時間に変更されたときにOCnxレジスタを設定(設定)する方法と、OCnxレジスタにドロップ(設定)する方法によって生成されます。 OCRnxとTCNTnの数は、ターンバイターンの時間に設定されます。 指定された上限(VP)を持つPWM FCモードでのPWM信号の結果の周波数は、次の方法を使用して計算できます。

OCRnxレジスタへの境界値の書き込みは、PWMFKモードでのPWM信号の生成における特別な変動に関連しています。 反転せずにPWMモードを設定し、OCRnxが下限を等しく設定した場合、ログは出力に永続的に設定されます。 0であり、上限に等しい場合、永続的に存在するビームが出現します。 1.反転のあるPWMの場合、等号の指定は長さで置き換える必要があります。

OCnAを上限(WGMn3:0 = 0b1011)として設定し、COMnA1:0 = 0b01を設定すると、OCnAの出力で方形波が生成されます。

位相および周波数補正を備えたパルス幅変調モード(位相および周波数補正)

位相および周波数補正を備えた高電力分布でPWMパルスを生成するための、位相および周波数補正を備えたパルス幅変調モード(PWM PFC)(WGMn3-0 = 0b1000または0b1001)の割り当て。 ヤクiモードPWMFKモード双方向ロボットライターの基礎のPWMFChK。 数字は周期的に下の境界(0x0000)から上の境界に移動し、次に上の境界から下の境界に戻ります。 タスクが非反転PWMモードの場合、OCnx出力がドロップされ、TCNTnとOCRnxが直接波の1時間、TCNTnとOCRnxの間で減少し、復元されます。これにより、戻り波の時間。 反転モードでは、ロボットが反転します。 ロボットはダブルストレートで、シングルストレートとペアになっており、より多くの世代に接続されています 低周波数。 ただし、双方向ビームを使用するPWMモードでの対称性の問題は、ドライブ制御タスクでより重要になります。

PWMモードとPFCモードの主な違いは、更新時のOCRnxバッファレジスタからのOCRnxレジスタに影響します(図3および図4)。

このモードのRazdіlnazdatnіstSHІMは、追加のレジスタICRnまたはOCRnAを要求できます。 最小容量は最大2ランク(ICRnまたはOCRnA = 0x0003)で、最大容量は16桁(ICRnまたはOCRnA = 0xFFFF)です。 ランクのRazdіlnazdatnіstShІMは、そのようなビラズに​​対して請求することができます:

PWM FCHモードでは、lichnikは最大のICRn値(WGMn3:0 = 0b1000)またはOCRnA(WGMn3:0 = 0b1001)までインクリメントされます。 ツェは、ラフンカの頂上に到達することを意味し、その後、ラフンカは直接変化します。 TCNTnの値は、タイマー同期の1クロックサイクルでチャートの同じ上部に表示されます。 PWM PFCモードのタイミング図は、サムネイル54に示されています。読み取り値のサムネイルでは、チャートの頂点がレジスタOCRnAまたはICRnによって設定されている場合、PWMPFCモードになります。 TCNTnの値は、ディスプレイの双方向性を示すために関数グラフとして示されています。 表示の図には、非反転PWMと反転PWMの両方が表示されます。 短い水平線はTCNTnグラフのポイントを指しており、OCRnxとTCNTnの間でずれています。 OCnxリセットフラグは、障害後に復元されます。

図4-位相および周波数補正を使用したPWMモードのタイミング図

タイマーリセットフラグ(TOVn)は、レジスターがバッファーレジスター(下の行)からの値で更新されている場合、同じサイクルで設定されます。 レジスタOCRnAまたはICRnが上限に登録されている場合、上限に達した後、エンサインOCnAまたはICFnが確立されます。 Prapori pererivannyaは、lichnikが上限または下限に達したときに、pererivanniaの生成に勝利する可能性があります。

上限を変更するときは、新しい値がしきい値のすべてのレジスタの値以上になるように、ステップする必要があります。 別のケースでは、上限の値がレジスタしきい値の値よりも小さく設定されていても、TCNTnとOCRnxの違いは発生しません。

小さな4では、PWM FCのモードで、生成される出力信号がすべての周期で対称であることが示されています。 Oskіlkiは下部mezhіrachunkaにOCRnxnovlyuyutsyaを登録し、次に直接およびsvorotnogorachunkіvzavzhdiのtrevalosityが等しくなります。 その結果、出力パルスは対称的な形状になり、周波数も可変になります。

上限値は定数であるため、上限の設定にはICRnレジスタを使用することをお勧めします。 この場合、OCRnAレジスタは、表示されたOCnAのパルスのパルス幅変調用に設定されます。 ただし、上限を変更するにはSHIM周波数を動的に変更する必要があるため、上限を設定するには、新しいサブウィンドウバッファリングの可視性のためにOCRnAレジスタを獲得することをお勧めします。

PWM FCHモードでは、PFCブロックによりOCnx出力でPWMパルスを生成できます。 COMnx1:0 = 0b10の場合、非反転PWM出力が表示され、COMnx1:0 = 0b11の場合、反転しています(表60を参照)。 OCnx値は、アウトバウンドダイレクトに設定されているため、アウトバウンドポートには反対方向にのみ存在します。 PWM信号は、zbіgumіzhOCRnxとTCNTnが直接波の時間を設定したときにOCnxレジスタを設定(スキッド)し、zbіgumіzhOCRnxとTCNTnがリターンの時間を設定したときにOCnxレジスタにドロップ(インストール)する方法によって生成されます波。 このモードでのPWMの周波数は、上限(VP)が設定されている場合、攻撃ランクで示されます。

de N-事前決定子の除算係数(1、8、32、64、128、256、または1024)。

OCRnxレジスタの境界値を書き込むことは、このモードでのPWM信号の生成における特別な変動に関連しています。 OCRnxを下限(0x0000)に等しく設定すると、非反転モードでは、出力は常に低い論理レベルになり、等しい上限の値を記録すると、出力は常に高い論理レベルになります。レベル。 反転モードでは、線が反転します。

上限(WGMn3:0 = 0b1001)とCOMnA1:0 = 0b01を設定するためにOCRnAを循環させると、OCnAの出力で方形波が生成されます。


PWMのハードウェア実装は、ソフトウェア、プロセッサのrozvantazhuのシャードに比べて非常に優れています。これは、かさばるコードをロードするため、サービスに1時間かかり、PWMを使用する機会も増えます。 Dostatnoはіnіtsіalіzatsіyuタイマー/lіchilnikaヤクタイマー/lіchilnikMauger pratsyuvatiスクエアODのCPUサイクル、vіdpovіdnoCPUサイクルMauger zaymatisyaіnshimizavdannyami、tіlkiіnodіzvertayuchis koriguvannya ABOzmіni政権のためneobhіdny瞬間におけるABO otrimannyarezultatіv(regіstrivikoristovuvanіタイマー/lіchilnikomでneobhіdnі値持参)を過ごしますodタイマー/人。

資格の説明

T1は、次のヒット時にリスポーンを生成できます。

  1. rachunkレジスタTCNT1の書き換え。
  2. LCNT1とOCR1AおよびOCR1Bの薬剤登録が等しい場合(皮膚登録のokremo)。
  3. 埋没レジスタICR1にラカンクレジスタを保存するため。

T2は、次のヒット時にリスポーンを生成できます。

  1. rachunkレジスタTCNT2の書き換え。
  2. TCNT2医療レジストリとOCR2レジストリの同一性を備えています。

すべての変更のフラグはTIFRレジストリにリストされており、パーミッション/フェンスはTIMSKレジストリにリストされています。

排出レジスタTIMSK
レジストリ7 6 5 4 3 2 1 0
TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 * TOIE0
  • OCIE2-「zbіg」タイマー/タイマーT2の猶予を許可する資格
  • TOIE2-タイマー/タイマーT2をリセットする資格
  • TICIE1-タイマー/ライターT1の「目詰まり」後にリセットを許可する資格
  • OCIE1A-タイマー/タイマーT1のサブ「zbіgA」の休憩を許可する資格
  • OCIE1B-タイマー/タイマーT1の「開始B」の後に再起動する資格
  • TOIE1-タイマー/タイマーT1をリセットする許可を署名します
  • OCIE0 *-T0タイマー/発信者の「開始」後に再起動する資格(*-ATmega8では毎日)
  • TOIE0-タイマー/タイマーT0をリセットする資格
  • OCF2-「zbіg」タイマー/発信者T2の恩赦
  • TOV2-タイマー/タイマーT2をリセットするフラグ
  • ICF1-タイマー/タイマーT1の「飲み込み」の復活のフラグ
  • OCF1A-タイマー/タイマーT1のサブ「zbіgA」の猶予フラグ
  • OCF1B-タイマー/タイマーT1の「開始B」の猶予フラグ
  • TOV1-タイマー/タイマーT1をリセットするためのフラグ
  • OCF0-「zbіg」タイマー/タイマーT0の猶予フラグ
  • TOV0-タイマー/タイマーT0をリセットするためのフラグ

コントローラーATmega8/16用のロボットテイター/ライターT1の説明

16桁のタイマー/タイマーT1は、1時間ごとの間隔を形成し、呼び出し信号の数をカウントし、OC1AおよびOC1B巻線でWIMの異なるスペアリングとトリバルティを備えた信号を生成するために使用できます。 さらに、ICP1またはアナログコンパレータからのコール信号の場合、T1はフローミルをICR1ストレージレジスタに保存できます。

放電レジスタTCCR1A:TCC1B:TCNT1:OCR1A:OCR1B:ICR1
レジストリ7 6 5 4 3 2 1 0
TCCR1A COM1A1 COM1A0 COM1B1 COM1BO FOC1A FOC1B WGM11 WGM10
TCCR1B ICNC1 ICES1 * WGM13 WGM12 CS12 CS11 CS10
TCNT1:H R / W R / W R / W R / W R / W R / W R / W R / W
TCNT1:L R / W R / W R / W R / W R / W R / W R / W R / W
OCR1A:H R / W R / W R / W R / W R / W R / W R / W R / W
OCR1A:L R / W R / W R / W R / W R / W R / W R / W R / W
OCR1B:H R / W R / W R / W R / W R / W R / W R / W R / W
OCR1B:L R / W R / W R / W R / W R / W R / W R / W R / W
ICR1:H R / W R / W R / W R / W R / W R / W R / W R / W
ICR1:L R / W R / W R / W R / W R / W R / W R / W R / W

レザーの16ビットレジスタは、2つの8ビットレジスタで物理的に間隔を空けて、2つの操作が必要なレコードを読み取る時間になります。 最初に書き込むときは、古いバイトが最初に読み取られ、次に若いバイトが読み取られます。逆方向に読み取るときは、若いバイトが読み取られてから、古いバイトが読み取られます。

TCCR1A:TCCR1B-タイマー/タイマーT1による監視用の8ビットレジスタ

TCNT1-タイマー/タイマーT1の16ビットパーソナルレジスタ。 休耕モードでは、ローカルレジスタ内のロボットは、タイマー/アントラーのクロック信号のスキンパルスに応じて、リセット、インクリメント(値が1増加)、またはデクリメント(値が1変化)します。

OCR1A:OCR1B-16桁のポートレジスタ

ICR1-16ビットホールドオーバーレジスタ。アクティブエッジがICP1出力信号またはコンパレータ出力信号に適用されたときにTCNT1の値を保存します。

戦闘の任命

COM1A1:COM1A0:COM1B1:COM1B0-Qi放電は、ラカンクレジスタTCNT1とオーダーレジスタOCR1A:OCR1Bの値が変更されたときのOC1A:OC1B表示の動作を決定します。

FOC1A:FOC1B-主な変化に役立つ気の排出OC1A:OC1Bが表示されます

ICNC1-ジャンプコードの制御スキームの順序。最初のアクティブなフロントにもう少し「0」が埋め込まれるため、シンクの信号を4回同じように選択した後に「1」が埋め込まれます。

ICES1-値が「0」である限り、信号のアクティブエッジの選択を放電します。OCR1シンクレジスタへのTCNT1 rachunkレジスタの保存は、「1」のように低下​​する信号の前面にあります。上昇中。

WGM13:WGM12:WGM11:WGM10-タイマー/ライターの動作モードを選択するための放電サイクルT1

CS22:CS21:C20-タイマー/クロックT1のクロック信号に割り当てられる放電。

タイマー/チラーT1の動作モードを選択します
WGM13WGM12WGM11WGM10ロボットモードラフンクモジュール(TOP)
0 0 0 0 普通 $ FFFF
0 0 0 1 位相補正PWM

8ビット

$ 00FF
0 0 1 0 位相補正PWM

9ビット

$ 01FF
0 0 1 1 位相補正PWM

10ビット

$ 03FF
0 1 0 0 CTC OCR1A
0 1 0 1 高速PWM

8ビット

$ 00FF
0 1 1 0 高速PWM

9ビット

$ 01FF
0 1 1 1 高速PWM

10ビット

$ 03FF
1 0 0 0 ICR1
1 0 0 1 位相と周波数の正しいPWM OCR1A
1 0 1 0 位相補正PWM ICR1
1 0 1 1 位相補正PWM OCR1A
1 1 0 0 CTC ICR1
1 1 0 1 予約済み *
1 1 1 0 高速PWM ICR1
1 1 1 1 高速PWM OCR1A

Vibirdzherelaクロック信号

ノーマルモード

最も単純な動作モードはT1です。 クロック信号のスキンパルスに応じて、TCNT1パーソナルレジスタの増分が入力されます(高い方の値は1です)。 TIFRモジュールの$FFFF値を通過すると、リフローが発生し、次のクロックサイクルは$ 0000の値で始まります。同時に、フラグTOV1 = 1がTIFRレジスタに設定され、リオーダーを生成できます。 、およびレジスタにフラグTOIE1=1を設定します。 このモードで特定の周波数の信号を生成するには、放電COM1A1 = 0:COM1A0 = 1を書き込んでOC1Aを表示するか、COM1B1 = 0:COM1B0=1を書き込んでOC1Bコントローラーを表示する必要があります。

また、肌触りに応じて、TCNT1ラチュンカレジスタとOCR1A:OCR1Bの順序が登録され、順序を変更すると、OCF1A = 1:OCF1B = 1の順序が設定され、OCIE1A = 1:OCIE1B=1も生成されます。 その際、戦闘COM1A1:COM1A0:COM1B1:COM1B0の設定により、OC1A:OC1Bの状態が変わる場合があります。

STSモード(実行時にスキッド)

このモードでは、T1は通常モードと同じ原理に従います。 違いは、TCNT1タイマーの可能な最大値が、タイマーレジスタOCR1AまたはICR1の値と混合されているという事実にあります(タイマー/タイマーモード選択表を参照してください)。 TCNT1がOCR1AまたはICR1の値に達すると、TCNT1の値はTCNT1 = $ 0000にリセットされます。この時点で、フラグTOV1 = 1が設定されます。COM1A1:COM1A0:COM1B1:COM1B0起動時のOS1A:OC1Bの動作を決定します。

高速PWMモード(Swedcode PWM)

追加モードでは、高周波PWM信号を生成できます。 スレーブバッファリングレジスタOCR1A:OCR1Bが存在することを除いて、動作の原理と順序は通常モードでは考慮されません。信号内の非対称パルスの出現はオフになり、OS1Aの動作によっても考慮されます。 :OC1B(div。テーブル)。


位相補正PWMモード

このレジームの施行は、リチルニーレジスターが逆リチルニックとして機能するという点で前者の施行と似ています。 このモードは、エンジンの調整に最適なモードとしてAtmelによって推奨されているため、レポートを確認します。 TCNT1レジスタTCNT1(またはICR1レジスタまたはOCR1Aレジスタの値については、タイマー/チルモードを選択するための表を参照してください)、値の値の値の値の値の値の値の値の値の値の値の値ICR1レジスタのが直接変更されます。 TCNT1パーソナルレジスタが最小値($ 0000)に達すると、アカウントも直接変更され、その時点で、TIFRレジスタへのTOV1転送のフラグが復元されます。 また、TCNT1チェックレジスタとOCR1A:OCR1Bチェックレジスタの代わりに等しい場合、フラグOCF1A:OCF1BがTIFRレジスタに設定され、チェックリストOC1A:OC1Bが変更され、テーブルに対して有効になります。

OCR1A:OCR1Bレジスタの値を書き込むときに非対称Wikiを非表示にするために、このモードにはフローティングレコードバッファリングがあります。 レジスタの値を変更する理由は、TCNT1 rachunkレジスタがrahunkuモジュール(TOR)の値(またはICR1レジスタの値またはOCR1Aレジスタの値)に達した瞬間に変更されます。タイマー/タイマーモードを選択するため)。 そのため、穂軸自体で、visnovka OS1A:OC1Bのタイマー/カウンターを初期化するときに、dotiが増加しても位置を変更せず、ドックレジスターに到達できません(TOR)。


マネジャー: PWMの助けを借りて、12ボルトで加熱ランプの点灯を制御するためのプログラムを拡張することができます。 「More」ボタンを押すとランプの明るさが増し、「Less」ボタンを押すと明るさが変わります。 私たちの将来の別棟の計画は小さなものとして示されています。 周波数4MHzの内部発電機のようにクロックされるAtmega8マイクロコントローラーはどのように聞こえますか。 Vlasne、調光スイッチがあり、これらのアタッチメントは照明器具の明るさを調整するために設計されています。 調光スイッチは最も広い幅に配置されました。

簡単にするために、私たちのスキームの前に、ライトを接続することもできますが、電球を使用するとより良いでしょう。 visnovkivに接続されているボタン PD0, PD1。 Navantageはvisnovkaに接続されています PB1(OC1A)抵抗器とMOSFETポールトランジスタを介して、これはキーとして(キーモードで)私たちにとって最も実用的です。 極性トランジスタは、その絶縁ゲートが電源回路にあり、制御が電界によって振動し、制御ストリームがマイクロアンペアに達するという事実よりも優れています。 Tseは、vikoristovuyuchiの1つまたは2つのトランジスタ、cheruvatiの雄大な強度(最大数十アンペアおよび数百ボルト)を許可しますが、navantazhyuchiマイクロコントローラーは許可しません。 Vrahovyuchiもその事実 フィールドトランジスタ(バイポーラのものの入力に)並列に接続することが可能であり、数百アンペアのより大きな排気カスケードを外すことが可能です。

次に、マイクロコントローラーがWIMを実装し、プログラムを作成する方法を理解しましょう。 すでに述べたように、私たちのMKには3つのタイマーがあり、すべての悪臭はPWMモードで動作できます。 16桁のタイマー/チャイムを使用します。 ビタミ WGM13-10 Rahunkaの上限でFastPWMロボットのタイマーを調整しました ICR1。 プログラムの原理はこれです、私たちのタイマーrahuєvіd0から65535(0xFFFF)、レジスター ICR1数値255を入力します。上限タイマー間隔(TOP)が設定されている場合、PWM信号の周波数は一定になります。 また、タイマーは、アカウントレジスタが作成されると、コントローラがレジスタに切り替えられるように調整されます(TCNT1 = OCR1A) OC1A。 オフセットレジスタに書き込むことでPWM係数を変更できます OCR1A 0から255までの数値が大きいほど、充填係数が高くなり、ランプが明るくなります。 同様に、ボタンが変更されます 、そしてそれはレジスターに記録されます OCR1A.

プログラムの新しいテキストを以下に示します。 レポートのコメントは、ロボットプログラムについて説明しています。

/ ***アクティビティ#8。 PWM信号の整形***/#include #含む int main(void)(unsigned int i =0;//変更するために署名されたi/***固定入力ポート***/PORTB = 0x00; DDRB | =(1<< PB1); PORTD |= (1 << PD1)|(1 << PD0); // подключаем внутренние нагрузочные резисторы DDRD = 0x00; /***Настройка таймера***/ TCCR1A |= (1 << COM1A1)|(0 << COM1A0) // Установим биты COM1A1-COM1A0:0b10, означает сброс вывода канала A при сравнении |(1 << WGM11)|(0 << WGM10); // Установим биты WGM13-10:0b1110, согласно таблице это TCCR1B |= (1 << WGM13)|(1 << WGM12) // будет режим - FAST PWM, где верхний предел счета задается битом ICR1 |(0 << CS12)|(0 << CS11)|(1 << CS10); // Битами CS12-10:0b001 задаем источник тактового сигнала для таймера МК, включен без делителя TCNT1 = 0x00; // начальная установка счетчика ICR1 = 0xFF; // задаем период ШИМ, здесь у нас число 255, // по формуле fPWM=fclk_I/O/N*(1+ICR1)// вычисляем частоту ШИМ, она будет равна 15625 Hz OCR1A = 0x00; // начальный коэффициент заполнения ШИМ /***Основной цикл программы***/ while(1) { if((PIND&(1 << PD0)) == 0) //если кнопка "больше" нажата { if (i < 254) { // коэффициент заполнения ШИМ изменяется от 0 до 255 i=i+1; // увеличиваем i на единицу OCR1A = i; // записываем переменную в регистр сравнения _delay_ms(30); // задержка 30ms } } if((PIND&(1 << PD1)) == 0) //если кнопка "меньше" нажата { if (i >0)//遅延係数SHIMが255から0に変更されます(i--; // iを1つ変更します(書き込み可能)OCR1A = i; //変更を遅延レジスタに書き込みます_delay_ms(30);//遅延30ms)))))

尊敬!まず、マイクロコントローラーに餌を与え、次にスイッチを入れてトランジスターがMKに来るようにします。次に、ランプとハーフトランジスターでランセットに餌を与える必要がありません。 それ以外の場合は、トランジスタを焼くことができます。 右側では、MKの「安値」が閉鎖されたキャンプで「窓にとどまる」という事実-悪臭は何にも接続されておらず、目的はそれらに非難されています。 Tsikhは十分に弱く誘導し、schobはしばしばすでに敏感なpolovyトランジスタをvіdkritiします。 排水口とvіdkіlkohMOhmの合流点のターンの間のTodiyogoopirは、新しい流れを介して、ランプへの大きなストラムを介してkіlkohOmまたはchasmOmになります。 しかし、トランジスタが正常に動作しないため、シャッターに1〜3のガイダンスを適用するのではなく、安定した5を適用する必要があり、この動作は最小値よりも豊富になります。 Tseは新しい偉大なkіlkosіの熱を目にし、窒息するか、おそらく燃える。

通常モードのATtiny13ライター/タイマースイッチと衝動制御(CTC)に出くわしました。 この記事では、タイマーのテーマを続けますが、パルス幅変調(PWM)の実装について見てみましょう。

すべてのマイクロプロセッサは、デジタル信号、tobtoで動作します。 論理ゼロ(0 V)と論理1(5Vまたは3.3V)を使用します。 エール、どのような仕事、中間値として出口をどのように利用したいですか? そのようなvipadkasは立ち往生します パルス幅変調(PWM、eng。パルス幅変調(PWM))-一定の周波数でパルスの間隔を変更することにより、飽和状態になる強度を制御するプロセス。
パルス幅変調-周期的なパルス信号。 デジタルおよびアナログPWM、ユニポーラおよびバイポーラなどを使用します。 エール、彼らの仕事の原則は、参照(ピルクのようなまたは三流のインパルス)と入力(永続的、または必要な順序で変更された休閑)のペアの2つのタイプの信号の警戒とフィールドの存在下で独立して同じままですPWMの特定のタスクで)。 Qi信号はイコライズされ、変化するとPWM出力の信号値が変化します。 PWMの出力電圧は、ストレートカットパルスのように見え、その三価を変更して、PWMの出力での電圧の平均値を調整できます。

* PWMの出力でRCランスを統合したい場合は、インパルス電圧を置き換えて、必要な値の定電圧を取ることができます。 しかし、光ダイオードを使った私たちのお尻では、人間の目はまだクロック周波数での光の測定値を見ることができないため、それなしで行うことができます。

PWMパラメータ

  • Tは(基準信号の)クロッキングの周期です。
  • t-衝動への競争;
  • S-スペアリング;
  • D-充填係数。

良さは勢いが崩れるまでの期間の設定に依存します。 充填係数は、剥離の戻り値です(幅が異なる場合があります)。

S = T / t = 1 / D

ATtiny13バットで、AVRマイクロコントローラーでPWMがどのように使用されているかというレポートを見てみましょう。
フロントバットストックですでに提案されているように、ATtiny13は2つの異なるタイプのPWMを実装しています。いわゆる「ShvidkaPWM」(高速PWM)と「位相補正付きPWM」(位相補正PWM)です。 vikoristan vbudovannoyMK8ビットlichilnik/タイマーT0のファンデーションのObidvaバリアント。 タイマーは基準信号を上書きします。 タイマーのクロック速度は、プロセッサクロックフロントエンドまたは外部クロックジェネレータによって設定されます。 クロッキングモードはビット単位で設定されます CS02 (2), CS01 (1), CS00(0)登録 TCCR0B:

  • 000-タイマー/タイマーT0zupineno
  • 001-クロックジェネレータCLK
  • 010-CLK / 8
  • 011-CLK / 64
  • 100-CLK / 256
  • 101-CLK / 1024
  • 110-信号の減少に関する視覚化されたT0(下の7、PB2)上のovnishnydzherelの光景
  • 111-信号の成長に応じた視力T0(下部7、PB2)でのovnishnydzherelの視界

PWMのタイマーの設定

タイマ動作モードはビット単位で設定されます WGM01(1)その WGM00(0)登録 TCCR0A:

  • 00-通常モード
  • 01-PWM位相補正モード
  • 10-ブースターモード
  • 11-PWMモード

ここでは、オプション「01」と「11」がチェックされています。

ビーティ COM0A1(7)その COM0A0(6)登録 TCCR0A lichnikが選択されたときにOC0Aディスプレイ(5つ下、PB0)に表示される信号を設定します(レジストリ TCNT0)レジスタA( OCR0A).

「ShvidkaShIM」モードの場合:

  • 10-Aから開始する場合はOC0A照準に0を設定し、カウンターをリセットする場合はOC0A照準に1を設定します(非反転モード)。
  • 11-Aから開始する場合はOC0Aのビューで1を設定し、カウンターがゼロにリセットされる場合はOC0Aのビューで0を設定します(反転モード)
  • 00-OC0Aが機能しない
  • 01-TCCR0BレジスタのWGM02ビットが0に設定されている場合、OC0Aスイッチは機能していません
  • 01-TCCR0BレジスタのWGM02ビットも1に設定され、Aが入力されたときの長さにOC0Aが表示されます。
  • 10-時計の値が増加する時間Aから増加する場合はOC0Aのビューで0を設定し、Aの増加が時計の値の変化の時間である場合はOC0Aのビューで1を設定します(非反転モード)
  • 11-時計の値が増加する時間Aから増加する場合はOC0Aのビューで1を設定し、Aの増加が時計の値の変化の時間である場合はOC0Aのビューで0を設定します(反転モード)

ビーティ COM0B1(5)その COM0B0(4)登録 TCCR0A lichnikが選択されたときにOC0B(6つ下、PB1)に表示される信号を設定します(レジストリ TCNT0)レジスタB( OCR0B).

「ShvidkaShIM」モードの場合:

  • 01-予約
  • 10-Bが動作しているときにOC0B出力に0を設定し、カウンターがゼロにリセットされたときにOC0B出力に1を設定します(非反転モード)。
  • 11-Bが動作しているときにOC0B出力に1を設定し、カウンタがゼロにリセットされたときにOC0B出力に0を設定します(逆モード)

「PWM位相ずれ補正」モードの場合:

  • 00-OC0Bが機能しない
  • 01-予約
  • 10-Bの時刻の変更時刻が変更された場合はOC0Bビューで0に設定され、時刻の変更時刻が変更された場合(非逆モード)
  • 11-時間値が増加しているときはOC0Bビューで1に設定され、時間値が減少しているときは時間値の変更の時間が0に設定され、時間値が減少しているときはOC0Bビューで設定が0になります(逆モード)

Shvidka PWM(高速PWM)

このモードでは、lichilnikはゼロから最大まで変動します。 lichnikのゼロ値が設定されると、出力にインパルスが表示されます(論理ユニットが設定されます)。 zbіguzpіvnyannyaレジスタの場合-パルスはスローされます(論理ゼロが設定されます)。 逆モードでは、逆に、逆に。

位相補正からのPWM(位相補正PWM)

このモードでは、lichilnikvvazhєはゼロを最大に、そしてゲートで直接ゼロになりました。 zbіguzがlichnikの値の増加のpіvnyannjapid時間を登録すると、インパルスはスローされます(論理ゼロが設定されます)。 zbіgupіdhが落ちると、インパルスが現れます(論理ユニットが復元されます)。 逆モードでは、逆に、逆に。 このモードでは、ダブルクロック周波数が高速PWMモードに対して変更されました。 次に、スペアリングを変更すると、インパルスの中心は移動しません。 このモードの主な特徴は、三相正弦波などのリッチフェーズPWM信号の安定性であるため、間隔を変更しても、2つのPWM信号間の位相遷移が失われることはありません。

Sobachitは、WIMの実践として、小さなプログラムを作成します(残りはすべて、税金の支払いに費やします。コードは150回配置されると確信しています)。

/ * * tiny13_board_pwm*ATtiny13カスタムジャグリングボードデモファームウェア。 * 2つのチャネルでのPWM動作のデモンストレーション:* OC0A出力での非逆信号、OC0B出力での逆信号。 * / #define F_CPU 1200000UL #include #含む #define LED0 PB0 // OC0A #define LED1 PB1 // OC0B int main(void)(//ライト:DDRB | =(1<< LED0)|(1 << LED1); // выходы = 1 PORTB &= ~((1 << LED0)|(1 << LED1)); // по умолчанию отключены = 0 // Таймер для ШИМ: TCCR0A = 0xB3; // режим ШИМ, неинверсный сигнал на выходе OC0A, инверсный - на выходе OC0B TCCR0B = 0x02; // предделитель тактовой частоты CLK/8 TCNT0=0; // начальное значение счётчика OCR0A=0; // регистр совпадения A OCR0B=0; // регистр совпадения B while(1) { do // Нарастание яркости { OCR0A++; OCR0B = OCR0A; _delay_ms(5); } while(OCR0A!=255); _delay_ms(1000); // Пауза 1 сек. do // Затухание { OCR0A--; OCR0B = OCR0A; _delay_ms(5); } while(OCR0A!=0); _delay_ms(1000); // Пауза 1 сек. } }

ここで、レジスタAとBのMKの開始から0に設定され、カウンタが高速PWMとして開始され、出力OC0Aで非逆PWM信号が生成され、出力で逆-が生成されるバチモ。 OC0B。 メインサイクルでは、レジスタの値は0から最大値に徐々に変化します。 その結果、OC0AおよびOC0B visnovkに接続されたライトは、逆位相のように徐々に点灯および消灯します。
それでも、もっと敬意を払うのであれば、ライトの1つが最後まで消えず、暗闇の中で光り続ける方がよいでしょう。 高速PWMモードの何が特別なのか。 右側では、このモードでは、出口でlichnikがゼロにリセットされたときに、レジスタ0にレコードとして書き留める必要があります。それでも、論理ユニットは、スローされたかのように復元されます。攻撃的なタクトで(差のレジスターで増加します)。 このように、皮膚の期間に、光を照らすのに少し十分な、些細な1サイクルの短いパルスを1つスキップします。 この効果は、外部インパルスを形成する逆モードでは不可能です。 時々、lichilnikがゼロにリセットされると、短いパルスは発生しませんが、代わりに、最大PWM負荷の1時間の短いディップが発生します。 この失敗はオシロスコープで追跡できますが、人間の夜明けの光のそのような単なる記憶は単に思い出せません。 それに対して、別の光がスパラであり、何度も消えました。 位相補正付きのPWMモードでは、効果は日中は独立しており、出力で逆信号が形成されます。 ビットの値を覚えておいてください WGM01(1)登録 TCCR0A 1から0まで。

PWM(PWM)-パルス幅変調。 その用語を誹謗中傷する必要はありません。 これが電圧を調整する唯一の方法です。 モニターはその上を明るく照らしてもかまいませんが、明るさを変えることができます。 そして、それは実際にどのように見えますか?

モニターの監視は少し軽いことに注意してください。 絶え間ないストレスに照らして大丈夫に生きること。 しかし、モニターの明るさを変える必要がありました。 変更抵抗を使用することは可能であると言うのは論理的です。 小さなストリームでは可能です。 素晴らしいもののエール、抵抗器は非常に熱くなります。 サイズ、廃棄物、エネルギー供給が大幅に増加します。

そのため、定電圧パルスから奪うようなトランジスタの回路を思いついたのです。 脈動電圧、期間中休閑しているように見えますが、定電圧に相当します。 トブト。 長期間にわたって電圧が50%オンになり、50%がオフになると、等価定電圧は公称電圧の50%に等しくなります。

数値は単純です-PWMを介して5Vの定電圧を駆動しました-2.5Vを要しました。 インパルスが75%に等しい場合、定電圧は3.75Vに相当します。 その考えは理にかなっていると思います。

それでは、実際の実装に取り​​掛かりましょう。 マイクロコントローラーの助けを借りて、レベルを0から100%に変更し、次に100%からゼロに変更します。 最終結果は次のようになります。

その場ですすり泣き、明かりをつけて。 その結果、スムーズにスイッチを入れて、ライトをオンにします。

お気に入りのCodeVisionを起動しましょう。 マスターの支援のためのプロジェクトを作成します。 タイマー配布(タイマー)で、タイマー2を選択し、赤ちゃんのようにインストールします。

プロジェクトを生成しようとすると、プログラムを溶接できます。 レグ3ポルティがあっても待ちましょう5月は風のようにブティが縫い付けられます。

コードを攻撃的な形式に誘導します。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #含む void main(void)(PORTB = 0x00; DDRB = 0x08; //タイマー/カウンター2の初期化 ASSR = 0x00; TCCR2 = 0x6C; TCNT2 = 0x00; OCR2 = 0x00; TIMSK = 0x00; while(1)(); )。

#含む void main(void)(PORTB = 0x00; DDRB =0x08;//タイマー/カウンター2の初期化ASSR=0x00; TCCR2 = 0x6C; TCNT2 = 0x00; OCR2 = 0x00; TIMSK = 0x00; while(1)();

行OCR2=0x00に注意を払いましょう。 Qia zminnaは、インパルスの充填の大きさに依存します。 次に、値が0から255(0хFF)に変更されます。 255は100%の補充を証明します(恒久的なストラム)。 また、30%の補充(255/100)* 30=77が必要です。 Dalі77は16進システムOCR2=0x4Dに変換されます。

TCCR2 = 0x6C; 値を変更することで、PWM周波数を調整できます。 PWMロボットの周波数の値は、同じ動作中のマイクロコントローラーでの周波数の倍数です。 プロジェクトでは、マイクロコントローラーの周波数は8 MHz、PWM周波数は125 kHz、ドライバーも8/125=64でした。
2進数システム1101100の0x6C、Atmega8とBachimoの説明に関するデータシートでTCCR2を登録するため、軸1101 100 残りの桁は100で、PWM周波数の選択に使用されます

プログラムに直接取り掛かりましょう:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #含む #含む void main(void)(PORTB = 0x00; DDRB = 0x08; ASSR = 0x00; TCCR2 = 0x6C; TCNT2 = 0x00; OCR2 = 0x00; TIMSK = 0x00; while(1)(wh< 0xff ) { OCR2= OCR2+ 0x01 ; delay_ms(5 ) ; } while (OCR2>0x00)(OCR2 = OCR2-0x01; delay_ms(5);)); )。

#含む #含む void main(void)(PORTB = 0x00; DDRB = 0x08; ASSR = 0x00; TCCR2 = 0x6C; TCNT2 = 0x00; OCR2 = 0x00; TIMSK = 0x00; while(1)(while(OCR2<0xff) { OCR2=OCR2+0x01; delay_ms(5); } while(OCR2>0x00)(OCR2 = OCR2-0x01; delay_ms(5);)); )。

コードは非類似点まで単純です。サイクルの順序が0から255(ff)に増加し、次に255から0に変更されます。
すべてを練習できるので、私はvidosikをnasamkinetsします。 vivchenniで頑張ってください)

2015年12月16日更新。 こんにちは、みんな。 EEPROMメモリから過去のレコードを整理したので、今日はPWM(PWM)であるものについて話しますか? これは、パルスのスペアリングを変更するため、電圧の平均値であるパルス幅変調として解読されます。 あなたの地獄に スヴェルドロフスキー 繰り返しの特定の頻度でのインパルスの三価。 トブト。 簡単に言えば、すべてが一定の値でインパルスの幅を変更します。 他に何が必要ですか?

ШІМ(PWM)は、独自の電力制御を備えた、機構なしの電圧調整用のトランジスタ回路で動作します。 たとえば、発光ダイオードの明るさの制御、LCDモニターの光の明るさの制御、モーターの制御などです。 小さい方を見ると、小さい方が下にあるように、マイクロコントローラーの出口がほぼ踏んでいます。 スペアリングはパルスと同じであることがわかります。パルスの全幅が5であるため、パルスの30%で、平均出力は約1.5Vになります。 マイクロコントローラ用 AVR PWM制御は、8ビットのタイマー/クロックT0 /(T2)および16ビットのT1(一部のモデルではT3)に設定されています。 また、єІншіモデルでは、SHІMUの借方番号を設定できます(例:ATmega128)。16桁のタイマー/クロックT1の設定を見てみましょう。 データは、表に従って、ドキュメントから、またはデータシート(文献-第1条)から取得されます。

MKのこのようなライターの場合、3つのモードを選択できます:高速PWM、位相補正PWM、位相および周波数補正PWM( モデルの預金)

別のモードを見てみましょう- 正確な位相のPWM。 ここで、パーソナルレジスタはリバースライセンスとして機能します。変更すると、$ 0000から最大値に変更され、その後$0000に戻ります。 タイマー/チャーカーによるチャープ用の3つのレジスタTCCR1A、TCCR1B、TCCR1Cがあります。 タイマー/チラーモードを選択するには、WGMn1:WGMn0およびWGMn1:WGMn0ビットを設定する必要があります。 . チャイムの最大値(PWM信号の調整)または固定値の設定に応じて、またはタイマー/チラーの最初のレジスタの代わりに表示されます。 Razdіlnazdatnіst virazによって示される :

g = log(TOP + 1)/ log2、de TOP-モジュールrahunku、住宅の分布に応じて表から選択。

その後、タイマの動作モードを選択したので、同期ブロックCOMnA1:COMnA0、COMnB1:COMnB0、COMnC1:COMnC0の動作モードを選択する必要があります。これにより、「Zbіg」時のOCnx出力の動作が決まります。がアクティブになります。

さて、ストロークの残りの部分は頻度から重要です。 CSn2…CSn0ビットをTCCR1Bレジスタにセットして、クロック信号がクロック信号に割り当てられるようにする必要があります。 このようなプログラム方式の軸は、OC1A出力のPWM曲線の設定のように見えます。 例えば:

/*修理済み PWM */
TCCR1A =(1</ * OCR1A == TCNT1の場合、OC1Aは1つ表示されます。OCR1A== TCNT1の場合は0にドロップし、最大値に達すると1にリセットされます。8ビットPWM位相補正PWM、モード番号1。 RahunkuモジュールTOR$00FF * /
TCCR1B =(1<OCR1A = 50; / *モジュラスが255、電圧が5の場合、出力OC1Aで約1Vが使用されます*/

プログラムから、WIMの選択にレジスタOCR1Aを使用できることがわかります。 リッチニックが最大値に達すると、この255の期間で変更が直接変更されますが、リッチニックは同じ期間に1つの期間の信号が残されます。 この場合、作業の頻度は反対のモードでより正確になります。 エール、このように、lichnikの変化の対称性が突かれます。 dvigunを使用したkeruvannyaに最適なものは何ですか。 そのようなタクトでは、注文の登録の代わりに更新があります。 lichnikが最小値に達した場合は、アカウントを直接変更する必要もあり、TOV1をTIFRレジスタに転送するフラグがすぐにインストールされます。 等しい場合、ラカンクレジスタの代わりに、同じレジスタがTIFRレジスタへの新しいエンサインOCF1A / OCF1B/OCF1Cに置き換えられます。 OCnxブロックは一晩で変更されます。 H 生成される信号の周波数 fOCn \ u003d f /(​​2 * N * TOP)、de N-代表的な細分割の係数、f-クォーツの周波数。 また、たとえば、ラッシングとvikoristannyaShІMの尻に驚嘆することができます。

すべてが何のために良いです。 次の投稿で、私たちは見ることができます CNCアマチュアレイアウトコントローラー。 コンストラクターのような一連のプログラムについて、このブログのフロント投稿を強調してみます。 ですから、もし彼らが次のプロジェクトでyogo vikoristaliを書いたら、それはもっと賢明でしょう。 すべて地獄へ。

マイクロコントローラのアタッチメントでは、アナログ信号を生成する必要がある場合があります。 アナログ信号の周波数、必要な許可、および勝利するマイクロコントローラーのタイプに応じて、それはデキルコムの方法でビコネートすることができます。 そしてそれ自体のために:追加のパルス幅変調、ハードウェアタイマーまたはソフトウェア実装のバイコリスト機能、内蔵のデジタル-アナログコンバーター(DAC)の助け、外部のデジタル-アナログ変換回路の助けディスクリート要素または追加のデジタル-マイクロ回路用。

1.補助PWM(PWM)用のアナログ信号を生成する原理

PWM信号は、繰り返し周期が一定で持続時間が変化するデジタル信号です。 最初の周期までのPWM信号の自明性の増加は、飽和係数と呼ばれます。 このような信号を低周波フィルターに通した後、実際には同じように積分可能であるため、フィルターの出力で負荷率に等しい電圧を取得します。


このように、より小さな係数で十分な形式のアナログ信号を生成できます。 さらに、変化のように、たとえば正弦波、人間の言語のようなファイルなので、一定です(かなりの圧力)。

1.1信号特性

出力アナログ信号の最大振幅デジタルPWM信号の論理ユニットの振幅によって決定されます。 マイクロコントローラが+5で動作する場合、おおよそ、出力アナログ信号の振幅は0〜5Vになります。

アナログ信号を変更するための最小項(dozvіl)virazによって示される:


dUa = Umax / 2 ^ n、


de Umaxはアナログ信号(V)の最大振幅であり、nはPWMを実装するデバイスのサイズです。

たとえば、PWM信号はソフトウェア8ビットlichnikの助けを借りて形成されます。 追加のインジケータとして使用できるPWM信号のグラデーション数は、2 ^ 8=256で良好です。


dUa = 5/256 =0.0195st。


PWM信号周波数次のように定義しましょう。


Fpwm = Fcpu /(K * 2 ^ n)、


de Fcpu –マイクロコントローラーのクロック周波数(Hz)、K – lichnikのプリスケーラーの係数、n –lichnikの桁容量。

たとえば、マイクロコントローラのクロック周波数は8MHzです。 次に、出力PWM信号の周波数が追加されます。

Fpwm = 8000000 /(8 * 256)=〜3906 Hz


アナログ出力周波数 virazで示されます:

Fa = Fpwm / Ns = Fcpu /(K * 2 ^ n * Ns)、


de FpwmはPWM信号の周波数であり、Nsはアナログ信号の周波数です。

たとえば、PWM信号は、プリスケーラ係数が8でマイクロコントローラのクロック周波数が8MHzの8ビットlichnikに実装されます。 マイクロコントローラのメモリには、正弦波信号の32サンプル、つまり10分の1の周期があります。 次に、出力正弦波の周波数がさらに高くなります。

Fa = 8000000 /(8 * 2 ^ 8 * 32)= 〜122 Hz

WIMに基づいて粉砕されたDAC'aの放電容量は、ビコラスライターの放電容量に相当します。

1.2PWMのハードウェア実装

現在のすべてのマイクロコントローラーには、倉庫にタイマー/チラーがあります。 これらのタイマーの1つまたは複数のモードは、PWM信号を生成するために割り当てられます。 原則として、信号全体は特別な巻線で生成されます。 たとえば、Atmelのmega16マイクロコントローラー8ビットタイマー/アラームT0には、PWM信号を生成する2つのモード(正確な位相のスイッチドPWMとPWM)があり、生成される信号には、ポートB-OC0(PINB3)へのピンが使用されます。 。

PWM信号のハードウェア実装の効率-マイクロコントローラーのコストは低く(PWM信号の周期ごとに1回の中断呼び出し)、単純さと正確さ(システムの中断はほとんどありません)。 3つの小さなスペースを考えることができます-lichnikの数がフェンスで囲まれ、周波数が低く、チャネルの数がフェンスで囲まれているため、PWM信号を生成できます。 多数のPWM信号を生成するために特別に「シャープ」にされた特別なマイクロコントローラーを開発したいと思います。

1.3PWMのソフトウェア実装

プログラムでPWM信号を生成することも可能です。このためには、プログラムタイマーを作成し、ハードウェアタイマーの信号の後で、その値をインクリメントしてタイマーの極値に達する必要があります。この場合、信号によって設定が変更されます。

ソフトウェア実装の利点は、単純さ、チャネルの数がフェンスで囲まれていないこと、および建物がフェンスで囲まれていないことです。 Zvichayno、精神的に制限がなく、利用可能なメモリが改善されています。ソフトウェア実装の不足-マイクロコントローラーへの高い関心。 lichilnikの皮膚の増分を要求する罪悪感を逆転させ、障害が極端な値の1つに達しない場合は、再考する必要があります。 また、ソフトウェアの実装では、精度が低く(信号のフロントが3つ以上)、周波数も低くなる可能性があります(前半以降)。

ただし、価格に関係なく、SHIMuのソフトウェア実装も使用できます。これは、一定のアナログ信号または変化を生成する必要があるためですが、周波数は低くなります。

以下は、追加のハードウェアおよびソフトウェアのパルス幅変調用のアナログ信号を生成する機能を視覚化するコードの例です。 atmega16マイクロコントローラー、クロック周波数8 MHz、IARコンパイラーのコードを記述します。 出力PB2とPB3では、32個の2つの信号から2つの正弦波(異なる周波数)が生成されます。


#含む
#含む
#含む

#define SPWM_PIN 2

//サインテーブル
__flash uint8_t tableSin =
{
152,176,198,218,234,245,253,255,
253,245,234,218,198,176,152,128,
103, 79, 57, 37, 21, 10, 2, 0,
2, 10, 21, 37, 57, 79,103,128
};

uint8_t softCount = 0;
uint8_t softComp = 0;

int main(void)
{
//ポートを設定する
PORTB = 0;
DDRB = 0xff;

//T0ゲインのリスポーンを許可
TIMSK =(1<// FastPWMモード、非inv。 PWM信号、プリスケーラ8
TCCR0 =(1< (0<

//個人登録をリセットします
TCNT0 = 0;
OCR0 = 0;

enable_interrupt();
while(1);
0を返します。
}

//タイマーT0をリセットします
#pragma vector = TIMER0_COMP_vect
__interrupt void Timer0CompVect(void)
{
static uint8_t i = 0;
static uint8_t j = 0;

OCR0 = tableSin [i];
i =(i + 1)&31;

//ソフトウェアPWM
softCount ++;
if(softCount == 0)(
PORTB | =(1<softComp = tableSin [j];
j =(j + 1)&31;
}

If(softCount == softComp)(
PORTB&=〜(1< }
}

1.4PWM用フィルター

フィルタの周波数が原因ですが、生成されるアナログ信号の最大周波数とPWM信号の周波数の間にあります。 この場合、フィルターの周波数はアナログ信号の範囲に近い値が選択されるため、減衰が発生します。 また、フィルターの周波数がPWM信号の周波数に近い場合、アナログ信号は単に「認識」されません。 PWM信号の周波数が高いほど、外部フィルターの実装が容易になります。

例を見てみましょう。 PWM信号は、プリスケーラ係数が8のハードウェア8ビットクロックによって生成されます。マイクロコントローラのクロック周波数は8 MHz、アナログ信号の数は32です。

PWM信号の周波数は追加です:

Fpwm = Fcpu /(K * 2 ^ n)= 8000000 /(8 * 256)=〜3906 Hz

アナログ信号の周波数が調整されます。

Fa = Fpwm / Ns = 3906/32 = 122 Hz

200Hzに等しい周波数とパッシブ低周波RCフィルターの定格を選択します。 このようなフィルターの周波数は、周波数によって決まります。

Fc = 1 /(2 * Pi * R * C)、

de Rは抵抗値(オーム)、Cはコンデンサの容量(F)です。

コンポーネントの1つの金種が与えられると、他の金種を計算できます。 公称値が1kOhmの抵抗器の場合、コンデンサの容量は次のようになります。


C = 1 /(2 * Pi * Fc * R)= 1 /(6.28 * 1000 * 200)=〜0.8uF


E12シリーズから最も近い値(0.82 uF)を選択します。 このようなフィルターの定格については、同様のアナログ信号を使用します。

ただし、原則として、パッシブフィルターの片側で十分です。 このため、アナログ信号は依然として多数の高調波に値します。

©2022androidas.ru-Androidのすべて