問題タブ [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.
matlab - ブロックが特定の時間にシミュレーション ステップを強制的に実行するようにするにはどうすればよいですか?
質問
ブロックに特定の時間にシミュレーション ステップを強制的に実行させる方法はありますか?
たとえば、ユーザーがモデルで 1e-2 のシミュレーション ステップ サイズを選択した場合でも (固定ステップ シミュレーション)、ユーザーが私のブロックを使用すると、シミュレーション ステップは 2.5e-4 秒で発生しますか?
環境
私は PWM ジェネレーター ブロック [1] を開発していますが、最初のアプローチには大きな問題があります。これを最もよく説明するために、簡単な図を描きました。
黒の信号は、ブロックに生成させたいものです (正方形の信号、周期 T は、DT 秒の間、値 1 を持ちます。ここで、D は 0 と 1 の間の定数です)。青いアスタリスクは、シミュレーション ステップ時間でサンプリングされたポイントです (固定ステップ シミュレーションを想定)。5 番目のシミュレーション ステップの後と 6 番目のシミュレーション ステップの前に値 1 が保持されるため、青い線はブロックが実際に生成するものです。
このステップ時間と信号の値の変化との非同期化により、信号の平均値に誤差が生じます (意図した 1 よりも長い時間とどまるため)。最悪のシナリオでは、このエラーは s/T になります。ここで、s はシミュレーションのステップ サイズ、T は生成される信号の周期です (導出を投稿することはできますが、ここで方程式を書く方法がわかりません)。そしてそれは非常に簡単です)。この問題を解決する簡単な方法は、ステップ サイズを小さくすることですが、PWM の周期によっては、常に実行できるとは限りません。
シミュレーション ステップを強制的に 0、DT、および T 秒で発生させる方法があれば、青信号と黒信号の平均値はまったく同じになります。
これについてさらに説明が必要な場合は、そう言ってください。前もって感謝します。
1 - PWM は周期的な方形信号であり、その期間中、値 1 で所定の時間、残りの時間は値 0 にとどまるため、0 と 1 の間の任意の平均値を持ちます。
vb.net - Visual Basic 2010を介してarduinoでpwmを変更する
そのため、vb 2010 で、ユーザーが 0 ~ 255 の値を希望する PWM をテキスト ボックスに入力できるようにするユーザー インターフェイスを作成しています。値を取得して好きなだけ変更できるようにしたいのですが、プログラムを再度デバッグする必要なく、1 つの値しか送信できないという問題があるようです。テストとして使用している LED は、テキスト ボックスで使用する PWM と同等のレベルの明るさで応答していないようです。ある種の switch ステートメントを使用して、最終目標として 8 つの個別のリレーでこれを制御できることを願っています。私の現在のコード: VB
arduino - Arduino MEGA とイーサネット シールドによる PWM 読み取り
私は、4 つの Arduino MEGA 2560、それぞれに 4 つの PWM を使用して、16 の PWM 信号の DC (1ms-2ms) を読み取る必要があるプロジェクトに取り組んでいます。それを読んだら、16個の値をコンピューターに送信する必要があります。最初のアイデアは、ルーターに接続された 4 つの Arduino イーサネット シールドを使用してから、コンピューターに接続することでした。もう 1 つのオプションは、4 つの Arduino を USB でコンピューターに直接接続し、各 Serial.print で実行することです。2 つのオプションのうち、より良い結果が得られるのはどれですか? 時間が重要であることを強調しなければなりません。16 個の PWM 値を受信するのに 20 ミリ秒未満が最適です。挨拶と感謝。
arduino - サーボ ライブラリ、PWM 書き込みの理解。
複数の PWM 出力がどのように機能するのかわかりません。写真を見てください。
最初の (1) のケースでは、モーターの静止に近い短い信号幅を使用しています。この場合、ご覧のとおり、短いパルスが相互に続き、コードも同様です。
motor4 が出力を終了すると、motor1 が再びパルスを開始し、問題のない結果のパルスが発生します。
2 番目のケース (2) では、パルスがより広く、これはモーター速度を最大に近い設定に対応します。motor1 が width の生成を終了したら、motor2 が幅を生成します。しかし、そうすると、motor1 の期間が終了し、再び幅の生成を開始する必要がありますが、arduino は motor2 のパルスを生成するのに忙しいです。
この場合、PWM はどのように機能しますか?
c++ - 400hz PWM に 4 つの 16 ビット タイマーを使用する
私はarduinoのメガベースのクワッドコプターを扱っており、4つのモーターのPWM周波数をそれぞれ400hzにしようとしています。
4 つの ATmega2560 16 ビット タイマーを使用して 4 つの ESC を PWM で制御し、400hz の周波数に到達できる興味深いソリューションを見つけました。700 ~ 2000µs は、ESC が扱う通常のパルス幅です。
1 秒/リフレッシュ間隔 = 1/0.0025 = 400hz。
問題は、各 PWM を 1 つの 16 ビット タイマーで制御する必要があることです。それ以外の場合、たとえば、1 つのタイマーで 2 つの ESC を実行すると 200hz になります。そのため、すべての 16 ビット タイマーは 4 つの ESC の制御でビジーですが、受信機から入力 PPM を読み取る必要があります。そのためには、もう持っていない 16 ビット タイマーが少なくとももう 1 つ必要です。
通常の数値 escs が 1000..2000 などで動作するのに対し、それは 0..255 の数値しか読み取ることができない 1 つの 8 ビット タイマー フリー ビットです。
では、pwm と ppm の両方の読み取りに同じ 16 ビット タイマーを使用するとどうなるでしょうか? それはうまくいくでしょうか?急激に速度が落ちますか?
データのフィルタリング、デバッグなどを制御する Raspberry Pi とペアで arduino を使用していますが、ppm の読み取り値を Raspberry に移動した方がよいでしょうか?
interrupt - STM32F4 PWMランプ
私は、pwm デューティ サイクルを 0 から 50% に上げたいプロジェクトに取り組んでいます。私の期間は 16000 カウントまたは 1ms (16MHz のデフォルト タイマー カウント) です。何らかの理由で、周期ごとにデューティ サイクルを更新するのではなく、はるかにゆっくりと更新します。タイマー割り込み内で新しいデューティ サイクルを計算しているからでしょうか。これが私が使用しているものです:
timer - STM32F030 PWM セットアップの問題
STM32030R8T6 の 2 つのピンで PWM を機能させようとしています。これは Nucleo 開発ボード上にあり、Keil を使用しています。学習のために、私は主にこのWebサイトの資料に従っていますが、そのサイトは別のMCUを使用しているため、適応しています. PWM を設定することはあまりないので、何が間違っていたのかよくわかりません。オンボード LED が 1 秒あたり 1.5 回点滅するため、タイマーが動作していることはわかっていますが、Ch1 とスコープを使用したCh2出力ピンは何も得られません。ピンが代替機能プッシュプルで正しく設定されていると確信しています。なぜなら、それらは機能し、24 MHz を示している MCO ピンと同じに設定されているからです (ただし、私の安価なスコープでは、それを判断するのに問題があります...)。私' 関連するすべてのコードと、リモートで関連する可能性のあるコードをすべて添付しました。そしてあなたの便宜のために:
UM0360 リファレンス マニュアル (STM32F030...)
Nucleo ユーザー マニュアルとデバイス データシートへのリンクも投稿しますが、これが最初の質問であり、私の評判が 10 未満であるため、2 つ以上のリンクを投稿することはできません。
私が間違っているかもしれないことについての助けをいただければ幸いです。それはばかげたことだと確信しています。
c - ラズベリーパイ B+ ハードウェア PWM
Raspberry pi B+ には 4 つのハードウェア PWM があります。C/C++ での使用方法。複雑でないソリューションほど優れています。
WiringPi で 1 つの実用的なソリューションを見つけました
このソリューションは、1 つの PWM 出力 (GPIO18) に対してのみ機能します。WiringPiが以前のバージョンのraspberry pi用に設計されているためだと思います(モデルB +にはGPIO12、GPIO13、およびGPIO19に新しいPWMがあります)。
通常の GPIO を制御するために、解決策を見つけました。
しかし、ハードウェア PWM を制御する方法はありません。
製品https://www.pololu.com/product/2753にはpythonライブラリへの参照があります-それはまさに私が望むことを行います.
ソフトウェア PWM の提案はご遠慮ください。
ありがとう
ヴラド