· До 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, просмотров: 258.