Upravljanje unipolasnim motorom

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?

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