Battery Management System

Project: June 2016 – March 2017 (10 months)

Description

The customer was developing an auxiliary energy storage (lithium ion battery) for FMA support (freewheel engine-off), start/stop operation and emergency support. My main tasks in the project were code reviews (based on checklists and coding rules), static code analysis (MISRA-C:2012 with QAC, Polyspace CodeProver, PC-lint), code quality measurements (HIS metrics with QAC and Polyspace BugFinder), justification of deviations, as well as issue analysis (problem reports on system level).

Summary

Project Battery Management System
Duration June 2016 – March 2017 (10 months)
Customer confidential due to nondisclosure agreement
Industry Sector Automotive
Role / Responsibility Concept Design, Software Design, Unit Tests (C1 Coverage), Code Reviews, Static Code Analysis, Issue Analysis
Software / Tools / Methods IBM Rational DOORS (IBM), STAGES Process Management (methodpark), Redmine Project Management (open source), Enterprise Architect (Sparx), QA-C/MISRA (PRQA), PC-lint (MISRA-C), Polyspace (MathWorks), Tessy (Hitex)
Hardware Environment Freescale MPC5606B (Bolero), ASIC Atic157 (proprietary)

UDS-based Communication Stack for Encoders

Project: August 2015 – May 2016 (10 months)

Description

Development of server-side application layer services according to ISO-14229 as part of a platform software for encoders. The work packet includes the following tasks:

  • Definition of software architecture components
  • Capturing the component requirements (in Polarion)
  • Creating the component and class design (in Enterprise Architect)
  • Implementation of source code modules in C, taking into account coding rules for safety-relevant software
  • Performing static code analysis with PC-lint (MISRA-C:2012)
  • Implementation of white-box tests with GoogleTest
  • Continuous Integration (Jenkins)
  • Documentation of the software modules using Doxgen comments and UML diagrams (activity diagrams, sequence diagrams, state charts)
  • Further development of the software architecture and source code modules of the platform software (persistent data memory, firmware update, HAL for SPI, on-chip flash, CRC-32)
  • HAL: code refactoring (Non-STLibrary)

Summary

Project UDS-based Communication Stack for Encoders
Duration August 2015 – May 2016 (10 months)
Customer confidential due to nondisclosure agreement
Industry Sector Industry / Heavy Duty Encoders
Role / Responsibility Software Design, Implementation, Documentation, Code-Reviews
Software / Tools / Methods Polarion ALM (Polarion Software), Enterprise Architect (Sparx), ARM GCC, SCons, Keil uVision 5, PC-lint (MISRA-C)
Hardware Environment STM32F0 (ARM Cortex-M0)

Inductive Coupler with CAN Interface

Project: June 2015 – July 2015 (2 months)

Description

Planning and creating of the firmware for a CAN repeater (quasi-repeater) as a plug replacement for sensor data acquisition in tunnel construction machines. CAN messages are converted to UART to transmit them via an air gap using a FSK modem. To supply the sensors in the drill head, the coupler provides 500mA of current.

Summary

Project Inductive Coupler with CAN Interface
Duration June 2015 – July 2015 (2 months)
Customer confidential due to nondisclosure agreement
Industry Sector Industrial Communication / Field Bus
Role / Responsibility Software Design, Implementation, Function Tests, Documentation, Order Processing
Software / Tools / Methods Atmel SAM4E Microcontroller, Rigol Oscilloscope, Multimeter, CAN Interface Boards (Peak, Vector, IXXAT)
Hardware Environment Atmel Studio (Version 6.2), Enterprise Architect (Sparx)

CAN Monitor App for macOS

Download: MacCAN Monitor App

Description

The MacCAN Monitor App is a little demo program to show the functionally of the PCBUSB library – macOS Library for PCAN-USB Interfaces.

The program displays received CAN messages in a table view; its size is limited to 1024 rows. Furthermore it is possible to send single standard CAN messages with 0 to 8 data bytes. Only PCAN-USB devices from PEAK-System Technik GmbH are supported; and only the first channel of a device. The PCAN-USB interface number is taken from the IO registry. USB interface and CAN baud rate must be chosen once the program is started; they cannot be changed afterwards.

CAN Monitor App for OS X

Please note: Do not connect your PCAN USB device to a real CAN network when using this program. This can damage your application.

Summary

Program MacCAN Monitor App
Current Version Version 0.4 of December 10, 2021
Documentation Readme file and a screen video
License BSD 2-Clause “Simplified” License
Source Code PCBUSB-Monitor repo on GitHub
Standard CAN Specification 2.0
Driver macOS Library for PCAN-USB Interfaces
Category Industrial Communication, CAN, MacCAN
Operating System OS X 10.9 (x86_64), since version 0.4 macOS 11.0 (x86_64 & arm64)
Older Versions http://www.uv-software.com/files/downloads/MacCAN/PCANUSB/Applications/MacCAN_Monitor_App/

CAN Monitor goes Mac OS X

Download: CAN Monitor for macOS

Description

This is a port of the CAN Monitor program can_moni from Linux to Mac. It is running with a PCAN-USB device or PCAN-USB FD device on OS X Mountain Lion and hopefully on later versions of the world´s mostest advanced OS.

Syntax

Usage: can_moni <interface> [<option>...]
Options:
  -m, --mode=(2.0|FDF[+BSR])  CAN operation mode: CAN 2.0 or CAN FD format
      --listen-only           monitor mode (transmitter is off)
  -b, --baudrate=<baudrate>   CAN 2.0 bit timing in kbps (default=250)
      --bitrate=<bit-rate>    CAN FD bit rate (as a string)
  -v, --verbose               show detailed bit rate settings
  -t, --time=(ABS|REL|ZERO)   absolute or relative time (default=0)
  -i  --id=(HEX|DEC|OCT)      display mode of CAN-IDs (default=HEX)
  -d, --data=(HEX|DEC|OCT)    display mode of data bytes (default=HEX)
  -a, --ascii=(ON|OFF)        display data bytes in ASCII (default=ON)
  -x, --exclude=[~]<id-list>  exclude CAN-IDs: <id>[-<id>]{,<id>[-<id>]}
  -L, --list-boards           list all supported CAN interfaces and exit
  -T, --test boards           list all available CAN interfaces and exit
  -h, --help                  display this help screen and exit
      --version               show version information and exit
Interfaces:
   PCAN-USB1
   PCAN-USB2
   PCAN-USB3
   PCAN-USB4
   PCAN-USB5
   PCAN-USB6
   PCAN-USB7
   PCAN-USB8
CAN 2.0 baud rate index (default=3):
   0 = 1000 kbps
   1 = 800 kbps
   2 = 500 kbps
   3 = 250 kbps
   4 = 125 kbps
   5 = 100 kbps
   6 = 50 kbps
   7 = 20 kbps
   8 = 10 kbps
CAN FD bit rate as comma-separeted <key>=<value>-list:
   f_clock=<value>      frequency in Hz or
   f_clock_mhz=<value>  frequency in MHz
   nom_brp=<value>      bit-rate prescaler (nominal)
   nom_tseg1=<value>    time segment 1 (nominal)
   nom_tseg2=<value>    time segment 2 (nominal)
   nom_sjw=<value>      sync. jump width (nominal)
   nom_sam=<value>      sampling (only SJA1000)
   data_brp=<value>     bit-rate prescaler (FD data)
   data_tseg1=<value>   time segment 1 (FD data)
   data_tseg2=<value>   time segment 2 (FD data)
   data_sjw=<value>     sync. jump width (FD data)
Examples:
   125kbps:1000kbps     f_clock_mhz=80,nom_brp=2,nom_tseg1=255,nom_tseg2=64,nom_sjw=64,data_brp=2,data_tseg1=31,data_tseg2=8,data_sjw=8
   250kbps:2000kbps     f_clock_mhz=80,nom_brp=2,nom_tseg1=127,nom_tseg2=32,nom_sjw=32,data_brp=2,data_tseg1=15,data_tseg2=4,data_sjw=4
   500kbps:4000kbps     f_clock_mhz=80,nom_brp=2,nom_tseg1=63,nom_tseg2=16,nom_sjw=16,data_brp=2,data_tseg1=7,data_tseg2=2,data_sjw=2
   1000kbps:8000kbps    f_clock_mhz=80,nom_brp=2,nom_tseg1=31,nom_tseg2=8,nom_sjw=8,data_brp=2,data_tseg1=3,data_tseg2=1,data_sjw=1
   2000kbps:10000kbps   f_clock_mhz=80,nom_brp=1,nom_tseg1=31,nom_tseg2=8,nom_sjw=1,data_brp=2,data_tseg1=2,data_tseg2=1,data_sjw=1

Summary

Program can_moni (CAN Monitor for macOS)
Current Version Version 0.5 SR4 Build 1153 of February 6, 2022
Documentation README and program option --help
License UVS Freeware License (without warranty or support)
Standards CAN Specification 2.0 and CAN FD Specification
Driver OS X Library for PCAN-USB Interfaces
Category Industrial Communication, CAN, CAN FD, MacCAN
Operating System OS X 10.8 (x86_64), since version 0.5 SR3 macOS 11.0 (x86_64 & arm64)
Older Versions http://www.uv-software.com/files/downloads/MacCAN/PCANUSB/Utilities/can_moni/

MacCAN – macOS Library for PCAN-USB Interfaces and more

Project: June 2012 – now (ongoing)

Description

The PCBUSB library realizes a ‘PCAN-USB Driver for macOS’ using Apple´s IOUSBKit. It supports up to 8 PCAN-USB and PCAN-USB FD devices from PEAK-System Technik, Darmstadt. The library offers an easy to use API to read received CAN messages from a 64K message queue and to transmit CAN messages. The PCAN-USB FD device can be operated in CAN Classic and CAN FD mode. Standard CAN frames (11-bit identifier) as well as extended CAN frames (29-bit identifier) are supported.
The library comes with an Objective-C wrapper and a demo application: MacCAN Monitor App.

Summary

Project MacCAN – macOS Library for PCAN-USB Interfaces and more
Duration June 2012 – now (ongoing)
Customer Own development (www.mac-can.com)
Industry Sector Industrial Communication / Field Bus
Role / Responsibility System Specifications, Software Architecture, Software Design, Implementation, Function Tests, Documentation
Software / Tools / Methods Enterprise Architect (Sparx), Apple LLVM (clang, x86_64), CUnit Test Framework, Doxygen, JIRA
Hardware Environment PCAN-USB Adapter (PEAK), PCAN-USB FD Adapter (PEAK)

Active Steering Wheel

Project: January 2012 – May 2015 (41 months)

Description

Active steering project for an American automobile manufacturer. Support of the project team in Berlin with the following tasks:

  • Implementation of the software design (modules)
  • Documentation of the modules and interfaces
  • Integration of software components
  • Design and execution of Unit Tests
  • Code Reviews

Summary

Project Active Steering Wheel
Duration January 2012 – May 2015 (41 months)
Customer confidential due to nondisclosure agreement
Industry Sector Automotive
Role / Responsibility Software Design, Implementation, Software Integration, Unit Tests, Code Reviews, Issue Analysis
Software / Tools / Methods Enterprise Architect (Sparx), GHS C-Compiler (Green Hills), PC-lint (MISRA-C 2004 rules), CANoe (Vector), DET (Ford), DOORS (IBM), FuSi (IEC 26262-6), Telcon / Webex / Workshop
Hardware Environment Freescale MPC5643 Dual-Core Microcontroller, Lauterbach Trace32 Debugger, CAN Interface Board (Vector)

Hardware Oriented Software Development

Project: December 2010 – December 2011 (13 months)

Description

Support of several development teams at the client’s site. My tasks included:

  • Development of hardware oriented software applications
  • Creation of hardware oriented drivers
  • Implementation of real-time operating systems on embedded platforms
  • Customization of BIOS and driver software
  • Project support from requirement engineering to validation

Work Batch 1: Analogue CAN Transmitter for Force Feedback Sidestick Control

The transmitter is used to transmit analogue and digital signals from a redundant sidestick control via the CAN bus. Through two physically connected sidesticks in the cockpit, the steering system, as well as the gas and brake systems, are controlled. From these systems, current angle data is transmitted back to the systems in the cockpit.

Task: Implementation of the transmitter software (CAN bus).

Work Batch 2: End-Of-Line Test Software for a Control Panel for Floor-borne Vehicles

The vehicles are optionally equipped with a Truck Data Unit (TDU). At the beginning of vehicle use, the driver identifies himself by means of an identification assigned to him (optionally via a keyboard with a PIN number or by means of a card reader with RFID identification) and thus indicates the use of the vehicle. When leaving the vehicle, the driver logs off.

Task: Implementation of the test software on the target for end-of-line testing of analog and digital I/O modules, memory devices (F-RAM, NAND-Flash, Data-Flash), LEDs, CAN-communication, matrix keyboard, wake-up function, card reader (RFID), Bluetooth module.

Work Batch 3: Compressed Download via CANopen

Control panel for blacktop paver with display and CAN interface. A CANopen bootloader handles software updates.

Task: Integration of the zlib inflate algorithm into existing boot loader.

Work Batch 4: SPI Bootloader for HVAC Front Panel

Front panel for climate control intended for a DIN radio slot. Control and display unit with integrated color display, illuminated buttons, and control dials. Communication with the main circuit board takes place via an SPI data bus system and controls all button and encoder inputs, as well as visualization of the display.

Tasks:
a.) Implementation of the bootloader (SPI slave).
b.) Implementation of test procedures.

Summary

Project Hardware Oriented Software Development
Duration December 2010 – December 2011 (13 months)
Customer confidential due to nondisclosure agreement
Industry Sector Automotive
Role / Responsibility System Specifications, Software Architecture, Software Design, Implementation, Function Tests, Documentation
Software / Tools / Methods Keil C166 C Compiler (uVision3), Keil ARM C Compiler (uVision4) , Microsoft Visual C++ 2008 , Enterprise Architect (Sparx) , PC-lint (MISRA-C 2004 rules) , Understand (SciTools) , CAN Analyser (IXXAT) , Doxygen, Python
Hardware Environment Infineon XC164CS Microcontroller, Infineon XC2368B Microcontroller, NXP LPC2478 (ARM7/TDMI-S core), Keil U-Link On-chip Debugger, CAN Interface Boards (IXXAT), SPI-to-USB Adapter (Elite)

CANopen Object Browser for Linux

Download: CANopen Object Browser for Linux

Description

The CANopen Object Browser is a tool to display and browse through a CANopen Object Dictionary based on EDS-files. The program allows an online access to any connected CANopen device. This means to read and to write individual parameter values of a connected device.

The CANopen Object Browser for Linux is a Qt3 GUI application running on Linux systems (Kernel 2.6.x) and uses BerliOS SocketCAN to access the CAN-Bus. Furthermore the program offers a gateway function for interfacing CANopen with TCP/IP.

CANopen Object Browser using SocketCAN on Linux

Please note: Do not connect the program to a real application with a running CANopen network. This can damage your application.

Summary

Program CANopen Object Browser (Linux)
Current Version Version 0.2 Build 61 (testing) of November 09, 2009
Documentation Getting started and Online-help (context-sensitive)
License UVS Freeware License (without warranty or support)
Standards CANopen Specifications: CiA DS-301, CiA DS-306, CiA DS-309
Drivers BerliOS SocketCAN, CANopen-over-TCP/IP
Category Industrial Communication, CANopen, CAN, TCP/IP
Operating System Linux 2.6.x
Older Versions http://www.uv-software.com/files/downloads/COPbrowser/

Primary Flight Control System

Project: July 2009 – September 2010 (15 months)

Description

Certification of a Fly-by-Wire flight control:

  • Software development according to V-Modell and RTCA DO-178B for the Primary Flight Control System of the Superjet 100
  • Performing software tests according to RTCA DO-178B
  • Creation the required documentation according to RTCA DO-178B

Summary

Project Primary Flight Control System
Duration July 2009 – September 2010 (15 months)
Customer confidential due to nondisclosure agreement
Industry Sector Aeronautics
Role / Responsibility Design und Code Reviews, Software Improvement, Software Tests, Documentation
Software / Tools / Methods Ameos (Aonix) UML Modeling Tool, CodeWarior (Metrowerks) C Compiler for Power Architecture Processors, QA-C/MISRA (QA Systems) Static Code Analysis, PolySpace (MathWorks) MISRA-C Code Checker, CTE (DaimlerChrysler AG) Classification Tree Editor, ClearCase / ClearQuest (Rational) Unified Change Management, Reqtify (geensys) Requirements Management / Traceability Tool, SmarTeam (Dassault Systemes) Product Data Management / Product Lifecycle Management, DO-178B (RTCA) Software Considerations in Airborne System and Equipment Certification
Hardware Environment Freescale MPC5554 32-bit Microcontroller