#include く wiringPi . h> VOid pwmWrite (int pim int value) 出力なし PWM 出力ビン カ : ・ pin 1 番ピン ( GPIOI 8. コネクタの 1 2 番ピン ) のみ指定可 ・ value 1 周期中の一い期間のクロック数デューティ比は va 旧 e + (pwmSetRange() の設定値 ) になる (a) PWM の ' 1 ' 期間設定の書式 wiringPiSetup ( ) ー pinMOde ( 1 ′ PWM OUTPUT) ー pwmSetRange ( 1024 ) ー pwmWrite(1,750); ノ / 1 周期は 1024 クロック 〃 1024 クロック中・ 1 ・の期間が 750 クロック ( デューティ比は 750 + 1024 # 073 ) になる 図 3 PWM の ' 1 ' 期間設定 A 円 #include く wiringPi . h> void pwmSetM0de ( 土 n む mode) : 出力 : なし 入力 : ・ mode PWM MODE PWM MODE BAL MS (b) 使用例 バランス・モード ( デフォルト ) う マーク・スペス・モード wiringPiSetup ( ) ー pinMode ( 1 ′ PWM OUTPUT); pwmSetMode (PWM MODE_MS) ー >PWM 動作モード設定 図 4 PWM 動作モード設定 A 日 pwmWrite(1 ′ 75のー pwmSetRange ( 1024 ) ー (a) PWM 動作モード設定の書式 / / 1 周期は 1024 クロック ノ / マーグ : ズベース , モード動作に変更 / / 1024 クロック中 '1' の期間が 750 クロック ( デューティ比は 750 + 1024 与 073 ) になる (b) 使用例 mode で動作モードを指定します . 書式を図 4 に示します . mode は次の 2 種類が選べます . ・ PWM MODE MS( マーク・スペース , 干ード ) ー ・ PWM MODE BA 乙 ( バランス・モ ・ pwmSetMode ( int mode ) ード ) サーボモータのようにパルス幅が意味を持つようなものと接続するときはマーク・スペ ばバランス・モードで動作します . デフォルトではバランス・モードになっていますので , pwmSetMode を指定しなけれ ース・モードに設定するのを忘れないようにしてください . >PWM のレンジ設定 ・ pwmSetRange (unsigned int range) PWM の 1 周期のクロック数を range 値にします . 書式を図 5 に示します . 設定できる 最大値は 4096 です . デフォルトでは 1024 になっています . >PWM の動作クロック設定 ・ pwmSetCIock(int divisor) PWM 動作クロック周波数生成用の分周器の分周比を divisor 値にします . 書式は図 6 の 72 ンシスタ技術 2016 年 3 月号別冊付録
表 2 ラズベリー・パイ 2 & ラズベリー・バイ 1 ModeI A 十 / B 十の 40 ピン拡張コネクタの各ピンの機能 機能 備考 3.3 V 出力 . 50 mA まで ( 1 番ピンと 17 番ピンの合計 ) 3.3 V 電源 5 V 入力 5 V GP102/SDA (12C 1 ) 1.8 k Q プルアップ抵抗付き . I ℃データ信号 電源 5V 入力 5 V GP103/SCL (12C1 ) 1.8kQ プルアップ抵抗付き . 12C クロック信号 グラウンド GND GP104/GPCLK GPIO 14/TXD (UARTO) 起動時にシリアル・コンソールとして使用 グラウンド GND 10 GPIO 15/RXD (UARTO) 起動時にシリアル・コンソールとして使用 11 GP1017 12S クロック信号 / PWMO 出力 GPIO 18/PCM_CLK/PWM0 12 13 GP1027/PCM_DOUT 14 GND GP1022 15 16 GP1023 3.3 V 17 18 GP1024 GPIO 10/MOSI (SPIO) 19 20 GND 21 GP109/MISO (SPIO) GP1025 23 GPIOI レ SCLK (SPIO) 24 GP108/CS0 (SPIO) 25 GND 26 GP107/CS1 (SPIO) 27 ID_SD 28 ID SC 29 GP105 30 GND GP106 GPIO 12/PWM0 GPIO 13/PWM 1 34 GND GPIO 19/MISO (SPII ) 35 /PWMI/PCM_FS 36 GPIO 16/CS2 (SPI 1) 37 GP1026 GP1020/MOSI (SPII ) 38 /PCM_DIN 39 GND GP1021/SCLK (SPII ) /PCM_DOUT ンタ技術 2016 年 3 月号 別冊付録 6 1 っ朝っ 0 -4 0 ー 8 グラウンド 3.3 V 出力 . 50 mA まで ( 1 番ピンと 17 番ピンの合計 ) SPIO マスタからスレープへのデータ信号 グラウンド SPIO スレープからマスタへのデータ信号 グラウンド SPIO クロック信号 SPIO チップ・セレクト信号 グラウンド SPI 拡張基板搭載 EEPROM 用のコンフィグレーション信号 拡張基板搭載 EEPROM 用のコンフィグレーション信号 グラウンド PWMO 出力 PWMI 出力 グラウンド SPII スレープからマスタへのデータ信号 /PWMI 出力 / 12S LR クロック信号 SPII チップ・セレクト信号 SPII マスタからスレープへのデータ信号 /12S データ入力信号 グラウンド SPI クロック信号 / 12S データ出力信号 1 亠ワっ 0 00 40
く表 2 ③ 40 ピン拡張コネクタの各ピンの機能 表 3 ③ 26 ピン拡張コネクタの各ピンの機能 ピン番号 機能 備考 3.3 V 出力 . 50 mA まで ( 1 番ピンと 17 番ピンの合計 ) 電源 5V 入力 1.8kQ プルアップ抵抗付 き . 12C データ信号 電源 5 V 入力 1.8 k Q プルアップ抵抗付 き . 12 C クロック信号 グラウンド 起動時にシリアル ・コンソ ールとして使用 グラウンド 起動時にシリアル ・コンソ ールとして使用 PWMO 出力 グラウンド 機 能 ピン番号 備考 3.3V 出力 . 50mA まで ( 1 3.3 V 番ピンと 17 番ピンの合計 ) 電源 5V 入力 5 V 1.8 k Q プルアップ抵抗付 GP102/SDA (12C 1 ) き . 12C データ信号 電源 5V 入力 5 V 1.8kQ プルアップ抵抗付 GP103/SCL (12C 1 ) き . 12C クロック信号 GND グラウンド GP104/GPCLK 起動時にシリアル・コンソ GPIO 14/TXD (UARTO) ールとして使用 GND グラウンド 起動時にシリアル・コンソ GPIO 15/RXD (UARTO) ールとして使用 GPIO 17 12S クロック信号 /PWMO GP1018/PCM_CLK/ PWMO GP1027/PCM_DOUT GND GP1022 GP1023 3.3 V 出力 . 50 mA まで ( 1 3.3 V 番ピンと 17 番ピンの合計 ) 18 GP1024 SPIO マスタからスレープ GPIO IO/MOSI (SPIO) 19 へのデータ信号 GND グラウンド SPIO スレープからマスタ GP109/MISO (SPIO) 21 へのデータ信号 GP1025 グラウンド GPIO 11/SCLK (SPIO) 23 SPIO クロック信号 24 GP108/CS0 (SPIO) SPIO チップ・セレクト信号 25 GND グラウンド 26 GP107/CS 1 (SPIO) SPI 拡張基板搭載 EEPROM 用 27 ID_SD のコンフィグレーション信号 拡張基板搭載 EEPROM 用 28 ID_SC のコンフィグレーション信号 29 GP105 GND グラウンド GP106 PWMO 出力 GPIO 12/PWM0 PWMI 出力 GPIO 13/PWM 1 グラウンド 34 GND SPII スレープからマスタ GPIO 19/MISO (SPI 1 ) へのデータ信号 35 /PWMI 出力 /12S LR クロ /PWM I/PCM FS ック信号 36 GP1016/CS2(SP11) SPII チップ・セレクト信号 37 GP1026 SPII マスタからスレープ GP1020/MOSI (SPI 1 ) へのデータ信号 /PCM DIN /12S データ入力信号 GND グラウンド GP1021 /SCLK ( SPI 1 ) SPI クロック信号 / 12S データ出力信号 /PCM_DOUT 11 っ朝 -4 一 .0 ー 8 9 、 3.3 V 5 V GP102/SDA (12C1 ) 5 V GP103/SCL (12C 1 ) GND GP104/GPCLK GPIO 14/TXD (UARTO) GND GP1015/RXD (UARTO) GP1017 GPIO 18/PCM_CLK/ PWMO GP1027/PCM_DOUT 14 GND 15 GP1022 16 GP1023 3.3V 出力 . 50mA まで ( 1 17 3.3 V 番ピンと 17 番ピンの合計 ) GP1024 SPI マスタからスレープへ GPIOIO/MOSI (SPIO) 19 のデータ信号 20 GND グラウンド SPI スレープからマスタへ GP109/MISO (SPIO) 21 のデータ信号 22 GP1025 グラウンド GPIOII/SCLK (SPIO) 23 SPI クロック信号 24 GP108/CS0 ( SPIO) SPI チップ・セレクト信号 25 GND グラウンド 26 GP107/CS1 (SPIO) SPI 接続し , 若干のアナログ回路を追加することで , IC 化されていないセンサのデータを収集することも可能 になります . ・ UART ・・・標準的なシリアル・インターフェース UART は , マイコン機器の標準的なシリアル通信 手段です . 汎用のインターフェース IC を外付けする ことで , RS ー 232 ー C や RS ー 485 などの通信ができるの で , 産業用のモジュール類を接続することもできます . ・ PWM ・・・簡単な D ー A コンバータとして使える PWM (Pulse Width Modulation) ポートは , 図 7 の ような連続的な矩形波を出力するポートです . ソフト ウェアでパルス幅を変えることで , D ー A コンバータ ン湫タ技術 2016 年 3 月号 出力 グラウンド 0 1 人ワ 1 00 っ 0 00 っ 0 38 40 72
・ソフトウェア PWM とソフトウェア TON E の基本動作 ソフトウェア PWM は PWM ( パルス幅変調 ) の名のとおり 1 周期のサイクル数と , '1' 出 力の期間を決めます . 一方 , ソフトウェア TONE はデューティ比を 50 % ('I' 期間と℃ ' 期間の長さが同じ ) に固定で , 指定した周波数の方形波を出力するものです . TONE の名 のとおり , アラーム音のような音を出力するのに向いています . ・ソフトウェア PWM とソフトウェア TONE のしくみ ソフトウェア PWM とソフトウェア TONE はいずれも Linux の持つ「スレッド」機能を 利用しています . このことは実際の利用にあたってはほとんど気にする必要はありません こで簡単に説明しておきます . 図 9 のようにそれぞれの出力ごとに別々のスレッドを割り付けることで , 同時にいくつ ものポートから PWM やトーン波形を出力できるようにしているのです . 図 10 はソフトウェア PWM を三つとソフトウェア TONE 二つの計 5 個を同時に動かし たときの状態を見たものです . ファイル名が「 softPwmTone 」で , ps ( プロセス・ステー タス ) コマンドで調べると 1603 番として動作しています . そこで , さらに H オプションを つけてスレッドも表示するようにしてみると , 図のように五つのスレッドが作成されてい ることがわかります . ②ぐ 1 を期間値 ) X18 us だけⅡ an 。 sleep() を使ってウェイト ( 1 ) 田 " ( '1' ) を出力 この定周期動作には L ⅲ ux のシステムコールの一つである , nanosleep ( ) を利用しています . ソフトウェア PWM/ ソフトウェア TONE の各スレッドは 100 us 毎に動作しています . ③ "L" ( ℃ ' ) を出力 main() ソフトウェア PWM スレ、ソド PWM 出力 ソフトウェア PWM スレッド PWM 出力 ソフトウェア PWM スレッド PWM 出力 ソフトウェア TONE スレッド TONE 出力 ソフトウェア 丁 ONE スレッド TONE 出力 図 9 76 ソフトウェア PWM / ソフトウェア TONE とスレッドの考え方 トランシスタ技術 2016 年 3 月号別冊付録
第 6 章 PWM 出力関数 #include く wiringPi . h> void pwmSetRange (unsigned int range) 出力 : なし _X±J : ・ range PWM の 1 周期のクロック数を設定 ( 最大 4096 ) テフォルトは 1024 (a) PWM 周期 ( レンジ ) 設定の書式 / / マーグ・スペース・モド動作に変更 〃 1 周期は 1024 クロック ( デフォルト ) / / 1024 クロック中・ 1 ' の期間が 750 クロック ( デューティ比は 750 + 1024 0.73 ) になる (b) 使用例 図 5 PWM のレンジ ( 1 周期のクロック数 ) 設定 A #include く wiringPi . h> void pwmSetC10ck (int divisor) 出力になし ス、プ〕・ d 土 V 土 so wiringPiSetup ( ) ー pwmSetMode (PWM MODE_MS) ー pwmSetRange ( 1024 ) : pwmWrite(750); PWM 動作クロック分周比デフォルト : 32 最大値 : 4095 19.2MHz = ( diviso 「値 ) になる (a) PWM 動作クロック設定の書式 wiringPiSetup ( ) ー pinMode ( 1 ′ PWM OUTPUT) ー pwmSetC10ck(188) ー pwmSetRange ( 1024 ) ー pwmWrite ( 750 房 ″ PWM 動作ク朝ックは約一 0 巨 k 目 z ( 19.2MHz + 188 ) を ア 1 周期は 1024 クロック ( 102kHz + 1024 キ 100HZ ) ノ / 1024 クロック中 ' 1 ' の期間が 750 クロック ( デューティ比は 750 + 1024 寺 0.73 ) になる (b) 使用例 図 6 PWM の動作クロック設定 API ようになります . 大元のクロック周波数は 19.2MHz です . 例えば divisor 値を 188 とすると , PWM の動作クロックは , 約 102 kHz(= 192 MHz + 188 ) になります . ■サンプル・プログラム・・・ 2 種類の PWM 出力モードを比較 リスト 1 は PWM の動作サンプル・プログラムです . まず , pinMode(1,PWM-OUTPUT) で 1 番ピンを PWM 出力モードに設定します . pwm SetRange ( 1024 ) で 1 周期が 1024 になります . これはデフォルト値ですので省略することも できます . 次が動作モード設定です . pwmSetMode ( ) の行を pwmSetMode (PWM_MODE_ BAL) と pwmSetMode (PWM-MODE-MS) で切り替えることで動作モードを変更できます . pwmSetClock(188) で動作クロック周波数を決定します . こでは 188 をセットしまし たので , 約 102 kHz ( = 192 MHz + 188 ) になります . PWM の 1 周期は 1024 クロックに設 定したので 102kHz + 1024 1 開 Hz ( 1 周期が 10ms ) になります . 最後に pwmWrite ( ) で '1' の期間を設定します . ここでは 750 を設定したので , 1 周期 ( 1024 クロック ) 中の '1' 期間は 750 クロックになります . ンタ技術 2016 年 3 月号 別冊付録 73
モータ / LED 調光 / アラーム音 複数台の同時制御も OK / PWM 出力関数 表 1 第 6 章で登場する A 日 種別 ソフト ウェア PWM ソフト ウェア TONE PWM void void void void 関数名 pwmWrite(int pin ′ int pwmSetMode (int mode) pwmSetRange (unsigned value) int range) pwmSetCIock(int divisor) ソースコードに # 土 nclude く softpwm. h > をつける 土 n t s 0 f t P wmC r e a t e ( 土 n t p 土 n ′土 n t 土 n 土 t 土 aI ▽ alue ′ int pwmRange) VOid softPwmWrite (int pin,int value) ソースコードに # 土 nclude く softTone . h > をつける 土 n む softToneCreate (int pin) ▽ 0 土 d softToneWrite (int pin ′ int freq) ハードウェア PWM 内容 PWM 出力の '1' 期間のクロック数設定 ( 最大値は pwmSetRange で設定 ) マーク・スペース・モード / バランス・モ ード選択 PWM レンジ設定 ( デフォルトは 1024 : 4096 まで可 ) PWM 動作クロック設定 ( デフォルト : 32 最 大値 : 4 的 5 べース・クロック : 192MHz ) ソフトウェア PWM ヘッダ・ファイル ( #include く wiringPi. h> も必要 ) ソフトウェアで PWM 出力ピン設定 ( 周期 : pwmRange x 10 us) PWM 値設定 ソフトウェア Tone ヘッダ・ファイル (#include <wiringPi. h> も必要 ) ソフトウェア・トーン出力ピン設定 指定した周波数出力 ・専用ピンからハードウェア PWM 出力 PWM は Pulse Width Modulation の頭文字をとったもので , 直訳すると「パルス幅変調」 ンタ技術 2016 年 3 月号別冊付録 69 PWM は , 動作の大元になるのが 19.2MHz のクロック信号で , これを分周器で分周 ( 最 1 に PWM の内部構成を簡単に示しておきます . PWM は設定用 API がいろいろ用意されていて , 少し難しく感じるかもしれません . 図 ラズベリー・バイの PWM の構成 用できませんので , 注意してください . ピン ) のみです . また , PWM は Sys モード (wiringPiSetupSys() で初期化する場合 ) では利 ラズベリー・パイの場合 , PWM 出力が行えるのは 1 番ピン ( GP1018 , コネクタの 12 番 ます . タのように使える ( いわゆる D 級アンプと同じ原理 ) など , さまざまな用途に利用されてい イルタを通して ON 期間の比率 ( デューティ比 ) に応じた電圧を得ることで D ー A コンバー となります . サーボモータのように , パルスの幅で回転角度を指示したり , ローパス・フ
第 6 章 PWM 出力関数 1 番ピン ム 683E 2. ら 83E 73 n PWM 制御信号 80 80 7.3ms 10ms 1 期間 1 周期 図 8 マーク・スペース・モード動作波形 ℃ ' の期間は 1 クロックで , '1' の期間は 2 クロックのときと 3 クロックのときがあること がわかります . 今回は PWM の動作クロックを 188 分周にしたので , 1 クロックは約 9.8 s ( = ( 1 + 192 MHz) x 188 ) になります . 図を見ると , ℃ ' 期間は 9.8 us ( 1 クロック分 ) で , 'I' の期間は 19.6 ( 2 クロック分 ) のときと , 29.4 us ( 3 クロック分 ) のときがあり , 並び順も , 先ほどの計算どおりになっています . マーク・スペース・モード時の動作波形 図 8 がマーク・スペース・モード時の動作波形です . 今回は 192 MHz のクロックを 188 分周したものが PWM クロックになり , PWM の 1 周 期を 1024 クロックに設定しているので , PWM 出力の 1 周期を計算すると , 1 / 192 MHz >< 188 x 1024 10 ms となります . 'I' 期間は 750 クロックですので , 1 / 192 MHz >< 188 x 750 7.3 ms となります . 実際の波形でも , 1 周期は 10 ms, '1' 期間が 7.3ms と , 計算どおりになって います . 6 ; 2 、 = ソフトウェア PWM / ソフトウェア TONE ・ソフトウェアで複数チャネルの PWM を出力 ラズベリー・パイのハードウェアによる PWM 出力は非常に便利ですが , 出力ピンが固 定されており , 1 チャンネルしか利用できません . 一方 , ラズベリー・パイを利用するとき , 見た目の LED の明るさを変えたり , アラー ム音を出すなど , それほど厳密なタイミングが要求されることもなく , ハードウェア PWM を使うまでもない場合もあるでしよう . このような場合に便利なのがソフトウェア によって繰り返し波形を生成するソフトウェア PWM やソフトウェア TONE 機能です . あくまでもソフトウェアによって行うものですので , CPU の負荷が大きくなるとタイ ミングがずれる可能性があります . ンタ技術 2016 年 3 月号 別冊付録 75
pwmSetMode ( ) 分周器 Mode ( 動作モード ) +divisor Range value 最大 4095 ( 周期 ) ( ・ 1 ' 期間 ) pwmSetCIock ( 厂 pwmSetRange ( ) pwmWrite ( ) 図 1 ラズベリー・バイの PWM 構成 大 4095 分周 ) したものが PWM の動作クロックになります . PWM 部分では周期設定 (pwmSetRange() で設定 ) , '1' 期間設定 (pwmWrite ( ) で設定 ) によって , 周期と '1' 期間の比率が決まります . ラズベリー・パイの PWM には , 後述するように動作モードが二つあり , どちらのモー ドで動作するかを pwmSetMode() で設定します . ・ PWM 出力モードは 2 種類 ・パイの PWM には次の二つの動作モードがあります . ラズベリー ( 1 ) バランス・モード ( 2 ) マーク・スペース・モード 図 2 は , 動作モードによる出力波形の違いを示したものです . 図はわかりやすいように 周期が 8 , '1' 期間が 5 の場合を示しています . どちらのモードも PWM の 1 周期の中の '1' の期間が pwmWrite ( ) で設定した数になる のは同じですが , マーク・スペース・モードでは '1' 期間が集中し , バランス・モードで は拡散していることがわかります . バランス・モードは , 特にデューティが 50 % 前後のときには細かく '1' / ℃ ' を繰り返 します . LED をつないで見かけ上の明るさを変えるときや , ローパス・フィルタをつな いで D ー A コンバータとして使うような場合には都合がよいモードでしよう . パルス幅変 調というよりも , パルス密度変調と呼んだ方がいいかもしれません . 一方 , サーボモータのようにパルスの幅そのものが意味を持つようなときにはマーク・ 1 2 9 ↓ ↓ ↓ : 5 ー 2 : 7 : 4 新 : 6 : 3 : 0 クロック ( 19.2MHz) PWM 出力 モ ス ン ラ ・ 4 ー 3 ー 2 、 4 ! 3 。 1 ! 0 : 7 , 6 。 5 ー 6 ー 5 マーク・スペース・モード ・ 1 ' 期間 : 5 の場合 周期 : 8 PWM の 1 周期 図 2 PWM のモードと動作の違い 70 トランシスタ技術 2016 年 3 月号 別冊付録
・サンプル・プログラム・・・ 12C + 気圧・温度センサ コラム 12C モジュールの接続確認コマンド lsmod コラム 12C バスの動作電圧 5 ー 3 信号 3 本で高速通信 SPI ・ SPI の基本仕様 55 ・ SPI 関連 API ・ SPI バスの基本動作 48 56 59 ・サンプル・プログラム・・・送信データをそのまま受信 5 ー 4 汎用シリアル UART 67 ・ UART の基本仕様 6 ノ ・ UART 関連 API ・サンプル・プログラム・・・シリアル・ポートのオープンと 5 バイト連続出力 モータ / LED 調光 / アラーム音・・・複数台の同時制御も OK / コラム UART を使うには設定ファイルを書き換える 62 6 ノ コラム SPI ドライバのありか ・ソフトウェアで複数チャンネルの PWM を出力 6 ー 2 ソフトウェア PWM/ ソフトウェアで TONE ・サンプル・プログラム・・・ 2 種類の PWM 出力モードを比較 73 ・ハードウェア PWM 出力 API ・専用ピンからハードウェア PWM 出力 69 6 ー 1 ハードウェア PWM 69 第 6 章 PWM 出力関数 66 ・ PWM 出力モードは 2 種類 70 ・・ 69 ・ソフトウェア PWM とソフトウェア TONE の基本動作 76 ・ソフトウェア PWM とソフトウェア TONE のしくみ 76 ・ソフトウェア PWM とソフトウェア TONE 出力 API 77 ・サンプル・プログラム・・・ソフトウェア PWM/ ソフトウェア TONE 出力 割り込みや優先度切り替えで処理の順番自由自在 80 第 7 章タイミング管理関数 7 ー 1 1/O のタイミングを操作する関数 82 ・経過時間取得関数 83 ・指定時間待機関数 83 ・サンプル・プログラム・・・経過時間表示と矩形波出力 7 ー 2 プログラム実行の優先度を設定する関数め ・優先度設定 API 86 7 ー 3 割り込み 87 ・外部の信号を受け取って処理を変える「割り込み」 84 87 ・割り込み関連 API ・割り込み処理関数登録 ( 割り込みスレッド作成 )API ・サンプル・プログラム・・・割り込み処理と割り込み待ち 89 7 ー 4 複数のプログラムを切り替える 9 ノ ・スレッドの基本 9 ノ ・スレッド関連 API 2 ・サンプル・プログラム・・・スレッド作成と排他処理 ンシスタ技術 2016 年 3 月号別冊付録 94
#include <50ftTone . h> を忘れずに入れてください . それぞれの API について説明します . ソフトウェア PWM スレッド作成 ・ int softPwmCreate (int pin ′ int 土 n 土 t 土 a 工▽ alue ′ int pwmRange) ソフトウェア PWM 出力用のスレッドを作成します . 書式は図 1 1 のようになります . 出力先は pin で指定し , PWM の 1 周期は (pwmRange x 100 (s) になります . initialValue は '1' 期間の初期値です . この値は softPwmWrite() で変更できます . in ⅲ a Ⅳ alue が 0 のときは出力が℃ ' のままになり , pwmRange 以上のときは '1' のまま になります . 指定したピンは API 内部で OUTPUT モードに設定され , ℃ ' に初期化され ます . ソフトウェア PWM / ソフトウェア TONE のスレッドは開始時に piHiPri ( 50 ) として , 優 先度を 50 にしています ( piHiPri については第 7 章参照 ). ューザが作成したスレッドはデ フォルトでは優先度 0 と最も低くなっていますので , ソフトウェア PWM / TONE 機能が優 先されますが , 優先度を変更する場合には 50 未満にして , PWM や TONE の動作に影響 ソフトウェア TONE 出力用のスレッドを作成します . 書式は図 13 のようになります . ・ int softToneCreate (int pin) ソフトウェア TONE 出力スレッド作成 12 のようになります . pin で指定したソフトウェア PWM 出力の '1' 期間を value 値に変更します . 書式は図 ・ v 〇土 d softPwmWrite (int pin ′ int value) ソフトウェア PWM '1' 期間設定 を与えないようにした方がよいでしよう . 出力先は pin で指定します . Create した後の出力は℃ ' になっていて , 出力周波数も 0Hz ( 変 (a) ソフトウェア PWM スレッド作成の書式 ・ pwmRange PWM の周期カウント数 ( 1 カウント : 100 灯 s ) ~ ・ initialvalue 1 ' 期間の初期値 ピン番号 入力、・ p 土 出力 - : ズレッド作成ステータス ( 0 : 成功 0 以外 ! ュラー ) int softpwmcreate (int pin ′ int 土 n 土セ土 a1Va1ue ′ int pwmRange) #include く softpwm . h> #include く wiringPi . h> ・▽ 0 土 d softToneWrite (int pin ′ int freq) ソフトウェア TO N E 周波数設定 ソフトウェア PWM と同様 , スレッドの優先度は 50 に設定されています . 化しない ) になっています . wiringPiSetup ( ) ー softPwmCreate(0 ′ 30 ′ 100房 / ノ 0 番ピンを PWM 出力 . 一周期が 100 サイクルい 00X 100 us = 1 Oms) 〃、 1 ' 期間は 30 サイクル ( 30X 1004S =ams) (b) 使用例 図 1 1 78 ソフトウェア PWM スレッド作成 API ンシスタ技術 2016 年 3 月号別冊付録