Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:b769f13c7523, committed 2017-02-08
- Comitter:
- mario_meh
- Date:
- Wed Feb 08 01:22:42 2017 +0000
- Parent:
- 1:9cd4fd37eee0
- Commit message:
- umotor biblioteka, uklonjene if() koje su nepregledne za kod i ote?avaju kori?tenje umotor biblioteke. ; Joystick poku?aj da se rije?i problem sa prekidima na analognom ulazu sa strukturom i tickerom ali i dalje ne pokazuje USB serial ni?ta.
Changed in this revision
| umotor.cpp | Show annotated file Show diff for this revision Revisions of this file |
| umotor.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/umotor.cpp Mon Jan 30 00:22:04 2017 +0000
+++ b/umotor.cpp Wed Feb 08 01:22:42 2017 +0000
@@ -1,147 +1,99 @@
/** Projektiranje ugradbenih računalnih sustava
-* Interakcija sa linijom
+* Default metoda za unipolarni steper motor
* @author: mario_meh
* @code
-#include "mbed.h"
-#include "umotor.h"
-
-* int main() {
-* Steper *bipolar = new Steper();
-* while(1) {
-* bipolar->u_motor();
-* }
-* }
+* #include "mbed.h"
+* #include "umotor.h"
+*
+*
+* Steper *unipolar = new Steper();
+* unipolar->u_poz.u_krenuo = 1; // Treba biti 1(0)
+* unipolar->u_poz.u_stao = 0; // Treba biti 0(1)
+* unipolar->Brzina(4000); // < brzina = brze i krace
+* unipolar->UEnable(); // Pokreni umotor
+*
* @endcode
*/
#include "mbed.h"
#include "umotor.h"
-volatile uint8_t speed_step = 0;
-uint32_t g_tmr_multiplicator = 5;
-int koraka;
-int available = 1;
-static uint8_t step = 0;
+#define OKRETAJA 4000
+#define STEPER_STEP 0.5
+
+int step;
+int broji;
+int u_okretaja = OKRETAJA;
+float za_step = STEPER_STEP;
/** Unipolarni motor radi u half-step modu */
-const uint8_t schrittfolge[] = {0b1001, 0b1010, 0b0110, 0b0101}; // Vollschritt zwei Phasen
+const uint8_t u_zavojnica[8][4] = {{1,0,0,1}, {1,0,0,0}, {1,1,0,0}, {0,1,0,0}, {0,1,1,0}, {0,0,1,0}, {0,0,1,1}, {0,0,0,1}};
/** Konstruktor
* inicijalizacija je: Steper <naziv> = new Steper;
*/
-Steper::Steper() : coil1(PTD2), coil2(PTD0), coil3(PTD5), coil4(PTA13),
- ledSec(PTB18), riseL(PTD6), fallL(PTD7), pbone(PTA5), pbtwo(PTA4)
+Steper::Steper() : coil1(PTC12), coil2(PTC13), coil3(PTC16), coil4(PTA13)
{
- //toggler.attach(this, &Steper::timer_isr, 0.001);
-
}
bool pbonePressed = false;
-bool pbtwoPressed = false;
+bool ready = true;
-void Steper::stepper_step()
+void Steper::stepper_step(int broji)
{
-
- static uint8_t step = 0;
-
- coil1 = 0x01 & (schrittfolge[step] >> 0 );
- coil2 = 0x01 & (schrittfolge[step] >> 1 );
- coil3 = 0x01 & (schrittfolge[step] >> 2 );
- coil4 = 0x01 & (schrittfolge[step] >> 3 );
-
- step++;
-
- if (step >= ARRAY_SIZE(schrittfolge))
- step = 0;
-
+ static uint8_t i = 0;
+ if(u_t.read_us() > u_okretaja*za_step) {
+ switch(i) {
+ case 0:
+ coil1 = u_zavojnica[broji][0];
+ i++;
+ case 1:
+ coil2 = u_zavojnica[broji][1];
+ i++;
+ case 2:
+ coil3 = u_zavojnica[broji][2];
+ i++;
+ case 3:
+ coil4 = u_zavojnica[broji][3];
+ i++;
+ default:
+ i = 0;
+ }
+ u_t.reset();
+ }
}
-/** <timer_isr()> zove stepper_steo() */
+
void Steper::timer_isr() {
-
- static uint32_t g_tmr_cnt = 0;
- g_tmr_cnt++;
- if (g_tmr_cnt >= g_tmr_multiplicator) {
- stepper_step();
- g_tmr_cnt = 0;
- }
-
-}
-
-void Steper::pboneCallback(void) {
- if(t.read_ms() > 20) {
- pbonePressed = true;
+ step++;
+ if(step <= u_okretaja) {
+ u_motor();
}
- t.reset();
-}
-void Steper::pbtwoCallback(void) {
- if(t.read_ms() > 20) {
- pbtwoPressed = true;
- }
- t.reset();
-}
-void Steper::togglerOff() { ledSec = 0; }
-void Steper::togglerRed() {
- ledSec = 1;
- led.detach();
- led.attach(this, &Steper::togglerOff, 0.2);
-}
-
-void motorStall() {
- //toggler.detach();
}
void Steper::u_motor() {
- riseL = 1;
- fallL = 1;
- ledSec = 1;
- /** Imam flag za 2 tipkala */
- pbone.fall(this, &Steper::pboneCallback);
- pbtwo.fall(this, &Steper::pbtwoCallback);
- /** Započni timer da bi mogao zvati prekid <timer_isr> */
- t.start();
- toggler.attach(this, &Steper::timer_isr, 0.001);
-
- while(1) {
- static uint8_t speed_step = 0;
- if (pbonePressed) {
- toggler.attach(this, &Steper::timer_isr, 0.001);
- pbonePressed = !pbonePressed;
- led.attach(this, &Steper::togglerRed, 1);
- // Do actions required when button one is pressed.
- riseL = !riseL;
-
- switch(speed_step){
- case 0:
- g_tmr_multiplicator = 5;
- speed_step++;
- break;
-
- case 1:
- g_tmr_multiplicator = 10;
- speed_step++;
- break;
-
- case 2:
- g_tmr_multiplicator = 20;
- speed_step++;
- break;
-
- case 3:
- g_tmr_multiplicator = 50;
- speed_step = 0;
- break;
-
- default:
- speed_step = 0;
- break;
- }
+ if(u_poz.u_krenuo == 1) {
+ stepper_step(broji++);
+ if(broji == 8) {
+ broji = 0;
}
- if (pbtwoPressed) {
- pbtwoPressed = false;
- // Do actions required when button two is pressed.
- fallL = !fallL;
- toggler.detach();
-
- //void motorStall();
- }
+ }
+ if(u_poz.u_stao) {
+ u_ticker.detach();
+ }
+}
+
+int Steper::Brzina(int okretaja) {
+ if(okretaja < OKRETAJA) {
+ u_okretaja = okretaja;
+ za_step = (float)((STEPER_STEP*1000)/OKRETAJA);
}
+ if(okretaja >= OKRETAJA) {
+ u_okretaja = okretaja;
+ za_step = (float)((STEPER_STEP*1000)/OKRETAJA);
+ }
+ return u_okretaja;
+}
+
+void Steper::UEnable() {
+ u_t.start();
+ u_ticker.attach_us(this, &Steper::timer_isr, u_okretaja);
}
\ No newline at end of file
--- a/umotor.h Mon Jan 30 00:22:04 2017 +0000
+++ b/umotor.h Wed Feb 08 01:22:42 2017 +0000
@@ -1,31 +1,34 @@
#ifndef STEPER_H
#define STEPER_H
+#ifndef MBED_H
+#include "mbed.h"
+#endif
+#ifndef GLOBAL_NAZIVI_H
+#include "global_nazivi.h"
+#endif
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(*x))
#define BROJ_KORAKA 50
+typedef struct {
+ int u_krenuo;
+ int u_stao;
+}UPozicija;
+
class Steper {
public:
Steper();
- void stepper_step();
+ void stepper_step(int broji);
void timer_isr();
void u_motor();
-
+ void pboneCallback(void);
+ void UEnable();
+ UPozicija u_poz;
+ int Brzina(int okretaja);
private:
- void pboneCallback();
- void pbtwoCallback();
- void togglerOff();
- void togglerRed();
- DigitalOut ledSec;
- DigitalOut riseL;
- DigitalOut fallL;
- InterruptIn pbone;
- InterruptIn pbtwo;
- Timer t;
- Ticker toggler;
- Ticker led;
- Timeout detachToggler;
+ Timer u_t;
+ Ticker u_ticker;
DigitalOut coil1, coil2, coil3, coil4;