Skip to the content
PCBKitNew board
2 layers94.6 × 60.3 mmControlBoard, the printed circuit board in 3D

Software, Firmware & Documentation is licensed under GPLv3

Size
94.6 × 60.3 mm
Copper layers
2
Thickness
1.6 mm
Parts
31
Nets
111
Pads
368
Tracks, vias
1,163, 120
Pours
3
Routed
Yes
KiCad
KiCad 4
Created
3 Jun 2017
Updated
10 Nov 2021

Overview

ControlBoard is an open-source printed circuit board by InfernoEmbedded, from the InfernoEmbedded/onewire-softdevice repository on GitHub. It is a 2-layer board of 94.6 × 60.3 mm with 31 parts on 111 nets, routed with 1,163 tracks and 120 vias.

It is built around the LP2950-33. Its parts include 16 capacitors, 7 connectors and 2 ICs. It belongs with the STM32 boards of this library.

Main components

1

README

README.md

About

This repository contains hardware designs and software for implementing slave devices using the Maxim 1-Wire® protocol on the STM32 microcontrollers.

Licensing

Hardware is licensed under the The TAPR Open Hardware License Version 1.0

Software, Firmware & Documentation is licensed under GPLv3

Prerequisites

Hardware Design

Firmware

Layout

The libs directory contains source code for the OneWireSlave library.

The devices directory contains schematics, PCBs & firmware for the client devices.

Devices

Template

A template schematic with the basics wired up.

Splitter

A passive Y splitter that allows short CAT5 runs to be broken off the main bus. A typical use would be to allow a short run to be dropped down a wall to a sensor or switch panel. Optionally includes a DS18B20 for temperature sensing.

DS2408 Emulator

A partial implementation of the DS2408 in software, used for initial testing of the 1-Wire® protocol, but is otherwise unmaintained and unsupported.

DS2408 4 Channel Switch

A device that accepts 4 switches, and provides 4 solid state relays. A jumper allows the relays to operate independently, or forced to operate in on/off pairs (for roller shutter/projector screen control). Somewhat obsoleted by SoManySwitches.

Fimware Updater

A sub-16KB bootloader which allows devices that implement the Inferno Embedded commands to update firmware over the bus. The included STM32F030X8.ld linker file stores the bootloader at the start of the flash region. Firmware that is designed to be flashed with this uses a modified linker file that stores the firmware with a 16kB offset.

Inferno Embedded commands allow the device to be rebooted into the bootloader so that they can be updated. The device can also be forced to remain in bootloader mode by shorting SWDAT on the SWD header to GND with a jumper.

SoManySwitches

A device with 8 RJ45 jacks, which each permit 6 toggle or momentary switches to be connected to the 1-Wire® network. The device will be alarmed when a switch is activated, and can then be polled to identify which switch was activated.

SoManySwitches Clientboard

A daughterboard for SoManySwitches, designed to be installed at the switch point. The RJ45 socket is broken out into pairs of Gnd/Switch, and pullup/pulldowns are provided to suppress spurious switch activations.

Aircon Zone Controller

A device that controls up to 8 24VAC air conditioning dampers, following the PolyAire pinout:

RJ45 PinSignal
1N/C
2Open
3Open
4Neutral
5Neutral
6Close
7Close
8N/C

By setting the transition time for each damper, the controller can partially open them, allowing balancing to be achieved via software control.

4 Channel RGBW LED Controller

A device to control up to 4 channels of common-anode RGBW LED strips, at up to 48V. Fading from the current colour to a new one is handled locally. An external relay can be driven via the Inline SSR board, allowing the LED power supply to be shut down when no strips require power.

Inline SSR

A small board with a solid state relay installed, designed to be mounted inline in a power cord. It connects to other boards via a headphone cable.

Hardware Design

Microcontroller

This software has been developed and tested on the STM32F030R8 microcontroller, an ARM Cortex-M0 with 64kB of flash & 8kB of RAM. We are running it at 48MHz using the internal RC oscillator. It may be possible to reduce the clock speed, but this is untested. They can be purchased for around AUD$1 each on Aliexpress.

Prototype testing can be performed on a Nucleo-F030R8.

Microcontroller Pin Usage

A single GPIO from the microcontroller is used to communicate over the 1-Wire® protocol. This is typically pin F0.

RJ45 Pinout

RJ45 PinSignal
1Gnd
2+5V
3Gnd
41W Data
5Gnd
6N/C
7+24V
8Gnd

Software Design

Runtime

The library sits on top of the Mbed runtime, altough it is more reliant on the lower level HAL APIs than the Mbed constructs. The bootloader uses a cut-down version of the runtime to allow it to fit within 16kB, however, the cost is that it cannot print to the serial port.

Low Level (OneWireSlave.cpp)

This file contains the base class for implementing 1-Wire® protocol devices. It provides methods to send and receive data on the bus, and handles device enumeration. It consumes Timer6 which it uses to maintain a 1 uS timer for signal timing. It uses the low level HAL APIs for catching state changes on the GPIO line, as the InterruptIn class added too much latency.

Protocol Level (SoftDevice.cpp)

This file defines how InfernoEmbedded devices communicate over 1wire. Each device reports a 64 bit type and 64 bit version, so only a single 1-Wire® family code is used (FE).

1wire commands are issued as follows: Master: Command Code (1 byte), Command data (up to 8 bytes), CRC8

Slave: Command good/bad (1 byte)

Slave: device response (chunks of up to 8 bytes)

Or...

Master: Streaming data

A 64 bit status register is provided, and the device will show up in alarm scans if any bits are set. On powerup, bit 0 is set (Power-on), allowing the devices to be reinitialised if they need state from the master. The status register is cleared automatically after each read.

Device Level (SwitchMaster.cpp & friends)

These files provide the device specific implementations. They define the 1-Wire® commands that are accepted, and interact with the user code via Listener classes. to allow designs to scale, the driver will report the number of implementations it supports (eg. switches), so that many physical variants can share the same code.

Getting Started

Development Environment

  • Install Eclipse for C/C++ development
  • Install System Workbench for STM32 Eclipse plugins
  • Clone the mbed sources git clone https://github.com/ARMmbed/mbed-os.git
  • Build the arm-nano-eabi toolchain by running build.sh in the toolchain directory
  • Fetch the ARM official toolchain by running build-arm.sh in the toolchain directory
  • use the scripts build.(bat|sh) and build-trace.(bat|sh) in the mbed directory to build the thin or trace-enabled builds of Mbed
  • Import the mbed Eclipse project
  • Import the Eclipse projects from this repository

Hardware Tools

These will be useful during development

Adding a new device

First, consider whether one of the existing device level drivers will do what you need, or can be expanded to achieve your goals (without straying too far from the intent of the driver). If you need to expand it, increment the version so that the client software (eg. OWFS) can identify what commands are available.

Next, create a frontend project that interacts with the device level driver. You may initially want to use a listener that uses the TRACE() macro rather than interacting with the hardware until you are happy with the protocol.

Finally, submit patches to OWFS that implement the new device driver. You can look at owfs/owlib/src/c/ow_ie_*.c to see how the existing drivers work. Important to note are the visibility functions, which allow a single family code to appear as many different devices.

Parts

31
QtyValueFootprintReferences
13100nFCapacitors_SMD:C_0603C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C16
4CONN_02X15Pin_Headers:Pin_Header_Straight_2x15_Pitch2.54mm_SMDP2, P3, P4, P5
4MountingHole_3.2mm_M3Mounting_Holes:MountingHole_3.2mm_M3REF1, REF2, REF3, REF4
1100uFCapacitors_SMD:CP_Elec_8x10C14
1100uFCapacitors_SMD:C_1206C15
14.7uFCapacitors_SMD:C_0603C1
1BARREL_JACKConnect:BARREL_JACKCON1
1CONN_02X05Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm_SMDP1
1DC-DC_REGD-Sun DC-DC Regulator:D-SUN_DC_DCM1
1LP2950TO_SOT_Packages_SMD:TO-252-2U2
1OSHW-logo_silkscreen-back_6mmOSHW Logo:OSHW-logo_silkscreen-back_6mmG***
1OrangePiPrimeOrangePi:OrangePiPrimeJ1
1STM32F412Z(E-G)Tx_uHousings_QFP:LQFP-144_20x20mm_Pitch0.5mmU1

Questions

How big is the ControlBoard PCB?

It measures 94.6 × 60.3 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ControlBoard use?

31 parts, built around the LP2950-33. 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 ControlBoard KiCad files?

From the InfernoEmbedded/onewire-softdevice repository on GitHub, at the commit this page was made from: the board is devices/PiMultichannelMaster/ControlBoard/ControlBoard.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the ControlBoard design in my own project?

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

More from InfernoEmbedded/onewire-softdevice

11
  • 2 layers88.3 × 48.3 mmOutputBoard, the printed circuit board in 3D

    OutputBoard

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    71 parts11
  • 2 layers99.8 × 99.8 mm1Wire Blank, the printed circuit board in 3D

    1Wire Blank

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    40 parts11
  • 2 layers99.9 × 94.5 mm1Wire AC Zoning, the printed circuit board in 3D

    1Wire AC Zoning

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    39 parts11
  • 2 layers99.8 × 99.8 mm1Wire LEDController, the printed circuit board in 3D

    1Wire LEDController

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    35 parts11
  • 2 layers46 × 91.3 mm4Channel SSR Switch, the printed circuit board in 3D

    4Channel SSR Switch

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    25 parts11
  • 2 layers192.9 × 41.3 mm1Wire SoManySwitches, the printed circuit board in 3D

    1Wire SoManySwitches

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    20 parts11
  • 2 layers45.1 × 44.7 mm16 Channel SSR Driver, the printed circuit board in 3D

    16 Channel SSR Driver

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    18 parts11
  • 2 layers65.5 × 59.4 mm1wire-4switch, the printed circuit board in 3D

    1wire-4switch

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    18 parts11
  • 2 layers19.9 × 27.4 mmSoManySwitches ClientBoard, the printed circuit board in 3D

    SoManySwitches ClientBoard

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    8 parts11
  • 2 layers59.4 × 31 mm1wire roof module, the printed circuit board in 3D

    1wire roof module

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    5 parts11
  • 2 layers17.1 × 30.5 mmInline SSR, the printed circuit board in 3D

    Inline SSR

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    4 parts11

Similar boards

  • 2 layers39.5 × 80.5 mmCem3340-vco, the printed circuit board in 3D

    Cem3340-vco

    carr-james/cem3340-vco

    A clone of Kassutronics 3340. Entirely for the purpose of learning how to build a Eurorack module, start to finish.

    58 parts7
  • 2 layers50 × 50 mmLiPo Protection, the printed circuit board in 3D

    LiPo Protection

    ngollon/LiPo-Protection

    KiCAD Layout of a LiPo discharge protection board

    56 parts2
  • 2 layers114.3 × 114.3 mmPCB design files, the printed circuit board in 3D

    PCB design files

    ACSLaboratory/pheeno_robot_electronic_schematics

    Electronic schematics for the Pheeno robot!

    75 parts1BSD-3-Clause
  • 2 layers38 × 120 mmTemp, the printed circuit board in 3D

    Temp

    uel/temperature-indicator

    A 44 component rugged temperature-indicating PCB using solar power and a supercapacitor. Board is designed to fit in a durable and cost efficent enclosure (PET bottle prefab) and sized exactly to the solar panel.

    51 parts
  • 2 layers44.5 × 46.9 mmOSO SWAT B1-jig, the printed circuit board in 3D

    OSO SWAT B1-jig

    joeycastillo/Sensor-Watch

    A board replacement for the classic Casio F-91W wristwatch

    31 parts2.1k
  • 2 layers65 × 30 mmRgb to hdmi, the printed circuit board in 3D

    Rgb to hdmi

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    31 parts1kGPL-3.0
  • 2 layers191 × 98.5 mmMacroKeypad, the printed circuit board in 3D

    MacroKeypad

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    31 parts915
  • 2 layers39 × 45.2 mmCH32V003F4P6-R0-1v1, the printed circuit board in 3D

    CH32V003F4P6-R0-1v1

    openwch/ch32v003

    CH32V003 is an ultra-cheap RISC-V MCU with 2KB SRAM, 16KB flash, and up to 18 GPIOs that sells for under $0.10

    31 parts599