forked from Archive/PX4-Autopilot
Added sine test.
This commit is contained in:
parent
a8ac56b9e5
commit
f3bfbd87b1
|
@ -45,6 +45,7 @@
|
||||||
#include "md25.hpp"
|
#include "md25.hpp"
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include <systemlib/err.h>
|
#include <systemlib/err.h>
|
||||||
#include <arch/board/board.h>
|
#include <arch/board/board.h>
|
||||||
|
@ -550,4 +551,41 @@ int md25Test(const char *deviceName, uint8_t bus, uint8_t address)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int md25Sine(const char *deviceName, uint8_t bus, uint8_t address)
|
||||||
|
{
|
||||||
|
printf("md25 sine: starting\n");
|
||||||
|
|
||||||
|
// setup
|
||||||
|
MD25 md25("/dev/md25", bus, address);
|
||||||
|
|
||||||
|
// print status
|
||||||
|
char buf[200];
|
||||||
|
md25.status(buf, sizeof(buf));
|
||||||
|
printf("%s\n", buf);
|
||||||
|
|
||||||
|
// setup for test
|
||||||
|
md25.setSpeedRegulation(true);
|
||||||
|
md25.setTimeout(true);
|
||||||
|
float dt = 0.1;
|
||||||
|
float amplitude = 0.2;
|
||||||
|
float t = 0;
|
||||||
|
float omega = 0.1;
|
||||||
|
|
||||||
|
// sine wave for motor 1
|
||||||
|
md25.resetEncoders();
|
||||||
|
while (true) {
|
||||||
|
float prev_revolution = md25.getRevolutions1();
|
||||||
|
md25.setMotor1Speed(amplitude*sinf(omega*t));
|
||||||
|
usleep(1000000 * dt);
|
||||||
|
t += dt;
|
||||||
|
float speed_rpm = 60*(md25.getRevolutions1() - prev_revolution)/dt;
|
||||||
|
md25.readData();
|
||||||
|
if (t > 2.0f) break;
|
||||||
|
}
|
||||||
|
md25.setMotor1Speed(0);
|
||||||
|
|
||||||
|
printf("md25 sine complete\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// vi:noet:smarttab:autoindent:ts=4:sw=4:tw=78
|
// vi:noet:smarttab:autoindent:ts=4:sw=4:tw=78
|
||||||
|
|
|
@ -290,4 +290,7 @@ private:
|
||||||
// unit testing
|
// unit testing
|
||||||
int md25Test(const char *deviceName, uint8_t bus, uint8_t address);
|
int md25Test(const char *deviceName, uint8_t bus, uint8_t address);
|
||||||
|
|
||||||
|
// sine testing
|
||||||
|
int md25Sine(const char *deviceName, uint8_t bus, uint8_t address);
|
||||||
|
|
||||||
// vi:noet:smarttab:autoindent:ts=4:sw=4:tw=78
|
// vi:noet:smarttab:autoindent:ts=4:sw=4:tw=78
|
||||||
|
|
|
@ -136,6 +136,24 @@ int md25_main(int argc, char *argv[])
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(argv[1], "sine")) {
|
||||||
|
|
||||||
|
if (argc < 4) {
|
||||||
|
printf("usage: md25 sine bus address\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *deviceName = "/dev/md25";
|
||||||
|
|
||||||
|
uint8_t bus = strtoul(argv[2], nullptr, 0);
|
||||||
|
|
||||||
|
uint8_t address = strtoul(argv[3], nullptr, 0);
|
||||||
|
|
||||||
|
md25Sine(deviceName, bus, address);
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(argv[1], "probe")) {
|
if (!strcmp(argv[1], "probe")) {
|
||||||
if (argc < 4) {
|
if (argc < 4) {
|
||||||
printf("usage: md25 probe bus address\n");
|
printf("usage: md25 probe bus address\n");
|
||||||
|
|
Loading…
Reference in New Issue