BD7905FS, управление биполярным шаговым двигателем

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт авг 04, 2015 20:09:56

Сообщение AZLK-2140 »

Вечер добрый, господа!
Имеется древний CD-ROM, а в нем микросхема BD7905FS, которая, помимо всего прочего, умеет управлять биполярным ШД. Имеется к ней даташит (см.вложение), который я читал, но так и не понял, каким должен быть входной сигнал (SLIN1 и SLIN2), управляющий силовыми ключами. Пробовал кратковременно подать туда постоянку 3,3В, 5В, Gnd - никакого движения не наблюдалось. Фрагмент обвязки микросхемы приведен на картинке.

Изображение

Какой сигнал приходит с ЦПУ - неизвестно. Так же открытым остается вопрос о частоте этого сигнала - нужно ли ее подгонять под внутреннюю частоту микросхемы, или нет.

Буду признателен, если пнете в нужном направлении!
Вложения
BD7905bFS.pdf
BD7905FS datasheet
(202.31 КБ) 330 скачиваний
Реклама
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт авг 04, 2015 20:09:56

Сообщение AZLK-2140 »

Немного поэкспериментировав, пришел к следующим выводам:
- на вход можно подавать любой сигнал, изменяющийся относительно напряжения "средней точки", которое подается на 27-ую ногу микросхемы
- частота входного сигнала никак не связана с внутренней частотой м/с.

Состояния выходов в зависимости от состояния входов:

Изображение

Чтобы двигатель "шагал", надо соблюдать следующее неравенство: "-" < "0" < "+", например: Gnd < 1.6...3.3v < Vcc

Ну и пример реализации вышеизложенного в формате Arduino IDE:

Код: Выделить всё

int In[2] = {9, 10};    //Массив пинов, к которым подключены In1 и In2
int LastIn = 0;
bool LastState = 0;    //Напряжение, которое подавалось на обмотки в прошлый раз

void setup() {

  pinMode(In[0], INPUT);
  pinMode(In[1], INPUT);

}

void Step(int StepNumber, int Direction){   //Функция шагания

  LastIn = Direction;   //Направление шага зависит от того, какой вход использовать первым
  
  for (int i=1; i<=StepNumber; i++){

    pinMode(In[LastIn], OUTPUT);          //Выбираем контакт In в соответсвии с направлением движения, переводим в состояние "Выход"
    digitalWrite(In[LastIn], LastState);  //Соединяем выбранный пин либо с Gnd, либо с Vcc (резисторы на 5-10 кОм не помешают)
    delay(10);                            //Ждем. Время ожидания определяет общую скорость шагания  
    pinMode(In[LastIn], INPUT);           //Переводим выбранный пин в высокоомное состояние ("Вход")

    if (!(i%2)) LastState = !LastState;   //Если сделано четное число шагов, то меняем полярность

    LastIn = !LastIn;                     //После каждого шага выбираем другой вход
    
  }

  return;
    
}

void loop() {

  Step(50, 0);    //Сделать 50 шагов в одном направлении
  delay(1000);
  
  Step(50, 1);    //Сделать 50 шагов в обратном направлении
  delay(1000);

}
В примере In1 и In2 микросхемы цепляются к 8 и 9 пинам ардуины через резисторы 5-10 кОм.
Реклама
Ответить

Вернуться в «Теория»