Skip to the content
PCBKitNew board
4 layers80 × 100 mmTempCtrl, the printed circuit board in 3D

Schematic, PCB and source code for a high-precision digital temperature controller

Size
80 × 100 mm
Copper layers
4
Thickness
1.6 mm
Parts
186
Nets
155
Pads
671
Tracks, vias
1,677, 227
Pours
20
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
2 Feb 2018
Updated
21 Jul 2021

Overview

TempCtrl is an open-source printed circuit board by charlesbaynham, from the charlesbaynham/DigitalTemperatureController repository on GitHub. It is a 4-layer board of 80 × 100 mm with 186 parts on 155 nets, routed with 1,677 tracks and 227 vias.

It is built around the ATMEGA328P-AU, 74LS125DC and ISO3088-Y, with the TMA0505S, RS485 and OPA548T among its other parts. Its parts include 54 capacitors, 39 resistors, 19 ICs, 10 connectors and 6 diodes. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

12

README

README.md

Digital Temperature Controller

Copyright Charles Baynham 2018

This repository holds a design for a digital temperature controller. The controller is designed for taking high precision temperature measurements via a thermistor and applying low bandwidth PID feedback in response.

This README file gives a brief overview of the device, but a much more detailed description is available in the manual, located in ./Manual.

./Board design contains schematics and PCB layouts for the controller board. This was produced in the open-source software KiCad.

./Code_for_microcontroller contains the C++ code that must run on the on-board microcontroller.

./Code for Labview contains a sample LabView application for controlling the device. See warning below...

Output

Output is by OPA458 high power opamps. Output can be up to 1A continuous, at voltages up to ±15V depending on the power supply.

Input

Error signal acquisition is done by taking a balanced measurement between a thermistor and a set resistor. The board produces an excitation voltage and measures the difference in current between the thermistor and resistor to produce a temperature measurement. For less demanding applications the set resistor can be on-board. For the highest stability, the precision resistor should be placed next to its paired thermistor. This measurement is performed by an INA330 chip, of which there are two present on the board. The entire analogue section is electrically isolated from the rest of the board to prevent noise on the electrical ground affecting the measurement.

Control

The board can be controlled using a (virtual) serial connection over either USB or RS-485. Both of these interfaces are galvanically isolated to prevent electrical interference. The on-board microcontroller permits headless operation of the device, and commands may be issued using a LabView interface.

Code

The code running on the device is written in c++ and has been well tested. The LabView control interface, designed to be run on a monitoring computer, is less well-tested and should be used at your own peril! For integration into an experimental system, control the device by issuing serial commands detail in the supplied manual.

Manual

You should go read it now. It's in ./Manual.

Extensions

The board is designed to break out the important analog (and come digital) connections, so that additional functionality can be enabled by adding a daughter-board to the main board. For example, you might

  • Require higher output currents
  • Not need current driving capability, but would prefer very low-noise output instead
  • Need an extreme level of stability, so use an external, ovenized voltage reference

None of these daughter-boards yet exist, but the interface required to create them exists from V5 onwards.

Initial setup

The microcontroller needs to be flashed using Atmel Studio and an ISP programmer. You should either:

  1. Set the fuses as described in fuse_settings.txt
  2. Flash the bootloader saved as optiboot_atmega328_custom_NANO.hex
  3. Use the Arduino IDE to compile and upload the latest version of the code

OR

  1. Flash the complete production .elf file stored in .\Code_for_microcontroller using Atmel Studio, making sure to select "Flash", "Fuses" and "Verify Device ID" in Atmel Studio. This will give you whatever version of the code was stored in this .elf file, you can then update it using the Arduino IDE if you want to make changes.

Parts

186
QtyValueFootprintReferences
22100nCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC12, C13, C20, C21, C26, C27, C29, C31, C33, C34, C37, C38, C43, C45, C46, C47 +6
17100RResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR1, R2, R3, R4, R21, R22, R23, R26, R29, R30, R31, R34, R37, R38, R39, R43 +1
161uCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC3, C4, C6, C7, C10, C11, C18, C19, C28, C35, C36, C40, C41, C48, C55, C56
1310kResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR9, R11, R24, R25, R27, R28, R32, R33, R35, R36, R40, R41, R42
7PINTestPoint:TestPoint_THTPad_3.0x3.0mm_Drill1.5mmDB_5V1, DB_GND1, DB_GND2, DB_GND3, DB_VCC1, DB_VCC2, DB_VCC3
6Jumper_NO_SmallCustom:SmallJumperNoCourtyardJP2, JP3, JP4, JP5, JP6, JP7
5MountingHole_2.2mm_M2_Pad_ViaMountingHole:MountingHole_2.2mm_M2_Pad_ViaMOUNT, MOUNT, MOUNT, MOUNT, MOUNT
4100pCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC14, C15, C22, C23
415pCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC42, C44, C49, C51
41kResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR_Ser1, R_Ser2, R10, R20
41k_precResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR_R1, R_R2, R_T1, R_T2
4200KResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR13, R15, R17, R19
451KResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR12, R14, R16, R18
4OPA548Custom:TO-263-7LeadU5, U6, U7, U8
4PINTestPoint:TestPoint_THTPad_1.5x1.5mm_Drill0.7mmDB_ES1, DB_ES2, DB_OPA1, DB_OPA2
322k_precResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR_gain1, R_gain2, R_Prec4
210k_precCustom:Resistor_Vertical_RM5mm_CustR_Prec1, R_Prec2
210nCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC8, C9
21nCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC_filter1, C_filter2
247uCapacitors_ThroughHole:C_Radial_D5_L11_P2C2, C5
28pCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC30, C32
2AD8639Housings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mmU14, U16
2DAC8564Housings_SSOP:TSSOP-16_4.4x5mm_Pitch0.65mmU15, U17
2INA330Housings_SSOP:MSOP-10_3x3mm_Pitch0.5mmU9, U10
12.5VTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW3
122uCapacitors_ThroughHole:C_Radial_D5_L11_P2C1
1233-2977Custom:Molex_Microfit3_Header_02x04_Angled_43045-080x_FIXEDP1
133k_precResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR_Prec3
14.7nCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC39
15V_ISOTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW4
15V_Outputs_1Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ1
15V_Outputs_2Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
174LS125Package_SO:SSOP-14_5.3x6.2mm_P0.65mmU18
1820-8104Custom:RJ45_TEP2
1ADC breakoutPin_Headers:Pin_Header_Straight_2x04_Pitch1.27mmP6
1ADS1262Housings_SSOP:TSSOP-28_4.4x9.7mm_Pitch0.65mmU13
1ADuM7642CRQZHousings_SSOP:SSOP-20_4.4x6.5mm_Pitch0.65mmU3
1ATMEGA328P-AHousings_QFP:LQFP-32_7x7mm_Pitch0.8mmIC1
1BARREL_JACKConnector_BarrelJack:BarrelJack_HorizontalCON1
1DISABLE FLASHPin_Headers:Pin_Header_Straight_1x03JP1
1DISABLE_COMMSCustom:ApemSwitchSW1
1Disable_OPA1Jumper:SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm_NumberLabelsDISABLE_OPA1
1Disable_OPA2Jumper:SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm_NumberLabelsDISABLE_OPA2
1Disable_OPA3Jumper:SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm_NumberLabelsDISABLE_OPA3
1Disable_OPA4Jumper:SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm_NumberLabelsDISABLE_OPA4
1External 2.5v refConnector_Coaxial:MMCX_Molex_73415-1471_VerticalJ2
1FT232RLHousings_SSOP:SSOP-28_5.3x10.2mm_Pitch0.65mmU12
1GND_ISOTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW2
1ICSPCustom:6pin_3x2_Amphenol_75869-131LFP5
1INA1TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW1
1ISO3088Housings_SOIC:SOIC-16W_7.5x10.3mm_Pitch1.27mmU4
1ISO7242Housings_SOIC:SOIC-16_7.5x10.3mm_Pitch1.27mmU11
1LEDCustom:PCB_MOUNT_LEDD6
1LM7805Custom:TO220_HORZU1
1Led_x2_splitCustom:Double_LEDsD1
1OPA1_IN+TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW5
1OPA1_IN-TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW6
1OPA2_IN+TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW8
1OPA2_IN-TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW9
1POWERLEDs:LED_0805D2
1RS485Connectors_Molex:Molex_PicoBlade_53048-0410_04x1.25mm_AngledP3
1RS485_TERMResistor_THT:R_Axial_DIN0516_L15.5mm_D5.0mm_P5.08mm_VerticalR8
1RXLEDs:LED_0805D4
1SCLKLEDs:LED_0805D5
1Select V_refJumper:SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm_NumberLabelsSELECT_VRef1
1TMA0505SCustom:SIP_TMA0505U2
1TSX-3225 X1E0000210013Crystals:crystal_FA238-TSX3225X1
1TXLEDs:LED_0805D3
1USB_OTGCustom:MICRO-B_USB_TOP_MOUNTP4
1VLIM1TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW7
1VLIM2TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmW10

The 184 most common of 186 parts.

Questions

How big is the TempCtrl PCB?

It measures 80 × 100 mm and has 4 copper layers, 1.6 mm thick.

What parts does the TempCtrl use?

186 parts, built around the ATMEGA328P-AU, 74LS125DC, ISO3088-Y and TMA0505S. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the TempCtrl KiCad files?

From the charlesbaynham/DigitalTemperatureController repository on GitHub, at the commit this page was made from: the board is Board design/PCB_Schematic/TempCtrl.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the TempCtrl design in my own project?

Its repository states no licence, so its author keeps all rights: ask charlesbaynham before reusing the design.

Similar boards

  • 4 layers100 × 100 mmGP22 board, the printed circuit board in 3D

    GP22 board

    charlesbaynham/GP22_RF_Photon_Correllation

    Schematic, PCB and source code for a low-cost TDC interface designed for performing RF--Photon correllation for atomic physics experiments

    147 parts11
  • 2 layers113 × 70 mmNGL PROTO ST, the printed circuit board in 3D

    NGL PROTO ST

    benoitGIRAUD/NGL_PROTO_ST

    Proto sous tarité en // du PCB usiné

    145 parts
  • 6 layers68 × 52 mmRemotev1, the printed circuit board in 3D

    Remotev1

    ABauschat/ESPNuggetv1-ADS1262HAT

    49 parts
  • 2 layers58 × 72 mmTiva adc ads1262, the printed circuit board in 3D

    Tiva adc ads1262

    fgallud/tiva_c_connected

    Is a very simple tcp modbus example for the tiva c connected board. It is written in C for the Energia IDE

    29 partsBSD-3-Clause
  • 2 layers88.9 × 87.6 mmAdc ads1262, the printed circuit board in 3D

    Adc ads1262

    fgallud/kicad

    my electronics

    30 partsMIT
  • 4 layers160 × 100 mmSmu main, the printed circuit board in 3D

    Smu main

    PaulBichl/vibepcb-smu

    VibePCB example: 4-quadrant SMU (+-30 V / +-1 A, USB-C PD, Ethernet) designed with an LLM

    244 parts1