It is currently Wed Oct 17, 2018 3:38 am

НИЛ АСЭМ Научно - исследовательская лаборатория автоматизированных систем экологического мониторинга

Преобразователь сигнала платиновых терморезисторов

by Admin » Mon Feb 26, 2018 2:45 pm

Преобразователь сопротивления платиновых терморезисторов (Pt100..Pt1000) в цифровой формат - MAX31865.
Image Image

Внешний вид платинового термосопротивления (Pt100)

Общее описание.

Платиновые термометры сопротивления сейчас используются повсюду. Они заслуженно считаются самыми стабильными и надежными контактными датчиками температуры. Основоположниками платиновой термометрии считаются британские ученые Каллендар и Гриффитс. В 1899 г. Каллендар, на основе анализа выполненных к этому времени измерений термодинамической температуры газовыми термометрами и на основе исследования образцов платиновых термометров, предложил принять платиновый термометр сопротивления, градуированный в точках замерзания воды, кипения воды и серы в качестве основного прибора для практической реализации международной шкалы температур.

Цифровой преобразователь MAX31865 оптимизирован для работы с платиновыми резистивными датчиками температуры. Внешним резистором устанавливается чувствительность используемого датчика, а прецизионный сигма-дельта АЦП
преобразует сигнал, соответствующий отношению сопротивления датчика к сопротивлению подключенного внешнего резистора (опорному сопротивлению), в цифровую форму. Входы MAX31865 защищены от выхода из строя при бросках напряжений до ±50 В. Также имеется функция обнаружения обрыва или короткого замыкания в кабеле или в самом датчике.


Особенности
- Простота преобразования сигналов с платиновых RTD‑датчиков (PT100 и PT1000)
- Совместимость с 2-, 3-, и 4‑проводными схемами подключения датчика
- АЦП с 15‑битным разрешением
- Общая точность: 0.5°С (0.05% полной шкалы), макс.
- Защита входов от бросков напряжения до ±50 В
- Обнаружение нескольких видов неисправностей датчиков

Image

2-проводное подключение датчика Pt100/1000 к MAX13865


Отладочные платы с max31865:
ImageImage


Управляющий код для MAX31865 (на Proton BASIC Compiler):
Code: Select all
Include "Amicus18.inc"                          ' Configure the compiler to use a PIC18F25K20 device at 64MHz. i.e. an Amicus18 board

$definecSensor_Wires 3                             ' PT100/1000 has 2 or 3 or 4 wire connection

$define MAX31865_SDO_Pin PORTC.4                    ' Connects to the MAX31865 SDO pin
$define MAX31865_SDI_Pin PORTC.5                    ' Connects to the MAX31865 SDI pin
$define MAX31865_SCLK_Pin PORTC.3                   ' Connects to the MAX31865 SCLK pin
$define MAX31865_CS_Pin PORTC.0                     ' Connects to the MAX31865 CS pin
'
' Create variables
'
    Dim MAX31865_bReg0 As Byte                      ' \
    Dim MAX31865_bReg1 As Byte                      ' |
    Dim MAX31865_bReg2 As Byte                      ' |
    Dim MAX31865_bReg3 As Byte                      ' | Hold the register values from the MAX31865 chip
    Dim MAX31865_bReg4 As Byte                      ' |
    Dim MAX31865_bReg5 As Byte                      ' |
    Dim MAX31865_bReg6 As Byte                      ' |
    Dim MAX31865_bReg7 As Byte                      ' /

    Dim MAX31865_bLoop As Byte                      ' The SPI loop counter
    Dim MAX31865_bData As Byte                      ' The SPI transfer variable

'------------------------------------------------------------------------------------------------
    GoTo Main                                       ' Jump over the subroutines

'-----------------------------------------------------------------------------

$define MAX31865_Enable() Low MAX31865_CS_Pin       ' Enable the SPI interface
$define MAX31865_Disable() High MAX31865_CS_Pin     ' Disable the SPI interface

'-----------------------------------------------------------------------------
' Transmit and receive one byte using SPI mode 3 protocol
' Input     : WREG = 8-bit value to send
'           : MAX31865_SCLK_Pin holds the Port.bit of the SPI Clock pin
'           : MAX31865_SDI_Pin holds the Port.bit of the SPI Data out Pin
' Output    : WREG = 8-Bit value received
' Notes     : SCLK is idle-high, and bits are latched on SCLK rising
'
$define MAX31865_Com(pByteout) _SPI_Out3 pByteout

_SPI_Out3 Macro pByteout \Byte
    #if(Prm_Count >= 1)
        #if((Prm_1 == Num8) || (Prm_1 == Num16) || (Prm_1 == Num32))
            Num_Wreg pByteout
        #else
            Byte_Wreg pByteout
        #endif
    #else
        WREG = 0
    #endif
    GoSub __SPI_Out3
    Return_WREG
Endm

__SPI_Out3:
    MAX31865_bData = WREG                           ' Transfer the WREG into MAX31865_bData
    For MAX31865_bLoop = 7 To 0 Step -1             ' Single byte SPI loop
        Low MAX31865_SCLK_Pin                       ' Pull SCLK low
        DelayMS 1
        MAX31865_SDI_Pin = MAX31865_bData.7         ' Put current outgoing bit on MAX31865_SDI_Pin
        MAX31865_bData = MAX31865_bData << 1        ' Shift next bit into MSB
        DelayMS 1
        Set MAX31865_SCLK_Pin                       ' Set SCLK high
        MAX31865_bData = MAX31865_bData | MAX31865_SDO_Pin  ' Capture current bit on MAX31865_SDO_Pin
        DelayMS 1
    Next
    WREG = MAX31865_bData                            ' Transfer MAX31865_bData into WREG
    Return

'------------------------------------------------------------------------------------------------
' Configure the Interface to the MAX31865
' Input     : None
' Output    : None
' Notes     : None
'
$define MAX31865_Setup() GoSub _MAX31865_Setup

_MAX31865_Setup:
    Low MAX31865_SCLK_Pin
    Output MAX31865_SDI_Pin
    Input MAX31865_SDO_Pin
   
    MAX31865_Enable()
    DelayMS 10   
    MAX31865_Com($80)                                   ' Point to the Configuration register ($00)
    $if cSensor_Wires = 2                               ' Are we using a 2 wire sensor?
        MAX31865_Com(% 11000010)
    $elseif cSensor_Wires = 3                           ' Are we using a 3 wire sensor?
        MAX31865_Com(% 11010010)
    $elseif cSensor_Wires = 4                           ' Are we using a 4 wire sensor?
        MAX31865_Com(% 11000010)
    $endif
    MAX31865_Disable()
    DelayMS 50
    Return

'------------------------------------------------------------------------------------------------
' Read the registers from the MAX31865
' Input     : None
' Output    : MAX31865_bReg0, MAX31865_bReg1, MAX31865_bReg2, MAX31865_bReg3, MAX31865_bReg4, MAX31865_bReg5, MAX31865_bReg6, MAX31865_bReg7
' Notes     : None
'
$define MAX31865_Read() GoSub _MAX31865_Read

_MAX31865_Read:
    MAX31865_Enable()
    MAX31865_Com(0)                                     ' Start reading from address 0
    MAX31865_bReg0 = MAX31865_Com(0)                    ' \
    MAX31865_bReg1 = MAX31865_Com(0)                    ' |
    MAX31865_bReg2 = MAX31865_Com(0)                    ' |
    MAX31865_bReg3 = MAX31865_Com(0)                    ' | Read all the 8 registers
    MAX31865_bReg4 = MAX31865_Com(0)                    ' |
    MAX31865_bReg5 = MAX31865_Com(0)                    ' |
    MAX31865_bReg6 = MAX31865_Com(0)                    ' |
    MAX31865_bReg7 = MAX31865_Com(0)                    ' /
    MAX31865_Disable()
    Return

'------------------------------------------------------------------------------------------------
' Transmit the register values via USART1
' Input     : MAX31865_bReg0 to MAX31865_bReg7
' Output    : None
' Notes     : None
'
$define Display_Registers() GoSub _Display_Registers

_Display_Registers:
    HRSOutLn "----------------------------------------------"
    HRSOutLn "Register values:"
    HRSOutLn "Reg0: Configuration = ", IBin8 MAX31865_bReg0
    HRSOutLn "Reg1: RTD MSBs = ", IHex MAX31865_bReg1
    HRSOutLn "Reg2: RTD LSBs = ", IHex MAX31865_bReg2
    HRSOutLn "Reg3: High Fault Treshold MSB = ", IHex MAX31865_bReg3
    HRSOutLn "Reg4: High Fault Treshold LSB = ", IHex MAX31865_bReg4
    HRSOutLn "Reg5: Low Fault Treshold MSB = ", IHex MAX31865_bReg5
    HRSOutLn "Reg6: Low Fault Treshold LSB = ", IHex MAX31865_bReg6
    HRSOutLn "Reg7: Fault Status = ", IBin8 MAX31865_bReg7
    Return

'------------------------------------------------------------------------------------------------
' The main program loop starts here
'
Main:
    MAX31865_Setup()                                ' Setup the interface to the chip

    Do
        MAX31865_Read()                             ' Read all 8 registers
        Display_Registers()                         ' Serially transmit the register values
        DelayMS  1000
    Loop


Литература

1. Официальная документация (datasheet) max31865.pdf производителя датчика – компании Maxim Integrated.

На главную
Admin
Site Admin
 
Posts: 203
Joined: Wed Sep 20, 2017 9:55 am

Return to Промежуточные исследования и разработки

cron

User Menu

Login