About the Role
Position Summary
As part of our strategy for growth in the UK, we are expanding our Engineering Team and recruiting an Instrumentation Software Engineer. In this role you will develop software and firmware interfaces to control and monitor optical and atomic physics systems for the development of next generation atomic clocks and PNT systems. These systems offer orders of magnitude improvements in sensing and accuracy compared to current technologies.
Job Responsibilities
Technical
- Develop embedded software and firmware for microcontroller-based systems using Rust and C or other appropriate languages.
- Develop low-level device drivers and interfaces for sensors, actuators, communication devices and peripheral hardware.
- Integrate microcontrollers, electronics and higher-level software into cohesive systems.
- Implement real-time control, monitoring, data acquisition and communication functions.
- Perform board bring-up and debug hardware-firmware integration issues using benchtop test equipment.
- Develop test software and automated tools in Python or similar high-level languages.
- Test and validate firmware, electronics and complete systems against defined requirements.
- Diagnose and resolve functional, timing, reliability and performance issues.
- Work with colleagues to define verification and validation plans and tests.
- Follow embedded software best practices to produce reliable, maintainable and reusable code.
- Produce clear design documentation, interface definitions, inline comments and user documentation.
- Support products throughout the development lifecycle, from initial prototypes through deployment and ongoing maintenance.
Personal And Team Responsibilities
- Collaborate effectively with team members to ensure technical objectives and deadlines are met.
- Work within multidisciplinary teams of software engineers, electronics engineers, physicists and technicians.
- Communicate technical risks, findings and design decisions clearly.
- Adapt to changing requirements and manage technical ambiguity effectively.
- Take ownership of assigned work from requirements definition through implementation, testing and delivery.
Requirements
Bachelor's degree
A degree in electronics, engineering, computer science or a related discipline is required.
Embedded software experience
Several years of relevant experience developing embedded software or firmware for microcontrollers is necessary.
Proficiency in Rust
Strong skills in Rust, embedded C or C++ are essential for this role.
Low-level driver development
Experience in developing low-level drivers and software for controlling hardware is required.
Microcontroller peripherals
Familiarity with microcontroller peripherals and communication interfaces such as SPI, I²C, UART, CAN, USB, Ethernet or ADC/DAC is important.
Debugging skills
Experience integrating and debugging software and electronic hardware is crucial.
Nice to Have
Experience using hardware-debugging tools such as oscilloscopes and logic analyzers is a plus.
Proficiency with version-control workflows using Git is beneficial.
Benefits
Flexible working
Employees can work from home up to 2 days a week.
Growth opportunities
The role offers opportunities for professional growth within a global company.