b15f/driver/main.cpp

166 lines
3.6 KiB
C++
Raw Normal View History

2019-03-26 08:57:01 +00:00
#include <iostream>
2019-03-29 10:12:31 +00:00
#include <cmath>
2019-03-26 08:57:01 +00:00
#include "drv/b15f.h"
2019-03-27 14:48:24 +00:00
#include "drv/plottyfile.h"
2019-03-26 08:57:01 +00:00
2019-03-28 10:11:19 +00:00
void kennlinieErsterQuadrant()
2019-03-26 08:57:01 +00:00
{
2019-04-03 07:34:22 +00:00
2019-03-26 08:57:01 +00:00
B15F& drv = B15F::getInstance();
2019-03-29 07:32:11 +00:00
PlottyFile pf;
2019-03-27 09:33:16 +00:00
2019-03-28 10:11:19 +00:00
uint16_t ba[1024];
uint16_t bb[1024];
2019-04-03 06:40:14 +00:00
const uint16_t sample_count = 1024;
const uint16_t delta = 1;
2019-03-28 10:11:19 +00:00
const uint16_t u_gs_start = 440;
const uint16_t u_gs_delta = 20;
const uint16_t u_gs_end = 600;
pf.setUnitX("V");
pf.setUnitY("mA");
pf.setUnitPara("V");
pf.setDescX("U_{DS}");
pf.setDescY("I_D");
pf.setDescPara("U_{GS}");
pf.setRefX(5);
pf.setRefY(50);
pf.setParaFirstCurve(u_gs_start);
pf.setParaStepWidth(u_gs_delta);
uint8_t curve = 0;
2019-04-03 07:34:22 +00:00
std::cout << "Erfasse Kennlinie erster Quadrant..." << std::endl << std::flush;
2019-03-28 10:11:19 +00:00
for(uint16_t u_gs = u_gs_start; u_gs <= u_gs_end; u_gs += u_gs_delta)
2019-03-27 09:33:16 +00:00
{
2019-03-28 15:04:38 +00:00
drv.analogWrite1(u_gs);
2019-03-28 10:11:19 +00:00
2019-03-29 07:32:11 +00:00
drv.analogSequence(0, &ba[0], 0, 1, &bb[0], 0, 0, delta, sample_count);
2019-03-28 10:11:19 +00:00
2019-04-03 06:40:14 +00:00
for(uint16_t k = 0; k < sample_count; k++)
2019-03-27 09:33:16 +00:00
{
2019-03-28 10:11:19 +00:00
uint16_t i_d = ba[k] - bb[k];
uint16_t u_ds = bb[k];
pf.addDot(Dot(u_ds, i_d, curve));
2019-03-27 09:33:16 +00:00
}
2019-03-28 10:11:19 +00:00
2019-04-03 07:34:22 +00:00
std::cout << "\033[1K\r" << 1e2 * (u_gs - u_gs_start) / (u_gs_end - u_gs_start) << "%" << std::flush;
2019-03-28 10:11:19 +00:00
curve++;
}
2019-03-29 07:32:11 +00:00
2019-04-03 07:34:22 +00:00
std::cout << "\033[1K\r" << std::flush;
2019-03-29 07:32:11 +00:00
// speichern und plotty starten
pf.writeToFile("test_plot");
pf.startPlotty("test_plot");
2019-03-28 10:11:19 +00:00
}
void kennlinieZweiterQuadrant()
{
B15F& drv = B15F::getInstance();
2019-03-29 07:32:11 +00:00
PlottyFile pf;
2019-03-27 09:33:16 +00:00
uint16_t ba[1024];
uint16_t bb[1024];
2019-03-27 11:57:51 +00:00
2019-04-03 06:40:14 +00:00
const uint16_t sample_count = 1024;
2019-03-28 10:11:19 +00:00
const uint16_t delta = 1;
const uint16_t u_gs_start = 300;
const uint16_t u_gs_delta = 25;
const uint16_t u_gs_end = 700;
pf.setQuadrant(2);
pf.setUnitX("V");
pf.setUnitY("mA");
pf.setUnitPara("V");
pf.setDescX("U_{GS}");
pf.setDescY("I_D");
pf.setDescPara("U_{DS}");
pf.setRefX(5);
pf.setRefY(50);
pf.setParaFirstCurve(u_gs_start);
pf.setParaStepWidth(u_gs_delta);
uint8_t curve = 0;
2019-04-03 07:34:22 +00:00
std::cout << "Erfasse Kennlinie zweiter Quadrant..." << std::endl << std::flush;
2019-03-28 10:11:19 +00:00
for(uint16_t u_gs = u_gs_start; u_gs <= u_gs_end; u_gs += u_gs_delta)
2019-03-27 15:08:28 +00:00
{
2019-03-28 15:04:38 +00:00
drv.analogWrite1(u_gs);
2019-03-28 10:11:19 +00:00
2019-03-29 07:32:11 +00:00
drv.analogSequence(0, &ba[0], 0, 1, &bb[0], 0, 0, delta, sample_count);
2019-03-28 10:11:19 +00:00
curve = 0;
2019-04-03 06:40:14 +00:00
for(uint16_t k = 0; k < sample_count; k++)
2019-03-28 10:11:19 +00:00
{
2019-04-03 06:40:14 +00:00
if(ba[k] > bb[k] && bb[k] % 50 == 0 && bb[k] != 0)
2019-03-28 10:11:19 +00:00
{
uint16_t i_d = ba[k] - bb[k];
pf.addDot(Dot(u_gs, i_d, bb[k] / 50));
}
curve++;
}
2019-04-03 07:34:22 +00:00
std::cout << "\033[1K\r" << 1e2 * (u_gs - u_gs_start) / (u_gs_end - u_gs_start) << "%" << std::flush;
2019-03-27 15:08:28 +00:00
}
2019-03-29 07:32:11 +00:00
2019-04-03 07:34:22 +00:00
std::cout << "\033[1K\r" << std::flush;
2019-03-29 07:32:11 +00:00
// speichern und plotty starten
pf.writeToFile("test_plot");
pf.startPlotty("test_plot");
2019-03-28 10:11:19 +00:00
}
2019-03-29 12:35:06 +00:00
void testFunktionen()
2019-03-28 10:11:19 +00:00
{
B15F& drv = B15F::getInstance();
2019-04-03 09:59:15 +00:00
drv.activateSelfTestMode();
return;
2019-03-28 10:11:19 +00:00
2019-04-03 07:34:22 +00:00
std::cout << "DIP-Switch: " << (int) drv.readDipSwitch() << std::endl;
2019-03-29 10:12:31 +00:00
2019-03-29 12:35:06 +00:00
drv.digitalWrite0(0xFF);
drv.analogWrite0(128);
std::cout << (int) drv.digitalRead0() << std::endl;;
std::cout << "adc: " << (int) drv.analogRead(4) << std::endl;
2019-03-29 10:12:31 +00:00
2019-03-29 12:35:06 +00:00
drv.digitalWrite0(0x00);
drv.analogWrite0(0);
std::cout << (int) drv.digitalRead0() << std::endl;;
std::cout << "adc: " << (int) drv.analogRead(4) << std::endl;
2019-03-29 10:12:31 +00:00
2019-03-29 12:35:06 +00:00
drv.digitalWrite0(0xFF);
drv.analogWrite0(255);
std::cout << (int) drv.digitalRead0() << std::endl;
std::cout << "adc: " << (int) drv.analogRead(4) << std::endl;
2019-03-29 10:12:31 +00:00
2019-04-02 09:53:38 +00:00
std::cout << "Kennlinie..." << std::endl;
2019-03-29 12:35:06 +00:00
uint16_t a[1024];
2019-04-03 07:34:22 +00:00
uint16_t b[1024];
2019-03-29 12:35:06 +00:00
drv.analogSequence(0, &a[0], 0, 1, &b[0], 0, 0, 1, 1024);
2019-04-03 07:34:22 +00:00
/*for(uint16_t i= 0; i < sizeof(a) / sizeof(uint16_t); i++)
2019-04-02 09:53:38 +00:00
{
std::cout << (int) i << " : " << a[i] << " " << b[i] << std::endl;
2019-04-03 07:34:22 +00:00
}*/
2019-03-29 07:32:11 +00:00
}
int main()
{
2019-04-03 12:09:58 +00:00
//testFunktionen();
2019-04-03 09:59:15 +00:00
//kennlinieZweiterQuadrant();
2019-04-03 12:09:58 +00:00
kennlinieErsterQuadrant();
2019-03-27 09:33:16 +00:00
2019-03-26 10:35:20 +00:00
std::cout << "Schluss." << std::endl;
2019-03-26 08:57:01 +00:00
}