This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Need help to decide on which ARM board to go for?

How do I decide which ARM board to go for if I am aiming to use it as a micro-controller to run sensors, actuators, motors, and solar panels? And I wish to power up the board via Li-ion battery pack.

  • I guess you can connect sensors, actuators etc. to any ARM board as long as you have proper interface circuits. So you will need external driver for motors, signal processing for the solar panels and so on. I am not yet aware of a board with these circuits on-board.

    You will need to find out the number of I/O required and any other feature you need such as LCD or Ethernet or USB etc.

    As for the low battery, pretty much all ARM processors are quite good with low power requirements.

    Have a read at the blogs by carissal - A number of boards are reviewed and explained there.

  • Choosing a good arm card is quite complex because there are many. Everything will depend on the project you want to realize. The number of associated peripherals, uses (WiFi, ethernet, HDMI, ...). The environment is also important (embedded or not use, the electric power available: battery, power, solar panel, ...). We can help you in your choice but you should be a little more explicit when at the final use you want to do.


    For make the good choice you have to tell us, expressly the numbers of captor, actuators, motors, the electric consummation you mean acceptable and the approximate size of software you mean use on it.

  • Based on my personal experience I would suggest you to start with a simple development kit. If you plan to have WiFi or Bluetooth buy one that has already the module in it (it will remove a lot of pain ...)
    When you have your dev kit in your hands and a decent screen (LCD, OLED or E-Ink) you will start to create your prototypes in mbed OS and trust me that part takes a lot of time.

    When you have a stable prototype with your development board and you tried different sensors (sometimes you buy one motor or sensor but it is not the one you though) you will have more experience and being able to choose a more advanced or specific development board.

    Only when your dev board is doing what you though you can try to design your PCB, outsource the creation and try it again with your mbed OS firmware and the sensors

    I would kindly suggest you to not follow the path of choosing an expensive board as the first prototype because most of the time you realize that you need less or more power and other things like more connections, memory and so on.

    I think that starting with a dev board like the RF51 is a good start, plenty of example available, Bluetooth out of the box and plenty of flexibility

  • joabchua yes like you have say. I mean you can start with an ST nucleo kit for practice. But if you want to be efficient in your project you'll may have to change of board or to produce your own board to be close as possible of your hardware components.

  • Hi joabchua and welcome to the community!

    For very low energy usage, it might be interesting for you to have a look at Cortex-M0+.

    It is a good idea to make it possible for the MCU to turn off all the peripherals on your design, so you can save energy (especially if running directly on solar panels or a Li-ion battery, you may want to turn on a sensor once per second - or once per minute instead of keeping it on all the time.

    You can also use the Watch-Dog timer to wake your MCU up after for instance a minute, and then turn on some sensors, take a measurement and turn off the sensors and put the MCU to sleep, then repeat.

    A couple of things you will often find convenient, would be if the board has ...

    1: Timers (I need those in almost every design I make)

    2: DMA (this enhances the MCU's ability to transfer data, including copying data from memory to memory)

    3: On-chip ADCs and perhaps a comparator. I don't use ADCs very often myself, but at times I find that I need one, and it's a good thing to have handy.

    For motor control, I would like to mention NXP's LPC1500 series. If you need USB, a LPC1549 would be a good choice.

    Embedded Artists make a nice board containing a LPC15xx, this board can be connected to a board which controls motors.

    If motors are your primary focus, this is probably the best starting point. In addition, the LPC15xx series have a very strong feature called SCT (State Configurable Timer); it can be used for many different types of tasks, and remember that you can use it for more than one job in one design!

    If you need WiFi, try taking a look at STMicroelectronics's STM32W108; the price just dropped a lot for this MCU (only £1.6)!

    Let's imagine you've found a suitable board or microcontroller and you need a few I/O-pins extra. If that's the case, you can add 16 I/O-pins by using an I/O-expander. This can easily be done up to 8 times if using I2C. Again, NXP make such I/O-expanders; so do Microchip.

    It's also possible to add external ADCs if your board does not have enough, or if you've used the pins for other things.

    Many sensors have a digital interface (often using I2C). Almost all ARM-based MCUs have at least one I2C interface, where you can add more than one device.

    SD/MMC cards can be read/written by using the SPI, which you also find on almost all ARM-based MCUs.

    I find both NXP and STMicroelectronics Cortex-M based microcontrollers particularly easy to work with; there's also good support for these in OpenOCD.

    -But perhaps you want to try out a board before you decide which one to go for.

    I recommend that you take a look at this blog-post, perhaps you can win a board, so you can start doing a couple of tests.

    Since you're a student, it might help you to know that the tools have free trial versions, but you can also build your own GCC+OpenOCD toolchain, which will be a fully working development environment. Thus you're not limited to a specific development computer; you can choose any platform as long as it can run OpenOCD and GCC.

  • I would say yes, but as gopal.amlekar says: You will need drivers for the motors; the motors cannot be connected directly to the MCU pins.

    -But most Cortex-M based microcontrollers from STMicroelectronics will have timers that allow you to create PWM signals, which can be used to control motors.

    Like ackmicro says, try posting a list of things that your project requires, making the list as complete as you can.

    -Then we'll all drop some suggestions, so you'll have something to choose from.

    Chances are, that if you've already found a board that you like, it will probably be able to do most of what you need. The remaining part can probably be added easily as external devices.

    -For instance, it's possible to buy a low-cost NOR Flash memory which you can use with SPI. This NOR Flash could be 512KByte for less than $1!

  • Thanks jensbauer @Jérôme Décamps and raffaeu for your replies. It really helps. The thing is, I can tell you that from my experience and what I planned to do, I wish my micro-controller board is somewhat like Arduino type cus of the friendly interface and coding that they provide. But I wish to change because I thk there are many boards out there that can do much more than Arduino MEGA. (Although MEGA is really good I think.) So I actly wanted to try out some other board to work on the same processing environment. Such as using my Sun Sensor, Star Tracker, GPS, Memory Card probably and wireless communication from my controller to the computer. For movement wise, my group is still discussing on whether to use cold gas or just normal motor for simulation. FYI, I am working on simulation on ground testing for CubeSat. Basically, what we are doing now is to test out the sensors so that we can achieve something like determining our CubeSat position based on the Sun, Moon, Star and Earth position.

  • That you mention CubeSat gives us a really good picture of what's needed.

    It sounds like this PDF-document is for you: ARM Microcontrollers for Space Applications.

    I can imagine that Alban would know something about the newest and most suitable microcontrollers for this.

    So the solar panels are not large, the motors would also be small (and not very strong).

    Since the motors are small, you would not need a driver capable of driving a lot of current, but rather something probably less than 2A.

    I've been able to make a silly driver using standard transistors like BC547/BC557, which is equivalent to 1N3904 and 1N3906.

    My own driver could drive a miniature stepper motor. Such stepper motors are not heavy, and you can find a bunch of those on eBay.

    -It might be a good idea to use a couple of gears on those stepper-motors, because then you would not need to keep it "on", in order to brake it.

    It could be you want to consider a hybrid Cortex-M4/M0+ microcontroller, where the Cortex-M0+ would run an event-scheduler, and when necessary, it could turn on the Cortex-M4 for a short time, which would then do demanding jobs, and when the Cortex-M4 finishes, it would turn itself off. Thus the device would use as little power as possible.

    Again, NXP makes the LPC541xx, which has both a Cortex-M0+ and a Cortex-M4F (floating point extensions). It also has a few neat features, such as the SCT and a Micro-Tick timer (which would be good for saving power). I do not know, however, if the LPC541xx exist in a space-grade version.

    On the other hand, it does not sound like the job is too demanding. If you're not going to interface with a camera, in order to get some pictures, maybe you only need a Cortex-M0+. Small stepper-motors can be controlled by almost any Cortex-M0, as long as there are enough pins.

    A single SPI can be connected to multiple devices. A GPIO-pin is usually used as a CS (Chip Select) pin, thus if your MCU has 10 free GPIO pins and a single MISO+MOSI+SCK, you can address up to 10 devices easily. The SD-card could be one of them; the GPS could be another one (unless it's using a UART).

    I2C allows you to connect multiple devices to the same two pins. The sun-tracker / sensor could be a simple photo resistor (or IR receiver without filter), Such devices would probably find an on-chip ADC to be a good friend. If you have only a single ADC channel available, you can use a GPIO pin to supply the voltage for a photo-resistor, the other end of the photo-resistor connects to the ADC pin. Now you add a second photo-resistorr, which you connect to a second GPIO pin and the same ADC pin as the other photo-resistor. You then turn on only one GPIO pin at a time, do the measuring and turn it off. That means you will be able to supply power to the two sensors only when necessary, and thus you would save power again.

    Note: Some GPS modules are ARM based. The ARM chip on such modules often interface to a PL2303 via UART. If you could find a GPS module, which was no longer working, try taking it apart and see if you can rescue the GPS functionality or the ARM MCU itself. You can also buy GPS modules for soldering onto a PCB from eBay, for instance these or these, depending on your needs.

    Note: I may have mentioned eBay, but you should be aware that no devices or components bought on eBay are suitable for production or stable products.

    This is mainly due to that eBay sellers and eBay packers (they're normally not the same people) do not know what ESD is and how to handle electronic components.

    I've mentioned the eBay items only in order to keep your prototyping costs down.

    When you're ready to build the "real thing", I recommend buying from Farnell, RS, Digikey, Mouser or the like.

    Components from these distributors are handled correctly, thus they're not damaged by ESD. It is also important that you are educated in ESD and how to handle the components yourself (this includes all steps from unpacking the components to soldering to placing the PCB in enclosure and packaging the device.

    It would really be a shame, if you send up a device, which breaks 5 seconds after launch!

    ESD "introduction":

    (Note: it is not correct that you need to connect the 'ESD mat' to the nearest metal part on your table.

    The mat needs to be connected to an EARTH GROUNDING via a 1 MΩ resistor.

    The EARTH GROUNDING is found normally in your wall-outlet, but it needs to be checked before you start using it)

    More serious teaching (from the 80's, but highly releavant):

    The Shocking Truth, part 1:

    The Shocking Truth, part 2:

    The Shocking Truth, part 3:

    The Shocking Truth, part 4:

  • If you have experience with Arduino in the past, you could always consider using an Arduino Due, which has a Cortex-M3 based processor and can be programmed from the Arduino IDE. It supports 3.3 V shields so if you have any from other projects, you could reuse them. Just an idea!

  • That is a good point. I forgot to mention that the LPC1549 boards from Embedded Artists also have arduino compatible pin headers.

  • Interesting discussion, thanks for bringing it to my attention!

    This will also interest carlosdelfino, as we had a previous discussion about rad-hard (radiation hardened) microcontrollers.

    You can find ARM Cortex-M processors qualified for harsh environments. This is very specialist though... so rare and most likely not too cheap.

    It might be more viable for you to use alternative methods like more redundancy, clever error corrections, different principles to achieve the same thing but in a different way (so if a device hangs or an algorithm is disturbed, you have another way to get the information). After all, once it's up you won't be able to plug your JTAG/debugger and reprogram it!!!

    Want to read more?

    I'm interested to hear about your progress on the subject!

  • Great input, Alban!

    I'd like to add that it's possible to make a backup-system, eg. in case you're using a standard ARM MCU and the MCU is killed by radiation or a micrometeroid, it could be a good idea to have a backup microcontroller that would kick in, if the primary MCU's "alive" clock goes dead for more than - say - an hour.

    This is of course an advanced topic, and a lot can go wrong if not designed and programmed correctly.

    -But it might be worth the effort, as it's not cheap to send a device into space.

    Another thing you might have in mind, is that if you intend to send a standard device into orbit, it could be a good idea to use one, where the silicon density isn't too high. Eg. I believe a 100nm technology would last longer than a 1nm technology, although it might be a lot slower.

    -Also, if you consider using an external crystal or resonator (a resonator is able to handle stronger shocks; a crystal might break if falling from 1m onto a hard floor) - it might be a good idea also to be able to switch to the internal oscillator.

    STM's devices, for instance will start up on the internal oscillator, and if the external osciallator does not start up, they can continue running on the internal oscillator.

    If using UART and a non-crystal oscillator, I recommend using a low baud-rate, because that allows a wider frequency deviation (tolerance).

    -Oh, and yes ... remember to post status updates, please. -This is a very interesting project.

  • Idea: A microphone in space ?

    -Would that be useless ?

    ...I think it could be used to detect vibrations. Perhaps it could be combined with - say - 3 different gain selectors, in order to amplify and improve sensitivity.

  • jensbauer joealderson albanrampon Thanks for all your input. I'm gonna try my on ground simulation with an Arduino Due first becus I have more experience using the Arduino interface. So I guess I would be able to progress much better with it. Not really v familiar with Keil yet. But still learning it though.

    I have a few question not sure if it's applicable. I'm still not sure abt how people determine the Sun vector with sun sensors in cubesat, and also to determine the cubesat position based on Earth. Do you guys know or is there any good readings for it?

    Appreciate much! Thanks in advance.