Upravljanje unipolasnim motorom
umotor.cpp@2:b769f13c7523, 2017-02-08 (annotated)
- Committer:
- mario_meh
- Date:
- Wed Feb 08 01:22:42 2017 +0000
- Revision:
- 2:b769f13c7523
- Parent:
- 1:9cd4fd37eee0
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.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mario_meh | 1:9cd4fd37eee0 | 1 | /** Projektiranje ugradbenih računalnih sustava |
mario_meh | 2:b769f13c7523 | 2 | * Default metoda za unipolarni steper motor |
mario_meh | 1:9cd4fd37eee0 | 3 | * @author: mario_meh |
mario_meh | 1:9cd4fd37eee0 | 4 | * @code |
mario_meh | 2:b769f13c7523 | 5 | * #include "mbed.h" |
mario_meh | 2:b769f13c7523 | 6 | * #include "umotor.h" |
mario_meh | 2:b769f13c7523 | 7 | * |
mario_meh | 2:b769f13c7523 | 8 | * |
mario_meh | 2:b769f13c7523 | 9 | * Steper *unipolar = new Steper(); |
mario_meh | 2:b769f13c7523 | 10 | * unipolar->u_poz.u_krenuo = 1; // Treba biti 1(0) |
mario_meh | 2:b769f13c7523 | 11 | * unipolar->u_poz.u_stao = 0; // Treba biti 0(1) |
mario_meh | 2:b769f13c7523 | 12 | * unipolar->Brzina(4000); // < brzina = brze i krace |
mario_meh | 2:b769f13c7523 | 13 | * unipolar->UEnable(); // Pokreni umotor |
mario_meh | 2:b769f13c7523 | 14 | * |
mario_meh | 1:9cd4fd37eee0 | 15 | * @endcode |
mario_meh | 1:9cd4fd37eee0 | 16 | */ |
mario_meh | 0:a3d5b06d790a | 17 | #include "mbed.h" |
mario_meh | 0:a3d5b06d790a | 18 | #include "umotor.h" |
mario_meh | 0:a3d5b06d790a | 19 | |
mario_meh | 2:b769f13c7523 | 20 | #define OKRETAJA 4000 |
mario_meh | 2:b769f13c7523 | 21 | #define STEPER_STEP 0.5 |
mario_meh | 2:b769f13c7523 | 22 | |
mario_meh | 2:b769f13c7523 | 23 | int step; |
mario_meh | 2:b769f13c7523 | 24 | int broji; |
mario_meh | 2:b769f13c7523 | 25 | int u_okretaja = OKRETAJA; |
mario_meh | 2:b769f13c7523 | 26 | float za_step = STEPER_STEP; |
mario_meh | 1:9cd4fd37eee0 | 27 | /** Unipolarni motor radi u half-step modu */ |
mario_meh | 2:b769f13c7523 | 28 | 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}}; |
mario_meh | 1:9cd4fd37eee0 | 29 | /** Konstruktor |
mario_meh | 1:9cd4fd37eee0 | 30 | * inicijalizacija je: Steper <naziv> = new Steper; |
mario_meh | 1:9cd4fd37eee0 | 31 | */ |
mario_meh | 2:b769f13c7523 | 32 | Steper::Steper() : coil1(PTC12), coil2(PTC13), coil3(PTC16), coil4(PTA13) |
mario_meh | 0:a3d5b06d790a | 33 | |
mario_meh | 0:a3d5b06d790a | 34 | { |
mario_meh | 0:a3d5b06d790a | 35 | |
mario_meh | 0:a3d5b06d790a | 36 | } |
mario_meh | 0:a3d5b06d790a | 37 | |
mario_meh | 0:a3d5b06d790a | 38 | bool pbonePressed = false; |
mario_meh | 2:b769f13c7523 | 39 | bool ready = true; |
mario_meh | 0:a3d5b06d790a | 40 | |
mario_meh | 2:b769f13c7523 | 41 | void Steper::stepper_step(int broji) |
mario_meh | 0:a3d5b06d790a | 42 | { |
mario_meh | 2:b769f13c7523 | 43 | static uint8_t i = 0; |
mario_meh | 2:b769f13c7523 | 44 | if(u_t.read_us() > u_okretaja*za_step) { |
mario_meh | 2:b769f13c7523 | 45 | switch(i) { |
mario_meh | 2:b769f13c7523 | 46 | case 0: |
mario_meh | 2:b769f13c7523 | 47 | coil1 = u_zavojnica[broji][0]; |
mario_meh | 2:b769f13c7523 | 48 | i++; |
mario_meh | 2:b769f13c7523 | 49 | case 1: |
mario_meh | 2:b769f13c7523 | 50 | coil2 = u_zavojnica[broji][1]; |
mario_meh | 2:b769f13c7523 | 51 | i++; |
mario_meh | 2:b769f13c7523 | 52 | case 2: |
mario_meh | 2:b769f13c7523 | 53 | coil3 = u_zavojnica[broji][2]; |
mario_meh | 2:b769f13c7523 | 54 | i++; |
mario_meh | 2:b769f13c7523 | 55 | case 3: |
mario_meh | 2:b769f13c7523 | 56 | coil4 = u_zavojnica[broji][3]; |
mario_meh | 2:b769f13c7523 | 57 | i++; |
mario_meh | 2:b769f13c7523 | 58 | default: |
mario_meh | 2:b769f13c7523 | 59 | i = 0; |
mario_meh | 2:b769f13c7523 | 60 | } |
mario_meh | 2:b769f13c7523 | 61 | u_t.reset(); |
mario_meh | 2:b769f13c7523 | 62 | } |
mario_meh | 0:a3d5b06d790a | 63 | } |
mario_meh | 2:b769f13c7523 | 64 | |
mario_meh | 0:a3d5b06d790a | 65 | void Steper::timer_isr() { |
mario_meh | 2:b769f13c7523 | 66 | step++; |
mario_meh | 2:b769f13c7523 | 67 | if(step <= u_okretaja) { |
mario_meh | 2:b769f13c7523 | 68 | u_motor(); |
mario_meh | 0:a3d5b06d790a | 69 | } |
mario_meh | 0:a3d5b06d790a | 70 | } |
mario_meh | 0:a3d5b06d790a | 71 | |
mario_meh | 0:a3d5b06d790a | 72 | void Steper::u_motor() { |
mario_meh | 2:b769f13c7523 | 73 | if(u_poz.u_krenuo == 1) { |
mario_meh | 2:b769f13c7523 | 74 | stepper_step(broji++); |
mario_meh | 2:b769f13c7523 | 75 | if(broji == 8) { |
mario_meh | 2:b769f13c7523 | 76 | broji = 0; |
mario_meh | 0:a3d5b06d790a | 77 | } |
mario_meh | 2:b769f13c7523 | 78 | } |
mario_meh | 2:b769f13c7523 | 79 | if(u_poz.u_stao) { |
mario_meh | 2:b769f13c7523 | 80 | u_ticker.detach(); |
mario_meh | 2:b769f13c7523 | 81 | } |
mario_meh | 2:b769f13c7523 | 82 | } |
mario_meh | 2:b769f13c7523 | 83 | |
mario_meh | 2:b769f13c7523 | 84 | int Steper::Brzina(int okretaja) { |
mario_meh | 2:b769f13c7523 | 85 | if(okretaja < OKRETAJA) { |
mario_meh | 2:b769f13c7523 | 86 | u_okretaja = okretaja; |
mario_meh | 2:b769f13c7523 | 87 | za_step = (float)((STEPER_STEP*1000)/OKRETAJA); |
mario_meh | 0:a3d5b06d790a | 88 | } |
mario_meh | 2:b769f13c7523 | 89 | if(okretaja >= OKRETAJA) { |
mario_meh | 2:b769f13c7523 | 90 | u_okretaja = okretaja; |
mario_meh | 2:b769f13c7523 | 91 | za_step = (float)((STEPER_STEP*1000)/OKRETAJA); |
mario_meh | 2:b769f13c7523 | 92 | } |
mario_meh | 2:b769f13c7523 | 93 | return u_okretaja; |
mario_meh | 2:b769f13c7523 | 94 | } |
mario_meh | 2:b769f13c7523 | 95 | |
mario_meh | 2:b769f13c7523 | 96 | void Steper::UEnable() { |
mario_meh | 2:b769f13c7523 | 97 | u_t.start(); |
mario_meh | 2:b769f13c7523 | 98 | u_ticker.attach_us(this, &Steper::timer_isr, u_okretaja); |
mario_meh | 0:a3d5b06d790a | 99 | } |