Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tinyidiot [2018/12/19 16:23] – [TinyIdiot] yairtinyidiot [2019/01/09 15:51] (current) yair
Line 7: Line 7:
 tinytony for esp8266 tinytony for esp8266
  
-drv8830 [[http://www.ti.com/lit/ds/symlink/drv8830.pdf|datasheet]] \\ 
-built of work by sparkfun [[https://github.com/sparkfun/SparkFun_MiniMoto_Arduino_Library|minimoto]] breakout [[https://jiwashin.blogspot.com/2016/09/drive-dc-motor-by-drv8830-and-esp8266.html|and jiwashin]] and [[https://makers-with-myson.blog.so-net.ne.jp/2014-05-15|here]] 
  
 +{{:nodemcu_pins.png?direct|}}
  
-{{:pasted:20181219-102721.png?direct&400}}+==== drv8833 === 
 +https://www.pololu.com/product/2130
  
-{{:nodemcu_pins.png?direct&400|}}+{{:pasted:20181226-125449.png}}
  
-  ##wiring 
-  ESP        DRV 8830 
-  GPIO 4    |   SDA 
-  GPIO 5    |   SCL 
-  VIN     |   Vcc 
-  GND     |   Gnd 
- 
-  * **connect to the ESP only with I2C pulled up with 3.3v.** 
-  * Motor (+) and OUT1, motor (-) and OUT2 
-  * A 1 nF (102) ceramic capacitor between + and - of the motor 
-  * A resistance of 0.2 Ω between ISENSE and GND of the DRV 8830 
-  * 0.1 μF (104) ceramic capacitor between VCC and GND of the DRV 8830 
-  * A 10 kΩ resistor between SDA and 3.3 v 
-  * A 10 kΩ resistor between SCL and 3.3 v 
-  * 5 V output such as USB serial and VIN of ESP - WROOM - 02 board 
-  * GND of USB serial etc. and GND of ESP - WROOM - 02 board 
  
 ==== code ==== ==== code ====
-<code> +https://github.com/idiot-io/TinyTony
- +
-/* +
-  TinyIdiot +
-  tiytony esp8266 +
- +
-  drv8830 code from https://jiwashin.blogspot.com/2016/09/drive-dc-motor-by-drv8830-and-esp8266.html +
-  pdf > http://www.tij.co.jp/jp/lit/ds/symlink/drv8830.pdf +
- +
-  ##wiring +
-  ESP         DRV 8830 +
-  GPIO 4 |   SDA +
-  GPIO 5 |   SCL +
-  VIN     |   Vcc +
-  GND     |   Gnd +
- +
-  * **connect to the ESP only with I2C pulled up with 3.3v.** +
-  * Motor (+) and OUT1, motor (-) and OUT2 +
-  * A 1 nF ceramic capacitor between + and - of the motor +
-  * A resistance of 0.2 Ω between ISENSE and GND of the DRV 8830 +
-  * 0.1 μF ceramic capacitor between VCC and GND of the DRV 8830 +
-  * A 10 kΩ resistor between SDA and 3.3 v +
-  * A 10 kΩ resistor between SCL and 3.3 v +
-  * 5 V output such as USB serial and VIN of ESP - WROOM - 02 board +
-  * GND of USB serial etc. and GND of ESP - WROOM - 02 board +
-*/ +
- +
-#include <Arduino.h> +
-#include <Wire.h> +
- +
-uint8_t readMotorStatus(); +
-void resetMotorStatus(); +
-void runMotor(int inVector); +
-void writeToDriver(byte inDirection, byte inVoltage); +
-void brakeMotor(); +
- +
-const int kDrv8830Address = 0x64; +
- +
-const int kBitClear  = 0x80; +
-const int kBitILimit = 0x10; +
-const int kBitOTS    = 0x08; +
-const int kBitUVLO   = 0x04; +
-const int kBitOCP    = 0x02; +
-const int kBitFault  = 0x01; +
- +
- +
-// +
-//  Setup +
-// +
- +
-void setup() { +
-  Serial.begin(115200); +
-  Wire.begin(); +
-+
- +
- +
-// +
-//  Loop +
-// +
- +
-float r = 0; +
- +
-void loop() { +
-  // +
-  //  Motor +
-  float s = sin(r) * 64.0; +
-  r += 0.1; +
-  if (r > 6.28) r = 0.0; +
- +
-  int out = (s > 0) ? 0x01 : 0x02; +
-  int speed = s; +
- +
-  runMotor(speed); +
- +
-  int status = readMotorStatus(); +
-  if (status & kBitFault) { +
-    Serial.print("Motor Fault : "); +
-    Serial.println(status, HEX); +
-    resetMotorStatus(); +
-  } +
-   +
-  delay(100); +
-+
- +
- +
-// +
-//  DRV8830 Controll +
-// +
-uint8_t readMotorStatus() { +
-  uint8_t result = 0x00; +
-     +
-  Wire.beginTransmission(kDrv8830Address); +
-  Wire.write(0x01); //  read register 0x01 +
-  Wire.endTransmission(); +
- +
-  Wire.requestFrom(kDrv8830Address, 1); +
-  if (Wire.available()) { +
-    result = Wire.read(); +
-  } else { +
-    Serial.println("No status data"); +
-  } +
- +
-  return result; +
-+
- +
-void resetMotorStatus() { +
-  Wire.beginTransmission(kDrv8830Address); +
-  Wire.write(0x01); //  fault +
-  Wire.write(0x80);  // clear +
-  Wire.endTransmission(true); +
-+
- +
- +
-void runMotor(int inVector) { +
-  int direction; +
-  int voltage; +
- +
-  if (inVector > 0) { +
-    direction = 0x01; +
-    voltage = inVector; +
-  } else if (inVector == 0) { +
-    direction = 0x00; +
-    voltage = 0; +
-  } else { +
-    direction = 0x02; +
-    voltage = -inVector; +
-  } +
- +
-  writeToDriver(direction, voltage); +
-+
- +
-void brakeMotor() { +
-  writeToDriver(0x03, 0x00); +
-}+
  
  
-void writeToDriver(byte inDirection, byte inVoltage) { 
-  if (inVoltage <= 0x05) inVoltage = 0x06;  // minimum voltage value is 0x06. 
-   
-  int outData = (inVoltage & 0x3f) << 2 | (inDirection & 0x03); 
-  Wire.beginTransmission(kDrv8830Address); 
-  Wire.write(0x00); //  control 
-  Wire.write(outData);  // 
-  Wire.endTransmission(true); 
  
-  delay(12); 
-} 
-</code>