This Project has codes that may cnc controller possible. My cnc has 2 mechanical axis. I am monitoring through switches the axis limits. For this i use the library rtos. Enjoy.
EixoController.cpp@1:ef18c260ce02, 2017-09-18 (annotated)
- Committer:
- waspSalander
- Date:
- Mon Sep 18 13:05:47 2017 +0000
- Revision:
- 1:ef18c260ce02
- Parent:
- 0:7cedfb720712
Step controller
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
waspSalander | 0:7cedfb720712 | 1 | #include "EixoController.h" |
waspSalander | 0:7cedfb720712 | 2 | |
waspSalander | 0:7cedfb720712 | 3 | |
waspSalander | 0:7cedfb720712 | 4 | EixoController::EixoController(float totalPathPulse, float totalPathCm, Stepp *motor, PinName pinOrigin, PinName pinEnd): swOrigin(pinOrigin), swEnd(pinEnd) { |
waspSalander | 0:7cedfb720712 | 5 | |
waspSalander | 0:7cedfb720712 | 6 | this->totalPathPulse = totalPathPulse; |
waspSalander | 0:7cedfb720712 | 7 | this->totalPathCm = totalPathCm; |
waspSalander | 0:7cedfb720712 | 8 | this->motor = motor; |
waspSalander | 0:7cedfb720712 | 9 | |
waspSalander | 0:7cedfb720712 | 10 | debug = new Debug(); |
waspSalander | 0:7cedfb720712 | 11 | } |
waspSalander | 0:7cedfb720712 | 12 | |
waspSalander | 0:7cedfb720712 | 13 | |
waspSalander | 0:7cedfb720712 | 14 | bool EixoController:: goToOrigem(DigitalIn swOrigem, int dirOrigem){ |
waspSalander | 1:ef18c260ce02 | 15 | if(swOrigem == 1){ // já está na origem ? |
waspSalander | 0:7cedfb720712 | 16 | return true; |
waspSalander | 0:7cedfb720712 | 17 | } |
waspSalander | 0:7cedfb720712 | 18 | else{ // vá para a origem |
waspSalander | 1:ef18c260ce02 | 19 | return motor->findLimits(30000, dirOrigem, swOrigem); |
waspSalander | 1:ef18c260ce02 | 20 | |
waspSalander | 0:7cedfb720712 | 21 | } |
waspSalander | 0:7cedfb720712 | 22 | } |
waspSalander | 0:7cedfb720712 | 23 | |
waspSalander | 0:7cedfb720712 | 24 | void EixoController:: calibragem(int startDirection){ |
waspSalander | 0:7cedfb720712 | 25 | int teste1 = 0; |
waspSalander | 0:7cedfb720712 | 26 | int teste2 = 0; |
waspSalander | 0:7cedfb720712 | 27 | |
waspSalander | 0:7cedfb720712 | 28 | while (1){ // repita até calibragem correta |
waspSalander | 0:7cedfb720712 | 29 | teste1 = motor->step(totalPathPulse, startDirection); |
waspSalander | 0:7cedfb720712 | 30 | wait(0.2); |
waspSalander | 0:7cedfb720712 | 31 | teste2 = motor->step(totalPathPulse, !startDirection); |
waspSalander | 0:7cedfb720712 | 32 | |
waspSalander | 0:7cedfb720712 | 33 | if(teste1 == teste2){ |
waspSalander | 0:7cedfb720712 | 34 | // Passos iguais |
waspSalander | 0:7cedfb720712 | 35 | break; |
waspSalander | 0:7cedfb720712 | 36 | } |
waspSalander | 0:7cedfb720712 | 37 | else{ |
waspSalander | 0:7cedfb720712 | 38 | // Passos Diferentes |
waspSalander | 0:7cedfb720712 | 39 | break; |
waspSalander | 0:7cedfb720712 | 40 | } |
waspSalander | 0:7cedfb720712 | 41 | } |
waspSalander | 0:7cedfb720712 | 42 | |
waspSalander | 0:7cedfb720712 | 43 | } |
waspSalander | 0:7cedfb720712 | 44 | |
waspSalander | 0:7cedfb720712 | 45 | |
waspSalander | 0:7cedfb720712 | 46 | int EixoController::conversao(int posCm){ // 38cm == 30000 passos |
waspSalander | 0:7cedfb720712 | 47 | float pulses = (totalPathPulse*posCm)/totalPathCm; // regra de três |
waspSalander | 0:7cedfb720712 | 48 | return (int)pulses; |
waspSalander | 0:7cedfb720712 | 49 | } |
waspSalander | 0:7cedfb720712 | 50 | |
waspSalander | 0:7cedfb720712 | 51 | void EixoController:: goToPosition(int posCm, int dir){ |
waspSalander | 0:7cedfb720712 | 52 | |
waspSalander | 1:ef18c260ce02 | 53 | int pulses = conversao(posCm); |
waspSalander | 1:ef18c260ce02 | 54 | motor->step(pulses, dir); |
waspSalander | 0:7cedfb720712 | 55 | } |
waspSalander | 0:7cedfb720712 | 56 |