Не работает регистр TPIC6B595

nant34
Offline
Зарегистрирован: 22.05.2018
//Пин подключен к ST_CP входу 74HC595
int latchPin = 8;
//Пин подключен к SH_CP входу 74HC595
int clockPin = 12;
//Пин подключен к DS входу 74HC595
int dataPin = 11;
 
 
 
void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
}
 
void loop() {
 
   
    digitalWrite(latchPin, LOW);
    // передаем последовательно на dataPin
    shiftOut(dataPin, clockPin, MSBFIRST, B01010101); 
 
    //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    digitalWrite(latchPin, HIGH);
    // пауза перед следующей итерацией
    delay(5000);
  }

 

nant34
Offline
Зарегистрирован: 22.05.2018

Добрый день. Не могу заставить работать сдвиговый регистр TPIC6B595. Пробный код указан выше. с тем что должна работать тоже отказывается. На выходе регистра хаотичные значения милливольт. Подпаял на проводах к ардуине, дабы не было проблем из-за бредборда. Помогите , пожалуста. 

Да. Вывод G ( OE у 74HC595) подтянул к земле,  SRCLR ( MR ) к +5в.

bizzon
Offline
Зарегистрирован: 29.03.2016

У него выходы открытые, то есть без подтяжки к плюсу напряжения на них не будет. Вместо логической единицы мы имеем замыкание выхода на массу.

nant34
Offline
Зарегистрирован: 22.05.2018

Спасибо, сразу не обратил внимания. Я увидел рисунок в виде сборки двух полевых транзисторов. Подумал - ага, можно будет вместо Н моста использовать (мне нужно управлять бистабильными реле , у них требуется менять полярность). Но получается , что это по сути своей простой полевой N канальный транзистор, подключающий нагрузку к земле. Правильно я понимаю? 

bizzon
Offline
Зарегистрирован: 29.03.2016

Ну да. Это как 595 регистр+uln2003 в одном корпусе.

nant34
Offline
Зарегистрирован: 22.05.2018

Еще вопрос. Можно ли использовать схему как на рисунке?  Ведь мне требуется, чтобы один выход регистра был землей, другой +5в, только по току нужно примерно 70 ма, а это обеспечат полевые транзисторы логического уровня. 

nant34
Offline
Зарегистрирован: 22.05.2018

bizzon пишет:

Ну да. Это как 595 регистр+uln2003 в одном корпусе.

Биззон, не подскажете тогда, можно ли применить две 74HC595 параллельно, то есть каждый выход одной вместе с выходом другой, данные будут по отдельным линиям, а защелка общей?

bizzon
Offline
Зарегистрирован: 29.03.2016

Если данные одинаковы и синхронны- то ничего не мешает. Но это не наш метод. Схему выше пользуют все и вся. Она правильная. Резисторы можно вообще выкинуть, если на выходах регистров не будет третьего состояния(между истоком и затвором). Да и к затвору нет большой необходимости в резисторах.

nant34
Offline
Зарегистрирован: 22.05.2018

Большое спасибо!

nant34
Offline
Зарегистрирован: 22.05.2018

Уже голову сломал. Мне нужно управлять бистабильными реле ( у них в зависимости от полярности подключения определенным образом замыкаются контакты). То есть мне нужно, чтобы на одном выходе могла бы быть и земля и +5 вольт. Ток по одной такой линии будет 20 мА. И вроде бы 74НС595 подходит, но у меня таких выхдов должно быть 6 , то есть общий ток , проходящий через микросхему доходит до 120 мА. Я думал, что TPIC6B595 выход, но нет. Теперь думаю, может делать на одном регистре и к нему несколько Н-мостов (нашел как называется). Но тогда  схема не совсем надежна, так как возможен сквозной ток, когда оба транзисторы будут приоткрыты. Еще как вариант можно использовать 2 штуки 74нс595 , с каждой по три вывода и тогда по току впритык, но получается. Не могли бы подкинуть еще идей?

nant34
Offline
Зарегистрирован: 22.05.2018

bizzon, подскажите, пожалуйста. Интересно ваше мнение.

bizzon
Offline
Зарегистрирован: 29.03.2016

Ставьте транзисторы. Не бойтесь сквозных токов. С вашей частотой переключения вы их не заметите. Если опасаетесь насчёт надёжности, проставьте токоограничительный резистор между плюсом и транзисторами. Ом пятьдесят. Даже если всё там у вас коротнёт, больше ста милиампер не потечёт.Можно и регистры запараллелить, тогда ещё диоды нужны для защиты выходов- по 2 на выход. Некрасиво и в плане надёжности есть сомнения. И сквозные токи внутри регистра тоже никто не отменял:)

nant34
Offline
Зарегистрирован: 22.05.2018

Хорошо. Подтягивающие резисторы на затворы ставить? Высокоомное состояние не планирую использовать, в принципе будет работать, но хочется понадежней. Токоограничивающие в затвор ставить не буду, все таки полевики легонькие. Планирую эти ( ZXMHC3F381N8 ) использовать: н-мост в so-8. удобно. 

bizzon
Offline
Зарегистрирован: 29.03.2016

Да не нужны подтягивающие. На выходе регистра и так напряжения хватает.

 

nant34
Offline
Зарегистрирован: 22.05.2018

Теперь будем пробовать. Будет теперь регулятор громкости на реле) Благодарю за помощь!

bizzon
Offline
Зарегистрирован: 29.03.2016

А что за реле- то? Им для удержания ток через обмотку нужен? Если нет, то и регистры ваши сгодятся, и мост городить не надо.

nant34
Offline
Зарегистрирован: 22.05.2018

Реле IM43GR . Ток через обмотку не нужен, только импульсы 15 -20 мс. В зависимости от полярности они перещелкивают контактную группу. Ток обмотки 20 мА, но у меня ведь 6 таких, и в некоторых режимах они должны будут одновременно щелкнуть, то есть ток до 120 мА. А в даташите на 74595 написано, что общий ток питающих выводов не должен быть больше 75 мА. Поэтому и извращаться приходится.

bizzon
Offline
Зарегистрирован: 29.03.2016

Ну так включайте реле между выходами TPIC6B595, выходы подтяните ом через 50 к плюсу. Получится почти мост. На одном выходе масса- одна полярность на обмотке, на другом - другая.

nant34
Offline
Зарегистрирован: 22.05.2018

Через 75 Ом пробовал, не вышло. Можно попробовать уменьшить номинал, да резистор помощнее.  Ну и нагрев будет приличный в этом случае

bizzon
Offline
Зарегистрирован: 29.03.2016

Так импульсы же.. Ну можно вместо резистора P канальные транзисторы крест-накрест затворами к выходам регистра через резистор. Это уже полноценный мост. Но выходы к плюсу всё равно подтягивать.

nant34
Offline
Зарегистрирован: 22.05.2018

Тогда проще 74hc595  с транзисторами в обвесе

bizzon
Offline
Зарегистрирован: 29.03.2016

Удачи! У меня есть много блинкерных панелей от автобусов- там тема аналогичная. Выбросить жалко. Сименс всё-таки. Документации не найти. А какой размер! Для моего зрения в самый раз. И жёлтые. видно даже ночью. И там стоят обычные 74 регистры,а за ними сборки восьминогие из p и n полевиков. Без всяких резисторов.Хотел проверить, посмотреть, а жена навела порядок. НУ Я НЕ ЗНАЮ, КУДА ОНА ПЛАТУ С КЛЮЧАМИ СПРЯТАЛА!  А она - тебе надо, ты и ищи. С ключами в смысле с элементами,которые панелью управляют.

nant34
Offline
Зарегистрирован: 22.05.2018

Ну раз завод так делает, то и нам можно:) Спасибо!

Logik
Offline
Зарегистрирован: 05.08.2014

nant34 пишет:

Реле IM43GR . Ток через обмотку не нужен, только импульсы 15 -20 мс. В зависимости от полярности они перещелкивают контактную группу. Ток обмотки 20 мА, но у меня ведь 6 таких, и в некоторых режимах они должны будут одновременно щелкнуть, то есть ток до 120 мА. А в даташите на 74595 написано, что общий ток питающих выводов не должен быть больше 75 мА. Поэтому и извращаться приходится.

У Вас же регулировка громкости вроде? Так переключайте реле не совсем одновременно, а по очереди. Получится все 6 переключить за 120мсек, а ток не превысит нормальный. Соответственно просто на 2-х 74595 подключите до 8 реле, без транзисторов и гемороя, а то что громкость изменится не за 20мсек а за 120 скорей всего и не заметите.

nant34
Offline
Зарегистрирован: 22.05.2018

Можно и в два захода по три штуки переключить.  Но я как делаю. У меня 6 сборок p и n канальных, каждая на свое реле. А 7 сборка - это как общий провод - соединяет другую сторону реле. Меняя полярность - переключаем реле. Как переключил все реле, открываются n канальные транзисторы и на всех проводниках земля, потенциала нет, реле не срабатывают. Получается, что я переодически должен выключить все реле и только потом включить определенные. Минус, конечно, но задержка в 30-40 мс думаю не заметна будет.  Можно было бы и с TPIC сделать, только на обычных реле, где одно состояние без подачи напряжения на катушку, другое со включеной катушкой. Но возможны наводки на звуковые цепи и щелчки в акустике. 

nant34
Offline
Зарегистрирован: 22.05.2018

Снова здравствуйте. Собрал схему сдвиговый регистр + полевики в мост. Безрезисторов. Работает как надо, ничего не вылетает, не греется. Фото прилагаю. Но появилась уже программная проблема.Надеюсь , если здесь задам ничего страшного не будет. Суть в чем: перед переключением реле как мне нужно, я должен вернуть их в исходное (отключенное состояние), после этого подавать импульсы на определенные реле. То есть подаю напряжение, жду прим. 20мс, потом убираю потенциал. Ну не получается у меня с помощью функции millis() добиться такого. Для одного случая работает, для последовательных двух уже нет. Код прилагаю. Выделил основное. Получается не работает конмтрукция , что в цикле loop. Как сделать так, чтобы несколько раз использовать задержку в коде? надеюсь более менее объянил)

#define st_pin 7
#define sh_pin 8
#define ds_pin 6
unsigned long currentTime; // Переменнная для хранения значения миллис
unsigned long loopTime;   // Переменнная сравнения с currentTime

void setup()
{  pinMode(st_pin, OUTPUT);
  pinMode(sh_pin, OUTPUT);
  pinMode(ds_pin, OUTPUT);

  currentTime = millis();       // считываем время, прошедшее с момента запуска программы
  loopTime = currentTime;      // считываем время, прошедшее с момента запуска программы
}

void loop()
{
   if (flagCW) {                           // Шаг вращения по часовой стрелке
    Relay[R++];                           // Ведем счет элемента из массива исходя из данных с энкодера

    digitalWrite (st_pin, LOW);                //  сбрасываем все реле
    shiftOut(ds_pin, sh_pin, LSBFIRST, RESET[0]);   //
    digitalWrite (st_pin, HIGH);               //

    currentTime = millis();                    // считываем время, прошедшее с момента запуска программы
    if (currentTime >= (loopTime + 20)) {
      digitalWrite (st_pin, LOW);                // Готовим регистр к приему данных
      shiftOut(ds_pin, sh_pin, LSBFIRST, Relay[R]);   // Передаем данные на регистр
      digitalWrite (st_pin, HIGH);               // Сохраняем полученные данные в регистре
      loopTime = currentTime;
    }
    currentTime = millis();
    if (currentTime >= (loopTime + 20)) {

      digitalWrite (st_pin, LOW);                // Готовим регистр к приему данных
      shiftOut(ds_pin, sh_pin, LSBFIRST, Wait[0]);   // Передаем данные на регистр
      digitalWrite (st_pin, HIGH);               // Сохраняем полученные данные в регистре
      loopTime = currentTime;

    }
       flagCW = false;                       
  }