The repo includes the entire hardware and firmware of a 3-axis magnetic field sensor built upon a Raspberry Pico, featuring
- 3 flux-gate magnetic field sensors (TI DRV425) and one ADC (TI ADS124S06) that is capable of
- continuously measuring the magnetic field up to 4000 Hz (single channel),
- with a designed RMS noise of 1.2 mG at 4000 Hz.
- Power-over-Ethernet.
- Both Serial and Ethernet (through the Web UI on board or WebSocket) interfaces are available for user interaction and data readout.
This project is built upon the driver of ADS124S0X implemented on RP2040 with the hardware programmable IO blocks TerryGeng/zephyr-ads124s0x-pio-driver. This driver enables data acquisition and channel multiplexing to be completely offloaded to the PIO peripherals and DMA controllers so that high-throughput and precise timing can be possible.
This project is an example of the synergy between RP2040 and ADS124S0X that enables an affordable data acquisition (DAQ) solution to perform some semi-demanding data collection tasks on a low budget.
The combination with Zephyr greatly expands the possibility of integrating with a rich collection of high-quality subsystems and device drivers (e.g. Ethernet, etc.).
Schematics is located at docs/schematics.pdf.
hardware/
: KiCAD files for the project. Be aware that the design of the PoE module is in a separate repo and has to be attached to the Raspberry Pico board to enable the Ethernet capability.hardware/gerber/
: Gerber production files.firmware/
: A Zephyr out-of-tree project of the entire firmware. Please follow the instructions in zephyrproject-rtos/example-application to compile.firmware/app/
: Location of the main program.firmware/app/static_web_resources
: Location of the web interface source files.
This project is designed to work with a Raspberry Pico that has a PoEPico module (in separate repo) attached to it.
The default IP address of the web server is set by option
CONFIG_NET_CONFIG_MY_IPV4_ADDR
in firmware/app/prj.conf
. The default value
is 192.168.11.2
.
An example Python script that communicats with the WebSocket interface is
located at firmware/app/websocket_client.py
.
The UART interface uses the default wiring (GPIO 0 and 1) (though UART via USB
console is easily available by compiling with the cdc-acm-console
snippet).
A list of usable commands can be inquired by typing help
into the UART shell.