Міністерство освіти і науки України
Національний університет "Львівська політехніка"
ІТРЕ
Кафедра РЕПС
Курсова робота
з дисципліни “Мікропроцесори в РЕПС”
на тему: “Вимірювач ємності на 4 діапазонах на базі мікроконтролера Intel 51”
Львів – 2005 р.Зміст.
1.Технічне завдання.
Для виконання курсової роботи задано розробити апаратну частину та програму на мові асемблера для вимірювача ємності на базі Intel 51, що відповідає таким вимогам:
вимірює ємність конденсаторів в діапазонах 20 нФ, 200 нФ, 2 мкФ, 20 мкФ;
результати вимірювання виводяться на 3,5-розрядний індикатор;
використання АЦП є недопустимим;
- вибір діапазону вимірювання проводиться автоматично.
2. Вступ
Важливою складовою частиною науково-технічного прогресу є комплексна автоматизація технологічних процесів (ТП) на основі мікропроцесорних систем керування. Використання мікропроцесорів (МП) і мікро-ЕОМ в цифрових системах автоматичного керування (ІДСАК) дозволяє більш ефективно, порівняно з традиційними засобами автоматики, вирішувати комплексні завдання автоматизації в різних галузях народного господарства.
Більше того, сучасний рівень мікропроцесорних засобів, який об'єднує в собі жорстко запрограмовані функціональні елементи та змінні перепрограмовувані модулі, значно розширює функціональні можливості цифрових регуляторів (ЦР), побудованих на великих інтегральних мікросхемах (ВІС). Розвиток мікропроцесорних систем керування ТП характеризується підвищеним ступенем інтеграції елементної бази і ускладненням алгоритмів функціонування.
Окремий клас ВІС складають однокристальні мікро-ЕОМ (ОМЕОМ), тобто прилади, які конструктивно виконані у формі однієї мікросхеми і включають в себе всі складові пристрої, необхідні для реалізації ІДСАК мінімальної конфігурації:
арифметичний пристрій;
оперативну та постійну пам'ять;
паралельні та послідовні порти вводу-виводу інформації;
таймери;
лічильники і т.п.
Апаратна підтримка функціонування ОМЕОМ надзвичайно проста і зводиться, як правило, до буферизації портів вводу-виводу, узгодження рівнів сигналів та навантажувальної здатності. Завдяки цьому неперервно зростає промисловий випуск ОМЕОМ, що в наш час складає понад третину від усіх мікропроцесорних засобів, одночасно при цьому розширюється область їх використання. В той же час програмне забезпечення ОМЕОМ є достатньо складним. Тому 90%, а часом і більше вартості ЦСАК на ОМЕОМ становить вартість програмного забезпечення.
В літературі ОМЕОМ часто називають мікроконтролерами (МК). Це обґрунтовують тим, що такі ВІС мають незначну ємність пам'яті, гарвардську архітектуру - фізичну і логічну розділеність пам'яті програм та пам'яті даних, спрощену і орієнтовану на задачі керування систему команд, примітивні методи адресації команд і даних. Специфічна організація вводу-виводу інформації визначає область їх застосування як спеціалізованих обчислювачів, які включені в контур керування об'єктом або процесом. Структурна організація, набір команд і апаратно-програмні засоби вводу-виводу інформації цих мікросхем найбільш пристосовані для керування і регулювання в пристроях і системах автоматики, а не для обробки даних.
Однак ці твердження відображають лише технічний рівень ОМЕОМ на даний момент. Розвиток технології виготовлення ВІС значно збільшує ступінь їх інтеграції, що дозволить у найближчий час використовувати ОМЕОМ і при обробці даних.
Назва МК використовується нами лише для позначення сімейства ОМЕОМ, що об'єднані низкою загальних ознак, наприклад, розрядністю, системою команд, набором функціональних блоків тощо.
Найбільший ефект від впровадження ОМЕОМ досягається в локальних або розподілених ЦСАК.
Високі техніко-економічні показники ЦСАК на базі ОМЕОМ (низька вартість, мала енергоємність, компактність, висока надійність, точність та швидкодія, можливість реалізації складних алгоритмів керування, які можна легко міняти програмним шляхом) сприяють їх інтенсивному впровадженню не лише у виробничу сферу, але і в побут.
3.Опис методу
Для вимірювання ємності ми будемо використовувати інтегруючу RC – ланку (мал.1). При подачі деякої напруги на таку ланку в ній протікає перехідний процес, який описується рівнянням:
Uc(t) = Uж (1 – e-t/τ) (1)
При цьому перехідний процес матиме вигляд показаний на мал.2.
EMBED Excel.Chart.8 \s
Мал.1. Інтегруюча RC-ланка Мал.2. Перехідний процес в інтегруючій RC-ланці
Величину вимірюваної ємності ми будемо визначати з часу заряду ємності до певного рівня Uоп. Необхідну залежність ми можемо вивести з рівняння (1):
Uоп/Uж = 1 – e-t/τ - t/τ = ln (1 - Uоп/Uж)
, де τ =RC, Uоп – опорна напруга до якої ми будемо заряджати конденсатор.
Так як логарифм від відношення напруг є величина незмінна то його можна порахувати наперед і записати, як константу „k”:
τ = t / k C = t / k R
Виберемо напугу Uоп такою, щоб константа „k” була рівна 1:
- ln(1 - Uоп/Uж) = 1 Uоп = Uж (1 – 1/e)
Напругу живлення вибираємо 5В (напруга живлення мікроконтролера), при цьому Uоп = 3.16 В.
4. Опис електричної схеми
Проектований вимірювач ємності живиться від джерела постійного струму +5В (для живлення мікроконтролера) і +12В (для роботи реле). Технічним завданням нам задано серію мікроконтролерів Intel 51. При виборі конкретної моделі мікроконтролера будемо керуватись такими вимогами:
вибраний мікроконтролер повинен мати внутрішню пам’ять і можливість її перезапису (ППЗП);
повинен мати 4 порти вводу-виводу для мінімізації периферії;
наявність двох 16-розрядних таймерів-лічильників;
о’бєм оперативної пам’яті не є суттєвим;
по можливості мати низьке енергоспоживання.
Описаним вище вимогам найбільше задовільняє мікроконтролер 80C51BH.
Цей мікроконтролер сімейства МС51,який має такі основні характеристики:
Обсяг внутрішньої пам’яті програм, кілобайтів ...........................4
Обсяг внутрішньої пам’яті даних, байтів................................................128
Максимальна частота слідування тактових сигналів EMBED Equation.3 , МГц .........................12
Струм споживання EMBED Equation.3 (при EMBED Equation.3 =12 МГц), мА .........................20
Напруга живлення EMBED Equation.3 , В ......................4,0 - 6,6
Вихідна напруга високого рівня EMBED Equation.3 , В................................................> 2,4
Вихідна напруга низького рівня EMBED Equation.3 , В ........................< 0,4
Вихідний струм високого рівня EMBED Equation.3 , мкА ............................<60
Вихідний струм низького рівня EMBED Equation.3 , мА...............................................< 15
Для контролю рівня заряду конденсатора використаємо компаратор DA1, на один вхід якого ми подаємо напругу конденсатора, а на інший опорну напругу Uоп, яка задається резистивним подільником R4 – R6.
Компаратор повинен забезпечити якомога меншу напругу зміщення і струм зміщення для зменшення впливу на результат вимірювання, а також час встановлення менший від часу одного машинного циклу ( EMBED Equation.3 = 1 мкс). Найбільше цим вимогам відповідає компаратор LМ219D з такими характеристиками:
Напруга живлення, EMBED Equation.3 , В........................................................................... ± (5–18)
Напруга зміщення, EMBED Equation.3 , мВ...............................................................................................0,7
Вхідний струм зсуву, EMBED Equation.3 , нА..........................................................................150 – 500
Вхідний струм зміщення, EMBED Equation.3 , нА...........................................................................30 – 75
Час встановлення, EMBED Equation.3 , мкс..........................................................................0,08
Вихідний струм, Івих, мА.......................................................................................25
Струм споживання, Іж, мА...........................................................................12,5
Для зменшення похибки вимірювання резистори і конденсатори слід вибирати термостабільними і з якомога меншим допуском. Практично достатньо буде взяти резистори типу МЛТ з допуском 1%.
Вимірювання ємності проводимо послідовно, доки величина ємності конденсатора не попаде в один із діапазонів. Вибір резисторів, що відповідають кожному з діапазонів, здійснюємо перемиканням контактів реле КМ2.1, КМ3.1, КМ4.1, КМ5.1.
Вихід компаратора DA1 під’єднується до входу Int0 мікроконтролера і при заряді конденсатора до напруги Uоп переключається в стан логічної „1” і викликає переривання. Підпрограма обробки переривання по входу Int0 закорочує виводи конденсатора через реле КМ1 і зберігає результати вимірювання. Відображення результатів здійснюється на 3,5–розрядному світлодіодному індикаторі HG1 з динамічною індикацією. Індикатори перемикаються за допомогою транзисторних ключів VT1 – VT4 з частотою 200 Гц по перериванню від внутрішнього таймера-лічильника. В якості транзисторних ключів найкраще використати високочастотні малопотужні транзистори з максимально-доспустимим струмом колектора більшим за струм споживання індикаторів. Для цього можна використати транзистори КТ 315 Б.
В схемі також є блок живлення, який повинен забезпечувати високу стабільність напруг.
Електрична принципова схема приведена в додатку 1, а перелік елементів в додатку 2.
5. Розробка програмної частини
Програмна частина складається з оголошення констант, головної програми ініціалізації, підпрограм обробки перериваннь від таймера-лічильника Т0 і Т1 та входу Int0, а також службових підпрограм, що реалізують необхідні математичні обчислення і перекодування.
На початку програми оголошуються константи для заватаження початкових даних таймерів-лічильників.
В головній програмі ініціалізації в регістри загального призначення заносяться початкові значення, задаються режими роботи таймерів-лічильників та заносяться початкові значення періоду переривань і лічильника часу заряду конденсатора, а також задається дозвіл на переривання.
Лічильник Т0 рахує час заряду вимірюваного конденсатора. Якщо значення ємності перевищує максимальне значення в заданому діапазоні, то відбувається переповнення лічильника і викликається підпрограма обробки переривання від таймера-лічильника Т0. При цьому в якості результату виводиться умовний знак перевищення допустимої величини ємності „1” в старшому розряді, проводиться розряд вимірюваного конденсатора через реле КМ1 і починається наступне вимірювання.
Для спрощення розрахунків і прискорення вимірювання виберемо максимальний час заряду конденсатора рівним 50 мс, що відповідатиме 50000 лічильним тактам таймера-лічильника. При цьому в якості результату беремо 3 розряди, а 4 розряд відкидаємо. Звідси ми можемо визначити опори резисторів у вимірювальній RC-ланці:
R10 = t / C1max = 5*10-2 / 20*10-9 = 2,5*106 Ом = 2,5 МОм
R11 = t / C2max = 5*10-2 / 200*10-9 = 25*104 Ом = 250 кОм
R12 = t / C3max = 5*10-2 / 2*10-6 = 25*103 Ом = 25 кОм
R13 = t / C4max = 5*10-2 / 20*10-6 = 2,5*103 Ом = 2,5 кОм
Для того, щоб через 50 мс виникло переривання від таймера Т0 в нього перед початком лічби необхідно занести число 65536 – 50000 = 1553610 = 3СВ016.
Таймер Т1 використовується для роботи динамічної індикації. При перериванні від цього таймера результати вимірювання із внутрішніх регістрів виводяться на семисегментні індикатори. При цьому результати переводяться з двійково-десяткової форми в сегмисегментний код. Переривання від цього таймера відбуваються з частотою 200 Гц, тобто кожен індикатор мигає з частотою 50 Гц, що є достатнім для забезпечення ілюзії постійного свічення. Частота в 200 Гц відповідатиме періоду 5 мс, для забезпечення переривань з таким періодом в таймер, перед початком лічби, щоразу необхідно заносити число 65536 – 5000 = 6053610 = EC7816.
Переривання від зовнішнього входу Int0 означає, що вимірюваний конденсатор зарядився до значення опорної напруги. Підпрограма обробки переривання зупиняє таймер-лічильник часу заряду конденсатора, зчитує його значення та переводить його в двійково-десяткову форму. При цьому в результат записуються старші 4 десяткові розряди. Крім того відбувається розряд вимірюваного конденсатора з допомогою реле КМ1, та загрузка початкового значення таймера-лічильника для наступного вимірювання.
Згідно вище приведеного опису написано програму на мові асемблера для мікроконтролера Intel 8051. Блок-схема програми наведена в додатку 3, лістинг програми – у додатку 4.
Додаток 4. Лістинг програми.
;DATA
ORG 30H
;оголошення констант
TH_0 EQU 3Ch
TL_0 EQU 0B0h
TH_1 EQU 0ECh
TL_1 EQU 78h
Charge EQU P2.0
Clr_C EQU P2.5
Mask EQU 0Fh
;DATA
ORG 40H
;оголошення змінних
C_h EQU 1
C_l EQU 1
;CODE
;виклик підпрограм обробки переривань
ORG 00H ;Reset
jmp Res
ORG 03h ;int0
jmp INT
ORG 0BH ;C/T0
jmp Timeout
ORG 1Bh ;C/T1
jmp Indication
ORG 100h
;константи для перекодування двійково-десяткових ;чисел в семисегментний код
Decode:DB 11000000b ;"0"
DB 11111001b ;"1"
DB 10100100b ;"2"
DB 10110000b ;"3"
DB 10011001b ;"4"
DB 10100010b ;"5"
DB 10000010b ;"6"
DB 11111000b ;"7"
DB 10000000b ;"8"
DB 10010000b ;"9"
DB 11111111b ;" "
;програма ініціалізації регістрів і таймерів
ORG 120h
Res: clr A
mov IE, A ;заборона переривань
;регістр вибору індикатора
mov R0,A
mov R1, #88h ;вибір інд.
mov R2, A ;обнулення РЗП
mov R3, A
mov R4, #1h ;вибір діапазону
;mov C_h, A
;mov C_l, A
mov P0, A
mov P1, A
mov P2, A
mov P3, #0FFh
mov TH0, #TH_0 ;ініціалізація
mov TL0, #TL_0 ;таймерів
mov TH1, #TH_1
mov TL1, #TL_1
mov IP, A
; задання режимів роботи таймерів і настройка
; системи переривань
mov TMOD, #00010001b
mov IE, #00001011b
mov TCON, #00000101b
setb Charge ;початок вимірювання
setb TR0 ;запуск таймерів
setb TR1
setb EA ;дозвіл переривань
loop: nop
sjmp loop
;----------------------------------------------------------------------
;підпрограма обробки переривання від входу Int0
;----------------------------------------------------------------------
INT:
clr EA ; заборона переривань
;setb EA ; дозвіл переривань
clr TR0 ;зупинка таймера
push ACC
clr Charge ; закінчення заряду
setb Clr_C ; і розряд ємності
;обрахунок результату
mov DPTR, #3CB0h
mov R2, TL0
mov R3, TH0
lcall Sub2b
;переведення числа в десяткову форму
call Bin2dec
mov TH0, #TH_0 ;ініціалізація
mov TL0, #TL_0 ; таймерів
mov A, R4
mov C_h, R6
mov C_l, R5
pop ACC
clr Clr_C
setb Charge ;початок вимірювання
setb TR0 ;запуск лічильника
;mov IE, #10001011b
setb EA ; дозвіл переривань
reti
;----------------------------------------------------------------------
;підпрограма обробки переривання від таймера-;лічильника (значення ємності більше за допустиме)
;----------------------------------------------------------------------
Timeout:
clr EA ; заборона переривань
;setb EA ; дозвіл переривань
clr TR0 ;зупинта лічильника
clr Charge ; закінчення заряду
setb Clr_C ; і розряд ємності
push ACC
;inc R4
mov A, R4
mov P2, A
rl A
mov R4,A
jnb ACC.4, L1
mov R4, #1h
L1: mov C_h, #1Аh
Mov C_l, #0ААh
mov A,#000010000b ;L1
anl A, #11110000b
anl P2,#00001111b
orl A,P2
mov P2,A
mov R1,#88h
mov TH0, #TH_0 ;загрузка таймера
mov TL0, #TL_0
pop ACC
clr Clr_C
setb Charge ;початок вимірювання
setb TR0
;mov IE, #10001011b
setb EA ; дозвіл переривань
reti
;----------------------------------------------------------------------
;підпрограма індикації
;----------------------------------------------------------------------
Indication:
clr EA ; заборона переривань
;setb EA ; дозвіл переривань
clr TR1
mov TH1, #TH_1
mov TL1, #TL_1
push ACC
mov A, R1
rl A ; вибір індикатора
mov R1, A
jb ACC.3, I4 ;виведення результатів
jb ACC.2, I3
jb ACC.1, I2
mov A, C_l
anl A, #Mask
sjmp En
I2: mov A, C_l
swap A
anl A, #Mask
sjmp En
I3: mov A, C_h
anl A, #Mask
sjmp En
I4: mov A, C_h
swap A
anl A, #Mask
sjmp En
En: mov R0, ACC
mov ACC, #LOW(Decode)
add A, R0
;movp A, @A
mov P0, #00h
mov P1, A
;mov A, R1
;mov P0, A
mov A,R1
anl A, #11110000b
anl P2,#00001111b
orl A,P2
mov P2,A
pop ACC
setb TR1
;mov IE, #10001011b
setb EA ; дозвіл переривань
reti
;----------------------------------------------------------------------
; підпрограма віднімання двохбайтних чисел
;----------------------------------------------------------------------
Sub2b: clr C
mov A, R2
subb A, DPL
mov R2, A
mov A, R3
subb A, DPH
mov R3, A
ret
;----------------------------------------------------------------------
; підпрограма додавання двохбайтних чисел
;----------------------------------------------------------------------
Add2b: mov A, R2
add A, DPL
mov R2, A
mov A, R3
addc A, DPH
mov R3, A
ret
;----------------------------------------------------------------------
;підпрограма переведення двохбайтного ;шістнадцяткового числа в двійково-десяткову форму
;----------------------------------------------------------------------
Bin2dec:
clr A
mov R5, A
mov R6, A
mov R7, A
mov DPTR, #10000
D1: lcall Sub2b
jc D2
inc R6
sjmp D1
D2: lcall Add2b
mov DPTR, #1000
D3: lcall Sub2b
jc D4
inc R7
sjmp D3
D4: lcall Add2b
mov A, R6
swap A
add A, R7
mov R6, A
mov DPTR, #100
D5: lcall Sub2b
jc D6
inc R5
sjmp D5
D6: lcall Add2b
mov R7, #0
mov DPTR, #10
D7: lcall Sub2b
jc D8
inc R7
sjmp D7
D8: mov A, R5
swap A
add A, R7
mov R5, A
ret
END