Двухканальный драйвер моторов VNH2SP30

OOM
Offline
Зарегистрирован: 07.01.2017

Люди добрые помогите пли..............з. 

Есть двухканальный драйвер моторов VNH2SP30, два мотора, аналоговый джойстик с двумя осями и кнопкой.

Вопрос? Как это все соединить вместе

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Проводами....

OOM
Offline
Зарегистрирован: 07.01.2017

Очень позновательно

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Подождите, вы хотите сказать, что не проводами?! А чем будете соединять?
Хотите - познАвайте.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Скотчем?

Или, если Вы эстет, то термолкеем?

OOM
Offline
Зарегистрирован: 07.01.2017

Это понятно.

А как в этот код встроить управление моторами от джоя.

[code]
/*  MonsterMoto Shield Example Sketch
  date: 5/24/11
  code by: Jim Lindblom
  hardware by: Nate Bernstein
  SparkFun Electronics
 
 This is really simple example code to get you some basic
 functionality with the MonsterMoto Shield. The MonsterMote uses
 two VNH2SP30 high-current full-bridge motor drivers.
 
 Use the motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) 
 function to get motors going in either CW, CCW, BRAKEVCC, or 
 BRAKEGND. Use motorOff(int motor) to turn a specific motor off.
 
 The motor variable in each function should be either a 0 or a 1.
 pwm in the motorGo function should be a value between 0 and 255.
 
This code is beerware; if you see me (or any other SparkFun employee) at the
local, and you've found our code helpful, please buy us a round!
 
Distributed as-is; no warranty is given.
 */
#define BRAKEVCC 0
#define CW   1
#define CCW  2
#define BRAKEGND 3
#define CS_THRESHOLD 100
 
/*  VNH2SP30 pin definitions
 xxx[0] controls '1' outputs
 xxx[1] controls '2' outputs */
int inApin[2] = {7, 4};  // INA: Clockwise input
int inBpin[2] = {8, 9}; // INB: Counter-clockwise input
int pwmpin[2] = {5, 6}; // PWM input
int cspin[2] = {2, 3}; // CS: Current sense ANALOG input
//int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin)
 
int statpin = 13;
 
void setup()
{
  
  Serial.begin(9600);
  
  pinMode(statpin, OUTPUT);
 
  // Initialize digital pins as outputs
  for (int i=0; i<2; i++)
  {
    pinMode(inApin[i], OUTPUT);
    pinMode(inBpin[i], OUTPUT);
    pinMode(pwmpin[i], OUTPUT);
  }
  // Initialize braked
  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
//TCCR0B = TCCR0B & B11111000 | B00000001;    // Таймер 0 делитель    1 для частоты ШИМ 62500.00 Hz
TCCR0B = TCCR0B & B11111000 | B00000010;    // Таймер 0 делитель    8 для частоты ШИМ  7812.50 Hz
 // TCCR0B = TCCR0B & B11111000 | B00000011;    // Таймер 0 делитель   64 для частоты ШИМ   976.56 Hz (По умолчанию)
//TCCR0B = TCCR0B & B11111000 | B00000100;    // Таймер 0 делитель  256 для частоты ШИМ   244.14 Hz
//TCCR0B = TCCR0B & B11111000 | B00000101;    // Таймер 0 делитель 1024 для частоты ШИМ    61.04 Hz
}
 
void loop()
{
 delay(1000);
  {
  for(int i=0; i<255; i++)
 {
  motorGo(0, CCW, i);
  motorGo(1, CW, i);
  delay(3000);
 }
 delay(500);
for(int i=255;i>0;i--){
  motorGo(0, CCW, i);
  motorGo(1, CW, i);
  delay(3000);
 } 
 motorOff(0);
 motorOff(1);
if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
    digitalWrite(statpin, HIGH);
 }
 delay(1000);
{
  for(int i=0; i<255; i++){  
  motorGo(0, CW, i);
  motorGo(1, CCW, i);
  delay(3000);
 }
 delay(500);
for(int i=255;i>0;i--){
    motorGo(0, CW, i);
  motorGo(1, CCW, i);
  delay(3000);
}
motorOff(0);
 motorOff(1);
  if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
    digitalWrite(statpin, HIGH);
}
delay(1000);
}
 
void motorOff(int motor)
{
  // Initialize braked
  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
  analogWrite(pwmpin[motor], 0);
}
 
/* motorGo() will set a motor going in a specific direction
 the motor will continue going in that direction, at that speed
 until told to do otherwise.
 
 motor: this should be either 0 or 1, will selet which of the two
 motors to be controlled
 
 direct: Should be between 0 and 3, with the following result
 0: Brake to VCC
 1: Clockwise
 2: CounterClockwise
 3: Brake to GND
 
 pwm: should be a value between ? and 1023, higher the number, the faster
 it'll go
 */
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
{
  if (motor <= 1)
  {
    if (direct <=4)
    {
      // Set inA[motor]
      if (direct <=1)
        digitalWrite(inApin[motor], HIGH);
      else
        digitalWrite(inApin[motor], LOW);
 
      // Set inB[motor]
      if ((direct==0)||(direct==2))
        digitalWrite(inBpin[motor], HIGH);
      else
        digitalWrite(inBpin[motor], LOW);
 
      analogWrite(pwmpin[motor], pwm);
    }
  }
}
 
 
[/code]
 
Код рабочий. Моторы плавно разгоняются и останавливаются.
 
Arhat109-2
Offline
Зарегистрирован: 24.09.2015

нагуглить код, работающий с джойстиком и добавить снизу .. не? ;)