Электрические и временные характеристики интерфейса RS-485
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

· До 32 приёмопередатчиков в одном сегменте сети.

· Максимальная длина одного сегмента сети: 1200 метров.

· В один момент активным может быть только один передатчик.

· Максимальное количество узлов в сети — 256 с учётом магистральных усилителей.

· Характеристика скорость обмена/длина линии связи:

· 62,5 кбит/с 1200 м (одна витая пара),

· 375 кбит/с 500 м (одна витая пара),

· 500 кбит/с,

· 1000 кбит/с,

· 2400 кбит/с 100 м (две витых пары),

· 10000 кбит/с 10 м.

 

ESP32

• 34 × programmable GPIOs

• 12-bit SAR ADC up to 18 channels

• 2 × 8-bit DAC

• 10 × touch sensors

• 4 × SPI

• 2 × I2S

• 2 × I2C

• 3 × UART

• 1 host (SD/eMMC/SDIO)

• 1 slave (SDIO/SPI)

• Ethernet MAC interface with dedicated DMA and IEEE 1588 support

• CAN 2.0

• IR (TX/RX)

• Motor PWM

• LED PWM up to 16 channels

• Hall sensor

 

28.09.2018

Аналого-цифровое преобразование. Основное предназначение и практическое применение при проектировании робота. Считывание импульсов.

Аналого-цифровой преобразователь (АЦП, англ. Analog-to-digital converter, ADC) — устройство, преобразующее входной аналоговый сигнал в дискретный код (цифровой сигнал)

· Диапазон входных значений = от 0 до 10 вольт

· Разрядность двоичного АЦП 12 бит: 212 = 4096 уровней квантования

· Разрешение двоичного АЦП по напряжению: (10-0)/4096 = 0,00244 вольт = 2,44 мВ

Архитектура АЦП прямого преобразования

 

 

Device = 16 F 873 A

Xtal = 4

'--------------------------Настройки АЦП--------------------------

                                                             

Declare Adin _ Res 10 'Разрядность результата преобразования АЦП

Declare Adin _ Tad FRC 'Источник тактирования АЦП

Declare Adin _ Stime 50

                                                              

'--------------Настройки подключения ЖКИ--------------------------

                                                             

Declare LCD _ Type ALPHA  'Тип ЖКИ - буквенно -цифровой

Declare LCD_DTPin PORTB.4 'Порт данных ЖКИ

Declare LCD_ENPin PORTB.3 'Управление линией E

Declare LCD_RSPin PORTB.2 'правление линией RS

Declare LCD_Interface 4 'Разрядность шины данных

Declare LCD _ CommandUs 2000 'Задержка перед посылкой команды

Declare LCD _ DataUs 50  'Задержка перед посылкой данных

Declare LCD _ Lines 2   'Количество строк ЖКИ

                                                             

'--------------------------Настройки портов--------------------------

                                                             

Declare PortB _ Pullups = OFF ' Выключить подтягивающие резисторы на PORTB

Declare All _ Digital = OFF 'Каждый порт выполняет свою функцию по умолчанию

                                                             

TRISA = %00000001          ' Сделать канал (вывод) AN 0 ( PORTA .0) входом

ADCON1 = %10000000         ' Установить все выводы PORTA в режим АЦП

'--------------------------Объявления переменных---------------------

Dim VAR1 As Word            ' Объявить переменную VAR 1 размером WORD

'--------------------------Главная программа--------------------------

Again:  

VAR1 = ADIn 0              ' Произвести АЦП в 0-ем канале и результат записать в переменную VAR 1

Print At 1, 1, "VAR1= " , Dec 4 VAR1 ' Вывести в первой строке ЖКИ десятичное значение VAR 1

Print At 2, 1, "VAR1= " , Bin 10 VAR1 ' Вывести во второй строке ЖКИ двоичное значение VAR 1

GoTo Again ' Вновь осуществить операцию АЦП

 

Применение АЦП при проектировании зарядного блока для электромобиля

Device = 18 F 2550 'для зарядных блоков мобильного типа, первая печатная плата с али эксперсс

Xtal = 16 '

Config_Start

PLLDIV = 5 ' Divide by 5 (20 MHz oscillator input)

CPUDIV = OSC4_PLL6 ; [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]

USBDIV = 2 ' USB clock source comes from the 96 MHz PLL divided by 2

FOSC = HSPLL_HS ' HS oscillator, PLL enabled, HS used by USB

FCMEN = OFF ' Fail-Safe Clock Monitor disabled

IESO = OFF ' Oscillator Switchover mode disabled

PWRT = On ' PWRT disabled

BOR = On ' Brown-out Reset enabled in hardware only (SBOREN is disabled)

BORV = 2 ' 0 - 4.5, 1 - 4.2 v , 2- 2.7 volt , 3 - 2 v , попробовать 25-2,5 v

VREGEN = On ' USB voltage regulator enabled

WDT = OFF ' HW Disabled - SW Controlled

WDTPS = 32768 ' 1:32768

MCLRE = On ' MCLR pin enabled; RE3 input pin disabled

LPT1OSC = OFF ' Timer1 configured for higher power operation

PBADEN = OFF ' PORTB<4:0> pins are configured as digital I/O on Reset

CCP2MX = On ' CCP2 input/output is multiplexed with RC1

STVREN = On ' Stack full/underflow will cause Reset

LVP = OFF ' Single-Supply ICSP disabled

''''''''''' ICPRT = OFF ' ICPORT disabled

XINST = OFF ' Instruction set extension and Indexed Addressing mode disabled (Legacy mode)

Debug = OFF ' Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins

Cp0 = On ' Block 0 (000800-001FFFh) not code-protected

CP1 = On ' Block 1 (002000-003FFFh) not code-protected

CP2 = On ' Block 2 (004000-005FFFh) not code-protected

CP3 = On ' Block 3 (006000-007FFFh) not code-protected

CPB = On ' Boot block (000000-0007FFh) code-protected 'On

CPD = On ' Data EEPROM not code - protected Включить защиту EEPROM памяти данных от несанкционированного считывания

WRT0 = OFF ' Block 0 (000800-001FFFh) not write-protected

WRT1 = OFF ' Block 1 (002000-003FFFh) not write-protected

WRT2 = OFF ' Block 2 (004000-005FFFh) not write-protected

WRT3 = OFF ' Block 3 (006000-007FFFh) not write-protected

WRTB = OFF ' Boot block (000000-0007FFh) not write-protected

WRTC = OFF ' Configuration registers (300000-3000FFh) not write-protected

WRTD = OFF ' Data EEPROM not write-protected

EBTR0 = OFF ' Block 0 (000800-001FFFh) not protected from table reads executed in other blocks

EBTR1 = OFF ' Block 1 (002000-003FFFh) not protected from table reads executed in other blocks

EBTR2 = OFF ' Block 2 (004000-005FFFh) not protected from table reads executed in other blocks

EBTR3 = OFF ' Block 3 (006000-007FFFh) not protected from table reads executed in other blocks

EBTRB = OFF ' Boot block (000000-0007FFh) not protected from table reads executed in other blocks

Config_End

Declare PROTON_START_ADDRESS = $1000

PortB _ Pullups = off ' Выключить подтягивающие резисторы на PORTB

Declare All _ Digital = off ' Каждый порт выполняет свою функцию по умолчанию

' настройка АЦП

Declare Adin _ Res 10 'Разрядность результата преобразования АЦП

Declare Adin _ Tad FRC 'Источник тактирования АЦП

Declare Adin _ Stime 50 ' может быть от 50 до 100 максимум(чтобы работал без ошибок)

TRISA.0=1 ' ацп считывание перепада напряж на пилоте

TRISA.2=0 ' резерв

TRISA.3=0 ' резерв

TRISA.4=0 ' резерв

TRISA.5=0 ' резерв

TRISC.0=0 ' резерв

TRISC.1=0 ' вых на тест датчика утеч тока, отправляет на кольцо шим

TRISC.2=0 ' вых ШИМ для пилота

TRISC.6=0 'резерв

TRISC.7=0 'резерв

TRISB.0=1 ' вх датчика утеч тока

TRISB.1=0 ' резерв

TRISB.2=1 ' резерв

TRISB.3=0 ' резерв

TRISB.4=0 ' резерв

TRISB.5=0 ' резерв

TRISB.6=0 ' резерв

TRISB.7=0 ' резерв

CMCON=%00000111

CCP1CON.0=0: CCP1CON.1=0: CCP1CON.2=0: CCP1CON.3=0: PORTC.2=1

 

 

ADCON1 = %00001110

ADCON0 = %00000001 ' Make PORTA.0 analogue

ADCON2 = %10000011

 

Dim ADC_Result As Word 'конечный результат измерения напряжения на Pilot

Dim ADC_Total As Dword

Dim ADC_Loops As Word

Dim Temp As Byte

Dim pwm_val As Byte ' скважность ШИМ

Dim adr As Byte ' адрес памяти где храниться значение скважности ШИМ

Dim cnt As Byte

Dim t1 As Byte

Dim i As Byte

Symbol test_gfci = PORTB.0

Symbol relay = PORTA.5 ' силовые реле

Symbol btn = PORTB.2 ' кнопка программирования уровня тока зарядки

Dim flag_btn As Bit

Symbol red = PORTA.4

Symbol green = PORTA.3

Symbol blue = PORTA.2

Dim blink As Byte ' светодиод

Dim cnt1 As Byte ' счетчик светодиода

ADC_Loops = 140

relay=0 'выключаем выход на реле

flag_btn = 0

t1 = 0

cnt = 0

adr = 1

red=0

green=0

blue=0

cnt1=0

' test _ cnt =0

i=0

 

'начало гл прогр

main:

   

GoSub ADC_Average ' Для увеличения точности выполняем усреднение

If ADC_Result<900 And ADC_Result>800 Then CCP1CON.0=1: CCP1CON.1=1: CCP1CON.2=1: CCP1CON.3=1:HPWM 1, 66, 1000: DelayMS 10: GoTo hpwm_sub '10 ампер - это 44 , 12А-51 '939 '746 841 631 6

If ADC_Result<800 And ADC_Result>700 Then CCP1CON.0=1: CCP1CON.1=1: CCP1CON.2=1: CCP1CON.3=1:HPWM 1, 66, 1000: DelayMS 10: GoTo hpwm_sub

 

If ADC_Result>1000 Then GoTo fault

If ADC_Result<700 Then GoTo fault

 

 

CCP1CON.0=0: CCP1CON.1=0: CCP1CON.2=0: CCP1CON.3=0: PORTC.2=1 :relay=0

GoTo main

 

 

hpwm_sub:

 

GoSub ADC_Average ' Для увеличения точности выполняем усреднение

     

If ADC_Result<800 And ADC_Result>700 Then relay=1: DelayMS 5: GoTo hpwm_sub_1

 

If ADC_Result>900 Then GoTo main

 

If ADC_Result>1000 Then GoTo fault

If ADC_Result<700 Then GoTo fault

            

DelayMS 5 '50

GoTo hpwm_sub     

 

hpwm_sub_1:

  

GoSub ADC_Average ' Для увеличения точности выполняем усреднение

If ADC_Result>800 And ADC_Result<900 Then relay=0: DelayMS 5: GoTo hpwm_sub

If ADC_Result>900 Then GoTo main

 

If ADC_Result>1000 Then GoTo fault

If ADC_Result<700 Then GoTo fault

 

GoTo hpwm_sub_1

 

 

 

'из fault никто не выйдет пока не перегрузят контроллер или диапазон не нормализуется

'причиной входа в faul может быть превышение диапазона напряжений на пилоте - больше 1000 или меньше 700

 fault:

GoSub ADC_Average ' Для увеличения точности выполняем усреднение

If ADC_Result>700 And ADC_Result<1000 Then GoTo main

                           

CCP1CON.0=0: CCP1CON.1=0: CCP1CON.2=0: CCP1CON.3=0: PORTC.2=1

CCP2CON.0=0: CCP2CON.1=0: CCP2CON.2=0: CCP2CON.3=0: PORTC.1=0

DelayMS 100

GoTo fault

 

 '***********************************************************

ADC_Average: ' Выполним усреднение для увеличения точности

ADC_Total = 0 ' Очистим суммирующий регистр

' Зациклим на выполнении усреднения определенное количество раз

 For Temp = 1 To ADC_Loops

 ADC_Result = ADIn 0 ' Получим новое значение

 ADC_Total = ADC_Total + ADC_Result ' Складываем в суммирующий регистр

 DelayMS 2 ' Время на разряд внутреннего конденсатора

 Next

 ' Определим среднее значение полученной величины

 ADC_Result = ADC_Total / ADC_Loops

 'DelayMS 100

 Return

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

05.10.2018

Дата: 2019-02-02, просмотров: 233.