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.
Stepp.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 "Stepp.h" |
waspSalander | 0:7cedfb720712 | 2 | |
waspSalander | 0:7cedfb720712 | 3 | Stepp::Stepp(PinName clk, PinName dir, PinName en) : _clk(clk), _dir(dir), _en(en) { |
waspSalander | 0:7cedfb720712 | 4 | _clk = 0, _dir = 0, _en = 0; |
waspSalander | 0:7cedfb720712 | 5 | |
waspSalander | 0:7cedfb720712 | 6 | debug = new Debug(); |
waspSalander | 0:7cedfb720712 | 7 | this->speed = 50; |
waspSalander | 0:7cedfb720712 | 8 | this->acell = true; |
waspSalander | 0:7cedfb720712 | 9 | //PinName pinOrigin; |
waspSalander | 0:7cedfb720712 | 10 | } |
waspSalander | 0:7cedfb720712 | 11 | |
waspSalander | 0:7cedfb720712 | 12 | int Stepp::step(int n_steps, bool direction) { |
waspSalander | 0:7cedfb720712 | 13 | |
waspSalander | 0:7cedfb720712 | 14 | int accelspeed; |
waspSalander | 0:7cedfb720712 | 15 | if(this->acell) accelspeed = START_STOP_SPEED; |
waspSalander | 0:7cedfb720712 | 16 | else accelspeed = this->speed; |
waspSalander | 0:7cedfb720712 | 17 | |
waspSalander | 0:7cedfb720712 | 18 | _en = 0; // habilita move |
waspSalander | 0:7cedfb720712 | 19 | _dir = direction; |
waspSalander | 0:7cedfb720712 | 20 | |
waspSalander | 0:7cedfb720712 | 21 | for(int i=0; (i< n_steps && EixoMonitoring::stopAll == false); i++){ |
waspSalander | 0:7cedfb720712 | 22 | |
waspSalander | 0:7cedfb720712 | 23 | if(this->acell){//linear acceleration |
waspSalander | 0:7cedfb720712 | 24 | if(i < START_STOP_SPEED) if (--accelspeed == this->speed) accelspeed ++; |
waspSalander | 0:7cedfb720712 | 25 | if(i > (n_steps-START_STOP_SPEED)) if(++accelspeed == START_STOP_SPEED) accelspeed--; |
waspSalander | 0:7cedfb720712 | 26 | } |
waspSalander | 0:7cedfb720712 | 27 | |
waspSalander | 0:7cedfb720712 | 28 | _clk = 1; |
waspSalander | 0:7cedfb720712 | 29 | wait_us(1); |
waspSalander | 0:7cedfb720712 | 30 | _clk = 0; |
waspSalander | 0:7cedfb720712 | 31 | wait_us(1); |
waspSalander | 0:7cedfb720712 | 32 | wait_us(accelspeed); |
waspSalander | 0:7cedfb720712 | 33 | } |
waspSalander | 0:7cedfb720712 | 34 | _en = 1; |
waspSalander | 0:7cedfb720712 | 35 | |
waspSalander | 0:7cedfb720712 | 36 | return 1; |
waspSalander | 0:7cedfb720712 | 37 | } |
waspSalander | 0:7cedfb720712 | 38 | |
waspSalander | 0:7cedfb720712 | 39 | bool Stepp::findLimits(int n_steps, bool direction, DigitalIn sensor) { |
waspSalander | 0:7cedfb720712 | 40 | |
waspSalander | 0:7cedfb720712 | 41 | int accelspeed = 0; |
waspSalander | 0:7cedfb720712 | 42 | if(this->acell) accelspeed = START_STOP_SPEED; |
waspSalander | 0:7cedfb720712 | 43 | else accelspeed = this->speed; |
waspSalander | 0:7cedfb720712 | 44 | |
waspSalander | 0:7cedfb720712 | 45 | int i = 0; |
waspSalander | 0:7cedfb720712 | 46 | _en = 0; // habilita move |
waspSalander | 0:7cedfb720712 | 47 | _dir = direction; |
waspSalander | 0:7cedfb720712 | 48 | |
waspSalander | 1:ef18c260ce02 | 49 | while(sensor.read() == 0 && EixoMonitoring::stopAll == false){ // n chegou na origem |
waspSalander | 1:ef18c260ce02 | 50 | |
waspSalander | 1:ef18c260ce02 | 51 | if(this->acell){ //linear acceleration |
waspSalander | 1:ef18c260ce02 | 52 | if(i < START_STOP_SPEED) if (--accelspeed == this->speed) accelspeed ++; |
waspSalander | 1:ef18c260ce02 | 53 | if(i > (n_steps-START_STOP_SPEED)) if(++accelspeed == START_STOP_SPEED) accelspeed--; |
waspSalander | 1:ef18c260ce02 | 54 | } |
waspSalander | 1:ef18c260ce02 | 55 | |
waspSalander | 1:ef18c260ce02 | 56 | _clk = 1; |
waspSalander | 1:ef18c260ce02 | 57 | wait_us(1); |
waspSalander | 1:ef18c260ce02 | 58 | _clk = 0; |
waspSalander | 1:ef18c260ce02 | 59 | wait_us(1); |
waspSalander | 1:ef18c260ce02 | 60 | wait_us(accelspeed); |
waspSalander | 1:ef18c260ce02 | 61 | |
waspSalander | 1:ef18c260ce02 | 62 | i++; |
waspSalander | 0:7cedfb720712 | 63 | } |
waspSalander | 0:7cedfb720712 | 64 | _en = 1; |
waspSalander | 0:7cedfb720712 | 65 | |
waspSalander | 0:7cedfb720712 | 66 | |
waspSalander | 1:ef18c260ce02 | 67 | if(sensor.read() == 0){ |
waspSalander | 1:ef18c260ce02 | 68 | return 0; |
waspSalander | 1:ef18c260ce02 | 69 | } |
waspSalander | 1:ef18c260ce02 | 70 | else{ |
waspSalander | 1:ef18c260ce02 | 71 | return 1; |
waspSalander | 1:ef18c260ce02 | 72 | } |
waspSalander | 0:7cedfb720712 | 73 | } |
waspSalander | 0:7cedfb720712 | 74 | |
waspSalander | 0:7cedfb720712 | 75 | |
waspSalander | 0:7cedfb720712 | 76 | float Stepp::version(void) { // version() returns the version number of the library |
waspSalander | 0:7cedfb720712 | 77 | return VERSION; |
waspSalander | 0:7cedfb720712 | 78 | } |