Located in the heart of the Emilia Romagna region, and just a stone's throw from Parma in the renowned Food Valley, LAUMAS Elettronica has for 30 years been Italy's leader in the weighing and batching industry.
The company facility consists of 3000 square metres, integrating "green" technologies for eco-compatibility with the surrounding environment.
LAUMAS' cutting-edge equipment tests various electronic and mechanical components in order to guarantee the products' quality.
The Company has made consistent investments towards the realisation of an EMC testing laboratory.
Today, using these resources, Laumas Research & Development is able to perform every type of product control and testing required by current standards relating to electromagnetic compatibility, electrical safety and legal metrology.
• Extremely specialized personnel with a high level of know-how.
• Research and development area dedicated to designing high-tech products.
• Attention to continuous innovation in products and productive processes.
• Pre-sales support and assistance, analysis of necessities, and choice of the most appropriate products for the customer's needs.
• Goods ready for delivery, guaranteeing that your order will be dealt with quickly.
• Fast and effective post-sales technical assistance.
• Company training aimed at gaining in-depth technical knowledge of products and potential fields of application.
LAUMAS ELETTRONICA can offer an all-round weighing service that is comprised of an enormous range of weighing and batching components, and tailor-made solutions. All the products blend with each other modularly ; while their functions are quite varied, they are simple and intuitive to use, and come with complete, easily consulted manuals.
• weight transmitters ........
• weight indicators with multi-function software .......
• load cells with mounting accessories for all applications ........
• single and multi-product batching systems with formula management......
• PC supervisory software to manage and control the weighing and batching systems.
LAUMAS' products can be linked to all types of peripherals, such as printers, data recorders, data storage on pen drive usb, large digit-display , PC or PLC....... using the field devices most widely employed on the market.
There is also an enormous range of scale products marketed under our IDEA SCALES brand:
• scales,
• crane scales,
• weighing platforms
• weighing modules.
LAUMAS Elettronica is associated with numerous organizations of manufacturing recognized in Europe and around the world.
Over the years, the company has earned a large number of certifications, for both its corporate system and its products. This guarantees high-quality products, and strict control over the production process that generated them.
With its well-established experience in industrial weighing and batching, LAUMAS ELETTRONICA offers its customer a degree of security.
Analizziamo Arduino ai raggi X sia lato hardware che software, studiamo i suoi limiti e vediamo le soluzioni possibili. Lavoriamo con Arduino in modo professionale! Queste le slide del talk tenuto in Roma il 22-09-2015
Gli encoder incrementali programmabili di Lika Electronic sono sviluppati per offrire configurabilità estesa e completa customizzazione. Scoprite di più.
Corso di 20 ore sulla piattaforma Arduino. Corso tenuto nelle scuole superiori di San Secondo e Fornovo come corso di aggiornamento per il personale docente. Il corso si suddivide in 5 lezioni dove vengono spiegate più o meno tutte le funzionalità della piattaforma. I file li potete trovare al seguente indirizzo https://github.com/loweherz/ArduinoLessons
Located in the heart of the Emilia Romagna region, and just a stone's throw from Parma in the renowned Food Valley, LAUMAS Elettronica has for 30 years been Italy's leader in the weighing and batching industry.
The company facility consists of 3000 square metres, integrating "green" technologies for eco-compatibility with the surrounding environment.
LAUMAS' cutting-edge equipment tests various electronic and mechanical components in order to guarantee the products' quality.
The Company has made consistent investments towards the realisation of an EMC testing laboratory.
Today, using these resources, Laumas Research & Development is able to perform every type of product control and testing required by current standards relating to electromagnetic compatibility, electrical safety and legal metrology.
• Extremely specialized personnel with a high level of know-how.
• Research and development area dedicated to designing high-tech products.
• Attention to continuous innovation in products and productive processes.
• Pre-sales support and assistance, analysis of necessities, and choice of the most appropriate products for the customer's needs.
• Goods ready for delivery, guaranteeing that your order will be dealt with quickly.
• Fast and effective post-sales technical assistance.
• Company training aimed at gaining in-depth technical knowledge of products and potential fields of application.
LAUMAS ELETTRONICA can offer an all-round weighing service that is comprised of an enormous range of weighing and batching components, and tailor-made solutions. All the products blend with each other modularly ; while their functions are quite varied, they are simple and intuitive to use, and come with complete, easily consulted manuals.
• weight transmitters ........
• weight indicators with multi-function software .......
• load cells with mounting accessories for all applications ........
• single and multi-product batching systems with formula management......
• PC supervisory software to manage and control the weighing and batching systems.
LAUMAS' products can be linked to all types of peripherals, such as printers, data recorders, data storage on pen drive usb, large digit-display , PC or PLC....... using the field devices most widely employed on the market.
There is also an enormous range of scale products marketed under our IDEA SCALES brand:
• scales,
• crane scales,
• weighing platforms
• weighing modules.
LAUMAS Elettronica is associated with numerous organizations of manufacturing recognized in Europe and around the world.
Over the years, the company has earned a large number of certifications, for both its corporate system and its products. This guarantees high-quality products, and strict control over the production process that generated them.
With its well-established experience in industrial weighing and batching, LAUMAS ELETTRONICA offers its customer a degree of security.
Analizziamo Arduino ai raggi X sia lato hardware che software, studiamo i suoi limiti e vediamo le soluzioni possibili. Lavoriamo con Arduino in modo professionale! Queste le slide del talk tenuto in Roma il 22-09-2015
Gli encoder incrementali programmabili di Lika Electronic sono sviluppati per offrire configurabilità estesa e completa customizzazione. Scoprite di più.
Corso di 20 ore sulla piattaforma Arduino. Corso tenuto nelle scuole superiori di San Secondo e Fornovo come corso di aggiornamento per il personale docente. Il corso si suddivide in 5 lezioni dove vengono spiegate più o meno tutte le funzionalità della piattaforma. I file li potete trovare al seguente indirizzo https://github.com/loweherz/ArduinoLessons
Siamo un team appassionato di ingegneri che ha avviato Ace PLC perché eravamo frustrati da quanto poco il mercato dei PLC si sia evoluto. L’hardware è costoso e il software sembra essere stato congelato in tempo per anni. Volevamo progettare un PLC più avanzato per accelerare i tempi di sviluppo e ridurre i costi.
Il nostro team è nel mondo dell’automazione da molti anni. Dennis, il nostro presidente, ha iniziato Optimation nel 1990. Optimation fatto i primi pannelli operatore. A testimonianza della loro qualità, sono ancora oggi in vendita.
L’avventura di Ace PLC è iniziata nel 2007. Sono stati dedicati 5 anni allo sviluppo di un PLC di nuova generazione. In quel periodo abbiamo creato molti prototipi, ma ci siamo rifiutati di andare sul mercato fino a quando non avessimo qualcosa di cui andassimo veramente fieri. Ace PLC sono il risultato di questa ricerca di un PLC veramente grande.
Encoder per sistemi robotici, motori & applicazioni OEM - Lika Electronic - E...Lika Electronic
Lika Electronic sviluppa e produce un'ampia gamma di encoder standard e frameless ad alta risoluzione per garantire feedback di posizione e velocità accurati in robot multiassi, cobot, motori, azionamenti diretti, installazioni militari, radar e antenne a uso commerciale e per la difesa, sistemi di videosorveglianza automatizzati, impianti industriali ad alta tecnologia e una varietà di applicazioni con criticità dal punto di vista della risoluzione, dell'accuratezza e dello spazio.
Supported by an experienced technical team, Crouzet Automation is a pioneer in the simplification of programming. The brand offers the easiest-to-use and most adaptable alternative automation solution for specialized and demanding needs.
http://www.crouzet-automation.com
Follow us on LinkedIn: https://www.linkedin.com/company/crouzet-automation
Crouzet Automation is a brand of InnoVista Sensors™.
InnoVista Sensors™ : your trusted partner of choice to face industrial challenges of today and tomorrow.
InnoVista Sensors™ is a worldwide industrial specialist of sensors, controllers and actuators for automated systems.
Through its brands, Crouzet Aerospace, Crouzet Automation, Crouzet Control, Crouzet Motors, Crouzet Switches and Systron Donner Inertial, InnoVista Sensors™ offers a wide range of reliable, efficient and customizable components dedicated to the Aerospace & Defence, Transportation and Industrial market and segments.
Thanks to the recognized expertise of its teams and a strong innovation policy, InnoVista Sensors™ brings performance enhancing solutions to its customers worldwide.
www.innovistasensors.comCrouzet Automation is a brand of InnoVista Sensors™.
Analisi dei limiti della scheda Arduino con soluzioni tecniche per una corretta progettazione elettronica. Ruolo di Arduino nella società ed utilizzo come demoboard.
Newsletter Maggio 2016 - Prodotti del mese - Encoder incrementali programmabili IQ/IP, customizzazione e flessibilità. Compatti per spazi ristretti, robusti per ambienti gravosi, ad alta risoluzione per applicazioni high-end, magnetici per installazioni critiche, ottici per l'elevata accuratezza, ad albero cavo o sporgente, con uscita cavo o connettore, e la risoluzione programmabile fino a 65.536 PPR: la gamma degli encoder incrementali programmabili di Lika Electronic vi offre infinite possibilità di personalizzazione in base alle vostre esigenze. IFS-10, sicurezza certificata SIL3/PLe! La famiglia dei safety controller IFS-10 di Lika Electronic è progettata per il controllo di velocità, arresto e direzione di movimento di encoder e sensori incrementali “safe” e “non safe” integrati in sistemi che richiedono un livello di sicurezza funzionale fino a SIL3/PLe.
Siamo un team appassionato di ingegneri che ha avviato Ace PLC perché eravamo frustrati da quanto poco il mercato dei PLC si sia evoluto. L’hardware è costoso e il software sembra essere stato congelato in tempo per anni. Volevamo progettare un PLC più avanzato per accelerare i tempi di sviluppo e ridurre i costi.
Il nostro team è nel mondo dell’automazione da molti anni. Dennis, il nostro presidente, ha iniziato Optimation nel 1990. Optimation fatto i primi pannelli operatore. A testimonianza della loro qualità, sono ancora oggi in vendita.
L’avventura di Ace PLC è iniziata nel 2007. Sono stati dedicati 5 anni allo sviluppo di un PLC di nuova generazione. In quel periodo abbiamo creato molti prototipi, ma ci siamo rifiutati di andare sul mercato fino a quando non avessimo qualcosa di cui andassimo veramente fieri. Ace PLC sono il risultato di questa ricerca di un PLC veramente grande.
Encoder per sistemi robotici, motori & applicazioni OEM - Lika Electronic - E...Lika Electronic
Lika Electronic sviluppa e produce un'ampia gamma di encoder standard e frameless ad alta risoluzione per garantire feedback di posizione e velocità accurati in robot multiassi, cobot, motori, azionamenti diretti, installazioni militari, radar e antenne a uso commerciale e per la difesa, sistemi di videosorveglianza automatizzati, impianti industriali ad alta tecnologia e una varietà di applicazioni con criticità dal punto di vista della risoluzione, dell'accuratezza e dello spazio.
Supported by an experienced technical team, Crouzet Automation is a pioneer in the simplification of programming. The brand offers the easiest-to-use and most adaptable alternative automation solution for specialized and demanding needs.
http://www.crouzet-automation.com
Follow us on LinkedIn: https://www.linkedin.com/company/crouzet-automation
Crouzet Automation is a brand of InnoVista Sensors™.
InnoVista Sensors™ : your trusted partner of choice to face industrial challenges of today and tomorrow.
InnoVista Sensors™ is a worldwide industrial specialist of sensors, controllers and actuators for automated systems.
Through its brands, Crouzet Aerospace, Crouzet Automation, Crouzet Control, Crouzet Motors, Crouzet Switches and Systron Donner Inertial, InnoVista Sensors™ offers a wide range of reliable, efficient and customizable components dedicated to the Aerospace & Defence, Transportation and Industrial market and segments.
Thanks to the recognized expertise of its teams and a strong innovation policy, InnoVista Sensors™ brings performance enhancing solutions to its customers worldwide.
www.innovistasensors.comCrouzet Automation is a brand of InnoVista Sensors™.
Analisi dei limiti della scheda Arduino con soluzioni tecniche per una corretta progettazione elettronica. Ruolo di Arduino nella società ed utilizzo come demoboard.
Newsletter Maggio 2016 - Prodotti del mese - Encoder incrementali programmabili IQ/IP, customizzazione e flessibilità. Compatti per spazi ristretti, robusti per ambienti gravosi, ad alta risoluzione per applicazioni high-end, magnetici per installazioni critiche, ottici per l'elevata accuratezza, ad albero cavo o sporgente, con uscita cavo o connettore, e la risoluzione programmabile fino a 65.536 PPR: la gamma degli encoder incrementali programmabili di Lika Electronic vi offre infinite possibilità di personalizzazione in base alle vostre esigenze. IFS-10, sicurezza certificata SIL3/PLe! La famiglia dei safety controller IFS-10 di Lika Electronic è progettata per il controllo di velocità, arresto e direzione di movimento di encoder e sensori incrementali “safe” e “non safe” integrati in sistemi che richiedono un livello di sicurezza funzionale fino a SIL3/PLe.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
Yielding Robot and Rigid Environment - Contact Force Control (IT)EnricoMarinelli3
Italian:
In questa tesi viene proposto un problema di controllo della forza al contatto con l’ambiente per un modello mono-direzionale di un robot manipolatore con una dinamica disaccoppiata.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
accessori installazione, acqua, acqua di casa, acqua potabile a casa, acqua sana, adattatori, ambiente, anello tubo, clip, connettori, contalitri digitali, contalitri meccanici, filtri per acqua potabile, inserti tubo, riduttori pressione co2, valvole a sfera, valvole antiallagamento, valvole deviatrici, valvole di non ritorno, valvole scarico e carico acqua
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
Siamo un fornitore all'ingrosso di prodotti, soluzioni e servizi nel trattamento dell'acqua.
Forniamo solo ed esclusivamente le aziende del settore quali distributori, rivenditori, assemblatori e costruttori.
Un catalogo che comprende prodotti attentamente selezionati fra i brand più prestigiosi del mercato Water Treatment, sito efficace, servizi personalizzati, logistica precisa ed efficiente, organizzazione flessibile, ma anche la fondamentale importanza che viene attribuita al fattore umano ed ai rapporti con i Partner, fanno di Sinergroup S.r.l. un riferimento per molteplici aziende di settore.
Un impegno continuo e coerente, la capacità di anticipare l'evoluzione della domanda e l'orientamento alla comprensione e alla soddisfazione dei nostri clienti ci distingue da sempre nel nostro lavoro.
Nati con un obiettivo sempre più esclusivo nel panorama Distributivo Italiano: Continuare ad essere "Leader di Brand Leader", con attività e servizi di Valore.
Una scelta di specializzazione che in questi anni ha permesso di maturare una conoscenza ed una esperienza uniche nel settore.
L’approfondita conoscenza del mercato del trattamento acqua e l’elevata efficienza commerciale, consentono di offrire ai nostri clienti numerosi prodotti e servizi sempre più personalizzati ed adeguati al singolo utente finale.
La nostra missione è diventare il Tuo miglior Business Partner.
Similar to Relazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordano (20)
Relazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordano
1. 0
POLITECNICO DI TORINO
A.A. 2016/2017
Corso di Progettazione di dispositivi
biomedici programmabili
Misuratore della frequenza respiratoria (RR)
basato su NTC
Gruppo 5, LED 7, Tavolo 5
Marta Boscaglia s242462, responsabile progettazione software
Alessio Brondino s242491, responsabile documentazione
Stefano Gabetti s235287, responsabile progettazione hardware
Gabriele Giordano s242511, responsabile progettazione integrata
2. 1
Indice
1. Specifiche di progetto................................................................................................................................ 2
1.1 Opzioni migliorative................................................................................................................................ 2
1.2 Prove di verifica ...................................................................................................................................... 2
2. Schema elettrico ........................................................................................................................................ 4
3. Calcoli di progetto ..................................................................................................................................... 6
3.1 Stima della massima corrente assorbita dal circuito................................................................................ 6
3.2 Dimensionamento del resistore di caduta del led .................................................................................... 6
3.3 Dimensionamento dei resistori di caduta dei led dei display a sette segmenti........................................ 6
3.4 Circuito di condizionamento del sensore NTC........................................................................................ 6
4. Descrizione del Software........................................................................................................................... 8
4.1 Diagramma a blocchi............................................................................................................................... 9
4.2 Flow-chart delle singole routine............................................................................................................ 10
5. Listato completo del codice..................................................................................................................... 17
6. Documentazione delle prove di verifica.................................................................................................. 37
6.1 Verifica del sistema di allarme per la tensione di alimentazione .......................................................... 37
6.2 Verifica della temporizzazione della verifica della tensione di alimentazione ..................................... 38
6.3 Verifica della massima corrente assorbita............................................................................................. 39
6.4 Verifica dell’accuratezza degli estremi di misura ................................................................................. 40
6.5 Verifica del funzionamento del sistema di acquisizione ed elaborazione del segnale e di pilotaggio dei
display ......................................................................................................................................................... 41
6.6 Verifica del funzionamento del deviatore e della misura della frequenza............................................. 42
6.7 Verifica del funzionamento complessivo del dispositivo...................................................................... 44
Appendice A: algoritmo di ricerca del periodo ............................................................................................... 45
3. 2
1.Specifiche di progetto
Tensione di alimentazione: Val = 5 V ± 150 mV;
Massima corrente assorbita: Ialmax = 400 mA;
Verifica della tensione di alimentazione a intervalli di circa 1 s e sistema di allarme con led
rosso:
Se Val > 4,2 V ± 150 mV led spento
Se Val < 4,2 V ± 150 mV led acceso fisso
Misurazione del periodo respiratorio (s) mediante sensore NTC posto al di sotto delle narici;
Misurazione fornita in uscita su tre display a sette segmenti;
Frequenza di campionamento 20 Hz, durata dei brani di segnale 12 s;
Risoluzione 100 ms;
Accuratezza 300 ms;
I display permettono di visualizzare valori di periodo respiratorio compresi tra 1 s ± 0,1 s e 8
s ± 0,3 s, valori al di fuori di questo intervallo comportano la visualizzazione sui display del
messaggio d’allarme “888”;
1.1 Opzioni migliorative
Verifica della tensione di alimentazione con sistema di allarme a due soglie:
Se Val > 4,8 V ± 150 mV led spento
Se 4,8 V ± 150 mV > Val > 4,2 V ± 150 mV led lampeggiante
Se Val > 4,2 V ± 150 mV led acceso fisso
Possibilità di inserire un dip-switch per visualizzare sui display in alternativa periodo
respiratorio (s) o frequenza respiratoria (atti respiratori/min).
1.2 Prove di verifica
Verifica del sistema di allarme per la tensione di alimentazione: dopo aver alimentato il
circuito con un alimentatore stabilizzato regolato ad un valore di tensione di 5,0 V ± 0,15 V
ed in grado di erogare una corrente massima di 400 mA, si collega il multimetro in parallelo
all’alimentatore per misurare con accuratezza la tensione di alimentazione. Agendo
sull’alimentatore si fa variare la tensione di alimentazione del circuito partendo da quella
nominale diminuendola progressivamente a passi di 100 mV fino al valore di 3,9 V, dopodiché
si risale sempre a passi di 100 mV fino al valore nominale. Durante la prova si osserva il
cambiamento dello stato del led: il led dovrà essere spento per valori di tensione superiori a
4,8 V ± 0,15 V, lampeggiante per valori di tensione compresi tra 4,8 V ± 0,15 V e 4,2 V ±
0,15 V e acceso fisso per valori inferiori a 4,2 V ± 0,15 V;
Verifica della temporizzazione della verifica della tensione di alimentazione: lo stato del pin
15 del microcontrollore viene complementato ad ogni verifica della tensione, mediante
4. 3
l’oscilloscopio si osserva lo stato del pin. L’uscita del pin dovrà variare tra un livello logico
alto e un livello logico basso ad intervalli di 1 s ± 0,1 s ed ogni 12 variazioni un livello sarà
mantenuto per un tempo maggiore di quello indicato, perché durante l’elaborazione del
segnale si sospende momentaneamente oltre al campionamento anche il controllo della
tensione per ripartire al termine con uguale temporizzazione per entrambe le operazioni;
Verifica della massima corrente assorbita: si collega innanzitutto l’amperometro in serie al
circuito. Dopodiché si sostituisce all’uscita del sensore NTC un segnale sinusoidale di
ampiezza 1 Vpp, offset 1,5 V e periodo 20s ottenuto dal generatore di segnali in modo che
siano accesi tutti i segmenti dei display (caso di massima corrente assorbita) e si misura la
corrente assorbita, che dovrà essere inferiore a 400 mA;
Verifica dell’accuratezza degli estremi di misura: si sostituiscono all’uscita del sensore NTC
segnali sinusoidali di ampiezza 1 Vpp, offset 1,5 V e periodo rispettivamente 0,8 s e 8,4 s
ottenuti dal generatore di segnali: in entrambi i casi dovrà essere visualizzato sui display il
messaggio d’allarme “888”;
Verifica del funzionamento del sistema di acquisizione ed elaborazione del segnale e di
pilotaggio dei display: si sostituiscono all’uscita del sensore NTC in successione 3 segnali
sinusoidali di ampiezza 1 Vpp, offset 1,5 V e periodi rispettivamente 2 s, 4 s e 6 s ottenuti con
il generatore di segnali. Si osserva il valore del periodo dato in uscita dai display, che deve
essere compatibile con quello dato dal generatore di segnali a meno dell’errore massimo
garantito;
Verifica del funzionamento del deviatore e della misura della frequenza: selezionando le
stesse forme d’onda della prova precedente e selezionando la visualizzazione della frequenza
mediante il deviatore, per ognuna delle misure dovrà essere visualizzata la frequenza in cicli
al minuto corrispondente al periodo (rispettivamente 30 cicli/min, 15 cicli/min, 10 cicli/min)
a meno dell’errore massimo garantito;
Verifica del funzionamento complessivo del dispositivo: si collega l’uscita del circuito di
condizionamento del sensore al pin 25 del microcontrollore e si visualizza il segnale in uscita
dal circuito di condizionamento sull’oscilloscopio. Posizionando il sensore al di sotto delle
narici di un soggetto si osserva il valore del periodo respiratorio misurato, che dovrà essere
compatibile con quello visualizzato sull’oscilloscopio.
Firma Committente
_______________________________
Firme Progettisti
________________________________
________________________________
________________________________
________________________________
6. 5
Il circuito del misuratore di frequenza respiratoria si basa sul funzionamento di un sensore NTC
collegato adeguatamente ad un ingresso del microcontrollore ATmega8. Il microcontrollore riceve in
ingresso sul pin 25 il segnale di tensione in uscita dal circuito di condizionamento del sensore
(realizzato mediante un circuito integrato LM358P), lo elabora opportunamente grazie al firmware
caricato nella sua Program Flash e pilota mediante tre linee di latch-enable (in uscita dai pin 11,12,13)
e quattro linee di segnale (pin 2,3,4,5) tre display a 7 segmenti tramite tre decoder CD4511.
Il microcontrollore esegue anche la verifica della tensione di alimentazione leggendo il valore di
tensione sul pin 24 (corrispondente a metà della tensione di alimentazione). Dopo averlo confrontato
con le soglie impostate il microcontrollore pilota tramite il pin 23 il funzionamento di un led rosso.
Per ogni circuito integrato si è inserito un condensatore di bypass da 100 nF tra il pin di alimentazione
e riferimento di massa.
Mediante un deviatore a due posizioni collegato al pin 16 è possibile selezionare la visualizzazione
sui display del periodo o della frequenza misurati.
7. 6
3.Calcoli di progetto
3.1 Stima della massima corrente assorbita dal circuito
Si suppone un consumo massimo dei componenti del circuito come: 10 mA per ogni segmento acceso
dei display (ID), 10 mA per il led acceso (IL), 10 mA per ognuno degli integrati CD4511 (IC), 10 mA
per l’integrato LM358P (IA) e 20 mA per il microcontrollore ATmega8 (IK).
Da questo risulta una corrente massima:
I 𝑚𝑎𝑥 = I 𝐿 + 22 ∗ I 𝐷 + 3 ∗ I 𝐶 + I 𝐴 + I 𝐾 = 290 𝑚𝐴
Per garantire un discreto margine che assicuri il funzionamento del circuito si dichiara una massima
corrente assorbita di 400 mA.
3.2 Dimensionamento del resistore di caduta del led
Un led rosso ha tensione di soglia nominale VL di circa 1,6 V e assorbe durante il normale
funzionamento una corrente IL di circa 10 mA.
Considerando questi dati il valore del resistore di caduta risulta:
𝑅 =
𝑉𝐴𝐿 − 𝑉𝐿
𝐼𝐿
= 340 Ω
Questo valore non si trova all’interno della serie di resistori con tolleranza 5%. Volendo diminuire il
valore della potenza dissipata si è scelto quindi un resistore da 390 Ω in modo da avere un valore di
corrente inferiore a quello nominale IL.
3.3 Dimensionamento dei resistori di caduta dei led dei display a sette
segmenti
Ogni segmento è un led rosso, per cui ipotizzando gli stessi valori del dimensionamento precedente
si ottiene un valore del resistore di caduta di 340 Ω. In questo caso, volendo ottenere una maggiore
luminosità e dunque una più facile lettura del risultato, si è scelto un resistore da 330 Ω in modo da
ottenere un valore di corrente leggermente maggiore di quella nominale IL.
3.4 Circuito di condizionamento del sensore NTC
8. 7
La dinamica del segnale osservata direttamente all’uscita del sensore è dell’ordine delle decine di
mV, occorre dunque amplificare il segnale in modo da ottenere una dinamica maggiore di almeno un
ordine di grandezza rispetto alla tensione di quantizzazione dell’ADC (10 mV) e minore di quella
d’ingresso dell’ADC (2,56 V). Il circuito di condizionamento così realizzato introduce in uscita un
offset di circa 1,6 V e amplifica di un fattore 10 la dinamica del segnale. Sperimentalmente si è
osservata una dinamica all’uscita del circuito di condizionamento dell’ordine delle centinaia di mV.
9. 8
4.Descrizione del Software
Il firmware è stato realizzato in linguaggio assembler mediante l’ambiente di sviluppo Atmel Studio
7.0 e caricato nella Program Flash del microcontrollore ATmega8 utilizzando la scheda AVR Dragon.
Il programma eseguito dal microcontrollore si suddivide in:
Campionamento del segnale ricevuto dal sensore NTC e salvataggio nella SRAM ogni 50
ms circa;
Verifica della tensione di batteria ogni 1000 ms circa;
Elaborazione del segnale campionato:
- Media mobile su finestre di 4 campioni per ridurre il rumore presente sul segnale e
scrittura dei valori mediati sulla SRAM;
- Algoritmo per la ricerca del periodo del segnale mediato (dettagliato nell’Appendice
A).
Pilotaggio dei display per fornire in uscita il periodo misurato o la frequenza
corrispondente.
18. 17
5.Listato completo del codice
Di seguito si riporta l’intero listato del codice in linguaggio assembler caricato nella Program Flash
dell’ATmega8 opportunamente commentato.
; ---- PROGRAMMA ASSEMBLER PER MICROCONTROLLORE ATmega8 ----
;
; - Politecnico di Torino
; - Corso di Laurea Magistrale in Ingegneria Biomedica
; - Esame di Progettazione di Dispositivi Biomedici Programmabili
; - A.A. 2016/2017
; - Progetto: Misuratore di frequenza respiratoria (RR) basato su NTC
; - Autori: Marta Boscaglia, Alessio Brondino, Stefano Gabetti, Gabriele Giordano
;
;
; Definizione dei registri utilizzati
.DEF mp = R16 ; registro di lavoro (generico)
.DEF mp1 = R17 ; registro di lavoro secondario (generico)
.DEF var_sample = R18 ; variabile (tempo di campionamento) decrementata dalla
;subroutine di risposta ad interrupt
.DEF count_sample = R19 ; variabile che conta il numero di campioni di segnale acquisiti
;e successivamente il numero di campioni elaborati
.DEF var_battery = R20 ; variabile (intervallo di controllo batteria) decrementata dalla
;subroutine di risposta ad interrupt
.DEF flag_battery = R21 ; flag utilizzata per determinare lo stato della batteria e
;successivamente in alcune routine del signal processing
.DEF sample1 = R22 ; registro riservato per salvare un campione del brano di segnale
.DEF sample2 = R23 ; registro riservato per salvare un campione del brano di segnale
.DEF sample3 = R24 ; registro riservato per salvare un campione del brano di segnale
.DEF sample4 = R25 ; registro riservato per salvare un campione del brano di segnale
;
; Definizione delle soglie
.EQU th1=0b11110000 ;soglia 2,4 V (flag->1)
.EQU th2=0b11010010 ;soglia 2,1 V (flag->2)
; Vettore di interrupt
rjmp RESET ; Reset Handler
reti ;rjmp EXT_INT0 ; IRQ0 Handler
reti ;rjmp EXT_INT1 ; IRQ1 Handler
reti ;rjmp TIM2_COMP ; Timer2 Compare Handler
reti ;rjmp TIM2_OVF ; Timer2 Overflow Handler
reti ;rjmp TIM1_CAPT ; Timer1 Capture Handler
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
reti ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ;Timer0 Overflow Handler
reti ;rjmp SPI_STC ; SPI Transfer Complete Handler
reti ;rjmp USART_RXC ; USART RX Complete Handler
reti ;rjmp USART_UDRE ; UDR Empty Handler
reti ;rjmp USART_TXC ; USART TX Complete Handler
reti ;rjmp ADC_conv ; ADC Conversion Complete Handler
reti ;rjmp EE_RDY ; EEPROM Ready Handler
reti ;rjmp ANA_COMP ; Analog Comparator Handler
reti ;rjmp TWSI ; Two-wire Serial Interface Handler
reti ;rjmp SPM_RDY ; Store Program Memory Ready Handler
; Si sono abilitati solo gli interrupt corrispondenti al power-on reset e all'overflow del
;timer counter 0
;
RESET:
; In questo punto inizia la routine principale del programma
; Si procede innanzitutto alle inizializzazioni dei registri che saranno utilizzati dalle
;routine del programma
19. 18
; Tra questi ci sono quelli relativi alle porte di I/O, all'AD Converter e lo stack pointer
; ---- Inizializzazione dello STACK POINTER
ldi mp,0x04
out SPH,mp
ldi mp,0x5f
out SPL,mp
; Lo stack pointer è stato allocato all'indirizzo corrispondente alla parte
; alta della RAM disponibile, poiché lo stack pointer quando utilizzato viene
; decrementato e successivamente incrementato dopo l'utilizzo.
;
; ---- Inizializzazione di PORTC
ldi mp,0b00000001
;
; Per questa porta di I/O si definisce quali pin sono utilizzati come uscite e quali come
;ingressi.
; I pin che sono usati come uscite, nel nostro caso per pilotare un led, devono
; avere il corrispondente bit nel registro direzione dati (DDR) ad '1'.
; I rimanenti in ingresso devono avere i bit a '0'.
;
out DDRC,mp
; La parola è stata inizialmente scritta nel registro mp e poi successivamente, tramite
;l'istruzione out
; caricata nel Data Direction Register della porta C
; In questo modo è stato definito come uscita il pin 23 del microcontrollore (PC0), tramite
;questo pin sarà pilotato il led.
ldi mp,0x00
out PORTC,mp
; Si scrive il valore zero nella porta C, il led è inizializzato spento.
;
; ---- Inizializzazione di PORTD
ldi mp,0b11101111
out DDRD,mp
; Si abilitano i pin I/O in uscita in DDRD, in questo modo si sono abilitati come uscita i
;pin 2,3,4,5,11,12,13 dell'ATmega8
; PORTD permette di pilotare i display a 7 segmenti, in particolare i primi 4 pin
;(PD0,PD1,PD2,PD3) pilotano le linee A,B,C,D
; che danno in ingresso ai decoder le parole con codifica BCD contenenti il numero da
;visualizzare sul singolo display,
; gli ultimi 3 pin (PD5,PD6,PD7) costituiscono i 3 Latch-Enable che permettono di
;selezionare separatamente ognuno dei 3 decoder
; per scrivere il numero sul display corretto (decine, unità, decimi)
;
; ---- Inizializzazione di PORTB
ldi mp,0b00000010
out DDRB,mp
; E' stato definito come uscita il pin 15 del microcontrollore (PB1)
; tramite questo pin sarà verificata la tempistica del controllo della tensione di batteria
ldi mp,0x00
out PORTB,mp
; Si scrive il valore zero nella porta B
; ---- Inizializzazione del Timer/Counter0
ldi mp,0b00000101
out TCCR0,mp
; Si seleziona per il prescaler passo 1024 (se 1MHz allora 1024us)
; Il contatore sarà quindi incrementato a passi di circa 1ms (1,024ms)
;
ldi mp,246
out TCNT0,mp
; seleziona tempo tra interrupt pari a circa 10ms (10,24ms)
;
ldi mp,0x01
out TIMSK,mp
; abilita l'interrupt in caso di overflow di TCNT0
20. 19
;
ldi var_battery,100
; Si inizializza la variabile var_battery che sarà decrementata dalla subroutine di risposta
;ad interrupt
; In questo modo si ottiene una variabile che raggiungerà il valore 0 dopo circa 1s
;(var_battery = 100 -> 1024 ms),
; permettendoci così di effettuare la verifica dello stato della batteria ad intervalli
;regolari di circa 1000ms come richiesto
;
ldi var_sample,5
; Si inizializza la variabile var_sample che sarà decrementata dalla subroutine di risposta
;ad interrupt (var_sample = 5 -> 51,2 ms)
; In questo modo si ottiene il campionamento del segnale con Tc circa 50 ms (fc circa 20 Hz)
;
ldi count_sample,0
; Inizializza il contatore a 0 (nessun campione acquisito)
;
; ---- Inizializzazione dell'AD Converter
ldi mp,0b11000000
out ADCSRA,mp
; Tramite il registro ADCSRA si decidono le seguenti impostazioni: si abilitano le funzioni
;dell'ADC e lo si avvia,
; non sarà utilizzata la modalità free-running (sia per motivi di consumo energetico, sia
;perché si preferisce avviare le conversioni
; dell'ADC con una temporizzazione nota mediante opportune istruzioni nel codice),
; non si abilitano gli interrupt e si sceglie il passo standard del prescaler
ldi mp, 0b11100001
out ADMUX, mp
; Tramite il registro ADMUX si imposta: tensione di riferimento 2,56 V (riferimento interno
;Vref),
; risultato left adjusted (utilizzando l'High byte contente il risultato si avrà una
;risoluzione su 8 bit -> 256 livelli)
; canale d'ingresso ADC1 (pin 24, PC1)
ldi flag_battery,0
; Si inizializza flag_battery a 0, prima del primo controllo si suppone che la tensione di
;batteria sia a valori ottimali
;
; ---- Inizializzazione del registro Z
ldi ZH, HIGH(Table1*2)
ldi ZL, LOW(Table1*2)
; Il registro Z sarà utilizzato nel corso del programma per contenere gli indirizzi delle
;celle della Program Flash
; in cui è salvata la lookup table. La lookup table permette di convertire il valore del
;periodo respiratorio misurato in campioni
; nel valore del periodo in secondi da dare in uscita sui display
; Si inizializza tale registro in modo che punti alla prima cella della prima riga della
;lookup table
;
; ------ Inizializzazione della SRAM:
clr r27
; clear dell'high byte di X
ldi r26,$60
; Nel programma si utilizzerà il registro X per contenere gli indirizzi delle celle di RAM
; in cui saranno salvati prima i valori dei campioni di segnale e successivamente altri
;valori derivanti dalle routine di
; elaborazione del segnale. Si inizializza il registro X al valore $0060 (primo indirizzo di
;SRAM disponibile)
;
sei
; Mediante questo comando si abilitano gli interrupt a livello di SREG
;
; --------------------------------------- LOOP PRINCIPALE -------------------------------
; Da questo punto inizia il loop infinito che viene eseguito dal microcontrollore
21. 20
;
main_loop:
cpi var_sample,0
brne check_battery_routine
; Se il valore contenuto in var_sample è 0 allora sono passati 50 ms e si procede al
;campionamento del segnale,
; altrimenti si salta alla routine di controllo dello stato della batteria
sir:
ldi var_sample,5
; Si reinizializza var_sample a 5 per contare altri 50ms
;
; ----------------------- CAMPIONAMENTO DEL SEGNALE E SALVATAGGIO IN RAM ---------------
;
ldi mp, 0b11100010
out ADMUX, mp
; Mediante ADMUX si seleziona come canale d'ingresso al convertitore il canale ADC2 (pin 25,
;PC2)
;
; ---- Routine di conversione dell'ADC
;
in mp,ADCSRA
ldi mp1,0b01000000
or mp,mp1
out ADCSRA,mp
; La routine è divisa in due parti:
; nella prima si carica un 1 nel bit 6 di ADCSRA per iniziare la conversione senza
;modificare gli altri bit
;
check_conv_sample:
in mp,ADCSRA
ldi mp1,0b01000000
and mp,mp1
brne check_conv_sample
; nella seconda si attende che la conversione sia finita: si verifica che il valore del bit6
;sia tornato a 0,
; finché questo non avviene il microcontrollore resta all'interno di questa routine di
;controllo
; (questo controllo crea dei tempi di attesa che però sono molto brevi, circa 30us)
;
in mp,ADCH
; Si richiama il risultato della conversione in mp
st X+,mp
; Il valore è salvato nella SRAM e il registro X post-incrementiamo, così da puntare alla
;cella successiva,
; dove si salverà il campione successivo
inc count_sample
; Il contatore del numero di campioni acquisiti si incrementa ogni volta
; Un controllo successivo avvierà la routine di elaborazione del segnale quando il contatore
;avrà raggiunto il valore corrispondente
; alla lunghezza del brano di segnale che si vuole analizzare
;
;------------------------------- CONTROLLO DELLA TENSIONE DI BATTERIA ----------------------
;
check_battery_routine:
cpi var_battery,0
brne signal_processing
; Se non è passato 1 s non si esegue la routine di controllo della batteria e si salta alla
;routine successiva
ldi var_battery,100
; Si reinizializza la variabile di temporizzazione (1 s) per temporizzare il controllo
;successivo
ldi flag_battery,0
; Ogni volta che si effettua il controllo occorre reinizializzare la flag a zero
22. 21
;
ldi mp, 0b11100001
out ADMUX, mp
; Per eseguire il controllo sullo stato della batteria bisogna selezionare il canale ADC1
;(PIN 24, PC1) come ingresso
;
in mp,ADCSRA
ldi mp1,0b01000000
or mp,mp1
out ADCSRA,mp
check_conv_battery:
in mp,ADCSRA
ldi mp1,0b01000000
and mp,mp1
brne check_conv_battery
; La routine che misura la tensione della batteria è identica a quella che rileva il valore
;del campione di segnale
;
in mp,ADCH
; Si legge il valore della tensione misurata
cpi mp,th1
brsh check_battery_voltage_01
ldi flag_battery,1
; Se il valore è inferiore alla prima soglia si modifica la flag e si passa alla verifica
;della 2a soglia,
; altrimenti si salta direttamente alla fine (è inutile verificare la 2a soglia)
cpi mp,th2
brsh check_battery_voltage_01
ldi flag_battery,2
; Se il valore è inferiore alla seconda soglia si modifica ancora la flag
check_battery_voltage_01:
cpi flag_battery,0
brne check_battery_voltage_02
ldi mp,0b00000000
out PORTC,mp
; Se la flag è 0 -> batteria OK, il led resta spento
check_battery_voltage_02:
cpi flag_battery,1
brne check_battery_voltage_03
; Se la flag è 1 -> il valore della tensione è tra le 2 soglie, LED intermittente, occorre
;eseguire il toggle:
in mp,PINC
ldi mp1,0b00000001
and mp,mp1
; si legge il valore del pin che pilota il led (si leggono tutti i pin della porta e si
; mascherano tutti ad eccezione di quello di interesse)
ldi mp1,0b00000001
eor mp,mp1
; eseguendo un or esclusivo tra mp ed mp1 si complementa il bit 0 di mp
out PORTC,mp
; Il valore di mp è messo in uscita (se il led era acceso si spegne e viceversa, si ottiene
;così il lampeggio del led ad intervalli di 1 s)
check_battery_voltage_03:
cpi flag_battery,2
brne signal_processing
ldi mp,0b00000001
out PORTC,mp
; Se la flag è 2 -> il valore della è tensione sotto la seconda soglia, LED acceso fisso
;
;--------------- ELABORAZIONE DEL SEGNALE --------------------
;
signal_processing:
cpi count_sample,255
23. 22
brne main_loop
; Se il numero dei campioni ha raggiunto 255 (si sono registrati circa 12s di segnale)
;allora si procede all'elaborazione
; L'elaborazione del segnale comporta vari passaggi, il primo dei quali è il calcolo della
;media mobile per ridurre il rumore
media_mobile:
; Occorre inizializzare i registri che puntano alla RAM
clr r29
ldi r28,$60
; Il registro Y contiene gli indirizzi delle celle di RAM da cui si leggono i valori dei
;campioni
clr r27
ldi r26,$60
; Il registro X contiene invece gli indirizzi delle celle di RAM dove si scrive il valore
;della media mobile
ld sample1,Y+
dec count_sample
; Al caricamento di ogni campione si decrementa il valore di count_sample, che sarà 0 una
;volta caricati tutti i campioni
ld sample2,Y+
dec count_sample
ld sample3,Y+
dec count_sample
ld sample4,Y+
dec count_sample
average:
ldi mp,0
; Nel registro mp si salva l'eventuale overflow delle somme (poichè si sommano 4 numeri a 8
;bit occorrono 10 bit), mp deve essere inizializzato a 0
add sample1,sample2
brcc sum_sample1_2
; il bit C (Carry) dello status register è quello che indica se è avvenuto overflow nella
;somma, se è avvenuto si aggiunge 1 al termine che salva i riporti
inc mp
clc
; il bit del Carry va riazzerato prima di effettuare la somma successiva, poi si sommano gli
;altri campioni
sum_sample1_2:
add sample1,sample3
brcc sum_sample3
inc mp
clc
sum_sample3:
add sample1,sample4
brcc sum_all4samples
inc mp
clc
; il risultato parziale è ora salvato su due registri in questo modo: 000000XX (mp)
;XXXXXXXX (sample1), questo valore va diviso per 4:
; si può fare eseguendo 2 shift a destra su sample1 e successivamente copiando gli ultimi 2
;bit di mp sui primi 2 di sample1
sum_all4samples:
lsr sample1
lsr sample1
; Il valore di sample1 è stato fatto scorrere verso destra di 2 posti: sample1 --> 00XXXXXX
lsl mp
lsl mp
swap mp
add sample1,mp
; Per ottenere in mp il valore della media si fa scorrere di 2 posti verso sinistra mp -->
;0000XX00,
; poi si invertono le 2 metà di mp (i primi 4 bit con gli ultimi 4) --> XX000000,
24. 23
; infine sommando si vanno a scrivere i 2 bit di riporto di mp nelle posizioni corrette su
;sample1, che dunque contiene il risultato della media
st X+,sample1
; Il valore della media mobile è salvato in RAM sovrascrivendo il campione più vecchio dei 4
;su cui si è eseguita la media
cpi count_sample,0
breq peak_recognition
; Se il numero di campioni è tornato a zero vuol dire che si è eseguita su tutti la media
;mobile e dunque si procede alla routine successiva
mov sample1,sample2
mov sample2,sample3
mov sample3,sample4
ld sample4,Y+
dec count_sample
rjmp average
; Se no si spostano i campioni acquisiti da un registro a quello precedente e si carica un
;nuovo campione nell'ultimo registro riservato ai campioni,
; si è così realizzata una finestra mobile su cui si esegue ogni volta la media, che viene
;sempre riscritta sul campione più vecchio
; Terminata la media mobile si procede con la ricerca del periodo del segnale
peak_recognition:
clr r29
ldi r28,$60
clr r27
ldi r26,$60
; Come in precedenza si utilizza il registro Y per puntare alle celle di RAM da cui si
;leggono i valori (in questo caso dei campioni mediati)
; ed allo stesso modo il registro X per puntare alle celle di RAM su cui si scrive il valore
;di una flag, che assumerà valore 1 se il segnale
; ha andamento decrescente, 0 se crescente
ld sample1,Y+
inc count_sample
search_fall:
ld sample2,Y+
inc count_sample
ldi mp,0
; Si caricano 2 campioni e si usa mp come flag
cp sample1,sample2
brlo check_fall
ldi mp,1
; se sample1>=sample2 la flag diventa 1, indicando così che il segnale ha andamento
;decrescente
check_fall:
st X+,mp
; La flag è sovrascritta sul 1o campione
mov sample1,sample2
; Si sposta il contenuto di sample2 in sample1 per riavviare la verifica sul campione
;successivo
cpi count_sample,255
brne search_fall
; se sono terminati i campioni termina la ricerca di rise/fall
; Ora nella RAM è salvata una successione costituita solo da 1 e 0, che idealmente dovrebbe
;essere un'onda quadra di periodo pari al segnale.
; Misurando dunque la distanza tra due fronti di salita consecutivi si trova il periodo del
;segnale (in realtà l'onda quadra presenta dei "rimbalzi",
; che vanno eliminati per procedere ad una misura corretta)
ldi count_sample,1
; Si re-inizializza count_sample al valore 1 per procedere alla routine successiva
clr r29
ldi r28,$60
; Si inizializza nuovamente il registro Y per puntare alle celle di RAM da cui si leggono i
;valori delle flag
ld sample1,Y+
25. 24
inc count_sample
ldi mp1,0
; mp1 è la flag che ci dà il numero di fronti di salita trovati
ldi sample3,0
ldi sample4,0
; sample3 e sample4 conterranno la posizione dei fronti
search_switch:
ld sample2,Y+
eor sample1,sample2
; or esclusivo tra 2 flag consecutive (nei punti cercati sarà 1)
cpi sample1,1
brne keep_searching
; se l'or non è 1 non ci troviamo su un fronte, ma su un livello
ldi flag_battery,0
; Ora dobbiamo verificare che il fronte sia un vero fronte di salita
; Vanno scartati i fronti di discesa e soprattutto i "rimbalzi" della flag dovuti al rumore
;o alla risoluzione:
; per far questo si verificherà che i 7 valori successivi a quello del fronte di salita
;siano 1 (7*50=350 ms, questo valore è sufficientemente
; lungo per permetterci di scartare i rimbalzi e non troppo da impedire di vedere il primo
;periodo, dato che se T=1s il livello è di circa 500 ms)
; si riutilizza flag_battery (non sono mai contemporaneamente attive l'analisi del segnale e
;la verifica della tensione)
ldi mp,0
; mp è ora utilizzato come contatore
cpi sample2,1
brne anti_bounce1
; con questo controllo su sample2 si scartano i fronti di discesa
movw X,Y
; Ora per verificare che il fronte di salita sia tale si controllano i 7 campioni successivi
; Per puntare agli indirizzi di RAM che li contengono si usa il registro X in modo da non
;modificare il registro Y
find_costant:
inc mp
ld sample1,X+
cpi sample1,1
brne bounce_check
inc flag_battery
; tramite il registro X si carica il primo campione successivo e si esegue la verifica, in
;caso positivo si incrementa flag_battery
bounce_check:
cpi mp,7
brne find_costant
; mp si incrementa ad ogni campione caricato, quando arriva a 7 la verifica è terminata
anti_bounce1:
cpi flag_battery,7
brne save_position
inc mp1
; se flag_battery=7 allora tutti i 7 campioni successivi a quello indicato come probabile
;fronte sono 1 -> si tratta di un vero fronte di salita
; In questo caso si incrementa mp1, che tiene conto del numero di veri fronti di salita
trovati
save_position:
;
cpi mp1,1
brne first_switch
cpi flag_battery,7
brne first_switch
add sample3,count_sample
; Se mp1=1 allora si tratta del primo fronte di salita trovato e si salva dunque la sua
;posizione in sample3
first_switch:
cpi mp1,2
26. 25
brne second_switch
cpi flag_battery,7
brne second_switch
add sample4,count_sample
; Allo stesso modo se mp1=2 è stato trovato il secondo fronte di salita
second_switch:
cpi mp1,2
breq end_search
; Se sono stati trovati 2 fronti di salita allora si interrompe la ricerca senza verificare
;i campioni successivi
keep_searching:
inc count_sample
mov sample1,sample2
; In caso contrario si sposta sample2 in sample1 per far scorrere i campioni prima di
;ripartire
cpi count_sample,248
brne search_switch
; Se non si trova il secondo fronte la ricerca si conclude comunque una volta esauriti i
;campioni (gli ultimi 7 devono essere scartati per
; evitare errori di riconoscimento)
end_search:
sub sample4,sample3
; Si salva in sample4 la distanza tra 2 fronti di salita (tale valore è qui espresso in
;numero di campioni e corrisponde al periodo)
check_max_period:
cpi mp1,2
breq set_display
ldi sample4,255
; Se non è stato trovato il secondo picco la differenza tra sample4 e sample3 ha dato un
;risultato sconosciuto
; Si imposta dunque in sample 4 un valore che comporterà la scrittura del messaggio
;d'allarme di periodo troppo lungo
; Ora si può procedere all'invio tramite le linee di I/O selezionate del valore che sarà
;visualizzato sui display
;----------------------- SCRITTURA DEL RISULTATO SU DISPLAY --------------------
;
set_display:
clr r29
clr r28
; riazzeriamo il registro Y per sicurezza
in mp,PINB
ldi mp1,0b00000100
and mp,mp1
; Dal pin 16 del microcontrollore (PB2) si legge lo stato del dip-switch
cpi mp,0b00000000
brne set_frequenza
set_periodo:
ldi ZH, HIGH(Table1*2)
ldi ZL, LOW(Table1*2)
; Se si legge il valore 0 allora con il deviatore si è selezionata la visualizzazione del
;periodo e dunque si imposta il registro Z
; perchè punti alla Table1
set_frequenza:
cpi mp,0b00000100
brne search_in_lookup_table
ldi ZH, HIGH(Table2*2)
ldi ZL, LOW(Table2*2)
; Se si legge il valore 1 allora con il deviatore si è selezionata la visualizzazione della
;frequenza e dunque si imposta il registro Z
; perchè punti alla Table2
search_in_lookup_table:
lpm mp,Z
; Il primo valore di lookup table è salvato in mp
27. 26
cp mp,sample4
breq found
adiw Zl,4
rjmp search_in_lookup_table
; Si confronta il valore con mp, se sono diversi si salta alla riga successiva (la lookup
;table ha 4 elementi per ogni riga),
; se invece sono uguali allora si è trovata la corrispondenza e si può procedere all'invio
;ai display
found:
adiw Zl,1
lpm mp,Z
adiw Zl,1
; Si incrementa di 1 il valore del low byte di Z, che dunque punta al valore da mettere in
;uscita per le decine
; Si salva questo valore in mp e si incrementa Z per far sì che punti al valore da scrivere
;sulle unità
ldi mp1,0b11100000
or mp1,mp
out PORTD, mp1
; Si mette il numero in binario prelevato dalla lookup table in uscita su PORTD (in questo
;momento i 3 latch sono a 1 ed essendo questi attivi bassi
; nessun valore è ancora inviato in uscita)
ldi mp1,0b01100000
or mp1,mp
out PORTD, mp1
; In questo modo si invia il comando Latch Enable per il controller del display - decine
ldi mp1,15
rcall attendi_le
; Chiamando questa funzione si introducono almeno 15 us di attesa prima di procedere alla
;scrittura del valore delle unità, in modo da non avere problemi
; nel pilotaggio dei display
ldi mp1,0b11100000
eor mp1,mp
out PORTD, mp1
; Vengono resi nuovamente inattivi i LE
lpm mp,Z
adiw Zl,1
; Ora si legge il valore delle unità e si scorre di una casella nella tabella
ldi mp1,0b11100000
or mp1,mp
out PORTD, mp1
ldi mp1,0b10100000
or mp1,mp
out PORTD, mp1
ldi mp1,15
rcall attendi_le
ldi mp1,0b11100000
eor mp1,mp
out PORTD, mp1
; Procedendo allo stesso modo di prima si carica il valore delle unità sull'uscita
;corrispondente, si chiama la routine di attesa e si rendono nuovamente inattivi i Latch
lpm mp,Z
adiw Zl,1
ldi mp1,0b11100000
or mp1,mp
out PORTD, mp1
ldi mp1,0b11000000
or mp1,mp
out PORTD, mp1
ldi mp1,15
; Ripetendo una terza volta il procedimento si carica anche il valore dei decimi sul display
;corrispondente
ldi ZH, HIGH(Table1*2)
28. 27
ldi ZL, LOW(Table1*2)
; Si reinizializza il registro Z, per una nuova ricerca
ldi mp1,0b11100000
eor mp1,mp
out PORTD, mp1
; Si rendono nuovamente inattivi i LE in modo che il numero sia mantenuto sui display
; fino alla comparsa del nuovo valore al termine dell'elaborazione del successivo periodo
clr r27
ldi r26,$60
; Alla fine del signal processing va inizializzato il registro X per riscrivere i dati da 0
ldi var_sample,5
ldi var_battery,100
; Si inizializzano i contatori per evitare che gli interrupt arrivati nel signal processing
;abbiano portato questi a valori non previsti
ldi count_sample,0
; Per registrare un nuovo periodo completo si riporta a 0 count sample
rjmp main_loop
; Terminate tutte le operzioni il programma riparte dall'inizio
;
; ------- Subroutine di risposta all'interrupt ----------
TIM0_OVF:
push mp
in mp,SREG
push mp
; E' fondamentale salvare SREG nello stack per far sì che il rpogramma riparta esattamente
;dal punto in cui era arrivato prima che fosse lanciata
; la richiesta di interrupt, per fare questo si usa il registro mp e dunque occorre prima
;salvare questo nello stack per recuperare il valore corretto
; quando dal questa subroutine il programma ritorna nel main_loop
ldi mp,246
out TCNT0,mp
; E' inizializzata nuovamente la variabile di conteggio del timer counter (10 ms)
dec var_battery
; Si decrementa la variabile di conteggio del ciclo di controllo della batteria (1 s)
dec var_sample
; Si decrementa la variabile di conteggio del ciclo di campionamento (50 ms)
pop mp
out SREG,mp
pop mp
; Ora si richiamano i valori corretti di mp e SREG
reti
;
; -------- Funzione per dare la pausa tra l'accensione di decine, unità e decimi ----------
attendi_le:
dec mp1
cpi mp1,0
brne attendi_le
ret
;
; ---------- LOOKUP TABLE -----------------
; La lookup table Table1 stabilisce una corrispondenza tra il valore del periodo misurato in
;campioni ed il valore in s da visualizzare
.CSEG
Table1:
.DB 0,8,8,8 ; messaggio d'allarme, periodo troppo breve
.DB 1,8,8,8
.DB 2,8,8,8
.DB 3,8,8,8
.DB 4,8,8,8
.DB 5,8,8,8
.DB 6,8,8,8
.DB 7,8,8,8
.DB 8,8,8,8
38. 37
6.Documentazione delle prove di verifica
Le prove di collaudo eseguite in laboratorio hanno dato esito positivo, come dimostrato dalla seguente
documentazione fotografica. Per alcune prove sono riportati commenti e osservazioni per una più
immediata comprensione dei risultati.
6.1 Verifica del sistema di allarme per la tensione di alimentazione
VAL > 4,8 V ± 0,15 V : led spento VAL < 4,2 V ± 0,15 V : led acceso fisso
39. 38
6.2 Verifica della temporizzazione della verifica della tensione di
alimentazione
4,8 V ± 0,15 V > VAL > 4,2 V ± 0,15 V : led lampeggiante, si visualizza sull’oscilloscopio la tensione ai capi
del led, significativa della sua temporizzazione
42. 41
L’incertezza assoluta varia al variare del periodo misurato: questo avviene perché il campionamento
non avviene esattamente ogni 50 ms (fS=20 Hz) come assunto dall’algoritmo per ricavare il periodo,
ma ogni 51,2 ms. All’aumentare del periodo si ha un accumulo dell’errore, per questo motivo
l’accuratezza negli estremi è 0,1 s per periodi di 1 s e 0,3 s per periodi di 8 s. Come accuratezza dello
strumento si è scelta la maggiore delle due, quindi 300 ms.
6.5 Verifica del funzionamento del sistema di acquisizione ed elaborazione
del segnale e di pilotaggio dei display
43. 42
6.6 Verifica del funzionamento del deviatore e della misura della
frequenza
45. 44
6.7 Verifica del funzionamento complessivo del dispositivo
Il segnale visualizzato sull’oscilloscopio corrisponde all’uscita del circuito di condizionamento del sensore
NTC quando questo è posto al di sotto delle narici di un soggetto. Il valore del periodo visualizzato sui
display è compatibile con quello ricavabile dalla traccia dell’oscilloscopio
46. 45
Appendice A: algoritmo di ricerca del periodo
Il segnale campionato ha una banda di frequenza dell’ordine delle frazioni di Hz (tipicamente 0,25-
0,5 Hz), per via delle risoluzione richiesta (100 ms) non è possibile campionare il segnale a frequenze
inferiori a 10 Hz. Si è scelta dunque una frequenza di campionamento fS= 20 Hz.
Questo comporta una difficile elaborazione del segnale per via del fatto che la frequenza di
campionamento è circa 40 volte la frequenza di banda.
Per identificare la migliore strategia di ricerca del periodo si sono eseguite simulazioni Matlab del
segnale già campionato a 20 Hz dal microcontrollore. Si è impostato un segnale sinusoidale con
caratteristiche simili a quello presente sull’uscita del sensore: offset di 1,5 V, ampiezza picco-picco
1 V, ampiezza picco-picco del rumore sovrapposto 50 mV, periodi 2s, 4s e 8s. Per simulare
l’acquisizione tramite l’ADC del microcontrollore si è introdotta una discretizzazione su 256 livelli
con tensione di full-range dell’ADC 2,56 V.
Eseguendo la media mobile su finestre di 4 campioni si è osservato un miglioramento del rapporto
segnale rumore, tuttavia il campionamento a frequenza molto maggiore rispetto alla banda del segnale
osservato comporta il fatto che le variazioni lente del segnale in corrispondenza di massimi e minimi
relativi si traducano in tratti di plateau, rendendo impossibile l’identificazione esatta del punto di
massimo o minimo relativo.
Si è dunque pensato di sfruttare i cambi di segno della derivata per ricavare il periodo nel seguente
modo: confrontando il valore di ogni campione Cn con quello precedente Cn-1 e assegnando un valore
1 ad una flag se Cn-1 ≤ Cn e 0 se Cn-1 > Cn .
In questo modo si ottiene un segnale simile ad un’onda quadra ed è possibile trovare il periodo
misurando la distanza tra due fronti di salita. Tuttavia si è osservato come il segnale così modificato
47. 46
presenti dei “rimbalzi” che possono essere interpretati erroneamente come fronti di salita e discesa
successivi portando ad errori nell’identificazione del periodo.
t (s)
t (s)
48. 47
Per risolvere questo problema si è pensato di verificare che i 7 campioni successivi a quello
identificato come fronte di salita corrispondano tutti ad un valore 1 della flag: in questo modo
l’algoritmo non considera i rimbalzi e riesce comunque ad identificare i veri fronti di salita
corrispondenti a periodi significativi (se T=1s, allora l’onda quadra presenta 10 campioni di valore 1
consecutivi ad un vero fronte di salita).
Questo metodo limita però il massimo periodo misurabile, perché occorre che due veri fronti di salita
successivi cadano all’interno della finestra di osservazione: questo si verifica con certezza solo se il
periodo del segnale è inferiore a metà della finestra di osservazione. Un periodo maggiore comporta
il fatto che alcune finestre di osservazione debbano essere scartate. Quando ciò avviene l’algoritmo
produce in uscita sui display un messaggio d’errore, evitando così di comunicare informazioni errate.
Si è scelta una finestra di osservazione della durata di 12 s, accettando la possibilità di avere errori di
riconoscimento per valori di periodo maggiori di 6 s. Si è scelto un periodo massimo misurabile di 8
s, sia perché questo valore è di per sé elevato per una respirazione fisiologica, sia perché fino a questo
valore non si ha una probabilità troppo elevata di scartare misurazioni.
Si riportano di seguito gli script Matlab utilizzati per la simulazione e la realizzazione dei grafici
sopra riportati:
% test_segnale.m
clear all
t (s)
49. 48
close all
clc
t=0:0.05:10;
f=0.125;
phi=1;
for i=1:length(t)
signal(i)=floor((0.5*sin(2*pi*f*t(i)+phi)+1.5)/2.56*256)+5*rand(1);
end
for i=4:length(t)
media_mobile(i-3)=floor((signal(i-3)+signal(i-2)+signal(i-1)+signal(i))/4);
end
media_mobile(length(t)-2)=NaN;
media_mobile(length(t)-1)=NaN;
media_mobile(length(t))=NaN;
figure();
plot(t,signal,t,media_mobile),grid;
title('T= 8s')
xlabel('t (s)')
ylabel('Tensione discretizzata')
legend('segnale','media mobile','Location','best');
% test_picchi.m
clear all
close all
clc
t=0:0.05:10; % campionamento ogni 50 ms (20 Hz)
f=0.5; % frequenza della sinusoide
phi=1; % fase
for i=1:length(t)
signal(i)=floor((0.5*sin(2*pi*f*t(i)+phi)+1.5)/2.56*256)+5*rand(1); %
segnale discretizzato su 256 livelli (8 bit)
end
for i=4:length(t)
media_mobile(i-3)=floor((signal(i-3)+signal(i-2)+signal(i-1)+signal(i))/4);
end
media_mobile(length(t)-2)=signal(length(t)-2);
media_mobile(length(t)-1)=signal(length(t)-1);
media_mobile(length(t))=signal(length(t));
for i=1:length(t)-1
if media_mobile(i)>=media_mobile(i+1)
flag(i)=50;
else
flag(i)=0;
end
end
flag(length(t))=0;
figure();
plot(t,signal,t,media_mobile,t,flag);
title('V_p_p = 1 V; V_o_f_f_s_e_t=1,5 V; V_p_p_,_n_o_i_s_e=50 mV; T = 2 s');
legend('segnale','media mobile','flag');
f1=0.25;
for i=1:length(t)
signal1(i)=floor((0.5*sin(2*pi*f1*t(i)+phi)+1.5)/2.56*256)+5*rand(1);
end
50. 49
for i=4:length(t)
media_mobile1(i-3)=floor((signal1(i-3)+signal1(i-2)+signal1(i-
1)+signal1(i))/4);
end
media_mobile1(length(t)-2)=signal1(length(t)-2);
media_mobile1(length(t)-1)=signal1(length(t)-1);
media_mobile1(length(t))=signal1(length(t));
for i=1:length(t)-1
if media_mobile1(i)>=media_mobile1(i+1)
flag1(i)=50;
else
flag1(i)=0;
end
end
flag1(length(t))=0;
figure();
plot(t,signal1,t,media_mobile1,t,flag1);
title('V_p_p = 1 V; V_o_f_f_s_e_t=1,5 V; V_p_p_,_n_o_i_s_e=50 mV; T =4 s');
legend('segnale','media mobile','flag');
f2=1/8;
for i=1:length(t)
signal2(i)=floor((0.5*sin(2*pi*f2*t(i)+phi)+1.5)/2.56*256+5*rand(1));
end
for i=4:length(t)
media_mobile2(i-3)=floor((signal2(i-3)+signal2(i-2)+signal2(i-
1)+signal2(i))/4);
end
media_mobile2(length(t)-2)=signal2(length(t)-2);
media_mobile2(length(t)-1)=signal2(length(t)-1);
media_mobile2(length(t))=signal2(length(t));
for i=1:length(t)-1
if media_mobile2(i)>=media_mobile2(i+1)
flag2(i)=50;
else
flag2(i)=0;
end
end
flag2(length(t))=0;
figure();
plot(t,signal2,t,media_mobile2,t,flag2);
title('V_p_p = 1 V; V_o_f_f_s_e_t=1,5 V; V_p_p_,_n_o_i_s_e=50 mV; T= 8 s');
legend('segnale','media mobile','flag');