dylan wu / Mbed 2 deprecated NucleoTest_ULN2003_STEPPER28BYJ48-r2

Dependencies:   mbed

Fork of NucleoTest_ULN2003_STEPPER28BYJ48 by dylan wu

Committer:
Dylan
Date:
Fri Dec 18 07:04:58 2015 +0000
Revision:
0:603f010c2f1a
GPIO DRIVER ULN2003 CONTROL 28BJY-48 STEPPER.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dylan 0:603f010c2f1a 1 #include "mbed.h"
Dylan 0:603f010c2f1a 2
Dylan 0:603f010c2f1a 3 /*
Dylan 0:603f010c2f1a 4 通过IO口直接控制ULN2003来驱动电机正反转,这是测试程序.
Dylan 0:603f010c2f1a 5 运行后,电机先开始:正向加速->然后正向匀速转动一段时间->正向减速直到停止;-> 反向加速->然后反向匀速转动一段时间->反向减速直到停止;如此不断往复.
Dylan 0:603f010c2f1a 6 */
Dylan 0:603f010c2f1a 7
Dylan 0:603f010c2f1a 8 DigitalOut STEP_A(A2);
Dylan 0:603f010c2f1a 9 DigitalOut STEP_B(A3);
Dylan 0:603f010c2f1a 10 DigitalOut STEP_C(A4);
Dylan 0:603f010c2f1a 11 DigitalOut STEP_D(A5);
Dylan 0:603f010c2f1a 12
Dylan 0:603f010c2f1a 13 unsigned char FFZ[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转
Dylan 0:603f010c2f1a 14 unsigned char FFW[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转
Dylan 0:603f010c2f1a 15
Dylan 0:603f010c2f1a 16 unsigned char index = 0;
Dylan 0:603f010c2f1a 17
Dylan 0:603f010c2f1a 18 void motor_ff(unsigned char dir, float dly)
Dylan 0:603f010c2f1a 19 {
Dylan 0:603f010c2f1a 20 unsigned char status;
Dylan 0:603f010c2f1a 21
Dylan 0:603f010c2f1a 22 index %= 8;
Dylan 0:603f010c2f1a 23
Dylan 0:603f010c2f1a 24 if (dir == 0)
Dylan 0:603f010c2f1a 25 {
Dylan 0:603f010c2f1a 26 status = FFZ[index] & 0x1f;
Dylan 0:603f010c2f1a 27 }
Dylan 0:603f010c2f1a 28 else
Dylan 0:603f010c2f1a 29 {
Dylan 0:603f010c2f1a 30 status = FFW[index] & 0x1f;
Dylan 0:603f010c2f1a 31 }
Dylan 0:603f010c2f1a 32
Dylan 0:603f010c2f1a 33 index++;
Dylan 0:603f010c2f1a 34
Dylan 0:603f010c2f1a 35 ((status & 0x01) == 0) ? (STEP_A = 0): (STEP_A = 1);
Dylan 0:603f010c2f1a 36 ((status & 0x02) == 0) ? (STEP_B = 0): (STEP_B = 1);
Dylan 0:603f010c2f1a 37 ((status & 0x04) == 0) ? (STEP_C = 0): (STEP_C = 1);
Dylan 0:603f010c2f1a 38 ((status & 0x08) == 0) ? (STEP_D = 0): (STEP_D = 1);
Dylan 0:603f010c2f1a 39
Dylan 0:603f010c2f1a 40 wait(dly);
Dylan 0:603f010c2f1a 41 }
Dylan 0:603f010c2f1a 42
Dylan 0:603f010c2f1a 43 void dyl()
Dylan 0:603f010c2f1a 44 {
Dylan 0:603f010c2f1a 45 wait(0.03);//1/8起始频率 0.08,0.01,0.009,0.008,0.004,0.002,0.001,0.0009极限(5V); (10V)0.0008
Dylan 0:603f010c2f1a 46 }
Dylan 0:603f010c2f1a 47
Dylan 0:603f010c2f1a 48 //float cycles_5v[] = {0.08, 0.07, 0.06, 0.05, 0.04, 0.03,};//0.08->...->0.01->...->0.001->...->0.0009->0.0009->...->0.001->...->0.08
Dylan 0:603f010c2f1a 49 double cycles_5v;
Dylan 0:603f010c2f1a 50 double cycles_5v_start = 0.01;//0.08;
Dylan 0:603f010c2f1a 51 double cycles_5v_avg = 0.0009;
Dylan 0:603f010c2f1a 52 double cycles_5v_step = 0.0001;
Dylan 0:603f010c2f1a 53
Dylan 0:603f010c2f1a 54 /*
Dylan 0:603f010c2f1a 55 通过IO口直接控制ULN2003来驱动电机正反转,这是测试程序.
Dylan 0:603f010c2f1a 56 运行后,电机先开始:正向加速->然后正向匀速转动一段时间->正向减速直到停止;-> 反向加速->然后反向匀速转动一段时间->反向减速直到停止;如此不断往复.
Dylan 0:603f010c2f1a 57 */
Dylan 0:603f010c2f1a 58 int main()
Dylan 0:603f010c2f1a 59 {
Dylan 0:603f010c2f1a 60 cycles_5v = cycles_5v_start;
Dylan 0:603f010c2f1a 61
Dylan 0:603f010c2f1a 62 unsigned int count = 0;
Dylan 0:603f010c2f1a 63
Dylan 0:603f010c2f1a 64 while(1)
Dylan 0:603f010c2f1a 65 {
Dylan 0:603f010c2f1a 66 /* 正转 */
Dylan 0:603f010c2f1a 67 //加速
Dylan 0:603f010c2f1a 68 do
Dylan 0:603f010c2f1a 69 {
Dylan 0:603f010c2f1a 70 count = 10;
Dylan 0:603f010c2f1a 71 do
Dylan 0:603f010c2f1a 72 {
Dylan 0:603f010c2f1a 73 motor_ff(0, cycles_5v);
Dylan 0:603f010c2f1a 74 count--;
Dylan 0:603f010c2f1a 75 }while(count>1);
Dylan 0:603f010c2f1a 76 cycles_5v = cycles_5v - cycles_5v_step;
Dylan 0:603f010c2f1a 77 }while(cycles_5v > (cycles_5v_avg + cycles_5v_step));
Dylan 0:603f010c2f1a 78
Dylan 0:603f010c2f1a 79 //匀速
Dylan 0:603f010c2f1a 80 cycles_5v = cycles_5v_avg;
Dylan 0:603f010c2f1a 81 count = 65535;
Dylan 0:603f010c2f1a 82 do
Dylan 0:603f010c2f1a 83 {
Dylan 0:603f010c2f1a 84 motor_ff(0, cycles_5v);
Dylan 0:603f010c2f1a 85 count--;
Dylan 0:603f010c2f1a 86 }while(count>1);
Dylan 0:603f010c2f1a 87
Dylan 0:603f010c2f1a 88 //减速
Dylan 0:603f010c2f1a 89 do
Dylan 0:603f010c2f1a 90 {
Dylan 0:603f010c2f1a 91 count = 10;
Dylan 0:603f010c2f1a 92 do
Dylan 0:603f010c2f1a 93 {
Dylan 0:603f010c2f1a 94 motor_ff(0, cycles_5v);
Dylan 0:603f010c2f1a 95 count--;
Dylan 0:603f010c2f1a 96 }while(count>1);
Dylan 0:603f010c2f1a 97 cycles_5v = cycles_5v + cycles_5v_step;
Dylan 0:603f010c2f1a 98 }while(cycles_5v < (cycles_5v_start - cycles_5v_step));
Dylan 0:603f010c2f1a 99
Dylan 0:603f010c2f1a 100
Dylan 0:603f010c2f1a 101 /* 反转 */
Dylan 0:603f010c2f1a 102 //加速
Dylan 0:603f010c2f1a 103 do
Dylan 0:603f010c2f1a 104 {
Dylan 0:603f010c2f1a 105 count = 10;
Dylan 0:603f010c2f1a 106 do
Dylan 0:603f010c2f1a 107 {
Dylan 0:603f010c2f1a 108 motor_ff(1, cycles_5v);
Dylan 0:603f010c2f1a 109 count--;
Dylan 0:603f010c2f1a 110 }while(count>1);
Dylan 0:603f010c2f1a 111 cycles_5v = cycles_5v - cycles_5v_step;
Dylan 0:603f010c2f1a 112 }while(cycles_5v > (cycles_5v_avg + cycles_5v_step));
Dylan 0:603f010c2f1a 113
Dylan 0:603f010c2f1a 114 //匀速
Dylan 0:603f010c2f1a 115 cycles_5v = cycles_5v_avg;
Dylan 0:603f010c2f1a 116 count = 65535;
Dylan 0:603f010c2f1a 117 do
Dylan 0:603f010c2f1a 118 {
Dylan 0:603f010c2f1a 119 motor_ff(1, cycles_5v);
Dylan 0:603f010c2f1a 120 count--;
Dylan 0:603f010c2f1a 121 }while(count>1);
Dylan 0:603f010c2f1a 122
Dylan 0:603f010c2f1a 123 //减速
Dylan 0:603f010c2f1a 124 do
Dylan 0:603f010c2f1a 125 {
Dylan 0:603f010c2f1a 126 count = 10;
Dylan 0:603f010c2f1a 127 do
Dylan 0:603f010c2f1a 128 {
Dylan 0:603f010c2f1a 129 motor_ff(1, cycles_5v);
Dylan 0:603f010c2f1a 130 count--;
Dylan 0:603f010c2f1a 131 }while(count>1);
Dylan 0:603f010c2f1a 132 cycles_5v = cycles_5v + cycles_5v_step;
Dylan 0:603f010c2f1a 133 }while(cycles_5v < (cycles_5v_start - cycles_5v_step));
Dylan 0:603f010c2f1a 134 }
Dylan 0:603f010c2f1a 135 }