Operácie

MEMS cvičenie 2: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Balogh (diskusia | príspevky)
(14 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
* Návod na cvičenia:


== 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
[[Súbor:MEMS02-SchemaZapojenia.png|300px|thumb|center|Schéma zapojenia]]
 
 
* Príklad na pripojenie analógového senzora: http://senzor.robotika.sk/sensorwiki/index.php/Acrob007
* Riadiaca doska Acrob http://senzor.robotika.sk/sensorwiki/index.php/Acrob
* Technická dokumentácia http://senzor.robotika.sk/sensorwiki/index.php/Acrob_technical_description
* Arduino homepage https://www.arduino.cc/
* Arduino homepage https://www.arduino.cc/


<source lang="cpp">
<source lang="cpp">
#define SerialSpeed 9600  //typical values are 9600 or 115200
 
#define SampFrequency 10  //sampling frequency in Hz (cycles per second)
#define positionSensor 5       // define your pin here
#define positionSensor 5       //define your pin here
 
int mDelay;
int adcValue;
int adcValue;
float outputValue;
float outputValue;
Riadok 19: Riadok 26:
void setup()
void setup()
{
{
  Serial.begin(SerialSpeed);
  Serial.begin(9600);           // typical values are 9600 or 115200
mDelay = 1000/SampFrequency; //calculate delay for proper sampling rate
}
}
   
   
void loop()
void loop()
{
{
  adcValue = analogRead(positionSensor);
  adcValue = analogRead(positionSensor); // read ADC value
  /*  =============================================== */
 
  outputValue = adcValue;   // replace this line with your code
  /*  ======= replace this section with your code ===== */
  /*  =============================================== */
 
  Serial.print( outputValue ); //reads the analog port and prints value over serial
  outputValue = adcValue;      
Serial.print('\n');
 
  delay(mDelay); //delay in milliseconds
  /*  ================================================== */
 
  Serial.println( outputValue ); // prints value over serial
 
  delay(100);                     // delay in milliseconds


}
}
</source>
</source>


== Linearizácia prevodovej charakteristiky ==






 
=== 1. Look-up table ===
 
== 1. Look-up table ==




Riadok 48: Riadok 57:


  const PROGMEM int table[] = {11,12,15,...};
  const PROGMEM int table[] = {11,12,15,...};
return( table[adcValue] );
</source>
</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;


<source lang="cpp">
  /* segment 2 */
if (adcValue > x1) && (adcValue <= x2)
if (adcValue > x1) && (adcValue <= x2)
   y = k2 & adcValue + q2;
   y = k2 * adcValue + q2;


  return(y)
  return(y)
</source>
</source>


Dá sa použiť aj funkcia map v Arduine -  https://www.arduino.cc/reference/en/language/functions/math/map/


=== 3. Aproximácia funkcie ===


== 3. Aproximácia funkcie ==
<source lang="cpp">
  y = a2 * adcValue^2 + a1 * adcValue + a0;
  return(y);
</source>




Riadok 75: 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ť:'''


'''Odovzdať:'''
* Graf 1: prevodové charakteristiky
 
* Chyby podľa EN 60 770
* Chyby podľa EN 60 770
** Nepresnosť
** Nepresnosť
Riadok 85: Riadok 106:
** Hysteréza
** Hysteréza
** Neopakovateľnosť
** Neopakovateľnosť
* Graf 1: prevodová charakteristika
* 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 z 12:50, 19. február 2019

Potenciometrické snímače

  1. Poskladajte si odporový senzor polohy so stupnicou.
  2. Zmerajte prevodovú charakteristiku odporového senzora polohy pomocou ohmmetra.
  3. Senzor pripojte k A/D prevodníku mikropočítača a pomocou programu nižšie zmerajte prevodovú charakteristiku celého meracieho člena.
  4. Prevodovú charakteristiku zlinearizujte a doložte úspešnosť porovnaním metrologických parametrov.


Schéma zapojenia


#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);


Ú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


Návrat na zoznam cvičení...