問題タブ [pwm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - より高い PWM 周波数を達成するにはどうすればよいですか?
C18 コンパイラが提供するライブラリを使用して、PWM 使用のデューティ サイクルを開いて設定しています。100% のデューティ サイクルで取得できる最大 PWM 周波数は約 13.5 KHz であることに気付きました。デューティ サイクルが低いほど、PWM 周波数は高くなります。100% のデューティ サイクルで、より高い PWM 周波数を達成するにはどうすればよいですか? 少なくとも 13.5 KHz 以上を取得することは可能ですか? 何が欠けているのかわかりません。誰かがここで助けてくれるかもしれません。私はPIC18F87J1を使用しています。
C18 C コンパイラ ライブラリは次のとおりです。
これは、PWM に関して使用しているコードのスニペットです。
あなたの助けに感謝します、ありがとう!
c - dsPIC33F で PWM を初期化できない
おそらく、これらのレジスタの 1 つを使用して、木を見て森を見ることができない瞬間を過ごしているだけかもしれませんが、dsPIC33FJ32MC102マイクロコントローラで PWM を動作させることができません (警告: 大きな PDF) I' m で遊んでいます。データシートと詳細なアプリケーション ノート(警告: 別の PDF)、さらにはコード サンプルの両方に従っていますが、何が間違っているのかわかりませんが、テストベンチでは高出力で Vcc を取得し、接地をオンにしています。低出力。障害ピンを両方とも Vcc に接続し、レジスタ キーコードを無効にしたので、変更が何らかの効果を示すはずです。私は何を間違っていますか?
c - Raspberry Pi PWM 駆動 LED 停止ボタン
私はラズベリーパイでプログラミングするのが初めてです。私の仕事は、ボタンでアクティブになり、同じボタンで停止する「アラーム」を作成することです。ここで、高から低にフェードする PWM 駆動の LED を含めたいと思います。私にとっての問題は、ボタンを押してループから抜け出す方法がわからないことです。
私は実際にはドイツ出身なので、私のコメントは残念ながらドイツ語です。しかし、皆さんが私を助けてくれることを願っています:/
pic - PIC の奇妙な PWM レジスタ
dsPIC33FJ128MC804 のコードを作成する必要があり、PWM ライブラリ (アドホック...) には DTCON1 への割り当てがあります。ただし、データシートではこのレジスタについてはまったく言及されておらず、PWM モジュール 1 および 2 の P1DTCON1 および P2DTCON1 のみが言及されています。それにもかかわらず、p33FJ128MC804.h ファイルでは DTCON1 が定義されています。
問題は、このレジスターは何をしているのかということです。PxDTCON1?の両方を制御します。
arduino - Arduinoピンから生成されるPWM信号の正確な周波数は?
http://arduino.cc/en/Reference/analogWriteには、
「ほとんどのピンの PWM 信号の周波数は約 490 Hz です。Uno や類似のボードでは、ピン 5 と 6 の周波数は約 980 Hz です。Leonardo のピン 3 と 11 も 980 Hz で動作します。」
私は今、その周波数をチェックしたいと思います。このコマンドを入力するだけanalogWrite(9,127)
で、デューティ サイクル 50% の PWM 信号が生成されます。
次に、pulseIn ビルトイン Arduino 関数 ( pulseIn descriotion ) を使用し、このコマンドpulseIn(9,HIGH)
を入力して、信号が HIGH である期間を測定しました。平均1010 usで戻ります。
そのため、期間は2020 年(High 期間は 1010、Low 期間は 1010) であり、その結果、そのピンからの PWM 周波数は 495.04 ~ 495Hzになります。
同じことがピン番号 5 でも行われます。High 期間は506 uS、全期間は1012 uS 、そのピンからの PWM 周波数は 988.14 Hz ~ 988 Hzです。
では、正確な PWM 周波数は?!
次の写真は、Arduino スケッチと結果のスナップショットです。
Arduinoのスケッチ
「1」を複数回押したとき
「0」を複数回押したとき
embedded - グリッチなしで AVR でゼロ デューティ サイクル PWM を達成する方法は?
高速 PWM モードで TC0 (8 ビット タイマー) を使用して、ATmega2560 でハードウェア PWM を使用しようとしています。デューティ サイクルを動的に調整する必要があり、これにはゼロ デューティ サイクルが含まれます。ただし、これは簡単ではなく、可能でもないようです。データシートの引用:
OCR0A レジスタの極端な値は、高速 PWM モードで PWM 波形出力を生成する特殊なケースを表しています。OCR0A が BOTTOM に等しく設定されている場合、出力は MAX+1 タイマー クロック サイクルごとに狭いスパイクになります。OCR0A を MAX に設定すると、(COM0A1:0 ビットで設定された出力の極性に応じて) 常にハイまたはローの出力になります。
したがって、OCR0A を 0 (=BOTTOM) に設定しても、実際にはデューティ サイクルがゼロになることはなく、私のテストではこれが確認されています。他のアプローチを取る必要があります。
最初に、上記の引用で説明した OCR0A=MAX 特殊ケースの使用について説明しました。反転モードへの一時的な切り替えと組み合わせると、デューティ サイクルがゼロになります。ただし、COM0A1:0 ビットはダブル バッファリングされていない (そして OCR0A と同期していない) ため、出力がハイのときにモードが切り替わると、出力にグリッチが発生する可能性があります (次のオーバーフローまでハイのままになります)。 )。OCR0A の変更とモードの変更がどの順序で行われたかは問題ではないようです。
COM0A1:0=0 を設定して PWM をオフにする別の解決策も検討しました。これにより、出力が PORT レジスタの値 (ゼロ) に即座に設定されます。しかし、ゼロ出力からゼロ以外のデューティ サイクルに戻るという問題がまだ残っています。データシートで読んだ内容から、COM0A1:0 を設定して PWM を再度有効にすると、すぐに出力ピンが PWM の出力に切り替わります。これは、次の比較一致またはタイマー オーバーフローまで正しくない値になる可能性があります。したがって、グリッチ。
PWM 全体を反転することは適用可能かもしれませんが、問題は完全なデューティ サイクルを達成することになり、対称的な問題が発生します。
データシートで説明されているように、PORT 経由でピンの出力を強制している間は、PWM 波形生成を有効のままにすることはできないことに注意してください。
コンペア出力モード (COM0x1:0) ビットには 2 つの機能があります。波形ジェネレータは、COM0x1:0 ビットを使用して、次の比較一致での出力比較 (OC0x) 状態を定義します。また、COM0x1:0 ビットは OC0x ピンの出力ソースを制御します。
PWM を 1 サイクルほど実行し、準備ができたら切り替える方法はありません。PWM を有効にすると、すぐにピン出力が強制されます。
アップデート。位相補正 (中央揃え) PWM モードにはこの問題はなく、私の場合は問題ありません。私はそれを試して、ゼロとフルの両方のデューティ サイクルで動作することを確認しました。
arduino - タイマー割り込みによって生成される PWM 入力で DAC を使用する方法は?
12 ビットのリニア LTC2631 DAC を使用しており、I2C を介して PWM 信号をアナログ信号に変換したいと考えています。私は現在、アルゴリズムを考え出すことができません.PWM入力を取り込んで出力を生成するためにDACをどのようにプログラムする必要がありますか。Pro Micro 3.3V ボードを使用しています。
私が読むことができるインターネット上のものを含め、何か助けていただければ幸いです。
ありがとう!
embedded - PIC (dsPIC33EP 512MU810) : 高速 PWM モジュール
組み込みの(ハードウェア)高速 PWMを使用して、80Mhz (F_osc) のクロックで 10% デューティ サイクルの 1kHz PWM を生成しようとしています。
ドキュメントによると、ベース期間 (PTPER の数値) は次のように計算されます。
PTPER = F_osc / [(F_pwm) x (PWM_Clk_Prescale)]
F_osc = 80Mhz、F_pwm = 1khz、Prescale = 8 を代入すると、PTPER=10,000 のカウントが得られます。
ただし、オシロスコープの出力から、PWM 周波数が ~2khz であることがわかります。.
私は何か間違ったことをしていますか?以下は私のコードです -