Zero to PCB: Block Diagram

Now that we have the circuit requirements we can begin to architect a solution through a block diagram. This will provide the basis for future work like component selection and schematic design.

What is a block diagram?

A block diagram is a high level visualization used to represent systems and their interactions with each other.

Blocks represent components or subsystems and lines between blocks represent interactions or communication.

Here is a simple block diagram

graph LR
mic["Microphone"]
sig["Signal Processing"]
amp["Audio Amplifier"]
speaker["Speaker"]

mic-->sig-->amp-->speaker

Block diagrams can contain other block diagrams as well. In the example above the signal processing block might have its own block diagram to better specify how it works.

Why use block diagrams?

Block diagrams help us visualize a complex circuit at a high level. This in turn can help us in a variety of ways.

It can help us analyze the system and find logical flaws. "Subsystem A needs Subsystem B which we didn't account for"

By splitting up the overall system into subsystems it helps us split up and roadmap the work. This also helps us plan the interfaces between systems.

The visualization is also helpful when collaborating with others and serves as documentation (as we will soon learn when discussing datasheets). For example if someone is helping you with your circuit its often helpful to give them a high level idea of what your doing before getting into the details.

Tools for creating block diagrams

I should note that many project start with a block diagram in their schematic drawing software (KiCad, Altium, Cadence)

  • draw.io

This web based tool is great, it has easy export to many formats making embedding its results easy.

  • Mermaid Charts

  • Graphviz

  • Lucid Chart

Example: LED Badge

Take a moment to review the functional requirements I came up with for badge

* Needs to light up and display an interesting pattern on the front of the pcb. There are no hard requirements on the pattern and interesting is subjective but thats okay. * The pattern should change over time. * Need to be able to turn it on and off

The first thing to do is determine what systems are needed. Looking at the requirements I see the pattern should change over time, this means we will need some system to keep track of time or have some notion of time. I will add that too the diagram.

graph LR
time["Timer"]
logic["Logic / Pattern Maker"]
leds["LEDs"]

time

We also have to have the LEDs light up, we will represent the LEDs as there own system.

graph LR
time["Timer"]
logic["Logic / Pattern Maker"]
leds["LEDs"]

time
leds

Lastly we need some system to represent the logic for deciding which leds light up and which stay off, creating the "interesting" pattern.

graph LR
time["Timer"]
logic["Logic / Pattern Maker"]
leds["LEDs"]

time
logic
leds

The leds rely on the input from the logic to turn on and off so we can add a line between the systems. And the logic need to change over time meaning it requires input from the time system. Together that looks like this

graph LR
time["Timer"]
logic["Logic / Pattern Maker"]
leds["LEDs"]

time-->logic-->leds

At this point we can move on to selecting components which implement the systems or if we feel we don't have a grasp of where to start we can further break down the each system into its own block diagram. For this example I am comfortable moving on and hope you feel the same way.