Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
САПР_ЗВ(лекц5-АЦП).doc
Скачиваний:
3
Добавлен:
30.08.2019
Размер:
442.88 Кб
Скачать

Контрольні запитання

  1. Методи і типи АЦП.

  1. Статичні параметри АЦП.

  2. Поняття дискретності, квантування, роздільна здатність.

  3. Характеристика перетворення, диференціальна нелінійність АЦП, відхилення коефіцієнта перетворення.

  4. Напруга зсуву нуля.

  5. Динамічні параметри АЦП.

  6. Час перетворення, час затримки запуску, час циклу перетворення, максимальна частота перетворення.

  7. Поняття апертурного часу.

  8. Фактори, що впливають на похибку АЦП.

  9. Апаратні реалізації АЦП.

  10. Приклади практичного застосування АЦП.

  11. Побудова схем АЦП за допомогою мікросхем ЦАП.

; КВМ4_D7n SMD, ADuC831: 09.02.07 (04/10/05)

2 ; Параметри: -72V/75A (200A), Ia1,Ia2 = +-75A (+-200A)

3 ; RS232: v=9600 bod; t-корекцiя; #3 каналу АЦП в DrvACP0

4 ; +! викор. Data EE/Flash, + Керування зарядом АБ

517 ;===================================================

=1 91 ;----Константи призначення/РОЗПОДIЛУ IRAM ADuC812----------------

0001 =1 92 NBlok EQU 01 ; N блока в мережi (замiсть прописки в SerN)

0008 =1 93 ComBuf Equ 008h ; IRAM для Kоду КОМАНДИ, що виконуеться (10h..1Fh)

0030 =1 94 IRAM EQU 030h ; Internal RAM (з 80h викор. пiд стек)

0050 =1 95 MRAM EQU 050h ; IRAM для математич-х операцiй

0080 =1 96 StackRAM EQU 080h ; стек

---- 519 CSEG

0000 520 ORG 0

0000 020060 521 JMP Begin

522

0003 523 ORG 003H

0003 32 524 Int0_wekt: RETI ; Ljmp Int_INT0 ; Int0=вх.P3.2<- CTS4= Сек. мiтка

525

000B 526 ORG 00BH

000B 020EFE 527 TC0_wekt: Ljmp IntTC0 ; Пiдготовка кадрiв в ПЕОМ (T=50 мс)

528

0013 529 ORG 013H

0013 32 530 IE1_wekt: RETI ; Int1 Зовнiш. вх.P3.3

531

001B 532 ORG 01BH

001B 32 533 TC1_wekt: RETI ; Int T/C1

534

0023 535 ORG 023H

0023 020F69 536 RITI_wekt: Ljmp Int_RS232 ; Передача/прийом байту RS232 (TI+RI)

537

0060 556 ORG 60h

0060 557 Begin:

0060 C2C1 558 clr WDE ; заборонити сторож. таймер

0062 7580FF 559 mov P0,#0FFh ; iнiц. Р0 ОЕОМ на ввiд

0065 7590FF 560 mov P1,#0FFh ; iнiц. Р1 ОЕОМ: аналоговий ввiд

0068 75A0CF 561 mov P2,#0CFh ; iнiц. Р2: R/S,E1=0, решта=1

006B 75B0FB 562 mov P3,#0FBh ; iнiц. Р3: на ввiд, Rel1=0 (АБ= Пiдключ.)

565 ;---------------- Init ACP & CAP == for ADuC841 (/uC831)-------

567 ;for ADu831:

0074 75EFAC 568 ; mov ADCCON1,#0ACh ;ExtUref,реж.АЦП, 4Mclk+4clk acq_time (~7mks)

569 ; mov ADCCON1,#08Ch ;(CCh) норм. реж.АЦП, 16Mclk+4clk acq_time

570 ;for ADu841:

571 mov ADCCON1,#0ECh ;ExtUref,реж.АЦП, 4Mclk+4clk acq_time (~7mks)

0077 75D808 572 mov ADCCON2,#8 ; # каналу=8?; ADCI,DMA,CCONV,SCONV=0

007A 75FD0D 574 MOV DACCON,#00Dh ; DAC0,1 on, 12bit, asynchronous

575 ; call LKodUout ; Загр. код в ЦАП (з Flash=PtrUout=0Ah=Uout)

576 ; поч. знач. ЦАП ~0600h +-> в копiю ЦАП

577 ; ..для уникнення перезаряду при включ.

693 ;=========**************** ГОЛОВНИЙ ЦИКЛ ПРОГРАМИ *************===========

0132 694 MAinCkl:

0132 D2C0 695 setb WDWR ; перезапуск сторожевого таймера ADu831

0134 D2C1 696 setb WDE ; (..у вiдповiдному порядку)

0136 30731C 697 jnb IndOK_fl,MeasPar ; 1=параметри готовi (пiсля 1го вкл.)

698 ;---провiрити статус-------

0139 120DD3 699 call RdStatus ; опитати стан аварiйних сигналiв

013C B52C03 700 cjne a,Awar_FL,ChngAwar; OnAlarm

013F 020155 701 jmp MeasPar ; EndStat

0142 702 ChngAwar:

0142 F52C 703 mov Awar_FL,a

0144 12136F 704 call WrInf2FRAM ; Записати Info-блок в момент змiни

0147 E52C 705 mov a,Awar_FL

0149 B4FF04 706 cjne a,#0FFh,OnAlarm ;a<>FF=АВАРIЯ->на аналiз можл.вкл.звуку

707 ; (a=FF)=> OK

014C D2A7 708 setb ALRM ; викл. звук: ALRM/P2.7=1-> VT1=закр.

014E 2155 709 ajmp MeasPar ; NoAlarm

0150 710 OnAlarm:

0150 306F02 711 jnb fl_Alarm,NoAlarm; якщо немае дозволу звуку->NoAlarm

0153 C2A7 712 clr ALRM ; включ. звук: ALRM/P2.7=0-> VT1=вiдкр.

716 ;------Вимiрювання потрiбних каналiв ------------

0155 717 MeasPar:

0155 C2A9 718 clr ET0 ; Off переривання вiд TC0

0157 12150F 719 call U60vMeas ; #0 ACP U1 48..60v ->U60v (IRAM+14)

015A 121687 722 call UtABMeas ; #3 Вимiрювання температури АБ

015D 12171B 723 call MeasIn60 ; #4 ACP In1 струм навантаж. дж.U1 0..75A->In60

0160 1217C4 724 call MeasIa60 ; #5 ACP Ia1 струм АБ1 дж.U1 -75..75A ->Ia60

0163 1218E4 726 call MeasIa24 ; #7 ACP струм АБ2 дж.U2 -75..75A->Ia24(IRAM+30)

0166 121981 727 call tADuMeas ; #8 вимiр. температуру кристалу ADuC..

0169 D2A9 728 setb ET0 ; дозволити переривання вiд TC0

729 ;------Контроль РЕАЛЬНИХ (YY.X v) граничних значень------------

016B 121499 730 call RTC2SysTime ; Переписати ГОД.RTC/FRAM: 8 байт -> SysTime

016E 12133E 731 call TimeSave ; Зберегти блок, якщо пройшов перiод збереж.

0177 737 Displ:

0177 121ABD 738 call AsqButtn ; опит. КНОПКИ->в Buttn_FL, +MenuKod,SubMKod

017A 121D59 739 call Display

740 ;--- Aналiз i виконання команди з RS232: ----

017D 120188 741 call Exec232 ; ВИКОНАННЯ команд.бл.з RS232 (+SelBoard)

0180 80B0 742 jmp MAinCkl ; iнакше > цикл закiнчено

3116 ;======== А Ц П - Драйвер (0 рiвень: робота з апаратурою) ===============

3117 ; АЦП попередньо iнiцiал-не в норм. реж. #60h(64h,7Ch), 6.5(14.5) мкс+acq time

3118 ; (a)= # каналу з (Channel), (ADCI,DMA,CCONV,SCONV=0)

0EE3 3119 ACPdrv:

0EE3 121A15 3120 call Komut8 ; Пiдкл. канал N# =8 для нормалiзацii умов

0EE6 540F 3121 anl a,#0Fh ; a= #Channel (0..8)

0EE8 F5D8 3122 mov ADCCON2,A ; задати # каналу з Channel (R1)

0EEA C2DF 3123 clr ADCI ; скинути фл. переривання вiд АЦП

0EEC D2DC 3124 setb SCONV ; одиничний пуск АЦП

0EEE 30DFFD 3125 jnb ADCI,$ ; чекати поки не встановиться фл. перерив.

0EF1 E5D9 3126 mov a,ADCDATAL

0EF3 F530 3127 mov ACP1Lo,a

0EF5 E5DA 3128 mov a,ADCDATAH

0EF7 540F 3129 anl a,#0Fh

0EF9 F531 3130 mov ACP1Hi,a

0EFB 22 3131 RET

3132

3133 ; jmp EndACP

3036 ;============== ACP = AЦП = ACP ***********************************

3037 ; АЦП1 [(5-2)/3] каналу @R1: рез.= ACP2Hi..Lo

3038 ;=== А Ц П - Драйвер1 ( 1 рiвня: (16-2)/14)) ===============

3039 ; Використовуе ACPdrv для 16 накопичень рез-ту, вiднiмання 2-х

3040 ; екстремальних значень i усереднення результату (16-2)/14

0010 3044 nakop equ 16 ; 32

0E56 3045 ACPdrv1:

0E56 E4 3046 clr a ; Очистити початковi значення регiстрiв

0E57 F532 3047 mov ACP2Lo,a

0E59 F533 3048 mov ACP2Hi,a

0E5B F55D 3049 mov Drv5Sum,a

0E5D F55E 3050 mov Drv5Sum+1,a

0E5F F55F 3051 mov Drv5Sum+2,a

0E61 F55A 3052 mov Tmp_2,a ; ACPmax1,a

0E63 F55B 3053 mov Tmp_3,a ; ACPmax1+1,a

0E65 7558FF 3054 mov Tmp_0,#0FFh ; ACPmin1,#0FFh

0E68 75590F 3055 mov Tmp_1,#0Fh ; ACPmin1+1,#0Fh

0E6B 7D10 3056 mov r5,#nakop

0E6D 3057 Adrv1Loop:

0E6D E51F 3058 mov a,Channel

0E6F 120EE3 3059 call ACPdrv ; зчитати канал (a) = Channel

0E72 E530 3060 mov a,ACP1Lo

0E74 8531F0 3061 mov b,ACP1Hi

0E77 7858 3062 mov r0,#Tmp_0 ; ACPmin1

0E79 1227B9 3063 call cmpAB_R0 ; порiвняти з мiнiмальним: c=1 if AB<@r0

0E7C 5005 3064 jnc Asqmax ; c=0 якщо AB>=@r0 - перехiд на порiвн. max

0E7E F558 3065 mov Tmp_0,a ; ACPmin1,a

0E80 85F059 3066 mov Tmp_1,b ; ACPmin1+1,b

0E83 3067 Asqmax:

0E83 785A 3068 mov r0,#Tmp_2 ;ACPmax1

0E85 1227B9 3069 call cmpAB_R0 ; порiвняти з максимальним

0E88 4005 3070 jc NotMax ; c=1 якщо AB<@r0

0E8A F55A 3071 mov Tmp_2,a ;ACPmax1,a

0E8C 85F05B 3072 mov Tmp_3,b ;ACPmax1+1,b

0E8F 3073 NotMax:

0E8F E530 3074 mov a,ACP1Lo

0E91 8531F0 3075 mov b,ACP1Hi

0E94 785D 3076 mov r0,#Drv5Sum

0E96 C3 3077 clr c

0E97 1227EA 3078 call DADD ; AB+@r0->AB

0E9A 5002 3079 jnc no35Sum

0E9C 055F 3080 inc Drv5Sum+2

0E9E 3081 no35Sum:

0E9E F55D 3082 mov Drv5Sum,a

0EA0 85F05E 3083 mov Drv5Sum+1,b

0EA3 DDC8 3084 djnz r5,Adrv1Loop

3085 ; jmp dilennya

3086 ; вiдняти вiд суми максимальне значення

0EA5 E55A 3087 mov a,Tmp_2 ;ACPmax1

0EA7 855BF0 3088 mov b,Tmp_3 ;ACPmax1+1

0EAA 785D 3089 mov r0,#Drv5Sum

0EAC 1227E8 3090 call DSUB ; @r0 - AB ->AB

0EAF F55D 3091 mov Drv5Sum,a

0EB1 85F05E 3092 mov Drv5Sum+1,b

3093 ; вiдняти вiд суми мiнiмальне значення

0EB4 E558 3094 mov a,Tmp_0 ; ACPmin1

0EB6 8559F0 3095 mov b,Tmp_1 ; ACPmin1+1

0EB9 785D 3096 mov r0,#Drv5Sum

0EBB 1227E8 3097 call DSUB

0EBE F55D 3098 mov Drv5Sum,a ; зберегти рез-т

0EC0 85F05E 3099 mov Drv5Sum+1,b

3100 ; подiлити рез-т на 3 (усереднити)

3101 ; call Load_OP ; завантажити OP_0..3 з AB

0EC3 3102 dilennya:

0EC3 855D50 3103 mov OP_0,Drv5Sum;a

0EC6 855E51 3104 mov OP_1,Drv5Sum+1;b

0EC9 855F52 3105 mov OP_2,Drv5Sum+2

0ECC 755300 3106 mov OP_3,#0h

0ECF 75560E 3107 mov Div16b,#nakop-2 ; !!!

0ED2 755700 3108 mov Div16b+1,#0

0ED5 1229C7 3109 call Div_16

0ED8 E550 3110 mov a,OP_0

0EDA 8551F0 3111 mov b,OP_1

0EDD F532 3112 mov ACP2Lo,a

0EDF 85F033 3113 mov ACP2Hi,b

0EE2 22 3114 RET

2914 ;==== for ADuC841 Init RS232 -----

0DED 2915 IniRS841: ; for ADu841

2916 ; mov SCON,#01000000b ;реж.роботи RS232 = 1(8 бiт)

0DED 759E83 2917 MOV T3CON,#83h ; 81h/20h = 115200

0DF0 759D20 2918 MOV T3FD,#20h ; 82h/20h = 57600

0DF3 759852 2919 MOV SCON,#52h

0DF6 22 2920 RET