Quentin Mettraux
/
MAVErIC_TEST
Working Maveric
MaxonEPOS4.h@0:bdca5e4773dd, 2017-04-04 (annotated)
- Committer:
- mettrque
- Date:
- Tue Apr 04 15:18:23 2017 +0000
- Revision:
- 0:bdca5e4773dd
- Child:
- 6:ef95300898b2
First Erfolgreich
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mettrque | 0:bdca5e4773dd | 1 | /* |
mettrque | 0:bdca5e4773dd | 2 | * MaxonEPOS4.h |
mettrque | 0:bdca5e4773dd | 3 | * Copyright (c) 2017, ZHAW |
mettrque | 0:bdca5e4773dd | 4 | * All rights reserved. |
mettrque | 0:bdca5e4773dd | 5 | * |
mettrque | 0:bdca5e4773dd | 6 | * Created on: 06.02.2017 |
mettrque | 0:bdca5e4773dd | 7 | * Author: Marcel Honegger |
mettrque | 0:bdca5e4773dd | 8 | */ |
mettrque | 0:bdca5e4773dd | 9 | |
mettrque | 0:bdca5e4773dd | 10 | #ifndef MAXON_EPOS4_H_ |
mettrque | 0:bdca5e4773dd | 11 | #define MAXON_EPOS4_H_ |
mettrque | 0:bdca5e4773dd | 12 | |
mettrque | 0:bdca5e4773dd | 13 | #include <cstdlib> |
mettrque | 0:bdca5e4773dd | 14 | #include <stdint.h> |
mettrque | 0:bdca5e4773dd | 15 | #include <mbed.h> |
mettrque | 0:bdca5e4773dd | 16 | #include "CANopen.h" |
mettrque | 0:bdca5e4773dd | 17 | #include "Signal.h" |
mettrque | 0:bdca5e4773dd | 18 | |
mettrque | 0:bdca5e4773dd | 19 | /** |
mettrque | 0:bdca5e4773dd | 20 | * The MaxonEPOS4 class is a device driver for maxon motor EPOS4 servo controllers. |
mettrque | 0:bdca5e4773dd | 21 | * It uses a CANopen object to communicate with the servo controller, and offers |
mettrque | 0:bdca5e4773dd | 22 | * methods to enable or disable the device, to set a desired torque value and to |
mettrque | 0:bdca5e4773dd | 23 | * read the actual position value of the drive. |
mettrque | 0:bdca5e4773dd | 24 | */ |
mettrque | 0:bdca5e4773dd | 25 | class MaxonEPOS4 : public CANopen::Delegate { |
mettrque | 0:bdca5e4773dd | 26 | |
mettrque | 0:bdca5e4773dd | 27 | public: |
mettrque | 0:bdca5e4773dd | 28 | |
mettrque | 0:bdca5e4773dd | 29 | MaxonEPOS4(CANopen& canOpen, uint32_t nodeID, float period); |
mettrque | 0:bdca5e4773dd | 30 | virtual ~MaxonEPOS4(); |
mettrque | 0:bdca5e4773dd | 31 | void setEnable(bool enable); |
mettrque | 0:bdca5e4773dd | 32 | bool isEnabled(); |
mettrque | 0:bdca5e4773dd | 33 | void writeTorque(int16_t targetTorque); |
mettrque | 0:bdca5e4773dd | 34 | int32_t readPositionValue(); |
mettrque | 0:bdca5e4773dd | 35 | |
mettrque | 0:bdca5e4773dd | 36 | private: |
mettrque | 0:bdca5e4773dd | 37 | |
mettrque | 0:bdca5e4773dd | 38 | static const uint32_t STACK_SIZE = 1024; // stack size of thread, given in [bytes] |
mettrque | 0:bdca5e4773dd | 39 | |
mettrque | 0:bdca5e4773dd | 40 | static const uint16_t SHUTDOWN = 0x0006; // predefined controlwords (object 0x6040) |
mettrque | 0:bdca5e4773dd | 41 | static const uint16_t SWITCH_ON = 0x0007; |
mettrque | 0:bdca5e4773dd | 42 | static const uint16_t DISABLE_VOLTAGE = 0x0000; |
mettrque | 0:bdca5e4773dd | 43 | static const uint16_t QUICK_STOP = 0x0002; |
mettrque | 0:bdca5e4773dd | 44 | static const uint16_t DISABLE_OPERATION = 0x0007; |
mettrque | 0:bdca5e4773dd | 45 | static const uint16_t ENABLE_OPERATION = 0x000F; |
mettrque | 0:bdca5e4773dd | 46 | static const uint16_t FAULT_RESET = 0x0080; |
mettrque | 0:bdca5e4773dd | 47 | |
mettrque | 0:bdca5e4773dd | 48 | static const uint16_t NOT_READY_TO_SWITCH_ON = 0x0000; // predefined statuswords (object 0x6041) |
mettrque | 0:bdca5e4773dd | 49 | static const uint16_t SWITCH_ON_DISABLED = 0x0040; |
mettrque | 0:bdca5e4773dd | 50 | static const uint16_t READY_TO_SWITCH_ON = 0x0021; |
mettrque | 0:bdca5e4773dd | 51 | static const uint16_t SWITCHED_ON = 0x0023; |
mettrque | 0:bdca5e4773dd | 52 | static const uint16_t OPERATION_ENABLED = 0x0027; |
mettrque | 0:bdca5e4773dd | 53 | static const uint16_t QUICK_STOP_ACTIVE = 0x0007; |
mettrque | 0:bdca5e4773dd | 54 | static const uint16_t FAULT_REACTION_ACTIVE = 0x000F; |
mettrque | 0:bdca5e4773dd | 55 | static const uint16_t FAULT = 0x0008; |
mettrque | 0:bdca5e4773dd | 56 | |
mettrque | 0:bdca5e4773dd | 57 | static const uint16_t STATUSWORD_MASK = 0x006F; // bitmask for statusword |
mettrque | 0:bdca5e4773dd | 58 | static const int8_t CYCLIC_SYNCHRONOUS_TORQUE_MODE = 10; // modes of operation |
mettrque | 0:bdca5e4773dd | 59 | |
mettrque | 0:bdca5e4773dd | 60 | CANopen& canOpen; |
mettrque | 0:bdca5e4773dd | 61 | uint32_t nodeID; |
mettrque | 0:bdca5e4773dd | 62 | bool enable; |
mettrque | 0:bdca5e4773dd | 63 | int16_t targetTorque; |
mettrque | 0:bdca5e4773dd | 64 | uint16_t statusword; |
mettrque | 0:bdca5e4773dd | 65 | int32_t positionActualValue; |
mettrque | 0:bdca5e4773dd | 66 | Signal signal; |
mettrque | 0:bdca5e4773dd | 67 | Thread thread; |
mettrque | 0:bdca5e4773dd | 68 | Ticker ticker; |
mettrque | 0:bdca5e4773dd | 69 | |
mettrque | 0:bdca5e4773dd | 70 | void receiveObject(uint32_t functionCode, uint8_t object[]); |
mettrque | 0:bdca5e4773dd | 71 | void sendSignal(); |
mettrque | 0:bdca5e4773dd | 72 | void run(); |
mettrque | 0:bdca5e4773dd | 73 | }; |
mettrque | 0:bdca5e4773dd | 74 | |
mettrque | 0:bdca5e4773dd | 75 | #endif /* MAXON_EPOS4_H_ */ |
mettrque | 0:bdca5e4773dd | 76 |