ВВЕДЕНИЕ
Мощный драйвер двигателей, который стал дальнейшим развитием линейки шилдов с H-мостом. Вместо классической L298 здесь установлена пара микросхем VNH2SP30. Vin, A и B разъёмы модуля спроектированы под подключение через винтовые клеммники. Это делает возможным подключение проводов большого сечения.
Модуль имеет выходы CS, предназначенные для измерения текущего тока, потребляемого двигателем. Эта функция позволит определить перегрузку и вовремя отключить систему.
Примечание: при использовании модуля в экстремальных условиях с большой токовой нагрузкой рекомендуется организовать дополнительное охлаждение для микросхем с помощью радиаторов и вентилятора. Также при использовании мощных двигателей (ток больше 6 Ампер) вместо использования винтовых клемм лучше припаять провода сразу к разъёмам. Это поможет избежать чрезмерного нагрева разъёмов.
ПАРАМЕТРЫ
- Максимальное входное напряжение: 16V
- Максимально допустимый ток (предельный): 30А на канал
- Выходной ток (рабочий): 14А на канал
- Выход CS для измерения текущего тока с помощью АЦП Arduino
- Внутреннее сопротивление MOSFET: 19МОм
- Максимальная частота ШИМ: 20 кГц
- Автоматическое выключение при перегреве
- Автоматическое выключене при привышении допустимого входного напряжения
ПРИМЕР КОДА
#define BRAKEVCC 0 #define CW 1 #define CCW 2 #define BRAKEGND 3 #define CS_THRESHOLD 100 int inApin[2] = {7, 4}; // INA: Входные пины A int inBpin[2] = {8, 9}; // INB: Входные пины B int pwmpin[2] = {5, 6}; // Входные пины ШИМ int cspin[2] = {2, 3}; // CS: Аналоговый выход для измерения тока int enpin[2] = {0, 1}; // EN: Включение/выключение канала int statpin = 13; //Светодиод Arduino 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); } for (int i=0; i<2; i++) { digitalWrite(inApin[i], LOW); digitalWrite(inBpin[i], LOW); } } void loop() { motorGo(0, CW, 255); motorGo(1, CCW, 255); delay(500); motorGo(0, CCW, 255); motorGo(1, CW, 255); delay(500); if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD)) digitalWrite(statpin, HIGH); } 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); } void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) { if (motor <= 1) { if (direct <=4) { if (direct <=1) digitalWrite(inApin[motor], HIGH); else digitalWrite(inApin[motor], LOW); if ((direct==0)||(direct==2)) digitalWrite(inBpin[motor], HIGH); else digitalWrite(inBpin[motor], LOW); analogWrite(pwmpin[motor], pwm); } } }
Наверняка понадобятся
Метки: #Arduino #motor #shield