Skip to content

Instantly share code, notes, and snippets.

@satakagi
Last active November 28, 2018 12:35
Show Gist options
  • Save satakagi/ff25adc02e146d4b1efc0d1896f5a001 to your computer and use it in GitHub Desktop.
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
<!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>
// 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);
});
}
@satakagi
Copy link
Author

このコードの実態配線図
pwmhbridge2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment