analogWrite()
analogWrite()は、ピンにPWM波を生成するために使用されます。 書式
void analogWrite()
注意
Maple(Arduino STM32)では、analogWrite()の呼び出しはpwmWrite()の呼び出しと同じです。 analogWrite()の代わりにpwmWrite()を記述することをお勧めします。 これは、PWMが真のアナログ出力(DACの出力ではない)でないためです。そのため、この関数の名前は非常に間違っています。 たとえば、analogWrite()はanalogRead()とは何の関係もなく、混乱する可能性があります。
Arduinoとの互換性のためにanalogWrite()を提供しています。
Arduinoとの互換性
ArduinoのanalogWrite()とMaple(Arduino STM32)のpwmWrite()の間には、いくつかの重要な違いがあります。 いずれの場合も、ArduinoからMaple(Arduino STM32)への変換に役立つ推奨事項があります。
違い1:デューティサイクルの範囲が違う
最初の最も重要な違いは、デューティサイクルの可能な限り大きな値がMaple(Arduino STM32)ではるかに大きいことです。 ArduinoのanalogWrite()を使用すると、デューティサイクルは0-255(常にオフ - 常時オン)の範囲です(*1)。 Maple(Arduino STM32)のpwmWrite()を使用すると、デューティ・サイクルの範囲はデフォルトで0〜65,535です(*2)。
これは良いことです! Maple(Arduino STM32)の値の範囲が広いと、PWM出力のデューティサイクルをより正確に制御できます。
Arduinoのコードを移植していて、すばやく修正が必要な場合は、引数をanalogWrite()に適切な範囲にマップしてください:
code:sample.ino
// Arduino code:
analogWrite(pin, duty);
// Becomes Maple code:
analogWrite(pin, map(duty, 0, 255, 0, 65535));
これは、0〜255の範囲の値を0〜65,535の範囲の値に変換します。これは、PWM出力を制御するすべてのタイマーの正しいデフォルト範囲です。 詳細については、タイマーリファレンスを参照してください。 別の解決策は、使用しているピンのPWMを制御するタイマーを見つけるためにあなたのボードのピンマップを調べ、そのタイマーのオーバーフローを255に設定することです。analogWrite()へのその後の呼び出しは、Arduino 精度)。 ただし、これはタイマー全体のオーバーフローに影響するため、そのタイマーに依存する他のコード(タイマーが制御する割り込みなど)も同様に変更する必要があります。 違い2:PWMを設定するには、pinMode()を使用する必要があります
2つ目の違いは、Maple(Arduino STM32)では、引数PWMを使用して、pinMode()を使用してPWM出力用にピンを設定する必要があることです。 これはあなたのsetup()関数内の1行の余分なコード行でなければなりません。 例: code:sample2.ino
void setup() {
// set up pin 9 for PWM
pinMode(9, PWM);
}
違い3:ピン10にPWMなし(注意:このでの記載は純正Mapleボード利用時の場合です)
Mapleボードでは、PWMをサポートするピンは、0,1,2,3,5,6,7,8,9,11,12,14,24,27,28または15ピンです。 これはArduinoボードよりもPWM対応のピンですが、ピンがPWMをサポートする点で違いがあります。
ほとんどのArduinoボード(ATmega168またはATmega328、Arduino Unoを含む)では、この機能はピン3,5,6,9,10、または合計6ピンで機能します。 これらのボードは10ピンのPWMをサポートしていますが、Mapleはサポートしていません。
Arduino Megaでは、PWMはピン2〜13、または合計12個のピンで動作します。 このボードはピン4,10,13のPWMをサポートしていますが、Mapleはピン4には対応していません。
ATmega8を搭載した古いArduinoボードは、9,10,11ピンでのみanalogWrite()をサポートしています。Mapleは10番ピンでPWMをサポートしていません。
すべてのケースで、ArduinoボードはMapleとは異なり、ピン10でPWMをサポートします。 可能な限りPWMをピンコンパチブルにするために最善を尽くしました。 しかし、回路レイアウトの制約により、完璧な互換性が得られませんでした。
PWM出力に使用する「最も安全な」ピンは9ピンと11ピンです。これらのピンはArduinoボードとMapleで動作します。 最近のArduinoボード、Arduino Mega、Mapleで動作する「安全な」ピンは、ピン3,5,6,9、および11です。したがって、プロジェクトをMapleとMapleの間でできるだけポータブルにしたい場合は、 Arduinoでは、まず安全なピンを使用し、次に安全なピンを使用し、必要に応じて他のピンを使用することをお勧めします。
違い4:PWM周波数
Arduino上のPWM信号の周波数(すなわち、完全なオン/オフサイクルの周波数)は約490Hzです。
Maple(Arduino STM32)では、周波数は設定可能で、デフォルトは約1100 Hz、つまり1.1 KHzです。 これは、PWM周波数が特定のピンでPWM出力を制御するタイマーの周波数であるためです(PWMチュートリアルに詳細があります)。 アプリケーションでArduinoのPWM周波数が必要な場合は、次の手順を実行します。
2. timernとしましょう。ここで、nは数字です。 HardwareTimerのリファレンスに記載されているように、変数に "HardwareTimer timer(n);"を入れる必要があります。 3. あなたのsetup()で、 "timer.setPeriod(2041);"を入れてください。 これは、タイマーの周期を約2041マイクロ秒に設定します。これは、約490 Hzの周波数です。 これは、タイマー全体の期間を変更し、そのタイマーに依存するプログラム内の他のものに影響します。 重要な例はタイマ割り込みとPWMです。 関連項目
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。