[Anker Jump Generator Program] Test
gpioPWM
// Start/stop PWM pulses on a GPIO
int gpioPWM(unsigned user_gpio, unsigned dutycycle)
user_gpio: 0-31
dutycycle: 0-range
GPIOでPWMを開始し、デューティサイクルを0(オフ)から範囲(完全にオン)にします。
範囲のデフォルトは255です。
OKの場合は0を返し、それ以外の場合はPI_BAD_USER_GPIOまたはPI_BAD_DUTYCYCLEを返します。
Arduinoスタイル:analogWrite
これとサーボ機能は、DMAおよびPWMまたはPCM周辺機器を使用して、パルス長とデューティサイクルを制御およびスケジュールします。
gpioSetPWMrange関数を使用して、デフォルトの範囲である255を変更できます。
Example
gpioPWM(17, 255); // Sets GPIO17 full on.
gpioPWM(18, 128); // Sets GPIO18 half on.
gpioPWM(23, 0); // Sets GPIO23 full off.
----------------------------------------------------------------------
gpioSetPWMfrequency
// Configure PWM frequency for a GPIO
int gpioSetPWMfrequency(unsigned user_gpio, unsigned frequency)
user_gpio: 0-31
frequency: >=0
GPIOに使用する周波数をヘルツで設定します。
OKの場合、数値的に最も近い周波数を返します。それ以外の場合は、PI_BAD_USER_GPIOを返します。
現在GPIOでPWMがアクティブになっている場合、PWMはオフになり、新しい周波数で再びオンになります。
各GPIOは、18の異なるPWM周波数のいずれかに個別に設定できます。
選択可能な周波数は、1、2、4、5、8、または10マイクロ秒(デフォルトは5)のサンプルレートに依存します。
各サンプルレートの周波数は次のとおりです。
Hertz
1: 40000 20000 10000 8000 5000 4000 2500 2000 1600
1250 1000 800 500 400 250 200 100 50
2: 20000 10000 5000 4000 2500 2000 1250 1000 800
625 500 400 250 200 125 100 50 25
4: 10000 5000 2500 2000 1250 1000 625 500 400
sample 313 250 200 125 100 63 50 25 13
rate (us) 5: 8000 4000 2000 1600 1000 800 500 400 320
250 200 160 100 80 50 40 20 10
8: 5000 2500 1250 1000 625 500 313 250 200
156 125 100 63 50 31 25 13 6
10: 4000 2000 1000 800 500 400 250 200 160
125 100 80 50 40 25 20 10 5
Example
gpioSetPWMfrequency(23, 0); // Set GPIO23 to lowest frequency.
gpioSetPWMfrequency(24, 500); // Set GPIO24 to 500Hz.
gpioSetPWMfrequency(25, 100000); // Set GPIO25 to highest frequency.
----------------------------------------------------------------------
gpioSetPWMrange
// Configure PWM range for a GPIO
int gpioSetPWMrange(unsigned user_gpio, unsigned range)
user_gpio: 0-31
range: 25-40000
GPIOに使用するデューティサイクルの範囲を選択します。
その後のgpioPWMの呼び出しでは、0(オフ)から範囲(完全にオン)までのデューティサイクルが使用されます。
OKの場合、指定されたGPIOの周波数の実際の範囲を返します。それ以外の場合は、PI_BAD_USER_GPIOまたはPI_BAD_DUTYRANGEを返します。
GPIOでPWMが現在アクティブな場合、デューティサイクルは新しい範囲を反映するようにスケーリングされます。
各周波数の完全なオフと完全なオンの間のステップ数である実際の範囲を次の表に示します。
25, 50, 100, 125, 200, 250, 400, 500, 625,
800, 1000, 1250, 2000, 2500, 4000, 5000, 10000, 20000
gpioPWMによって設定される実際の値は、(デューティサイクル*実際の範囲)/範囲です。
Example
gpioSetPWMrange(24, 2000); // Now 2000 is fully on
// 1000 is half on
// 500 is quarter on, etc.
----------------------------------------------------------------------
gpioGetPWMdutycycle
// Get dutycycle setting on a GPIO
int gpioGetPWMdutycycle(unsigned user_gpio)
user_gpio: 0-31
GPIOのPWMデューティサイクル設定を返します。
OKの場合は0(オフ)から範囲(完全にオン)の範囲で、それ以外の場合はPI_BAD_USER_GPIOまたはPI_NOT_PWM_GPIOを返します。
通常のPWMの場合、デューティサイクルはGPIOの定義された範囲外になります(gpioGetPWMrangeを参照)。
GPIOでハードウェアクロックがアクティブな場合、レポートされるデューティサイクルは1000000(1M)のうち500000(500k)になります。
GPIOでハードウェアPWMがアクティブな場合、レポートされるデューティサイクルは1000000(1M)から外れます。
通常のPWM範囲のデフォルトは255です。
----------------------------------------------------------------------
gpioGetPWMfrequency
// Get configured PWM frequency for a GPIO
int gpioGetPWMfrequency(unsigned user_gpio)
user_gpio: 0-31
OKの場合、GPIOに使用される周波数(ヘルツ単位)を返します。それ以外の場合は、PI_BAD_USER_GPIOを返します。
通常のPWMの場合、周波数はgpioSetPWMfrequencyによってGPIOに定義されたものになります。
GPIOでハードウェアクロックがアクティブな場合、報告される周波数はgpioHardwareClockによって設定されたものになります。
GPIOでハードウェアPWMがアクティブな場合、報告される周波数はgpioHardwarePWMによって設定されたものになります。
Example
f = gpioGetPWMfrequency(23); // Get frequency used for GPIO23.
----------------------------------------------------------------------
gpioGetPWMrange
// Get configured PWM range for a GPIO
int gpioGetPWMrange(unsigned user_gpio)
user_gpio: 0-31
OKの場合はGPIOに使用されるデューティサイクルの範囲を返し、それ以外の場合はPI_BAD_USER_GPIOを返します。
GPIOでハードウェアクロックまたはハードウェアPWMがアクティブな場合、報告される範囲は1000000(1M)になります。
Example
r = gpioGetPWMrange(23);
----------------------------------------------------------------------
gpioGetPWMrealRange
// Get underlying PWM range for a GPIO
int gpioGetPWMrealRange(unsigned user_gpio)
user_gpio: 0-31
OKの場合はGPIOに使用される実際の範囲を返し、そうでない場合はPI_BAD_USER_GPIOを返します。
GPIOでハードウェアクロックがアクティブな場合、報告される実際の範囲は1000000(1M)になります。
GPIOでハードウェアPWMがアクティブな場合、報告される実際の範囲は、設定されたPWM周波数で除算された約250Mになります。
Example
rr = gpioGetPWMrealRange(17);
----------------------------------------------------------------------