stardance has been extended another month! the new deadline is october 31 :)

You are browsing as a guest. Sign up (or log in) to start making projects!

IndexJson

@IndexJson

Joined June 27th, 2026

  • 18Devlogs
  • 3Projects
  • 1Ships
  • 12Votes
I am a hobbyist passionate in electronics and programming. I love creating stuff from zero, especially devices that I will use in my workshop. I usually make power supplies, but also many different tools.
Open comments for this post

1h 49m 48s logged

Devlog #09

I implemented some cool things, so let’s look at them.

printf

I got tired of the old way of sending data via USB (via snprintf and CDC_Transmit_FS) so I made my own USB_printf. It works almost like a regular printf. By almost I mean it does not work with floats, but that’s limited by the environment. If I ran it on linux or windows (just the formatting part) it would work fine, but on STM32 it’s a little different.
The function is just a wrapper for the old way, but with added timeout. It also checks whether any device is connected to usb, but it’s kinda weird. This way the function does not block the rest of the program when host is not connected.
Here’s how it looks:

uint8_t USB_printf(const char* fmt, ...);

So really nothing special, looks just like regular printf

Saving uptime data

Now via WriteHourStats I am able to write data about total uptime to eeprom. Inside the implementation I used something that I rarely use: union. Many people never even heard of it. Union makes all the inner properties share the same address. Example from the source code:

union HourBuffer {        
    uint8_t b8[2];        
    uint16_t b16;    
}  buffer;

No matter what I try to access, whether its b8[0] or b16 I get the same value. Well, not exactly. By accessing b8[0] i get lower part of b16, its the same as doing b16 & 0xff. Here I am writing data so I need to set b16 to a certain value. This also meant that it sets b8[0] and b[1]. This does not impact performance nor does it increase memory usage. The union is still just 16 bits. It can be done simpler but it is more readable and I wanted to use a union :) All it does is that it avoids weird pointer casting or shifting the value.

Next Steps

Now I’ll focus either on saving calibration data, that I started a little, or do something with the adc, like measuring temperature of the reference section, heater current and voltage on both +15V rails.

0
0
16
Open comments for this post

1h 30m 17s logged

Devlog #08

Overview

It’s really coming together. I added support for devices that use I2C: TMP102 temperature sensor and M24C64 EEPROM.

TMP102

I created a function in TMP102.c that reads the current temperature. It communicates with the IC using I2C.

M24C64

I created a basic library in M24Cxx.c that can read and write data to the IC. It’s fully configurable and easy to use.

0
0
22
Open comments for this post

1h 34m 26s logged

Devlog #07

Overview

I managed to get a basic program running on the STM32. It is my first time using such an MCU on a custom PCB, but it was quite easy. Also I am still learning the platform, everything is quite different from arduino. I like it though.

USB

It was the hardest part, and I spent most of my time on it. Besides issues with my code (that was expected since it’s my first project with USB on STM32) I had problems with my hardware. I spent quite a bit of time on it and solution was simple. I just had to connect it to my PC… Well, guess things work better when they’re actually connected, don’t they? Anyway, it works now. It logs it’s uptime every seconds.

LED

Also the RGB LED is red when the device is heating up and green when it’s ready to be used. Simple yet useful. I’ll have to adjust the heat up time to 15 minutes, but for development time it’s fine as is.

0
0
23
Open comments for this post

4h 5m 19s logged

Devlog #06

Overview

I finished soldering the PCB!
It looks awesome. I quickly tested some parts of it and it seems to be working.

Soldering

Most of it was easy to solder but some components weren’t easy at all. The 3V3 regulator was very annoying because of its small footprint. The same goes for I2C temperature sensor. I barely soldered them. That being said, I would still do the same in my next PCB. (I once used a 4-pad BGA sensor. At least I learned to not use those😅 )

Problems with MCU

I encountered an issue with the circuit: reset line had no pullup and capacitor. This was a big problem since it could lead to power cycling. Fortunately I fixed it by using some copper wire and some passives. It isn’t the most pretty solution but it works. I still can’t believe I forgot to add those components. At least it’s fixed now.

As for the analog part, everything seems to be just fine, still requires calibration though.

Now I should focus on the software part of the project.

0
0
21
Ship

I made an electronic calculator. That is a tool for hobbyists that want to make cool project and don’t want to deal with a lot of math. This project makes it simple since it bundles the most used equations into 1 program. I wrote it in C++ with Dear ImGui and GLFW. As rendering backend I chose OpenGL. It supports Linux.

  • 5 devlogs
  • 6h
Try project → See source code →
Open comments for this post

1h 0m 36s logged

Devlog #05

Overview

Voltage divider is now finished!

Features

For this calculator I decided to add combo boxes to select resistance units. It is quite useful sometimes.
And everything else is the exact same as Ohm’s law. You fill all the required fields and it calculates as expected.

0
0
17
Open comments for this post

1h 33m logged

Devlog #04

Overview

Control board is now done as well!
There is a lot going on so I’ll break it down a little.

MCU

There is an STM32G431. It functions as the brain of the device. It handles everything: current regulations, communication with the user using the display and USB.

VRM

Board is powered from 24V DC and it is regulated to 15V and 5V with linear regulators. It powers the frontend and op-amps on power boards. There are 2 more rails: 12V for fans and 3V3 for entire digital section. Both are switch mode regulators, since both need to be high current and noise is not a big concern

Now I will wrap up the project and make it ready for funding. It looks great and I’m really proud of it.

0
0
13
Open comments for this post

2h 1m 8s logged

Devlog #03

Overview

The first PCB is done! It is the power module in a 100x80mm format.

Traces

Each module is designed to handle 15A. There will be 4 of them for 50A so in reality it will be only 12.5A on each module. Still, traces need to be quite wide. I decided to remove solder mask on the traces that were too wide to route properly and needed to be made thinner.

Current measurement

2 INA180 current amplifiers are used to measure current. Why 2? Because I want to measure 2 ranges: 15A and 1.5A. And that’s also the reason why there are 2 shunt resistors on the screenshot below.

Next Steps

Now I will focus on the control board. There is a lot going on there so it may take a while

0
0
19
Open comments for this post

1h 30m logged

Devlog #01

Overview

So MCU board schematic is done. Nothing too crazy, but there are a few interesting things.

Fan connectors

I put 4 connectors for fans. Why? Well, I may not need that many but they might come in useful. I need 1 connector for a pump and 1 for aio fans. Maybe I’ll use 3rd one for chassis fan and 1 will be as a spare.

There isn’t a lot more to say about it. After all its just a PCB with an MCU just like any other. The difference between this one and any other lets say nucleo board is just in special connectors, eeprom and temperature sensor.

0
0
74
Open comments for this post

41m 58s logged

Devlog #04

Overview

I added a menu and fully finished Ohm’s law calculator.

Menu

From the menu you can now select what calculator you want to use. For now there aren’t too many options but there will be more in the future.

Ohm’s Law Calculator

This section is now fully finished! You have to select what to calculate, input all remaining parameters and click Calculate.

0
0
5
Open comments for this post

1h 27m 33s logged

Devlog #03

Overview

So Ohm’s Law calculator is finished! You can select what to calculate and it will do just that.

Language support

As you can see everything is translated and has no impact on performance.

Further plans

I still have to add a few calculators. I was thinking about:

  • Voltage divider
  • Capacitor filter for bridge rectifier
  • Transmission lines
0
0
13
Open comments for this post

2h 0m 43s logged

Devlog #02

Overview

I finished language manager. Adding translations is now quite easy. Just add a file and that’s it. Languages can be changed at runtime but it still has a few problem.

New Font

With addition of a new font all characters are displayed correctly. It now supports latin + cyrylic and of couse greek. And whatever else is in the font by default.

Ohm’s Law Calculator

Ohm’s law section is starting to take shape.

Maintenance

Also I refactored a lot of code, cleaned up big files, moved code into function and different files.

0
0
7
Open comments for this post

54m 15s logged

Devlog #01

Overview

I started working on a calculator that would help hobbyist with their electronic projects. Whenever I am designing a project, I use online calculator for many things: Ohm’s Law, Voltage Divider, Transmission Line. These are just the most common. With this project I intend to make it simpler by combining all of these calculators into one.

Language & GUI Library

I decided to write the project in C++, because it’s my favorite language. As for the GUI Library I went with Dear ImGui with glfw and opengl3.

Language support

This project is meant to be multilingual, so I decided to make this system first. Languages are stored as text files with .lang extension. Language Manager load text form this file and stores it in a map. This way adding new languages is very simple.

Here you can see a quick demo showing that ImGui is working.

0
0
4
Open comments for this post

43m 46s logged

Devlog #01

I started working on the project and well… it’s a lot. The electronic part seems simple, but there is so much more.

Requirements

Before diving deeper intro the project I would like to set some basic requirements:
Max Voltage: 60V
Max Current: 50A
Max Power: 2kW

Architecture

I decided to split it into a few boards. To handle power up to 2kW I need to be very careful about it. There will be 12 IRFP250N power Mosfets split into 4 separate boards. All will be connected to control board and power management board. You can see schematic of the mosfet board below.

Cooling

And now the most important part. Mosfets can dissipate up to 2kW. That’s a lot. And I mean a LOT. My electric space heater has the same power rating. If cooling isn’t done properly the device will fry. That’s why I decided to use water cooling. The idea is to slap one of those big AIOs like in PCs to a copper block and mount 12 transistors onto the block. This way the heat will be quickly transferred away from the mosfets and with help of a few powerful server fans it should be good enough. (Well not for my ears, but I’ll accept it I guess)

Anyway, everything starts coming together. I will soon start designing control circuitry. It all looks quite nice and I am excited to continue this project!

0
0
5
Open comments for this post

2h 37m 59s logged

Devlog #05

The design step is finished!

I fully designed the PCB. The precision section is separated from the rest, PSU is far away and everything looks nice.

Digital section

I added an STM32, it tracks uptime, manages calibration data, measures temperature, measures heater current and all 15V rails. It can be connection to a PCB via USB.

Silkscreen

I left a few text fields on the silkscreen in order to write down initial LM399 voltage and other stuff: temperature during calibration, date and Serial Number.

0
0
5
Open comments for this post

45m 8s logged

Devlog #04

— PCB —

I added shielding for the precision section. All that’s left to do here is to route power, but I will do that after I route the PSU.

— PSU —

I added a 3.3V regulator for an STM32. It will use 1 16V transformer and make: 15V for reference, 15V for heater, 5V and 3.3V.

— MCU —

I am planning to add an STM32G431. To it I’ll connect and EEPROM that would store some calibration data, like date and drift.

0
0
3
Open comments for this post

1h 7m 20s logged

Devlog #03

I have mostly finished reference. I’ll tell you a few interesting things about it.

— Schematic —

Not much changed. I simply added footprints. But the thing I have to point out is the added filter. I decided to go with 50ohm resistor, 10uF aluminum cap and 100nF MLCC cap.

— Stackup —

I went with a 4-layer board. That allowed me to have a dedicated ground plane on second layer. It will improve the performance.

— Layout —

I tried to keep everything together, so all the parts will have similar temperature. Also the reference part will be on opposite side of the board compared to PSU.

That would be all. It looks like I will soon finish this project, but that will take me just a little more time.

0
0
3
Open comments for this post

24m 1s logged

Devlog #02

— Power Supply —

I made schematic for power supply.
To make 15V for the zener, I decided to go with LT3045 and 7018 for a pre-regulator. 7818 will help with noise and ripple. Also LT3045 cannot handle input voltage so 7818 steps it down first, then it is regulated to 15V.

— Transformers —

I decided to go with 2 DP-241-4-20 20V transformers. The datasheet states that it has low capacitive coupling, which is crucial for such precision standard. Higher capacitance between windings means higher common mode currents, that could potentially make measurement inaccurate. This specific type of transformer has been tested by Marco Reps in his Extreme Isolation video, with quite good result. This transformer has lower leakage that Fluke 732A. which is much better than any standard based on LM399.
It is a 20V transformer, so after rectification there will no more than 28V - voltage drop on rectifiers without a load. That’s why pre-regulator is necessary, otherwise it would fry the main LDO.
Also I used low leakage diodes as the rectifier.
The heater supply isn’t too interesting - just a 7815.
I am wondering whether I should switch to 16V transformers or not. I am not concerned about ref supply, since it draws very little current. What may be a problem is the heater supply, but i will have to do some more calculations.

0
0
3
Open comments for this post

41m 38s logged

Devlog #01

I am making a precision 10V Standard based on LM399.

— Reference schematic —

I managed to make a schematic for the reference, gain stage and calibration resistors. The output can be calibrated by soldering required jumpers that connect trim resistors.
I want to achieve sub 5ppm stability, so the resistors for the gain stage must be precise and stable.

— Power supply —

Now I should focus on power supply. The heater will be powered from a separate source. Another important thing about building the PSU is isolation. It has to be isolated from mains quite well so leakage currents will not mess up the measurements. Capacitance between transformer windings is a problem.

0
0
7

Followers

Loading…