Пример управления БП ATX

Nikolay O. Zabrodotskiy edited this page Oct 13, 2017 · 1 revision

Из ARCAdaptor можно собрать простую схему управления БП ATX.

Такие БП часто применяются в радиолюбительской практике. Действительно, они надёжные, мощные и стабильные. Чтобы включить ATX БП - достаточно соединить зеленый провод разъёма с "землей", то есть выдать на него сигнал "низкого" уровня. Это, собственно и делают, если нужно проверить работоспособность блока питания. Однако, мы пойдём немного дальше, и сделаем немного более интеллектуальный "драйвер", который будет питаться от сигнала +5VSB (он есть всегда, когда к ATX подведен переменный ток из розетки), "утягивать" сигнал PSON в низкий уровень, а также отслеживать признак того, что БП в порядке и сигнал POK (Power OK или Power Good) имеется.

Итак, назначения сигналов:

  • Зеленый провод - PSON
  • Фиолетовый провод - +5VSB
  • Серый провод - PGOOD (Power OK)

ATX драйвер

Наша схема после подачи питания на ARCAdaptor будет:

  • Приветственно моргать лампочкой
  • Включать ATX
  • Отслеживать наличие сигнала Power Good, а если он вдруг "пропадёт" - экстренно выключать БП.

На схеме помимо резистора для светодиода есть ещё пара - это ограничители тока. Нужно ставить 1..1.5K. Питать схему нужно через разъемы X3-9 и X3-10 - ибо устройство у нас "автономное", не требующее USB подключения к компьютеру (по крайней мере, в базовом варианте). Ну и не забыть подключить "землю" от ATX (черные провода).

Собственно, код. Подразумевается что используется Arduino IDE.

#include "ARCAdaptor.h"
#define LED X1_1 //PIN13 Arduino (SCK)
#define PGOOD X3_1 //PIN3 Arduino (PD3)
#define PSON X1_5 //PIN14 Arduino (PC0)
#define STARTUP 100

bool bNormalOperation;
void setup()
{
  bNormalOperation = true; //Устанавливаем признак того, что БП функционирует штатно.
  pinMode(LED, OUTPUT); //Устанавливаем режим контактов

  pinMode(PSON,OUTPUT); 
  pinMode(PGOOD,INPUT);
 
 
  digitalWrite(LED, HIGH); //Включаем светодиод индикации
  stopATX(); //Для определенности - выключаем ATX при подаче питания или сбросе.

  for(int i=0;i<3;i++) //Приветственно "поморгаем" светодиодом
  {
    digitalWrite(LED,LOW);
    delay(STARTUP);
    digitalWrite(LED,HIGH);
    delay(STARTUP);
  }
  
  startATX(); //Стартуем ATX

  doStartupSequence(); //Тут можно выполнить полезную работу 
                       // - например скоммутировать реле, подключенное к другим контактам ARCAdaptor

}
void startATX()
{
  digitalWrite(PSON,LOW); // "Зелёный" провод на низкий уровень для включения
  while(!isPowerGood()) // Ждём, пока не появился сигнал PowerGood
  {
    digitalWrite(LED,LOW); 
  }
}
void stopATX() //остановка ATX
{
  digitalWrite(PSON,HIGH);
}
bool isPowerGood() //Функция возвращает TRUE или FALSE,
                    // в зависимости от того, какой сигнал на контакте PowerOK.
{
  
  if (digitalRead(PGOOD) == HIGH )
  {
     return true;
  }
  else
  {
    return false;
  }

    
}
void doStartupSequence()
{
   // В этой функции можно сделать что-то полезное 
   // с другими контактами ARCAdaptor, она вызывается после включения ATX.
}

void loop()
{
  if(!isPowerGood())
  {
    stopATX(); //Останавливаем ATX
    bNormalOperation = false; //Снимаем признак "нормальная работа"
  }
 
  if (bNormalOperation) {
    digitalWrite(LED,HIGH); //Светим светодиодом, если всё ок
  }
  else
  {
     digitalWrite(LED,LOW); //Выключаем светодиод, если что-то пошло не так
  }
  
}

Вот вроде бы и всё - теперь при включении в сеть ATX включит сигнал +5VSB, он запитает ARCAdaptor, схема запустится. В случае сброса схемы - выполнение пойдет сначала, то есть ATX БП будет выключен, потом включен. В случае, если сигнал PowerOK не будет иметь высокий уровень (например ATX БП не может выдать все нужные напряжения) - схема либо не включится (останется ждать сигнала), либо сразу выключится (если Power OK был, но вдруг пропал).

Возможно, имеет смысл подтянуть сигнал X3-1 к земле, чтобы добавить стабильности в работе - в случае обрыва или некорректного значения там будет стабильный "0". Делать это нужно через резистор, значение подбирать экспериментально, начинать примерно с 1K.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.