-

hey viewer, we're moving!

We are currently transitioning to a new web system, so we are not updating this wikisite anymore.

The public part of the new web system is available at http://www.ira.disco.unimib.it


Informatica Industriale / Informatics for Industrial Applications 2011/12

From Irawiki

Jump to: navigation, search

Anno Accademico 2011/12

Contents

Docente

Per l'anno accademico 2011/12 il docente del corso è l'ing. Martino Migliavacca.

Presentazione del corso

Contenuti

Il corso riguarda l'interfacciamento di periferiche e microcontrollori nell'ambito di applicazioni industriali embedded. Durante le lezioni verranno presentati concetti e periferiche utilizzate in seguito durante le esercitazioni, fornendo una panoramica delle possibilità offerte da un microcontrollore moderno. Al termine del corso, gli studenti svilupperanno autonomamente il firmware per controllare alcune schede elettroniche fornite (sensori, attuatori, etc).


Obiettivi formativi

Il corso fornisce una panoramica delle periferiche disponibili su un microcontrollore moderno, descrivendone l'uso in applicazioni industriali e realizzando alcune applicazioni d'esempio. Al termine del corso gli studenti avranno le competenze necessarie a sviluppare in autonomia un'applicazione embedded.


Prerequisiti

  • Programmazione in linguaggio C


Programma

  • Richiami sui microcontrollori
  • STM32: configurazione dei clock, periferica GPIO
  • Periferiche: Timer, systick, watchdog
  • Periferiche: ADC e DMA
  • Periferiche: USART
  • Periferiche: SPI e I2C
  • Periferiche: PWM
  • Introduzione al controllo motori
  • Sistemi operativi real-time, ChibiOS/RT, Hardware Abstraction Layer
  • Bus di campo: il CAN bus


Dispense

Esercitazioni

Progetti finali

Analog IMU board

Project assigned to:

Project page: INFIND2011/12 Analog Intertial Measurement Unit

An Inertial Measurement Unit is a device that exploits some sensors to get its pose and attitude. In this project a MEMS accelerometer and a MEMS gyroscope are used to read the inclination with respect to the vertical and the angular rate. A simple filter (e.g., a complementary filter) can be used to fuse the data and calculate the IMU attitude.

The goal of this project is to interface the microcontroller with the two analog sensors, filter the readings and output the results on the serial port.

Digital compass and accelerometer board

Project assigned to: Nikola Gluhovic Alessandro Lopopolo

Project page: INFIND2011/12 Digital compass and accelerometer board

File:Compass.jpg

In this project a digital MEMS accelerometer and magnetometer is used to estimate the absolute static heading of the board with respect to the north pole and to the gravity acceleration.

The goal of this project is to interface the microcontroller with the digital sensor using the I2C bus, read the measurement and output the absolute static heading on the serial port.

IRALab cart controller board

Project assigned to:

Project page: INFIND2011/12 IRALab cart controller board

File:Cart.jpg

The goal of this project is to redesign the cart controller board using the STM32 micricontroller, exploiting its peripherals to interface with sensors and actuators mounted on the cart in order to drive it.

Motor control board

Project assigned to:

Project page: INFIND2011/12 Motor control board

The goal of this project is to interface with the Pololu High-Power Motor Driver (36v20 CS) used on the IRALab Cart. The power board implements an H-bridge to drive a DC-motor and an Hall-effect current sensor.

The microcontroller board must generate the PWM signals to drive the power board, read the value of the current drawn by the motor and interface with the optical encoder mounted on the motor shaft exploiting the STM32 peripherals. An on-board PID (P-I) controller should modify the PWM signals in order to follow a speed setpoint.

The setpoint have to be received through the serial port, while actual speed and current values must be printed on it.

Rover Robot

Project page: INFIND2011/12 Rover Robot

Project assigned to:

This project aims at controlling a wheeled rover robot equipped with proximity sensors used to avoid obstacles.

The project involves:

  • Controlling the DC motors by PWM signals
  • Reading distance information from Infrared and Ultrasonic sensors
  • Calculate a trajectory to avoid obstacles and drive the robot around

About IR range finders:

About ultrasonic sensors:

Laser Range finder

Project page: INFIND2011/12 Laser Range finder

Project assignet to:

This project exploits the [Parallax Range Finder] in order to get distance measurement of the surrounding environment.

The goal of the project is to mount the sensor on a rotating base to scan the environment and display the measurements on a PC application.

The project involves:

  • interfacing with the Parallax sensor
  • controlling a RC servo to rotate the sensor
  • defining a serial communication protocol to exchange data with the PC
  • write the PC application to view the measurements


Materiale vario

Programmazione in C

Documenti, datasheet e manuali


Hardware

Demo board STM32

Durante le esercitazioni viene utilizzata una demo board basata sul microcontrollore STM32F103VET6, lo schematico è scaricabile da questo link.

Si può trovare su ebay a questi link:


Programmatore JTAG

Durante le esercitazioni vengono utilizzati i seguenti programmatori JTAG prodotti da Olimex:

Un programmatore JTAG equivalente ma leggermente più economico e' il Bus Blaster, progetto open source di dangerousprototypes.com.

Il programmatore JTAG più economico attualmente dovrebbe essere l'ST-Link, ma attualmente funziona solo con windows.


Ambiente di sviluppo

Le esercitazioni vengono effettuate utilizzando solo software gratuito ed open source, funzionante su Linux, Mac e Windows.

La toolchain (l'insieme dei componenti necessari allo sviluppo) è composta da una serie di componenti, elencati in seguito:

In seguito vengono riportate le istruzioni per l'installazione su Linux, OSX e Windows.

Installazione in ambiente Linux (Ubuntu)

L'installazione su Ubuntu Linux, versione 11.04, prevede i seguenti passaggi:

  • scaricare ed installare Eclipse dal link riportato sopra
  • scaricare ed installare Sourcery G++ Lite dal link riportato sopra
  • installare OpenOCD 0.5 tramite il gestore dei pacchetti Synaptic


Installazione in ambiente Mac OSX (> 10.5)

L'installazione su OSX prevede di installare Sourcery G++ Lite e OpenOCD compilando i sorgenti, in quanto non sono disponibili versione binarie.

I passaggi quindi sono:

  • scaricare e installare Eclipse dal link riportato sopra
  • compilare Sourcery G++ Lite utilizzando il Makefile disponibile su GitHub a questa pagina, seguendo le istruzioni riportate. ATTENZIONE: leggere la nota "NOTE: If you are on Mac OS X and are running XCode 4.1...", con OSX 10.7 ho dovuto eseguire i due comandi suggeriti in quella nota.
  • compilare OpenOCD 0.5 manualmente dai sorgenti, attivando il supporto per ft232, oppure se si usa il package manager homebrew basta eseguire "brew install --enable-ft2232_libftdi openocd"


Installazione in ambiente Windows (testato su XP)

L'installazione su windows prevede di installare anche un pacchetto aggiuntivo (MSYS, pochi MB) che fornisce alcuni comandi Unix, necessari per l'utilizzo della toolchain.

I passaggi quindi sono:

  • scaricare ed installare Eclipse dal link riportato sopra (decomprimere la directory "eclipse" in una posizione a piacere)
  • scaricare ed installare Sourcery G++ Lite dal link riportato sopra (Minimal installation)
  • scaricare e decomprimere in una posizione a piacere OpenOCD 0.5, si trova una versione gia' compilata su questa pagina
  • scaricare ed installare MSYS
  • aggiungere alla variabile di ambiente PATH la directory "bin" di MSYS (C:\msys\1.0\bin) (istruzioni su come modificare le variabili d'ambiente in Windows XP: http://support.microsoft.com/kb/310519 )
  • collegare il programmatore JTAG ed installare i driver (si trovano nella directory di OpenOCD, in drivers/libusb-win32_ft2232_driver)


Prima esecuzione di Eclipse

  • creare una directory workspace in una posizione a piacere
  • scaricare entrambi i file .jar da questo indirizzo e salvarli nella directory "dropins" di eclipse
  • lanciare eclipse
  • installare il plugin GDB Hardware Debugger (Help->Install New Software, selezionare "Indigo..." nel menù a tendina, quando la lista di plugin è disponibile cercare "GDB" e selezionare il plugin "GDB Hardware Debugger"), quindi riavviare eclipse
  • selezionare Windows->Preferences->C/C++->Debug->EmbSys Register View, quindi selezionare cortex-m3->STMicro->STM32F10X_HD


Creare un nuovo progetto

Per creare un nuovo progetto bisogna eseguire i seguenti passaggi:

  • scaricare il file stm32_template.zip e decomprimerlo in workspace. RINOMINARE la directory con un nome a piacere prima di procedere (ad esempio "stm32_hello_world")
  • lanciare eclipse selezionando come workspace la directory "workspace" creata in precedenza
  • selezionare file->new->C-project
  • selezionare come location la directory creata in precedenza ("stm32_hello_world")
  • specificare un nome per il progetto (ad esempio "stm32_hello_world")
  • selezionare Makefile project->Empty project come Project type e --- Other toolchain --- come Toolchain e cliccare su Finish
  • SOLO SU WINDOWS: selezionare il nuovo progetto nell'albero a sinistra, quindi Project->Properties->C/C++ Build, deselezionare "Use default build command" e sostituire "make" con "cs-make"
  • selezionare il nuovo progetto nell'albero a sinistra, quindi Project->Properties->C/C++ Build->Discovery Options, selezionare "Automate discovery..."
  • aprire il file src/main.c
  • selezionare project->Build project
  • cliccare col destro sul progetto nell'albero a sinistra, quindi Index->Rebuild, gli errori in main.c dovrebbero sparire

Creare un nuovo progetto basato su ChibiOS

Per creare un nuovo progetto basato su ChibiOS bisogna eseguire i seguenti passaggi:

  • scaricare il file ChibiOS_2.2.7_HY-STM32.zip e decomprimerlo in workspace.
  • lanciare eclipse selezionando come workspace la directory "workspace" creata in precedenza
  • selezionare file->new->Makefile Project with Existing Code
  • specificare un nome per il progetto (ad esempio "stm32_ChibiOS")
  • selezionare Chibios_2.2.7/demos/HY-STM32 in "Existing Code Location" e cliccare su Finish
  • SOLO SU WINDOWS: selezionare il nuovo progetto nell'albero a sinistra, quindi Project->Properties->C/C++ Build, deselezionare "Use default build command" e sostituire "make" con "cs-make"
  • selezionare il nuovo progetto nell'albero a sinistra, quindi Project->Properties->C/C++ Build->Discovery Options, selezionare "Automate discovery..."
  • aprire il file src/main.c
  • selezionare project->Build project
  • cliccare col destro sul progetto nell'albero a sinistra, quindi Index->Rebuild, gli errori in main.c dovrebbero sparire

Configurare OpenOCD

Per configurare OpenOCD svolgere i seguenti passaggi:

  • selezionare Run->External tools->External tools configuration
  • cliccare col destro su "Program" nell'albero a sinistra, quindi "New"
  • inserire "OpenOCD" nel campo "Name"
  • nel campo Location cliccare su "Browse File System", quindi selezionare openocd-0.5.0.exe nella directory "bin" di OpenOCD
  • nel campo "Arguments" inserire: -f interface/olimex-jtag-tiny.cfg -f target/stm32f1x.cfg -c "reset_config trst_and_srst"
  • nel tab "Build" deselezionare "Build before launch"
  • nel tab "Common", selezionare "External tools" nel campo "Display in favorites menu"
  • cliccare su "Apply" e quindi su "Close"


Configurare il debugger

  • selezionare Run->Debug configurations
  • cliccare col destro su "GDB Hardware Debugging" nell'albero a sinistra, quindi "New"
  • nel campo "C/C++ Application" cliccare "Browse", quindi selezionare il file firmware.elf (o ch.elf se si sta usando ChibiOS) nella directory del progetto corrente
  • nel tab "Debugger" inserire "arm-none-eabi-gdb" nel campo "GDB Command" e deselezionare "Use remote target"
  • cliccare su "Select other" in basso, alla voce "Using GDB (DSF) Hardware...." e quindi selezionare "Standard GDB Hardware..."
  • nel tab "Startup" deselezionare "Load image"
  • nel tab "Startup", nel campo "Initialization commands" inserire (potete copiare il percorso del file firmware.elf (o ch.elf se si sta usando ChibiOS) dal tab "Main"):
file "/Users/tino/workspace/STM32/projects/stm32_template/firmware.elf"
target extended-remote localhost:3333
monitor soft_reset_halt
  • SOLO SU WINDOWS: raddoppiare tutti i caratteri "\" (ad esempio "C:\workspace\stm32_hello_world\firmware.elf" diventa "C:\\workspace\\stm32_hello_world\\firmware.elf")
  • nel campo "Run commands" inserire:
monitor soft_reset_halt
monitor wait_halt
monitor poll
monitor flash probe 0
monitor stm32f1x mass_erase 0
load
monitor soft_reset_halt
thbreak main
continue
  • nel tab "Common", selezionare "Debug" nel campo "Display in favorites menu"
Personal tools