Корзина
пусто

Привод электродвигателей

Привод электродвигателей

Нажмите, чтобы увеличить
Привод электродвигателей
Привод электродвигателей
Цена: 700 pуб.
Наличие: Временно отсутствует 
Модель: motor driver
Количество: Добавить в корзину
Motor Shield V2.0 Шаговый двигатель 2WD miniQ

Модуль расширения Arduino для управления электродвигателями. Двухканальный H-мост работает с током до 2А на канал. Электродвигатели могут управляться независимо друг от друга, с различной скоростью и направлением вращения.

Привод подходит для двух электродвигателей постоянного тока или одного 4-х проводного двухфазного шагового двигателя. Входное напряжение от 6В до 15В.

 

привод электродвигателей для Ардуино

 

Демо код для Ардуино:

#include <Wire.h>
 
//#define MOTORSHIELDaddr   0x0f
#define SETPWMAB          0x82
#define SETFREQ           0x84
#define CHANGEADDR        0x83
#define CHANNELSET        0xaa
#define MOTOR1            0xa1
#define MOTOR2            0xa5
#define SAVEADDR          'S'
#define NOTSAVEADDR       'N'
 
static unsigned char MOTORSHIELDaddr = 0x28;
 
void speedAB(unsigned char spda , unsigned char spdb)
{
  Wire.beginTransmission(MOTORSHIELDaddr); // transmit to device MOTORSHIELDaddr
  Wire.send(SETPWMAB);        //set pwm header 
  Wire.send(spda);              // send pwma 
  Wire.send(spdb);              // send pwmb    
  Wire.endTransmission();    // stop transmitting
}
 
void fre_pre(unsigned char pres)
{    
  Wire.beginTransmission(MOTORSHIELDaddr); // transmit to device MOTORSHIELDaddr
  Wire.send(SETFREQ);        // set frequence header
  Wire.send(pres);              //  send prescale 
  Wire.send(0);              //  need to send this byte as the third byte(no meaning)  
  Wire.endTransmission();    // 
}
 
void change_adr(unsigned char new_adr, unsigned char save_or_not)
{
  Wire.beginTransmission(MOTORSHIELDaddr); // transmit to device MOTORSHIELDaddr
  Wire.send(CHANGEADDR);        // change address header
  Wire.send(new_adr);              //  send new address
  Wire.send(save_or_not);              //   save the new address or not  
  Wire.endTransmission();    // 
  delayMicroseconds(100); //this command needs at least 6 us
}
 
void channel(unsigned char i4) //0b 0000 I4 I3 I2 I1 
{
//  delayMicroseconds(4);
  Wire.beginTransmission(MOTORSHIELDaddr); // transmit to device MOTORSHIELDaddr
  Wire.send(CHANNELSET);        // channel control header
  Wire.send(i4);              // send channel control information
  Wire.send(0);              // need to send this byte as the third byte(no meaning)  
  Wire.endTransmission();    // 
}
void motorAndspd( unsigned char motor_s,unsigned char Mstatus, unsigned char spd)
{
  Wire.beginTransmission(MOTORSHIELDaddr); // transmit to device MOTORSHIELDaddr
  Wire.send(motor_s);        // motor select information
  Wire.send(Mstatus);        // motor satus information
  Wire.send(spd);            //  motor speed information
  Wire.endTransmission();    // 
}
 
void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)
  delayMicroseconds(10); //wait for motor driver to initialization
}
 
void loop()
{
 
  motorAndspd(0xa1,0b01,225);
  motorAndspd(0xa5,0b01,30);
  delay(2000);  
 
  motorAndspd(0xa5,0b10,225);
  motorAndspd(0xa1,0b10,30);
  delay(2000);
 
  change_adr(0x12, NOTSAVEADDR );
  MOTORSHIELDaddr = 0x12;
 
  for( int i = 0;i< 16;i++)
  { 
    fre_pre(i); 
    channel(i);
    delay(100);
  }
  speedAB(0 , 0);
  change_adr(0x28,NOTSAVEADDR );
  MOTORSHIELDaddr = 0x28;
 
  while(1)
  {
    channel(0b00001010); 
    delay(500); 
    channel(0b00000101);
    delay(500);  
  }
}

Для различных версий Arduino IDE возможна разница в коде. Для Arduino IDE (0019) этот код работает прекрасно, а для Arduino IDE (0022) нужно добавить delay() в конце Wire.endTransmission ().