Skip to the content
PCBKitNew board
2 layers63 × 108 mmMSC25, the printed circuit board in 3D

Este projeto consiste em uma placa de circuito impresso (PCB) com firmware embarcado, projetada para realizar a leitura de alta precisão de um sensor de corrente de efeito Hall e transmitir os dados através do…

Size
63 × 108 mm
Copper layers
2
Thickness
1.6 mm
Parts
61
Nets
54
Pads
206
Tracks, vias
296, 17
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
19 Sep 2025
Updated
3 Jun 2026

Overview

MSC25 is an open-source printed circuit board by ZeniteSolar, from the ZeniteSolar/MSC25 repository on GitHub. It is a 2-layer board of 63 × 108 mm with 61 parts on 54 nets, routed with 296 tracks and 17 vias.

It is built around the ATMEGA328P-PU, MCP2551-I/SN and PDSE1-S5-S24-S, with the LM324, LM7805 and LL4148 among its other parts. Its parts include 20 capacitors, 12 resistors, 6 ICs, 6 diodes and 4 connectors. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

8

README

README.md

Módulo Sensor de Corrente(MSC25)

Visão Geral

Este projeto consiste em uma placa de circuito impresso (PCB) com firmware embarcado, projetada para realizar a leitura de alta precisão de um sensor de corrente de efeito Hall e transmitir os dados através do barramento CAN.

O firmware foi desenvolvido em C para microcontroladores AVR, seguindo uma arquitetura modular, não-bloqueante e orientada por eventos, garantindo robustez e tempo de resposta previsível. O sistema é configurado e compilado utilizando um ambiente avr-gcc e make.

Principais Características

  • Microcontrolador: ATmega328P operando a 16MHz.
  • Comunicação: Interface CAN Bus 2.0A (11-bit) implementada com controlador dedicado MCP2515 e transceptor MCP2561.
  • Leitura de Sensor: Interface analógica de alta precisão para sensores de corrente, com condicionamento de sinal.
  • Fonte de Alimentação: Sistema de alimentação robusto com fonte simétrica isolada para o estágio analógico.
  • Modos de Leitura: Firmware com modos de operação configuráveis em tempo de compilação:
    • Modo Média Móvel: Fornece leituras estáveis, ideal para monitoramento de estado.
    • Modo Instantâneo: Fornece a última leitura bruta, ideal para captura de picos e transientes de corrente.
  • Arquitetura de Firmware: Modular, baseada em máquina de estados e interrupções de hardware para tarefas periódicas.

Detalhes do Hardware

O hardware foi projetado para garantir a integridade do sinal e a robustez da comunicação.

Fonte de Alimentação

A placa recebe uma tensão de entrada de 18V, que é regulada internamente para os domínios digitais e analógicos:

  • +12V: Gerado por um regulador LM7812 para alimentar periféricos e o estágio de amplificação.
  • +5V: Gerado por um regulador LM7805 para alimentar o microcontrolador ATmega328P e o controlador CAN MCP2515.
Fonte Simétrica Isolada (±15V)

Para a correta polarização do sensor de corrente e do circuito de condicionamento analógico, foi implementada uma fonte simétrica de ±15V. Esta etapa utiliza dois conversores DC/DC isolados do tipo PDSE1-S5-S15-S. A partir da entrada de +5V, cada conversor gera uma tensão de saída isolada (+15V e -15V, respectivamente). A isolação galvânica garante que ruídos do barramento de alimentação principal não interfiram na precisão das medições analógicas.

Sensor e Condicionamento de Sinal

O circuito foi projetado para interfacear com um sensor de corrente de efeito Hall, como o SECOHR 200SCV.

O sinal de saída do sensor é processado por um circuito de condicionamento baseado no amplificador operacional LM324. Este estágio tem a função de amplificar e deslocar o nível de tensão (offset) do sinal, ajustando-o para a faixa de leitura do conversor Analógico-Digital (ADC) do ATmega328P (0-5V). O resultado é um sinal robusto e centralizado, que permite a medição de correntes tanto positivas quanto negativas.

Detalhes do Firmware

O firmware é escrito em C puro (padrão gnu99) e compilado com avr-gcc.

Arquitetura

A lógica principal é controlada por uma máquina de estados (machine.c) que é executada em uma frequência fixa de 100 Hz, controlada pela interrupção do Timer2. A leitura do ADC é desacoplada da lógica principal, sendo disparada pelo Timer0 a uma frequência de 1000 Hz e processada através de interrupções (ISR(ADC_vect)), garantindo que as amostragens ocorram de forma consistente. A comunicação entre a rotina de interrupção e o laço principal é feita através de flags voláteis para evitar condições de corrida.

Módulos Principais

  • main: Ponto de entrada, inicialização dos periféricos e laço principal.
  • adc: Gerencia a configuração do ADC, o disparo por timer, a rotina de interrupção e as funções de processamento (média e leitura instantânea). Inclui um placeholder para linearização do sensor.
  • machine: Contém a máquina de estados principal e a lógica de aplicação.
  • can_app: Camada de aplicação do protocolo CAN. Responsável por montar e enviar as mensagens nos intervalos corretos.
  • conf: Arquivo de cabeçalho central para todas as configurações de compilação, como ativação de módulos e seleção de modos de operação.

Protocolo CAN

A placa se identifica na rede CAN e transmite duas mensagens principais.

  • Nome do Módulo: MSC25_1
  • Assinatura (Signature): 195 (0xC3)
MensagemID (Hex)ID (Dec)FrequênciaTamanhoPayload
State0x791211 Hz3 Bytes[Assinatura, Estado, Erro]
Measurements0xF024010 Hz3 Bytes[Assinatura, Corrente_L, Corrente_H]

Ambiente de Desenvolvimento

  • Toolchain: avr-gcc, avr-libc, make
  • Programador: avrdude (configurado para arduino)
  • Biblioteca Principal: avr-can-lib (deve estar presente na pasta lib/)

Como Compilar e Gravar

  1. Preparar Bibliotecas: Execute o script para compilar a avr-can-lib e baixar o can_ids.h mais recente.

    bash
    ./makelibs.sh
  2. Compilar o Projeto: Use o comando make para compilar todo o código-fonte.

    bash
    make
  3. Limpar o Projeto: Para apagar os arquivos compilados.

    bash
    make clean
  4. Gravar na Placa: Para compilar (se necessário) e gravar o firmware no microcontrolador.

    bash
    make flash
  5. Fazer Tudo (Limpar, Compilar, Gravar e Monitorar):

    bash
    ./up.sh

Precisa adicionar ao can_ids.h

text
// MSC25_1 - Módulo Sensor de Corrente (Sua Nova Placa)
#define CAN_SIGNATURE_MSC25_1 195
// MSC25_1 - STATE - Module state report
#define CAN_MSG_MSC25_1_STATE_ID 121
#define CAN_MSG_MSC25_1_STATE_LENGTH 3
#define CAN_MSG_MSC25_1_STATE_FREQUENCY 1
#define CAN_MSG_MSC25_1_STATE_SIGNATURE_BYTE 0 //<!" Senders signature
#define CAN_MSG_MSC25_1_STATE_STATE_BYTE 1     //<!" State code
#define CAN_MSG_MSC25_1_STATE_ERROR_BYTE 2     //<!" Error code

// MSC25_1 - MEASUREMENTS - Current measurements from the sensor
#define CAN_MSG_MSC25_1_MEASUREMENTS_ID 240
#define CAN_MSG_MSC25_1_MEASUREMENTS_LENGTH 3
#define CAN_MSG_MSC25_1_MEASUREMENTS_FREQUENCY 10
#define CAN_MSG_MSC25_1_MEASUREMENTS_SIGNATURE_BYTE 0    //<!" Senders signature
#define CAN_MSG_MSC25_1_MEASUREMENTS_CURRENT_L_BYTE 1    //<!" Average current, byte low
#define CAN_MSG_MSC25_1_MEASUREMENTS_CURRENT_H_BYTE 2    //<!" Average current, byte high

Parts

61
QtyValueFootprintReferences
11100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2, C3, C5, C6, C7, C21, C201, C202, C205, C401, C402
410kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2, R4, R203, R401
41uFCapacitor_Tantalum_SMD:CP_EIA-6032-15_Kemet-U_HandSolderC1, C4, C24, C25
422pFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC203, C204, C403, C404
3100RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR402, R403, R407
3LL4148Diode_SMD:D_MiniMELF_HandsolderingD1, D2, D401
216MHzCrystal:Crystal_HC49-U_VerticalY201, Y401
220kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R3
2PDSE1-S5-S24-SConverter_DCDC:Converter_DCDC_Murata_MEE3SxxxxSC_THTPS1, PS501
2RJ45KicadZeniteSolarLibrary18:RJ45_YH59_01J601, J602
110nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC406
1120Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR201
1330Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR16
14k7Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR202
15VDiode_SMD:D_MiniMELFD3
1ATmega328P-PPackage_DIP:DIP-28_W7.62mm_LongPadsU4
1CAN_HTestPoint:TestPoint_Pad_D1.5mmTP207
1CAN_LTestPoint:TestPoint_Pad_D1.5mmTP208
1INTTestPoint:TestPoint_Pad_D1.5mmTP209
1LED_REDLED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderD8
1LM324Package_DIP:DIP-14_W7.62mmU2
1LM7805Package_TO_SOT_THT:TO-220-3_Horizontal_TabDownU1
1LM7812_TO220Package_TO_SOT_THT:TO-220-3_Horizontal_TabDownU3
1MCP2515-xSOPackage_SO:SOIC-18W_7.5x11.6mm_P1.27mmU202
1MCP2551-I/SNPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU201
1RXCANTestPoint:TestPoint_Pad_D1.5mmTP204
1SCTestPoint:TestPoint_Pad_D1.5mmTP205
1SCKTestPoint:TestPoint_Pad_D1.5mmTP206
1SITestPoint:TestPoint_Pad_D1.5mmTP201
1SOTestPoint:TestPoint_Pad_D1.5mmTP202
1Sensor_IConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ1
1TXCANTestPoint:TestPoint_Pad_D1.5mmTP203
1USARTConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ401
1pesd1canPackage_TO_SOT_SMD:SOT-23_HandsolderingD201

Questions

How big is the MSC25 PCB?

It measures 63 × 108 mm and has 2 copper layers, 1.6 mm thick.

What parts does the MSC25 use?

61 parts, built around the ATMEGA328P-PU, MCP2551-I/SN, PDSE1-S5-S24-S and LM324. 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 MSC25 KiCad files?

From the ZeniteSolar/MSC25 repository on GitHub, at the commit this page was made from: the board is hardware/MSC25.kicad_pcb and its schematic hardware/MCU.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the MSC25 design in my own project?

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

Similar boards

  • 2 layers256.5 × 172.9 mmMCB19 panel, the printed circuit board in 3D

    MCB19 panel

    ZeniteSolar/MCB19

    Modulo de carregamento das baterias auxiliares

    411 parts2GPL-3.0
  • 2 layers232.1 × 131.2 mmPanel, the printed circuit board in 3D

    Panel

    ZeniteSolar/MSC19

    Voltage or Current Sensor Module for CANBUS with ATmega328p

    313 partsGPL-3.0
  • 2 layers170.2 × 137.2 mmMCS19, the printed circuit board in 3D

    MCS19

    ZeniteSolar/MCS19

    Módulo de Carregamento do Sistema da embarcação solar Guarapuvu II (Zênite Solar)

    160 parts1GPL-3.0
  • 2 layers239.3 × 121.3 mmPanel, the printed circuit board in 3D

    Panel

    ZeniteSolar/MT19

    Tachometer Module for CANBUS with ATmega328p

    252 parts2GPL-3.0
  • 2 layersMAB19 PANEL, the printed circuit board in 3D

    MAB19 PANEL

    ZeniteSolar/MAB20

    340 partsGPL-3.0
  • 2 layers122.6 × 52.7 mmZeniteTemplate2022, the printed circuit board in 3D

    ZeniteTemplate2022

    ZeniteSolar/MAC22

    Modulo de acionamento da contatora 2022

    63 parts
  • 2 layers248 × 174.4 mmPanel, the printed circuit board in 3D

    Panel

    ZeniteSolar/MCC_CAN_Shield

    294 partsGPL-3.0
  • 2 layers228 × 149.8 mmMIC19, the printed circuit board in 3D

    MIC19

    ZeniteSolar/MIC19

    Módulo de Interface do Controle da embarcação solar Guarapuvu II (Zênite Solar)

    300 partsGPL-3.0