Posts Tagged ‘embedded programming’

Embedded Design

Thursday, February 25th, 2010

Embedded design involves the design or creation of an embedded system.  An embedded system typically consists of a small form factor ‘computer’ or micro controller and corresponding circuitry.  Embedded systems control much of the world around us including different sub systems of automobiles and airplanes, cell phones and other consumer electronics, simple toys, vacuum cleaners and other appliances.  As a result, embedded design is one of the most crucial portions of product design and product development.

There are a multitude of architectures, products, and platforms to chose from when designing an embedded system.  The heart of the embedded system is the processor.  Simple processors, such as a Microchip PIC or a FPGA (Field Programmable Gate Array) are available.  Atmel and ARM have an array of very popular processors.  Intel has embedded processors for complex systems that rival the CPU that would be found in a powerful PC.  This is just a small sample of the options available.  The processor chosen should be one that supports the I/O needed for the application – digital and analog inputs and outputs, PWM channels, peripheral buses (I2C, SPI Bus, CAN, etc.).

Selection of peripheral devices is important.  Additional memory, displays (LCD/LED), USB, Ethernet, audio, motor controllers, wireless, ZigBee, BlueTooth, and modem are just a small subset of the peripheral devices that might be included in the embedded design.  All of these components need to be put together, which means that circuit design is required.  The complexity of the circuit design varies greatly, depending upon the complexity of the system, the number of peripheral devices, and noise concerns.  Typically the circuit design and peripheral integration culminates with the design of a custom PCB (printed circuit board).  Circuit boards are generally designed using a software suite, such as Altium, OrCAD, EAGLE, or one of dozens of other options.  This software allows you to create your circuit, layout the footprints of all your electronic devices, and route the traces.

There are many tradeoffs when it comes to embedded design.  One of the biggest involves reducing per unit materials and manufacturing cost versus reducing development time and engineering expense.  If you plan on manufacturing a large volume of your product at a low price, then you will want to build a system from the ground up.  Often times the processor and components can be purchased for pennies per unit.  If you plan on manufacturing a smaller volume and can tolerate a higher price or desire a shorter development time, you can look into developing on an SBC (Single Board Computer) platform. These platforms are typically purchased with a processor and several peripherals already present on the PCB.  The Single Board Computer is usually much more expensive, sometimes costing hundreds of dollars.  Development time can be greatly reduced, with a reduction in programming time required (often times there are pre-existing libraries or functions that can be used) and a reduction or complete elimination of circuit design.  Another trade-off consideration is power management for mobile, battery powered systems versus a faster system that is an energy hog.

The final component to embedded design is embedded programming.  Many software platforms are available, ranging from proprietary low level assembly code to high level object-oriented programming.  The most common platform, arguably, is C language. 

Embedded design and embedded development often goes hand-in-hand with product design and product development.  As a result, the same iterative phases of conception, specifications, design, prototyping, and testing apply.  Often times additional component and cost reducing changes take place after initial prototyping and testing are complete.