Добавить в цитаты Настройки чтения

Страница 172 из 372

Пределы регулирования выходного напряжения — 1,3…33 В

Коэффициент нестабильности по напряжению +/- 0,002 — по току +/- 0,01

Относительный температурный коэф-т выходного напряжения +/- 0,05 %/С°

Ток короткого замыкания — не более 150…450 мА

Предельное входное напряжение — 4…40 В

Предельный выходной ток — 150 мА

Предельная рассеиваемая мощность в диапазоне температур -25…+25 С° — 1 Вт

Входное напряжение должно быть больше выходного, по крайней мере, на 3 вольта!

На рис. 1 даны схемы простых стабилизаторов напряжения. Схемы а)…е) используют внутренний делитель в цепи усилителя рассогласования, а на схемах ж) из) показано, как изменить выходное напряжение в небольших пределах при помощи резистора, шунтирующего одно из плеч делителя.

Рис. 1. Стабилизаторы с фиксированным выходным напряжением.

На рис. 2 дана схема стабилизатора с регулировкой выходного напряжения и дополнительной термокомпенсацией в цепи усилителя рассогласования. Здесь один из внутренних транзисторов микросхемы используется как датчик температуры, воздействующий через резистор на вход усилителя. Степень компенсации зависит от сопротивления резистора. Эмиттерный повторитель позволяет разгрузить микросхему по току, что уже само по себе улучшает термостабильность.

Рис. 2. Стабилизатор с регулировкой выходного напряжения и дополнительной термокомпенсацией.

На рис. 3 приведена схема лабораторного блока питания с защитой от перегрузки. Подбором резистора R3 устанавливается ток ограничения при коротком замыкании на выходе стабилизатора (1…1,5 А).

Рис. 3. Схема лабораторного блока питания на основе ИМС К157ХП2.

ПРОГРАММИРОВАНИЕ

Технологии компонентного программирования

Добрынин В.

Процедурное, объектно-ориентированное и компонентное программирование

Процедурное программирование

Цель данного раздела состоит в демонстрации некоторых недостатков технологии процедурного программирования.

Рассмотрим программу на C++, в которой используется технология процедурного программирования. Пользователь вводит информацию о некотором множестве книг и журналов. Для книги это автор, название, год издания. Дня журнала — название, год и номер. Далее эти данные могут как-то обрабатываться. Например, информация о каждом издании может быть представлена в стиле, принятом в определенном издательстве и определяющем порядок полей, шрифты, разделители и т. п. В данном случае никакой обработки введенных данных не производится, и они просто выводятся на терминал по окончании ввода всех данных.

// Книги и журналы (процедурное программирование)

#include <iostream.h>

#include <string.h>

#define MAX LENGTH 100 // максимальное число символов в имени

// автора или в названии издания

#define MAX ID 100 // максимальное число изданий

// Книга

typedef struct {

     char szAuthor[MAX_LENGTH]; // автор

     char szTitle[MAX_LENGTH]; // название

     int nYear; // год издания

} Book;

// Журнал

typedef struct {

     char szTitle[MAX LENGTH]; // название

     int nYear; // год выпуска

     int nNumber// номер;

} Journal;

// Массив изданий

typedef struct {

      int nPubldx; // индекс издания (1 — книга, 2 — журнал)

      void* pPub; // указатель на издание

} Pub;

Pub aPub[MAX ID];

int nNewID = 0; // индекс нового издания

// Прототипы глобальных функций

void DisplayBook(Book &book); // вывод описания книги

void DisplayJournal(Journal Sjournal); // вывод описания журнала

void NewBook(); // ввод данных о новой книге

void NewJournal; // ввод данных о новом журнале

// Главная функция

void main() {

     Book *pBook;

     Journal *pJournal;

     int nMenu, flag = 1;

     while(nNewID < MAX_ID && flag)

     {

// Вывод пунктов меню





          cout << "Новое издание. Введите: " << endl;

          cout << "1 для книги,n 2 для журналаn 3 — выход" << endl;

// Выбор пункта меню

         сin >> nMenu;

         switch (nMenu)

         { case 1: NewBook(); break;

         case 2: NewJournal(); break;

         default: flag = 0; break;

         }

     }

// Вывод описаний изданий

     for (int id = 0; id < nNewID; id++)

     {

         switch (aPub[id].nPubldx)

         { case 1: pBook = (Book*) aPub[id].pPub;

                  DisplayBook(*pBook);

                  delete pBook;

                  break;

            case 2: pJournal = (Journal*) aPub[id].pPub;

                   DisplayJournal(*pJournal);

                   delete pJournal;

                   break;

           }

      }

}

// Реализация глобальных функций

void DisplayBook(Book &book) {

     cout << "BOOK: " << endl;

     cout << "Author: " << book.szAuthor << endl;

     cout << "Title: " << book.szTitle << endl;

     cout << "Year: " << book.nYear << endl;

}

void DisplayJournal(Journal Sjournal) {

     cout «"JOURNAL: " << endl;

     cout <<"Title: " << journal.szTitle << endl;

     cout << "Year: " << journal.nYear << endl;

     cout << "Number: " << journal.nNumber << endl;

}

void NewBook() {

     char szBuffer[MAX LENGTH];

     int nY;

     Book* pBook = new Book;

     cout << "Author: ";

     cin >> szBuffer;

     strcpy(pBook —> szAuthor, szBuffer);

     cout << "Title: ";

     cin >> szBuffer;

     strcpy(pBook — > szTitle, szBuffer);

     cout << "Year: "; cin >> nY;

     pBook —> nYear = nY;

     aPub[nNewID].nPubldx = 1;

     aPub[nNewID++].pPub = pBook;

}

     void NewJournal() {

     char szBuffer[MAX_LENGTH];

     int nY, nN;

      Journal* pJournal = new Journal;

      cout << "Title: ";

      cin >> szBuffer;

      strcpy(pJournal —> szTitle, szBuffer);

      cout << "Year: "; cin >> nY;