Розглянуті нами приклади програм працюють зі стандартним лінійним виходом звукової карти. Рівень вихідного напруги звукової карти може досягати 2 В при вихідному опорі від десятків до сотень Ом. Цей рівень сигналу розрахований на роботу з аудіоапаратурою різних виробників, причому підключення цієї апаратури осу ється стандартним кабелем (рис. 5.12).

Рис. 5.15

Вікно конструктора програми

Помістимо на нашу форму дві кнопки (Set Voltage і Stop), Однорядковий текстовий ре дактор TextBox і список вибору ListBox. Програма працює наступним чином: зі списку вибирається необхідний рівень вихідної напруги перетворювача, після чого слід натиснути кнопкуSet Voltage, Обробник якої програє відповідний ви бранному напрузі звуковий файл. Для програвання файлу в цьому ж обробнику за пускається окремий потік. Зупинити програвання можна, натиснувши кнопку Stop, Обработ чик натискання якої завершує потік.

Ось вихідний текст програми:

Imports   Microsoft.DirectX

Imports   Microsoft.DirectX.DirectSound

Imports   System.Threading.Thread

Public Class  Form1

Public device   As Microsoft.DirectX.DirectSound.Device Public  buf  As  Microsoft.DirectX.DirectSound.Buffer Public  threadStart As Threading.ThreadStart

Public thread1 As Threading.Thread

Public file0  As String = "i:\meandr1000.wav" Public file1  As String = "i:\meandr2000.wav" Public file2  As String = "i:\meandr3000.wav" Public file3  As String = "i:\meandr4000.wav" Public file4  As String = "i:\meandr5000.wav" Public file5  As String = "i:\meandr6000.wav" Public file6  As String = "i:\meandr7000.wav" Public file7  As String = "i:\meandr8000.wav" Public file8  As String = "i:\meandr9000.wav" Public file9  As String = "i:\meandr10000.wav"

Private Sub OnPlay_Click(ByVal  sender   As System.Object,  ByVal e  As

System.EventArgs)  Handles  OnPlay.Click

Dim  listIndex As Integer = ListBox1.SelectedIndex

TextBox1.Text  = ListBox1.SelectedItem.ToString

threadStart = New  Threading.ThreadStart(AddressOf  threadProc)

thread1 = New  Threading.Thread(threadStart)

Select Case listIndex

Case  0

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file0,  device) Case  1

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file1,  device)

Case  2

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file2,  device) Case  3

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file3,  device) Case  4

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file4,  device)

Case  5

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file5,  device) Case  6

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file6,  device) Case  7

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file7,  device)

Case  8

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file8,  device) Case  9

buf  = New  Microsoft.DirectX.DirectSound.Buffer(file9,  device) End Select

OnPlay.Enabled  = False

OnStop.Enabled  = True thread1.Start()

End Sub

Private Sub Form1_Load(ByVal  sender   As Object, ByVal e  As

ЕЛЕКТРОННІ ПРИСТРОЇ ДЛЯ РОБОТИ зі звуковою картою

System.EventArgs)  Handles  Me.Load

device   = New  Microsoft.DirectX.DirectSound.Device() device.SetCooperativeLevel(Me,  CooperativeLevel.Priority) OnStop.Enabled  = False

End Sub

Private Sub OnStop_Click(ByVal sender   As System.Object,  ByVal e  As

System.EventArgs)  Handles  OnStop.Click  thread1.Abort()

OnPlay.Enabled  = True

OnStop.Enabled  = False

End Sub

Public Sub  threadProc() While  (True)

buf.Play(0, BufferPlayFlags.Default) End While

End Sub

Private Sub Form1_FormClosed(ByVal  sender   As System.Object,  ByVal e

As System.Windows.Forms.FormClosedEventArgs)  Handles  MyBase.FormClosed thread1.Abort()

End Sub

End Class

Нагадаю, що при розробці програми необхідно додати посилання на простору імен Microsoft.DirecX і Microsoft.DirectX.DirectSound. Крім цього, необхідно Імпорт вать ці простори імен з допомогою директиви Imports.

Оскільки в цьому додатку використовується окремий потік, вторинний буфер buf мо

жет програватися в звичайному (не в циклічному!) режимі.

Для реалізації програмної частини перетворювача «частота напруга» можна вос

користуватися і функцією Beep, роботу якої ми проаналізували раніше.

Отримати постійну напругу змінної величини з звукового сигналу можна й іншим способом, перетворивши середнє значення рівня вихідної напруги звукової карти в постійну напругу на виходах перетворювача, реалізованого на широко поширеною мікросхемі індикатор напруги LM3915 в нестандартному вклю чении. Правда, в цьому випадку діапазон вихідних напруг буде обмежений 10 ю значення ми, але для багатьох додатків цього може виявитися цілком достатньо.

Схема перетворювача «амплітуда напруження» показана на рис. 5.16.

На транзисторі Q1 і D1 зібраний однополуперіодний детектор. Випрямлена напряже ня буде пропорційно рівню вхідного сигналу. Вихідний операційний підсилювач DA2 включений за схемою підсумовує підсилювача з інверсією.

На неінвертуючий вхід операційного підсилювача подається напруга зміщення Uп, яке повинно бути більше напруги живлення мікросхеми DA1 на 1 2 В. Якщо вибрати значення резисторів на виходах DA1 однаковими і рівними R, то вихідна напруга на виході операційного підсилювача DA2 буде визначатися формулою

Uвих = Uп × (1 + nRF / R) – (U1 + U2 + … + Un) × (RF / R),

де n – кількість задіяних виходів мікросхеми DA1.

Рис. 5.16

Схема перетворювача «амплітуда напруження»

Виходячи з цих міркувань, напруга живлення операційного підсилювача DA2 слід вибирати більше напруги живлення Uп. Значення резисторів R і RF можна вибрати в пре справах одиниць – десятків ом.

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

На основі цієї схеми можна розробити просту схему терморегуляції (рис. 5.17).

Рис. 5.17

Проста схема терморегуляції

У цій схемі в якості терморегулюючого елемента обраний терморезистор з отрица тільних температурним коефіцієнтом. При досягненні певної температури об’єктів та напруга на виході дільника RX – Rt стає менше напруги на неінвертуючий щем вході компаратора DA1.2, в результаті чого вихід компаратора перемикається в низ

кий рівень, який може управляти будь-якої навантаженням (наприклад, електронагріву

тільних пристроєм).

Дана схема дозволяє виконати налаштування терморегулятора як в ланцюзі дільника RX – Rt, так і в ланцюзі амплітудного детектора на мікросхемі LM3915 шляхом подачі на вхід схеми більшою чи меншою амплітуди сигналу з звукової карти. Всі номінали резисторів в цій, як і в попередній схемі, вибираються виходячи з налаштувань вашої системи, і ніякої складності цей процес не становить.

Замість мікросхеми LM3915 можна з успіхом використовувати два учетверенной Компарії тора, наприклад, LM324, встановивши на їх входах (инвертирующих або неінвертуючий) соот ветствующие напруги зсуву, які слід підбирати експериментально. Якщо немає компаратора, то можна використовувати операційні підсилювачі загального призначення, наприклад заходів, LM358, LF451 і т. д.

прецизійну схему терморегулятора можна побудувати на базі схеми, показаної на рис. 5.13 (якщо у вас є мікросхема LM131/LM231/LM331). Вона може забезпечити дуже точне регулювання температури, яка буде залежати тільки від точності викорис зуемих термодатчика. Розглянемо схему прецизійного терморегулятора (рис. 5.18).

Рис. 5.18

Схема прецизійного регулятора температури

Тут напруга на вході компаратора DA2 прямо пропорційно частоті сигналу на виході звукової карти, тому можна ставити регульовану температуру об’єкта безпосередньо з вашого застосування. В цьому випадку необхідно вказати залежність (по формулі або у вигляді таблиці) температури від частоти. Це не дуже складно, враховуючи те, що перетворювач «частота напруга» на мікросхемі LM331 виконує більшу частину роботи за вас, тому досить прив’язати вихідна напруга перетворювач ля до напруги на дільнику RX-Rt, що праці не представляє. Можна ще більше поліпшити характеристики схеми, встановивши коригуючий резистор паралельно з терморезистор

Джерело: Магда Ю. С. Комп’ютер в домашній лабораторії. – М.: ДМК Пресс, 2008. – 200 с.: Іл.