Last active
November 28, 2018 12:35
-
-
Save satakagi/ff25adc02e146d4b1efc0d1896f5a001 to your computer and use it in GitHub Desktop.
PWM H-Bridhe Motor Driver for CHIRIMEN RPi3 using L298N and PCA9685 CASE-2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<title>GPIO-I2C-PWMHBridge case2</title> | |
</head> | |
<body> | |
<script src="../../../polyfill/polyfill.js"></script> | |
<!-- 下のドライバは CASE-1 https://gist.github.com/satakagi/dd6d9a83764529be368b9a73a2ce9f85 と同じものです。 --> | |
<script src="../../drivers/i2c-PCA9685_PWM.js"></script> | |
<script src="pwhb2.js"></script> | |
<h1>GPIO H-Bridge Motor drive (with PWM)</h1> | |
<input type="button" onclick="stop()" value="BRAKE"></input> | |
<input type="button" onclick="fwd()" value="FOWARD"></input> | |
<input type="button" onclick="rev()" value="REVERSE"></input> | |
<br> | |
<input type="button" onclick="speed(0)" value="0%"></input> | |
<input type="button" onclick="speed(0.2)" value="20%"></input> | |
<input type="button" onclick="speed(0.4)" value="40%"></input> | |
<input type="button" onclick="speed(0.6)" value="60%"></input> | |
<input type="button" onclick="speed(0.8)" value="80%"></input> | |
<input type="button" onclick="speed(1.0)" value="100%"></input> | |
<div> | |
<img src="PWMHBridge2.png" height="500"> | |
</div> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Hブリッジモータードライバの二本の制御端子にそれぞれPCA9685のPWM信号を入力し正逆転と速度コントロールをします。 | |
var pca9685pwmPromise; | |
onload =async function(){ // ポートを初期化するための非同期関数 | |
try{ | |
console.log("onload"); | |
var i2cAccess = await navigator.requestI2CAccess(); | |
var i2cPort = i2cAccess.ports.get(1); | |
var pca9685pwm = new PCA9685_PWM(i2cPort, 0x40); | |
await pca9685pwm.init(100); | |
pca9685pwmPromise = pca9685pwm; | |
} catch (error) { | |
console.error("error", error); | |
} | |
} | |
var direction = 1; | |
var ratio = 0; | |
async function speed(speedVal){ | |
ratio = speedVal; | |
await setMotor(); | |
} | |
async function setMotor(){ | |
var pca9685pwm = await pca9685pwmPromise; | |
if ( direction == 1 ){ | |
await pca9685pwm.setPWM(1,0); | |
await pca9685pwm.setPWM(0,ratio); | |
} else if ( direction == -1 ){ | |
await pca9685pwm.setPWM(0,0); | |
await pca9685pwm.setPWM(1,ratio); | |
} else { | |
await pca9685pwm.setPWM(0,0); | |
await pca9685pwm.setPWM(1,0); | |
} | |
} | |
async function stop(){ | |
direction = 0; | |
await setMotor(); | |
} | |
async function fwd(){ | |
direction = 1; | |
await setMotor(); | |
} | |
async function rev(){ | |
direction = -1; | |
await setMotor(); | |
} | |
// 単に指定したms秒スリープするだけの非同期処理関数 | |
// この関数の定義方法はとりあえず気にしなくて良いです。コピペしてください。 | |
function sleep(ms){ | |
return new Promise( function(resolve) { | |
setTimeout(resolve, ms); | |
}); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
このコードの実態配線図