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.

Dependencies:   mbed-rtos mbed

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?

UserRevisionLine numberNew 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