基本ライブラリ
デジタルIO
アナログIO
拡張IO
時間
数学
三角関数
乱数
ビットバイト操作
割り込み
シリアル通信
標準ライブラリ
Ethernet
サーボモーター
ステッピングモーター
キャラクタ液晶表示
SPI通信
I2C通信(Wire)
SD
SD(File操作)
周期処理(MsTimer2)
時計(RTC)
PPG(パルス生成)
WiFiEsp
ICS(シリアルサーボ)
FreeRTOS Tips
PPG(プログラマブルパルス生成)
最大4相のパルス信号の生成ができるライブラリです。以下の通り、各相に対するピン番号は決まっています。使用する場合は、#include <PPG.h>
を記述してください。
Phase0(pin0): 1
Phase1(pin1): 3
Phase2(pin2): 5
Phase3(pin3): 7
begin
- 概要
- 使用する相、パルスの周期を設定します。
- 文法
- PPG.begin(bool pin0, bool pin1, bool pin2, bool pin3, uint32_t interval, uint8_t polarity = 0b0000)
- パラメータ
- pin0: true/false (使用/未使用)
pin1: true/false (使用/未使用)
pin2: true/false (使用/未使用)
pin3: true/false (使用/未使用)
interval: 周期(マイクロ秒)、およそ100us~500msまで指定可能
polarity: 各ビットで、0指定時は非反転、1指定時は反転出力
例:0b0001の場合、第1相は反転出力 - 戻り値
- なし
end
- 概要
- 設定されたピンを解放
- 文法
- PPG.end()
- パラメータ
- なし
- 戻り値
- なし
setTrigger
- 概要
- 各相のトリガー位置の設定を行う。適用はenableTriggerで全相に対して一括で行います。
- 文法
- PPG.setTrigger(uint8_t phase, uint32_t triggerA_time, uint32_t triggerB_time)
- パラメータ
- phase: 相の番号(0~3)
triggerA_time: 1回目に反転する時間
triggerB_time: 2回目に反転する時間 - 戻り値
- なし
enableTrigger
- 概要
- setTrigger()の設定を適用する
- 文法
- PPG.enableTrigger()
- パラメータ
- なし
- 戻り値
- なし
start
- 概要
- パルスの出力を開始する。
- 文法
- PPG.start()
- パラメータ
- なし
- 戻り値
- なし
stop
- 概要
- パルスの出力を停止する。
- 文法
- PPG.stop()
- パラメータ
- なし
- 戻り値
- なし
サンプルプログラム
2相DCモータを制御するサンプルです。A0、A1の値でスピードを決定します。
#include <Arduino.h>
#include <PPG.h>
uint32_t motor_speed[2];
uint32_t motor_pwm_cycle = 500; // 500[micro-second]
void calc_speed();
void setup()
{
PPG.begin(true, true, true, true, motor_pwm_cycle, 0b0101);
PPG.setTrigger(0, 0, motor_pwm_cycle / 2);
PPG.setTrigger(1, 0, motor_pwm_cycle / 2);
PPG.setTrigger(2, 0, motor_pwm_cycle / 2);
PPG.setTrigger(3, 0, motor_pwm_cycle / 2);
PPG.start();
}
void loop()
{
calc_speed();
PPG.setTrigger(0, 0, motor_speed[0]);
PPG.setTrigger(1, 0, motor_speed[0]);
PPG.setTrigger(2, 0, motor_speed[1]);
PPG.setTrigger(3, 0, motor_speed[1]);
PPG.enableTrigger();
delay(100);
}
void calc_speed()
{
// Set spped according to A0, A1
motor_speed[0] = map(analogRead(A0), 0, (1U<<12), 0, motor_pwm_cycle);
motor_speed[1] = map(analogRead(A1), 0, (1U<<12), 0, motor_pwm_cycle);
}