DR3
Рис 3.10. Електрична схема дільника напруги
Вихідна напруга дільника рівна:
,
де Rc – загальний опір резисторів і діодів, Ud – напруга регістрів DR0 – DR3, U_DR – напруга на виході ЦАП.
3.2 Розробка друкованої плати
Система Protel 99 SE має потужний інструмент синхронізації, який полегшує передачу даних з етапу проектування принципової електричної схеми в редактор друкованих плат і навпаки.
Синхронізатор автоматично отримує інформацію про компонент і параметри звязків з принципової схеми , знаходить відповідному компоненту топологічні посадочні місця в бібліотеці елементів друкованих плат і розміщує їх на кресленні друкованої плати, а потім додає лінії зв’язків між з’єднаними виводами компонентів.
3.3 Розробка збірного креслення
Компоновка пристрою - одна із найбільш складних задач конструювання. Ручний процес компоновки радіодеталей та допоміжних перемикачів, ручок регулювання, гнізд займає багато часу, оскільки приходиться розглядати декілька можливих варіантів і вибрати оптимальний для заданих умов застосування приладу і процесу його виробництва. Під час компоновки приладу потрібно враховувати склад елеменої бази, зручність у користуванні, забезпечення високої ремонтопридатності і безпеки від зовнішніх впливів і внутрішніх дестабілізуючих факторів.
Компоновка дозволяє провести оцінку електромагнітних і теплових зв¢язків, розрахувати кінематичні зв¢язки, оцінити основні конструкторсько-технологічні рішення і розрахувати основні показники якості конструкції. За результатами компоновки складається компоновочна схема - збірне креслення.
4. РОЗРОБКА ПРОГРАМНОГО ЗАБЕСПЕЧЕННЯ
4.1 Алгоритм керування
Для роботи розробленого пристрою необхідно, щоб на 4 входи пристрою DR подавалися сигнали (5 або 0 В). Завдяки певним комбінаціям сигналів на ЦАП утворюється різна напруга. Кількість комбінацій сигналу, який може перебувати в двох станах вираховується за формулою:
,
де k – кількість комбінацій, m – кількість станів сигналу, n – розрядність сигналу.
Одже сигнал може перебувати в двох станах 0 або 5 В. Розрядність рівна 4. Отже кількість різних комбінацій буде рівна кількості різних напруг, які зможе сформувати ЦАП, рівна:
.
Необхідно також, щоб на 4 входи пристрою CR також подавались сигнали аналогічно як і на DR. Це необхідно тому, що в пристрої передбачена можливість працювати в режимі тестування, коли подається наперед відома напруга для визначених комбінацій сигналу.
Крім того, в алгоритмі керування необхідно не тільки посилати дані на пристрій, а й зчитувати їх. Зчитати потрібно сигнал з виходу компаратора, який повідомить що U_DR>Uвх. Після одержання від компаратора сигналу потрібно припинити формування комбінацій сигналу на вхід ЦАП, а сформовану комбінацію прийняти за цифровий код напруги Uвх.
4.2 Обгрунтування вибору програмних засобів
В якості операційної системи вибрана система Windows XP сімейства Windows NT. Це аргументовано тим, що Windows найбільш розповсюджена і доступна, а також досить легка у користуванні.
В якості середовища програмування використано Delphі. Середовище Delphі включає в себе повний набір візуальних інструментів для швидкої розробки додатків (RAD – Rapid Application Development), що дозволяє виконати розробку інтерфейсу користувача, який задовольняє всім вимогам замовника. VCL – бібліотека візуальних компонентів, включає в себе стандартні об’єкти побудови інтерфейсу користувача, об’єкти керування даними, графічні об’єкти, об’єкти мультимедіа, діалоги і об’єкти керування файлами, керування DDE і OLE.
Інтегроване середовище програмування Delphі володіє всіма необхідними параметрами, які притаманні іншим системам даного класу:
- візуальна побудова інтерфейсів (Vіsual User-іnterface buіlder) дає можливість швидко створювати додатки візуально, просто обираючи компоненти з відповідної палітри;
- Delphі повністю підтримує такі програмні концепції як інкапсуляція, наслідування, поліморфізм та керування подіями;
Перевагами середовища Delphі в порівнянні з іншими аналогічними засобами розробки програм є значно простіше його використання, що дозволяє виконувати подальшу модернізацію програми іншими програмістами з мінімальними витратами часу на дослідження синтаксичних та логічних особливостей даної програми. Окрім цього, Delphі володіє досить великим об’ємом документації, як створеної розробниками Delphі, так і сторонніми виробниками, що значно полегшує розробку програм. Отже, за співвідноенням можливості-простота-ціна та враховуючи побажання замовників до мови програмування, інтегроване середовище програмування Delphі є оптимальним вибором для вирішення поставленої задачі.
Для роботи з LPT-портом використовується DLL-бібліотека IO.dll стороннього виробника, яка дозволяє працювати з портами. З даної бібліотеки використовується дві функції та одна процедура. Функція IsDriverInstalled : Boolean повертає TRUE у разі успішної установки драйвера LPT-порта. Функція PortIn(Port : Word) : Byte зчитує дані з порта по вказаній адресі, яка задається значенням змінної Port. Процедура PortOut(Port : Word; Data : Byte) записує в порт один байт, який вказується в змінній Data за адресою порта Port.
4.3 Програма керування АЦП
Загальний вигляд головної форми програми представлено на рис.
Рис.4.1. Екранна форма програми керування АЦП
Кнопка Write_DR дозволяє записувати в порт принтера стан чотирьох бітів регістру DR (біти DR0, DR1, DR2, DR3).
Кнопка Read_SRзчитує з порта принтера значення регітру SR(біт SR3).
Кнопка Write_СR дозволяє записувати в порт принтера стан чотирьох бітів регістру DR (біти СR0, СR1, СR2, СR3).
Кнопка In_Uперетворює напругу, яка подається на плату у двійковий код DR0 – DR3.
Кнопка Out_Uзаписує у порт двійковий код, який відповідає введеній на формі напрузі.
За допомогою кнопки Diagram зчитується напруга QI разів і отримане значення будується у вигляді графіка. Проміжок часу між зчитуванням рівний Time_Discret (Додаток Б).
4.3.1 Процедура обрахунку напруги за її двійковим представленням
Процедура p_Init_U встановлює звязок між напругою Ur і двійковою комбінацією, яка буде передана на LPT-порт, а далі в ЦАП, і з якої ЦАП сформує напругу Ur.
p_Init_U – процедура без параметрів. В процедурі оголошено пять змінних: nDr та bOut типу Integer, Rc1,Rc,Ur типу Real.
Тіло процедури починається з циклу, де bOut міняється від 0 до qB. Глобальна змінна qB приймає значення 15. В циклі виконуються наступні дії:
- процедура Trans_bOut_mDR(bOut) перетворює bOut з десяткової системи числення в двійкову і записує порозрядно в масив mDR[], який є глобальним для всьго модуля;
- змінній Rc1 присвоюєм значення 0;
- відкриваєм цикл, де nDR міняється від 0 до qDR. Глобальна змінна qDR приймає значення 3. В цьому циклі змінній Rc1 присвоюємо значення Rc1:=Rc1+(1/(mR[nDr]+Rdiod))*mDR[nDr], де mR[i] – масив значень, елементи якого відповідають реальним значення опорів 4-х резисторів ЦАП. Rdiod – змінна, значення якої рівне значеню опору діодів, що підключені до резисторів послідовно. Отже з законом Ома загальний опір при паралельному включенні n опорів, буде рівний:
.
Доданок (1/(mR[nDr]+Rdiod)) множиться на елемент масиву mR[i], що приймає двійкове значення 0 чи 1. Тобто, якщо в двійковій комбінації певний розряд рівний 0, то струм не протікає, а отже і не враховується при обчисленні опору. Одже, в даному циклі обраховується обернена величина до опору Rc;
- змінній Rc, що відповідає опору Rc присвоюєм значення 0. Перевіряється, чи значення Rc1 більше 0, тоді Rc присвоюємо 1/Rc1. Значення 1/Rc1 рівне значенню опору при паралельному включені;
- для обрахування напруги на виході ЦАП при поданні відповідних двійкових комбінацій на вхід неохідно також врахувати значення опору Rz. Змінна Rz буде рівна цьому опору. Напруга Uz на виході ЦАП буде обчислена в процедурі наступним чином U_DR=(Rz/(Rz+Rc))*U_A. Змінна U_A рівна значенню напруги, що подається на вхід дільника (3.7 В).
- Значення обрахованої напруги Ur на виході ЦАП запишеться у масив mUr[bOut] (таблиця 4.1).
4.3.2 Процедура DR P_Write_DR
Процедура P_Write_DR записує байт даних в регістр DR.
P_Write_DR – процедура без параметрів. В процедурі оголошено три змінних: bOut типу byte, pDr,nDR типу integer.
Змінній bout привласнюєм спочатку 0, pDr – 1. В циклі з масиву mDR[i] з 4-х молодших розрядів формуємо десяткове число, яке потрібно записати в регістр DR( bout:=bOut+mDR[nDR]*pDr; pDr:=pDr*2;).
За тілом циклу записуємо в регістр DR десяткове число, що знаходиться в змінній bout. Для запису використовується процедура PortOut(Adr,bOut) з бібліотеки IO.dll. Ця процедура записує байт даних bOut в порт за адресою Adr. В даному випадку Adr рівне $378.
4.3.3 Процедура P_Write_CR
P_Write_CR аналогічна процедурі P_Write_DR, але дані беруться не з масиву mDR, а з масиву mCR. Дані з масиву mCR інвертуються, крім 2-го елементу масиву і записуються в масив mCR1. Надалі в процедурі відбуваються аналогічні дії як в процедурі P_Write_DR. При цьому використовується не масив mDR, а mCR1. Також в процедурі PortOut(Adr,bOut) параметр Adr прийме інше значення.
4.3.4 Процедура читання P_Read_SR
Процедура читає дані з регістру SR, використовуючи функцію PortIn(Adr) зовнішньої бібліотеки IO.dll. Функція PortIn(Adr) читає байт даних з LPT-порта за адресою Adr і записує в змінну b. Значення b записується в регістр al. Виконується обнулення всіх бітів крім 4-го біта. Одержаний результат записується в елемент масиву mSR[3].
4.3.5 Процедура B_In
В циклі у порт записується значення змінної bOutвід мінімального значення 0 до максимального 15. Якщо зчитаний сигналSR[3]=0, то це означає, що напруга з ЦАП більша за вхідну. В такому випадку вхідній напрузі буде відповідати цифрове значення bOut, або в двійковому вигляді масив бітів mDR(Рис 4.2., Додаток В).
Рис 4.2. Алгоритм програми керування
Таблиця 4.1
DR3 |
DR2 |
DR1 |
DR0 |
U_DR, В |
0 |
0 |
0 |
0 |
0,06 |
0 |
0 |
0 |
1 |
0,72 |
0 |
0 |
1 |
0 |
1,2 |
0 |
0 |
1 |
1 |
1,55 |
0 |
1 |
0 |
0 |
1,63 |
0 |
1 |
0 |
1 |
1,88 |
0 |
1 |
1 |
0 |
2,03 |
0 |
1 |
1 |
1 |
2,21 |
1 |
0 |
0 |
0 |
2,22 |
1 |
0 |
0 |
1 |
2,34 |
1 |
0 |
1 |
0 |
2,42 |
1 |
0 |
1 |
1 |
2,53 |
1 |
1 |
0 |
0 |
2,57 |
1 |
1 |
0 |
1 |
2,64 |
1 |
1 |
1 |
0 |
2,70 |
1 |
1 |
1 |
1 |
2,78 |
Зв’язок між напругою на виході ЦАП та її цифровим представленням
5. ТЕХНІКО-ЕКОНОМІЧНЕ ОБГРУНТУВАННЯ ПРОЕКТУ
Для оцінки техніко-економічного рівня приладу визначимо собівартість, яка обумовлює всі грошові витрати підприємства на виготовлення та реалізацію приладу.
Вартість будь якого радіоелектронного виробу залежить від вартості матеріалів, обладнання та затрат праці на виготовлення деталей і проведення збірно-регулювальних робіт. Ці складові і визначають заводську собівартість пристрою. Розрахунок собівартості на стадії проектування проведемо за калькуляційними статтями витрат. Розглянемо порядок підрахунку всіх калькуляційних статей.
5.1 Витрати на сировину і матеріали
У цьому пункті розраховуються витрати на сировину та матеріали, які використовувались при виготовленні приладу з врахуванням транспортних затрат. Результати цих розрахунків приведені в табл. 5.1. Таким чином, як видно з цієї таблиці, загальні витрати на сировину та матеріали для одного виробу становлять 17,5 грн.
Таблиця 5.1
Витрати на сировину і матеріали
Найменування,
марка
|
Профіль,
розмір,мм
|
Одиниці
виміру
|
Норма на
прилад
|
Ціна за
одиницю ваги, грн.
|
Сума,
грн.
|
Склотекстоліт
СФ2-35-1.5
|
1,5*125*175 |
кг |
0,050 |
100 |
5
|
Припой ПОС-61 |
кг |
0,07 |
43 |
3 |
Флюс ФСК |
кг |
0,045 |
133 |
6 |
Провід ТП-10 |
м |
1,00 |
3,5 |
3,5 |
Всього |
17,5 |
5.2 Витрати на закупівельні комплектуючі вироби
Підрахуємо витрати на закупівельні комплектуючі вироби, якими є всі електрорадіоелементи. Результати розрахунків затрат приведені в табл. 5.2.
Таблиця 5.2
Витрати на комплектуючі радіоелементи
Найменування,
Марка
|
Ціна за одиницю, грн. |
Кількість |
Сума,
Грн.
|
Резистори
|
МЛТ |
0,20 |
28 |
5,6 |
Мікросхеми
|
К155ТЛ2 |
2,5 |
3 |
7,5 |
TL084CN |
2,5 |
1 |
2,5 |
Діоди
|
КС147А |
1,20 |
4 |
4,80 |
Світлодіоди
|
АЛ307 |
1 |
6 |
6 |
Роз’єми
|
36 контактів |
15,00 |
1 |
15,00 |
Блок живлення
|
20 |
1 |
20 |
Шнур LPT-порта
|
10 |
1 |
10 |
Всього |
71,4 |
Транспортно-заготівельні витрати (6%) |
4,284 |
5.3. Розрахунок заробітної плати
Розрахунок заробітної плати виробничих працівників проводиться за даними тарифних розцінок. Результати розрахунку зведені в табл. 5.3.
Таблиця 5.3
Розрахунок заробітної плати
№ п/п |
Види робіт |
Розряд робіт |
Трудоємність робіт, год |
Тарифна ставка |
Заробітна плата |
пряма |
додаткова |
всього |
1 |
Виготовлення друкованих плат |
3 |
1,0 |
3,15 |
3,15 |
0,63 |
3,78 |
2 |
Сверління |
3 |
0,8 |
2,40 |
1,92 |
0,38 |
2,30 |
3 |
Установка елементів |
3 |
1,0 |
2,00 |
2,00 |
0,40 |
2,40 |
4 |
Пайка |
3 |
1,5 |
1,14 |
1,71 |
0,34 |
2,05 |
5 |
Зборка |
3 |
1,0 |
1,95 |
1,95 |
0,39 |
2,34 |
6 |
Монтаж |
3 |
1,2 |
1,10 |
1,32 |
0,26 |
1,58 |
7 |
Регулювання |
4 |
1,5 |
3,20 |
4,80 |
0,96 |
5,76 |
8 |
Контроль |
4 |
0,9 |
2,00 |
1,80 |
0,36 |
2,16 |
Всього |
22,37 |
Основна заробітна плата виробничих працівників при виготовленні одного виробу по даних підрахунках становитиме 22,37 грн.
6. ОХОРОНА ПРАЦІ
Законодавчо-правовi аспекти по охоронi працi та охоронi навколишнього середовища дає конституцiя та основи законодавства про працю. Головнi положення про охорону працi закрiпленi конституцiєю та основами законодавства про працю. Конституцiя установлює гарантоване право на працю.
Пiд умовами працi розумiється сукупнiсть факторiв виробничого середовища, якi здiйснюють вплив на здоров’я та працездатність людини. Дослiдження умов працi показали що, факторами виробничого середовища в процесi працi є: санiтарно-гiгiєнiчний стан, який визначає зовнiшнiй стан мiкроклiмату в робочiй зонi; механiчнi коливання; випромiнювання; температура; освiтленiсть та iншi, як результат впливу використовуваного обладнання, матеріалів, технологічних процесiв; психологiчнi елементи; робоча позицiя, фiзичне навантаження, нервово-психологiчне напруження, яке обумовлене самим процесом працi; естетичнi елементи: оформлення виробничих примiщень, обладнання робочого мiсця, робочого iнструменту та iншi.
Паяння – це з’єднання деталей при допомозi припою. Hайчастiше використовуються олов’яно-свинцевi припої. Процес паяння супроводжується забрудненням виробничого середовища, робочих поверхонь, одягу та шкiри рук працюючих свинцем, який є досить токсичною речовиною. Це може привести до отруєння органiзму, викликати змiни у складi кровi, вплинути на нервову систему.
В примiщеннях, де здiйснюється паяння припоєм, який вмiщує свинець, для запобiгання попадання свинцю в органiзм не рекомендується зберiгати особистi речi, приймати їжу, палити, а також прати необхідно робочий одяг вдома. Робоче мiсце для паяння обладнується мiсцевою витяжною вентиляцiєю, що забезпечує концентрацiю свинцю в робочiй зонi не бiльшу за гранично допустиму – 0,01 мг/м .
Для запобiгання опiкiв та заляпування рук чи одягу робiтникiв припоєм, при паяннi повиннi використовуватись спецiальнi серветки для видалення лишнього припою з жала паяльника, а також пiнцет. При монтажних роботах, які пов’язані із ризиком забруднення чи пошкодження очей, передбачена видача робітникам захисних окулярiв.
Для попередження професійних хвороб, необхідно після закінчення роботи сполоснути руки однопроцентним оцтовим розчином, далі вимити їх гарячою водою з милом, прополоскати рот, почистити зуби та прийняти душ.
При травленні застосовуються рiзнi шкiдливi хiмiкати – азотна, фтористоводнева, соляна, сірчана, фосфорна кислоти, рiзнi луги та iншi речовини. При роботі з кислотами на виробництвi можливi нещаснi випадки: отруєння випарами та газами, що видiляються, хiмiчнi опiки при попаданнi кислот на поверхню тiла чи в очi.
Вся робота з агресивними речовинами повинна проводитись в спецiальних шафах з ефективною витяжною вентиляцiєю. Робiтники, які працюють з такими речовинами повиннi бути забезпеченi вiдповiдним спецодягом по затвердженим нормам. Для захисту очей необхiдно використовувати окуляри в гумовiй оправi. Вiдпрацьованi кислоти обов’язково повиннi бути нейтралiзованi у вiдповiдностi з технiчною iнструкцiєю.
Небезпечним для людини є струм промислової частоти 50 Гц силою бiльше 0,1 А. Напруга в електричних колах 40 В та більше вважається небезпечною для життя. Електричний струм при напрузi 220 В може викликати важкi травми i смерть.
Для запобiгання враження електричним струмом необхiдно дотримуватися наступних правил технiки безпеки:
- не можна доторкатися до електричних проводiв, контактних зажимiв, клем електрообладнання, слiд пам’ятати, що вони можуть бути пiд напругою;
- необхiдно слiдкувати, щоб на обслуговуваному обладнаннi було надiйне заземлення i не було вiдкритих ділянок пiд напругою;
- не залишати без нагляду працююче обладнання, при необхiдностi вiдлучитись обов’язково вiдключають обладнання вiд мережi;
- при наявностi враження електричним струмом здiйснити першу медичну допомогу потерпiлому, сповiстити про те, що сталося в медпункт та керiвнику робiт.
Освiтлення достатнє i повинно вiдповiдати СH i П II- 4 -79. Потрiбна освiтленiсть визначається характером виконуваної роботи i дiючими санiтарними нормами. При природньому i штучному освiтленi робочi мiсця розмiщенi таким чином, щоб свiтло падало злiва. Такi умови вважаються оптимальними.
Розмiщення для електроустаткування і електропроводки iзоляцiї забезпечують повну безпеку працюючого.
Шкiдливi речовини, якi видiляються при роботi, видаляються за допомогою мiсцевої вентиляцiї. Розмiщення пристроїв i трубопроводiв для вiдведення повiтря виключає можливiсть травматизму.
Зовнiшнє оформлення робочих мiсць в виробничих примiщеннях вiдповiдає вимогам виробничої естетики. Кольори для фарбування поверхонь виробничих примiщень i устаткування, які розмiщені в колi зору працюючого, повинні бути свiтло-голубими, що забезпечує кращу видимiсть деталей i сприятливо дiє на нервову систему людини.
В комплекс заходів по створенню високопродуктивної працi входять i психофiзiологiчнi заходи, якi забезпечують безперервний ріст продуктивностi працi при мiнiмальних витратах фiзичної i нервової енергiї працюючого, i направленi на створення оптимального режиму працi та вiдпочинку із врахуванням конкретного процесу виробництва.
Виробничий процес збирання, монтажу та регулювання приладу вiдноситься по ступеню пожежної небезпечностi до категорiї Д.
Причинами пожежi можуть бути: коротке замикання, перевантаження провiдникiв мережi, виникнення великих перехiдних опорiв, якi порушують нормальну роботу технологiчного обладнання. Тому передбачаються пристрої, що забезпечують вiд’єднання при короткому замиканнi як всiєї мережi, так i окремих її ділянок.
Електроосвiтлення створює пожежну небезпеку при перегрiванні провiдникiв та iзоляцiї.
Для захисту провiдникiв вiд механiчних та хiмiчних пошкоджень їх прокладають в гумових або металевих трубках, якi мають внутрiшню iзоляцiю.
При русi гумової стрiчки транспортеру можуть виникати електростатичнi заряди. При незначнiй вологостi повiтря можливий iскровий розряд мiж частинами обладнання, або розряд на землю.
Енергiя такої iскри незначна, але може бути достатньою для пiдпалення горючої або вибухонебезпечної сумiшi. Таким чином, виникаючi в виробничих умовах електростатичнi заряди, можуть бути джерелами пожежi.
Уникнути небезпеки виникнення електростатичних зарядiв можна наступними методами:
1) заземлення виробничого обладнання та ємностей для зберiгання вогненебезпечних рiдин;
2) збiльшення вологостi повiтря або використання антистатичних домішок до основного продукту.
Джерелами пожежi можуть бути легкозаймистi рiдини: спирт, бензин, ацетон та ін. тому їх запас на виробничій ділянці не повинен перевищувати потреби на одну робочу змiну. Для зберiгання цих рiдин та їх вiдходiв повинна бути передбачена спецiальна тара - алюмiнієвi бiдони з притертими кришками, з чiткою назвою рiдини та попереджувальним надписом "ВОГHЕHЕБЕЗПЕЧНО!".
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Архангельський А.Я. Програмирование в Delphi 7. – М.: Бином, 2004. 1152 с.
2. Бобровский С. Delphi 6 и Kylix: Библиотека программиста. – СПб.: Питер, 2002. – 560 с.
3. Глинський Я.М., Анохін В.Є., Ряжська В.А. Паскаль. Turbo Pascal і Delphi. 4-те вид. – Львів: Деол, СПД Глинський, 2003. – 144 с.
4. Программирование портов в Delphi. - amberv.narod.ru/delphi1.html
5. Зубчук В.И. Справочник по цифровой схемотехнике. – К.: Техника, 1990. – 448 с.
6. Новиков Ю.В., Калашников О.А., Гуляэв С.Э. Разработка устройств сопряжения для персонального компьютера типа IBM PC. – М.: ЭКОМ, 1997. – 224 с.
7. Гук М. Аппаратные интерфейсы ПК. Энциклопедия. – СПб.: Питер, 2002. – 528 с.
8. Ковальчук В.М. Основи економічної теорії. – Тернопіль: 2003. – 203 с.
ДОДАТКИ
Додаток А
Текст програми
unit ADC_2007_U;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, Menus;
Type TF_ADC = class(TForm)
B_Write_DR: TButton;
B_Read_SR: TButton;
L_Driver_LPT: TLabel;
CheckBox_DR3: TCheckBox;
CheckBox_DR2: TCheckBox;
CheckBox_DR1: TCheckBox;
CheckBox_DR0: TCheckBox;
Bevel_DR: TBevel;
CheckBox_CR3: TCheckBox;
CheckBox_CR2: TCheckBox;
CheckBox_CR1: TCheckBox;
CheckBox_CR0: TCheckBox;
Bevel_CR: TBevel;
B_Write_CR: TButton;
CheckBox_SR3: TCheckBox;
Bevel_SR: TBevel;
B_In_U: TButton;
B_Out_U: TButton;
E_In_U: TEdit;
E_Out_U: TEdit;
B_Exit: TButton;
B_Diagram: TButton;
E_QI: TEdit;
L_QI: TLabel;
Chart1: TChart;
Series1: TFastLineSeries;
B_Stop: TButton;
E_Time_Discret: TEdit;
L_Time_Discret: TLabel;
B_Save: TButton;
SaveDialog1: TSaveDialog;
CheckBox_ADC_Proces_Show: TCheckBox;
RadioGroup_Language: TRadioGroup;
MainMenu1: TMainMenu;
File1: TMenuItem;
Save1: TMenuItem;
ADC1: TMenuItem;
InU1: TMenuItem;
OutU1: TMenuItem;
Port1: TMenuItem;
WriteDR1: TMenuItem;
Write_CR1: TMenuItem;
procedure B_Write_DRClick(Sender: TObject);
procedure B_Read_SRClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure B_Write_CRClick(Sender: TObject);
procedure B_Out_UClick(Sender: TObject);
procedure B_In_UClick(Sender: TObject);
procedure B_ExitClick(Sender: TObject);
procedure B_DiagramClick(Sender: TObject);
procedure B_StopClick(Sender: TObject);
procedure B_SaveClick(Sender: TObject);
procedure RadioGroup_LanguageClick(Sender: TObject);
procedure Save1Click(Sender: TObject);
procedure InU1Click(Sender: TObject);
procedure OutU1Click(Sender: TObject);
procedure WriteDR1Click(Sender: TObject);
procedure Write_CR1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
CONST
QI_Max=10000;
var
F_ADC: TF_ADC;
qDR,qSR,qCR:integer;
Adr_DR,Adr_CR,Adr_SR:word;
qB:integer;
U_Out,U_In:real;
U_A,U_min:real;
// U_Out_Max,U_In_Max:real;
RegStop:integer;
QI:integer;
Rdiod,Rz:real;
mR:array[0..8] of real;
mUr:array[0..16] of real;
mDR,mSR,mCR,mCR1:array[0..8] of byte;
mx,my:array[1..qI_Max] of real;
implementation
{$R *.dfm}
function IsDriverInstalled : Boolean; stdcall; external 'io.dll';
procedure PortOut(Port : Word; Data : Byte);stdcall; external 'io.dll';
function PortIn(Port : Word) : Byte;stdcall; external 'io.dll';
// CREATE FORM ============
Procedure Trans_bOut_mDR(bOut:byte);
{ Процедура перетворює байт bOut в набір з 8 бітів,
які записуються у масив mDR[0..7], де біт mDr[0] - молодший}
Var b1,b2,b3:byte;
i:integer;
Begin
b3:=bOut;
for i:=0 to 7 do
begin
b1:= b3 div 2;
b2:=b3 mod 2;
b3:=b1;
mDR[i]:=b2;
end;
// Примітка. Відображати біти на екрані наступним чином: D7 D6 D5 D4 D3 D2 D1 D0
End;
Procedure p_Init_U;
Var nDr,bOut:integer;
Rc1,Rc,Ur:real;
Begin
for bOut:=0 to qB do
begin
Trans_bOut_mDR(bOut);
Rc1:=0;
for nDR:=0 to qDR do
begin
Rc1:=Rc1+(1/(mR[nDr]+Rdiod))*mDR[nDr];
end;
rc:=0;
if Rc1>0 then Rc:=1/Rc1;
Ur:=(Rz/(Rz+Rc))*U_A;
if bOut=0 then Ur:=U_min;
mUr[bOut]:=Ur;
// ShowMessage(' bOut= '+IntToStr(bOut)+' Rc= '+FloatToStrF(Rc,ffFixed,6,2)+' Ur= '+FloatToStrF(Ur,ffFixed,6,2));
end; // bOut
End;
procedure TF_ADC.FormCreate(Sender: TObject);
begin
qDR:=3;
qCR:=3;
qSR:=1;
Adr_DR:=$378;
Adr_SR:=$379;
Adr_CR:=$37A;
qB:=15;
U_A:=3.7;
U_min:=0.14;
RDiod:=300;
mR[3]:=2200;
mR[2]:=4700;
mR[1]:=8200;
mR[0]:=15000;
Rz:=4600;
p_Init_U;
if IsDriverInstalled then
begin
L_Driver_LPT.Caption:='Driver Ok!';
end;
end;
// EXIT ================
procedure TF_ADC.B_ExitClick(Sender: TObject);
begin
Application.Terminate;
end;
// == DR ==== BEGIN ===================
Procedure p_Write_DR;
Var bOut:byte;
pDr,nDR:integer;
Begin
bout:=0;
pDr:=1;
for nDR:=0 to qDR do
begin
bout:=bOut+mDR[nDR]*pDr;
pDr:=pDr*2;
end;
PortOut(Adr_DR,bOut);
End;
procedure TF_ADC.B_Write_DRClick(Sender: TObject);
Var nDR:integer;
begin
for nDR:=0 to qDR do
begin
mDR[nDR]:=0;
end;
if CheckBox_DR0.Checked then mDR[0]:=1;
if CheckBox_DR1.Checked then mDR[1]:=1;
if CheckBox_DR2.Checked then mDR[2]:=1;
if CheckBox_DR3.Checked then mDR[3]:=1;
p_Write_DR;
end;
// == DR ==== END ===================
// === CR ==== BEGIN ===================
Procedure p_Write_CR;
Var bOut:byte;
pCr,nCR:integer;
Begin
// Invers
for nCR:=0 to qCR do
begin
if nCR<>2 then
begin
mCR1[nCR]:=0;
if mCR[nCR]=0 then mCR1[nCR]:=1;
end;
if nCR=2 then mCR1[nCR]:=mCR[nCR];
end;
bout:=0; pCr:=1;
for nCR:=0 to qCR do
begin
bout:=bOut+mCR1[nCR]*pCr;
pCr:=pCr*2;
end;
PortOut(Adr_CR,bOut);
End;
procedure TF_ADC.B_Write_CRClick(Sender: TObject);
Var nCR:integer;
begin
for nCR:=0 to qCR do
begin
mCR[nCR]:=0;
end;
if CheckBox_CR0.Checked then mCR[0]:=1;
if CheckBox_CR1.Checked then mCR[1]:=1;
if CheckBox_CR2.Checked then mCR[2]:=1;
if CheckBox_CR3.Checked then mCR[3]:=1;
p_Write_CR;
end;
// === CR ==== END ===================
// == SR == BEGIN ===============
Procedure p_Read_SR;
Var b,b1:byte;
Begin
b:=PortIn(Adr_SR);
asm
mov al,b
and al,00001000b
mov b1,al
end;
mSR[3]:=0;
if b1>0 then mSR[3]:=1;
End;
procedure TF_ADC.B_Read_SRClick(Sender: TObject);
begin
p_Read_SR;
if mSR[3]=0 then CheckBox_SR3.checked:=false;
if mSR[3]=1 then CheckBox_SR3.checked:=true;
end;
// == SR == END ===============
// Out_U BEGIN =============
Procedure Tran_bOut_mCR(bOut:byte);
{ Процедура перетворює байт bOut в набір з 8 бітів,
які записуються у масив mCR[0..7], де біт mCr[0] - молодший}
Var b1,b2,b3:byte;
i:integer;
Begin
b3:=bOut;
for i:=0 to 7 do
begin
b1:= b3 div 2;
b2:=b3 mod 2;
b3:=b1;
mCR[i]:=b2;
end;
// Примітка. Відображати біти на екрані наступним чином: D7 D6 D5 D4 D3 D2 D1 D0
End;
procedure TF_ADC.B_Out_UClick(Sender: TObject);
Var bOut:byte;
Ur:real;
begin
U_Out:=StrToFloat(E_Out_U.Text);
for bOut:=0 to qB do
begin
Ur:=mUr[bOut];
// ShowMessage(' bOut= '+IntToStr(bOut)+' Ur= '+FloatToStrF(Ur,ffFixed,6,2));
if Ur>U_Out then break;
end;
// bOut:=round(r1);
Tran_BOut_mCR(bOut);
p_Write_CR;
if mCR[0]=1 then CheckBox_CR0.Checked:=true
else CheckBox_CR0.Checked:=false;
if mCR[1]=1 then CheckBox_CR1.Checked:=true
else CheckBox_CR1.Checked:=false;
if mCR[2]=1 then CheckBox_CR2.Checked:=true
else CheckBox_CR2.Checked:=false;
if mCR[3]=1 then CheckBox_CR3.Checked:=true
else CheckBox_CR3.Checked:=false;
end;
// Out_U END =============
// In_U BEGIN ===================
procedure TF_ADC.B_In_UClick(Sender: TObject);
Var bOut:byte;
Ur:real;
begin
U_In:=0;
for bOut:=0 to qB do
begin
Trans_bOut_mDR(bOut);
PortOut(Adr_DR,bOut);
if mDR[0]=1 then CheckBox_DR0.Checked:=true
else CheckBox_DR0.Checked:=false;
if mDR[1]=1 then CheckBox_DR1.Checked:=true
else CheckBox_DR1.Checked:=false;
if mDR[2]=1 then CheckBox_DR2.Checked:=true
else CheckBox_DR2.Checked:=false;
if mDR[3]=1 then CheckBox_DR3.Checked:=true
else CheckBox_DR3.Checked:=false;
p_Read_SR;
Ur:=mUr[bOut]; // oporna for Dr3 - DR0
if mSR[3]=0 then
begin
U_In:=Ur;
break;
end;
if bOut=qB then
begin
if mSR[3]>0 then U_In:=U_A;
end;
if CheckBox_ADC_Proces_Show.checked then
ShowMessage(' bOut= '+IntToStr(bOut)+' Ur= '+FloatToStrF(Ur,ffFixed,6,2));
// Sleep(5);
end;
E_In_U.text:=FloatToStrF(U_In,ffFixed,4,2);
end;
// In_U END ===================
procedure TF_ADC.B_DiagramClick(Sender: TObject);
Var i:integer;
x,y:real;
Time_Discret:integer;
begin
RegStop:=0;
CheckBox_ADC_Proces_Show.Checked:=false;
QI:=StrToInt(E_QI.Text);
if QI>QI_Max then
begin
ShowMessage('QI>QI_Max= '+IntToStr(QI_Max));
QI:=QI_Max;
end;
Time_Discret:=StrToInt(E_Time_Discret.Text);
Chart1.Series[0].Clear;
for i:=1 to QI do
begin
B_In_UClick(Sender);
x:=(i-1)*Time_Discret/1000;
y:=U_In;
mx[i]:=x;
my[i]:=y;
// if i=1 then y:=y+0.0001;
Chart1.Series[0].AddXY(x,y);
Sleep(Time_Discret);
Application.ProcessMessages;
if RegStop=1 then break;
end;
end;
procedure TF_ADC.B_StopClick(Sender: TObject);
begin
RegStop:=1;
end;
procedure TF_ADC.B_SaveClick(Sender: TObject);
Var flName:string;
tx:TextFile;
i:integer;
begin
if SaveDialog1.Execute then
begin
flName:=SaveDialog1.FileName+'.txt';
AssignFile(tx,FlName);
ReWrite(tx);
for i:=1 to QI do
begin
write(tx,mx[i]:7:3);
writeln(tx,my[i]:7:3);
end; // i
CloseFile(tx);
end;
end;
procedure TF_ADC.RadioGroup_LanguageClick(Sender: TObject);
begin
if RadioGroup_Language.ItemIndex=1 then
Begin
B_Write_DR.Caption:='Записати_DR';
B_Write_CR.Caption:='Записати_CR';
B_In_U.Caption:='Вхід_U';
B_Out_U.Caption:='Вихід_U';
B_Diagram.Caption:='Діаграма';
B_Stop.Caption:='Стоп';
B_Save.Caption:='Зберегти';
B_Exit.Caption:='Вихід';
B_Read_SR.Caption:='Читати_SR';
CheckBox_ADC_Proces_Show.Caption:='ADC_Показати_Процес';
L_Time_Discret.Caption:='Проміжки_Часу (мс)';
MainMenu1.Items[0].Caption:='Файл';
MainMenu1.Items[0].Items[0].Caption:='Зберегти';
MainMenu1.Items[1].Caption:='ADC';
MainMenu1.Items[1].Items[0].Caption:='Вхід_U';
MainMenu1.Items[1].Items[1].Caption:='Вихід_U';
MainMenu1.Items[2].Caption:='Порт';
MainMenu1.Items[2].Items[0].Caption:='Записати_DR';
MainMenu1.Items[2].Items[1].Caption:='Записати_CR';
end;
if RadioGroup_Language.ItemIndex=0 then
Begin
B_Write_DR.Caption:='Write_DR';
B_Write_CR.Caption:='Write_CR';
B_In_U.Caption:='In_U';
B_Out_U.Caption:='Out_U';
B_Diagram.Caption:='Diagram';
B_Stop.Caption:='Stop';
B_Save.Caption:='Save';
B_Exit.Caption:='Exit';
B_Read_SR.Caption:='Read_SR';
CheckBox_ADC_Proces_Show.Caption:='ADC_Proces_Show';
L_Time_Discret.Caption:='Time_Discret (ms)';
MainMenu1.Items[0].Caption:='File';
MainMenu1.Items[0].Items[0].Caption:='Зберегти';
MainMenu1.Items[1].Caption:='ADC';
MainMenu1.Items[1].Items[0].Caption:='In_U';
MainMenu1.Items[1].Items[1].Caption:='Out_U';
MainMenu1.Items[2].Caption:='Port';
MainMenu1.Items[2].Items[0].Caption:='Write_DR';
MainMenu1.Items[2].Items[1].Caption:='Write_CR';
end;
end;
procedure TF_ADC.Save1Click(Sender: TObject);
begin
B_Save.Click;
end;
procedure TF_ADC.InU1Click(Sender: TObject);
begin
B_In_U.Click;
end;
procedure TF_ADC.OutU1Click(Sender: TObject);
begin
B_Out_U.Click;
end;
procedure TF_ADC.WriteDR1Click(Sender: TObject);
begin
B_Write_DR.Click;
end;
procedure TF_ADC.Write_CR1Click(Sender: TObject);
begin
B_Write_CR.Click;
end;
end.
Додаток Б
Тестування перетворювача
Додаток В
Принцип роботи АЦП