MEMS cvičenie 2: Rozdiel medzi revíziami
Z SensorWiki
(Vytvorená stránka „1. Look-up table #include <avr/pgmspace.h> const PROGMEM int table[] = {11,12,15,...}; Viac info tu: https://www.arduino.cc/en/Reference/PROGMEM 2. Po častiach li...“) |
(→2. Po častiach lineárna náhrada) |
||
(15 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
− | |||
+ | == Potenciometrické snímače == | ||
+ | |||
+ | # Poskladajte si odporový senzor polohy so stupnicou. | ||
+ | # Zmerajte prevodovú charakteristiku odporového senzora polohy pomocou ohmmetra. | ||
+ | # Senzor pripojte k A/D prevodníku mikropočítača a pomocou programu nižšie zmerajte | ||
+ | prevodovú charakteristiku celého meracieho člena. | ||
+ | # Prevodovú charakteristiku zlinearizujte a doložte úspešnosť porovnaním metrologických parametrov. | ||
+ | |||
+ | |||
+ | |||
+ | [[Súbor:MEMS02-SchemaZapojenia.png|300px|thumb|center|Schéma zapojenia]] | ||
+ | |||
+ | |||
+ | * Príklad na pripojenie analógového senzora: http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob007 | ||
+ | * Riadiaca doska Acrob http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob | ||
+ | * Arduino homepage https://www.arduino.cc/ | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | |||
+ | #define positionSensor 5 // define your pin here | ||
+ | |||
+ | int adcValue; | ||
+ | float outputValue; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(9600); // typical values are 9600 or 115200 | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | adcValue = analogRead(positionSensor); // read ADC value | ||
+ | |||
+ | /* ======= replace this section with your code ===== */ | ||
+ | |||
+ | outputValue = adcValue; | ||
+ | |||
+ | /* ================================================== */ | ||
+ | |||
+ | Serial.println( outputValue ); // prints value over serial | ||
+ | |||
+ | delay(100); // delay in milliseconds | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | |||
+ | == Linearizácia prevodovej charakteristiky == | ||
+ | |||
+ | |||
+ | |||
+ | === 1. Look-up table === | ||
+ | |||
+ | |||
+ | <source lang="cpp"> | ||
#include <avr/pgmspace.h> | #include <avr/pgmspace.h> | ||
const PROGMEM int table[] = {11,12,15,...}; | const PROGMEM int table[] = {11,12,15,...}; | ||
+ | |||
+ | return( table[adcValue] ); | ||
+ | </source> | ||
Viac info tu: https://www.arduino.cc/en/Reference/PROGMEM | Viac info tu: https://www.arduino.cc/en/Reference/PROGMEM | ||
− | 2. Po častiach lineárna náhrada | + | === 2. Po častiach lineárna náhrada === |
+ | |||
+ | <source lang="cpp"> | ||
+ | /* segment 1 */ | ||
+ | if (adcValue > x0) && (adcValue <= x1) | ||
+ | y = k1 * adcValue + q1; | ||
− | + | /* segment 2 */ | |
− | y = k2 | + | if (adcValue > x1) && (adcValue <= x2) |
+ | y = k2 * adcValue + q2; | ||
return(y) | return(y) | ||
+ | </source> | ||
+ | |||
+ | Dá sa použiť aj funkcia map v Arduine - https://www.arduino.cc/reference/en/language/functions/math/map/ | ||
+ | |||
+ | === 3. Aproximácia funkcie === | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | y = a2 * adcValue^2 + a1 * adcValue + a0; | ||
+ | return(y); | ||
+ | </source> | ||
− | |||
* http://terpconnect.umd.edu/~toh/spectrum/CurveFitting.html | * http://terpconnect.umd.edu/~toh/spectrum/CurveFitting.html | ||
Riadok 24: | Riadok 95: | ||
* https://www.gnu.org/software/octave/doc/interpreter/One_002ddimensional-Interpolation.html#One_002ddimensional-Interpolation | * https://www.gnu.org/software/octave/doc/interpreter/One_002ddimensional-Interpolation.html#One_002ddimensional-Interpolation | ||
+ | == Úlohy == | ||
+ | '''Úlohy, ktoré treba odovzdať:''' | ||
− | + | * Graf 1: prevodové charakteristiky | |
− | |||
* Chyby podľa EN 60 770 | * Chyby podľa EN 60 770 | ||
** Nepresnosť | ** Nepresnosť | ||
Riadok 34: | Riadok 106: | ||
** Hysteréza | ** Hysteréza | ||
** Neopakovateľnosť | ** Neopakovateľnosť | ||
− | |||
* Graf 2: chybové krivky (viď obr.) | * Graf 2: chybové krivky (viď obr.) | ||
− | * Program pre mikroprocesor | + | * Program pre mikroprocesor na linearizáciu |
[[Súbor:Example2-1.png|500px]] | [[Súbor:Example2-1.png|500px]] | ||
+ | |||
+ | Hodnotenie: 3 body | ||
+ | |||
+ | Deadline: <FONT COlor="red">'''27. 2. 2018 '''</font> | ||
+ | * Tools: https://inkscape.org/sk/~sincoon/%E2%98%85knob-scale-generator | ||
[[MEMS inteligentné senzory a aktuátory#Cvi.C4.8Denia|Návrat na zoznam cvičení...]] | [[MEMS inteligentné senzory a aktuátory#Cvi.C4.8Denia|Návrat na zoznam cvičení...]] | ||
[[Category:MEMS]] | [[Category:MEMS]] |
Verzia zo dňa a času 20:44, 27. február 2018
Obsah
Potenciometrické snímače
- Poskladajte si odporový senzor polohy so stupnicou.
- Zmerajte prevodovú charakteristiku odporového senzora polohy pomocou ohmmetra.
- Senzor pripojte k A/D prevodníku mikropočítača a pomocou programu nižšie zmerajte
prevodovú charakteristiku celého meracieho člena.
- Prevodovú charakteristiku zlinearizujte a doložte úspešnosť porovnaním metrologických parametrov.
- Príklad na pripojenie analógového senzora: http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob007
- Riadiaca doska Acrob http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob
- Arduino homepage https://www.arduino.cc/
#define positionSensor 5 // define your pin here
int adcValue;
float outputValue;
void setup()
{
Serial.begin(9600); // typical values are 9600 or 115200
}
void loop()
{
adcValue = analogRead(positionSensor); // read ADC value
/* ======= replace this section with your code ===== */
outputValue = adcValue;
/* ================================================== */
Serial.println( outputValue ); // prints value over serial
delay(100); // delay in milliseconds
}
Linearizácia prevodovej charakteristiky
1. Look-up table
#include <avr/pgmspace.h>
const PROGMEM int table[] = {11,12,15,...};
return( table[adcValue] );
Viac info tu: https://www.arduino.cc/en/Reference/PROGMEM
2. Po častiach lineárna náhrada
/* segment 1 */
if (adcValue > x0) && (adcValue <= x1)
y = k1 * adcValue + q1;
/* segment 2 */
if (adcValue > x1) && (adcValue <= x2)
y = k2 * adcValue + q2;
return(y)
Dá sa použiť aj funkcia map v Arduine - https://www.arduino.cc/reference/en/language/functions/math/map/
3. Aproximácia funkcie
y = a2 * adcValue^2 + a1 * adcValue + a0;
return(y);
- https://www.gnu.org/software/octave/doc/interpreter/Polynomial-Interpolation.html
- http://octave.sourceforge.net/optim/function/leasqr.html
- http://octave.sourceforge.net/optim/function/expfit.html
- https://www.gnu.org/software/gsl/manual/html_node/Example-programs-for-Nonlinear-Least_002dSquares-Fitting.html
- https://www.gnu.org/software/octave/doc/interpreter/One_002ddimensional-Interpolation.html#One_002ddimensional-Interpolation
Úlohy
Úlohy, ktoré treba odovzdať:
- Graf 1: prevodové charakteristiky
- Chyby podľa EN 60 770
- Nepresnosť
- Meraná chyba
- Nelinearita
- Hysteréza
- Neopakovateľnosť
- Graf 2: chybové krivky (viď obr.)
- Program pre mikroprocesor na linearizáciu
Hodnotenie: 3 body
Deadline: 27. 2. 2018