Joy_Buttons versao 2
Dependencies: X_NUCLEO_IHM01A1 mbed
Fork of HelloWorld_IHM01A1_buttons by
botoesnh.cpp@39:8e6912132896, 2018-04-18 (annotated)
- Committer:
- Bitelli
- Date:
- Wed Apr 18 20:33:33 2018 +0000
- Revision:
- 39:8e6912132896
- Parent:
- 38:6e846a303dec
3 motores
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
NathanLederman | 38:6e846a303dec | 1 | /* Includes ------------------------------------------------------------------*/ |
NathanLederman | 38:6e846a303dec | 2 | |
NathanLederman | 38:6e846a303dec | 3 | /* mbed specific header files. */ |
NathanLederman | 38:6e846a303dec | 4 | #include "mbed.h" |
NathanLederman | 38:6e846a303dec | 5 | |
NathanLederman | 38:6e846a303dec | 6 | /* Helper header files. */ |
NathanLederman | 38:6e846a303dec | 7 | #include "DevSPI.h" |
NathanLederman | 38:6e846a303dec | 8 | |
NathanLederman | 38:6e846a303dec | 9 | /* Component specific header files. */ |
NathanLederman | 38:6e846a303dec | 10 | #include "L6474.h" |
NathanLederman | 38:6e846a303dec | 11 | |
NathanLederman | 38:6e846a303dec | 12 | |
NathanLederman | 38:6e846a303dec | 13 | /* Definitions ---------------------------------------------------------------*/ |
NathanLederman | 38:6e846a303dec | 14 | |
NathanLederman | 38:6e846a303dec | 15 | /* Number of steps. */ |
Bitelli | 39:8e6912132896 | 16 | #define STEPS_1 (200 * 8) /* 1 revolution given a 200 steps motor configured at 1/8 microstep mode. */ |
NathanLederman | 38:6e846a303dec | 17 | |
NathanLederman | 38:6e846a303dec | 18 | /* Delay in milliseconds. */ |
NathanLederman | 38:6e846a303dec | 19 | #define DELAY_1 1000 |
NathanLederman | 38:6e846a303dec | 20 | #define DELAY_2 2000 |
NathanLederman | 38:6e846a303dec | 21 | #define DELAY_3 6000 |
NathanLederman | 38:6e846a303dec | 22 | #define DELAY_4 8000 |
NathanLederman | 38:6e846a303dec | 23 | |
NathanLederman | 38:6e846a303dec | 24 | /* Speed in pps (Pulses Per Second). |
NathanLederman | 38:6e846a303dec | 25 | In Full Step mode: 1 pps = 1 step/s). |
NathanLederman | 38:6e846a303dec | 26 | In 1/N Step Mode: N pps = 1 step/s). */ |
NathanLederman | 38:6e846a303dec | 27 | #define SPEED_1 2400 |
NathanLederman | 38:6e846a303dec | 28 | #define SPEED_2 1200 |
NathanLederman | 38:6e846a303dec | 29 | |
NathanLederman | 38:6e846a303dec | 30 | |
NathanLederman | 38:6e846a303dec | 31 | /* Variables -----------------------------------------------------------------*/ |
NathanLederman | 38:6e846a303dec | 32 | |
NathanLederman | 38:6e846a303dec | 33 | /* Initialization parameters. */ |
NathanLederman | 38:6e846a303dec | 34 | L6474_init_t init = { |
NathanLederman | 38:6e846a303dec | 35 | 160, /* Acceleration rate in pps^2. Range: (0..+inf). */ |
NathanLederman | 38:6e846a303dec | 36 | 160, /* Deceleration rate in pps^2. Range: (0..+inf). */ |
Bitelli | 39:8e6912132896 | 37 | 2600, /* Maximum speed in pps. Range: (30..10000]. */ |
NathanLederman | 38:6e846a303dec | 38 | 800, /* Minimum speed in pps. Range: [30..10000). */ |
NathanLederman | 38:6e846a303dec | 39 | 250, /* Torque regulation current in mA. Range: 31.25mA to 4000mA. */ |
NathanLederman | 38:6e846a303dec | 40 | L6474_OCD_TH_750mA, /* Overcurrent threshold (OCD_TH register). */ |
NathanLederman | 38:6e846a303dec | 41 | L6474_CONFIG_OC_SD_ENABLE, /* Overcurrent shutwdown (OC_SD field of CONFIG register). */ |
NathanLederman | 38:6e846a303dec | 42 | L6474_CONFIG_EN_TQREG_TVAL_USED, /* Torque regulation method (EN_TQREG field of CONFIG register). */ |
NathanLederman | 38:6e846a303dec | 43 | L6474_STEP_SEL_1_8, /* Step selection (STEP_SEL field of STEP_MODE register). */ |
NathanLederman | 38:6e846a303dec | 44 | L6474_SYNC_SEL_1_2, /* Sync selection (SYNC_SEL field of STEP_MODE register). */ |
NathanLederman | 38:6e846a303dec | 45 | L6474_FAST_STEP_12us, /* Fall time value (T_FAST field of T_FAST register). Range: 2us to 32us. */ |
NathanLederman | 38:6e846a303dec | 46 | L6474_TOFF_FAST_8us, /* Maximum fast decay time (T_OFF field of T_FAST register). Range: 2us to 32us. */ |
NathanLederman | 38:6e846a303dec | 47 | 3, /* Minimum ON time in us (TON_MIN register). Range: 0.5us to 64us. */ |
NathanLederman | 38:6e846a303dec | 48 | 21, /* Minimum OFF time in us (TOFF_MIN register). Range: 0.5us to 64us. */ |
NathanLederman | 38:6e846a303dec | 49 | L6474_CONFIG_TOFF_044us, /* Target Swicthing Period (field TOFF of CONFIG register). */ |
NathanLederman | 38:6e846a303dec | 50 | L6474_CONFIG_SR_320V_us, /* Slew rate (POW_SR field of CONFIG register). */ |
NathanLederman | 38:6e846a303dec | 51 | L6474_CONFIG_INT_16MHZ, /* Clock setting (OSC_CLK_SEL field of CONFIG register). */ |
NathanLederman | 38:6e846a303dec | 52 | L6474_ALARM_EN_OVERCURRENT | |
NathanLederman | 38:6e846a303dec | 53 | L6474_ALARM_EN_THERMAL_SHUTDOWN | |
NathanLederman | 38:6e846a303dec | 54 | L6474_ALARM_EN_THERMAL_WARNING | |
NathanLederman | 38:6e846a303dec | 55 | L6474_ALARM_EN_UNDERVOLTAGE | |
NathanLederman | 38:6e846a303dec | 56 | L6474_ALARM_EN_SW_TURN_ON | |
NathanLederman | 38:6e846a303dec | 57 | L6474_ALARM_EN_WRONG_NPERF_CMD /* Alarm (ALARM_EN register). */ |
NathanLederman | 38:6e846a303dec | 58 | }; |
NathanLederman | 38:6e846a303dec | 59 | |
NathanLederman | 38:6e846a303dec | 60 | /* Motor Control Component. */ |
Bitelli | 39:8e6912132896 | 61 | L6474 *motor1; |
Bitelli | 39:8e6912132896 | 62 | L6474 *motor2; |
Bitelli | 39:8e6912132896 | 63 | L6474 *motor3; |
Bitelli | 39:8e6912132896 | 64 | |
NathanLederman | 38:6e846a303dec | 65 | |
NathanLederman | 38:6e846a303dec | 66 | |
NathanLederman | 38:6e846a303dec | 67 | /* Functions -----------------------------------------------------------------*/ |
NathanLederman | 38:6e846a303dec | 68 | |
NathanLederman | 38:6e846a303dec | 69 | |
NathanLederman | 38:6e846a303dec | 70 | |
NathanLederman | 38:6e846a303dec | 71 | |
Bitelli | 39:8e6912132896 | 72 | DigitalIn botao_A(A0); |
Bitelli | 39:8e6912132896 | 73 | DigitalIn botao_B(A1); |
Bitelli | 39:8e6912132896 | 74 | DigitalIn botao_C(A2); |
Bitelli | 39:8e6912132896 | 75 | DigitalIn botao_D(A3); |
NathanLederman | 38:6e846a303dec | 76 | |
NathanLederman | 38:6e846a303dec | 77 | |
NathanLederman | 38:6e846a303dec | 78 | DigitalOut myled(LED1); |
NathanLederman | 38:6e846a303dec | 79 | Serial pc(USBTX, USBRX); |
NathanLederman | 38:6e846a303dec | 80 | |
NathanLederman | 38:6e846a303dec | 81 | int main() { |
NathanLederman | 38:6e846a303dec | 82 | /*----- Initialization. -----*/ |
NathanLederman | 38:6e846a303dec | 83 | |
NathanLederman | 38:6e846a303dec | 84 | /* Initializing SPI bus. */ |
NathanLederman | 38:6e846a303dec | 85 | DevSPI dev_spi(D11, D12, D13); |
NathanLederman | 38:6e846a303dec | 86 | |
NathanLederman | 38:6e846a303dec | 87 | /* Initializing Motor Control Component. */ |
Bitelli | 39:8e6912132896 | 88 | motor1 = new L6474(D2, D8, D7, D9, D10, dev_spi); |
Bitelli | 39:8e6912132896 | 89 | motor2 = new L6474(D2, D8, D4, D3, D10, dev_spi); |
Bitelli | 39:8e6912132896 | 90 | motor3 = new L6474(D2, D8, D5, D6, D10, dev_spi); |
Bitelli | 39:8e6912132896 | 91 | if (motor1->init(&init) != COMPONENT_OK) { |
Bitelli | 39:8e6912132896 | 92 | exit(EXIT_FAILURE); |
Bitelli | 39:8e6912132896 | 93 | } |
Bitelli | 39:8e6912132896 | 94 | if (motor2->init(&init) != COMPONENT_OK) { |
Bitelli | 39:8e6912132896 | 95 | exit(EXIT_FAILURE); |
Bitelli | 39:8e6912132896 | 96 | } |
Bitelli | 39:8e6912132896 | 97 | if (motor3->init(&init) != COMPONENT_OK) { |
NathanLederman | 38:6e846a303dec | 98 | exit(EXIT_FAILURE); |
NathanLederman | 38:6e846a303dec | 99 | } |
NathanLederman | 38:6e846a303dec | 100 | |
Bitelli | 39:8e6912132896 | 101 | |
NathanLederman | 38:6e846a303dec | 102 | int a,b,c,d; |
NathanLederman | 38:6e846a303dec | 103 | pc.baud(9600); |
NathanLederman | 38:6e846a303dec | 104 | |
NathanLederman | 38:6e846a303dec | 105 | |
NathanLederman | 38:6e846a303dec | 106 | a=b=c=d=0; |
NathanLederman | 38:6e846a303dec | 107 | |
NathanLederman | 38:6e846a303dec | 108 | pc.printf("\f\rA=%d, B=%d, C=%d, D=%d",a,b,c,d); |
NathanLederman | 38:6e846a303dec | 109 | pc.printf("\n\rHello World!!!"); |
NathanLederman | 38:6e846a303dec | 110 | |
NathanLederman | 38:6e846a303dec | 111 | while(1) { |
NathanLederman | 38:6e846a303dec | 112 | if (botao_A==0) { |
NathanLederman | 38:6e846a303dec | 113 | a++; |
NathanLederman | 38:6e846a303dec | 114 | pc.printf("\n\rTecla A=%d",a); |
Bitelli | 39:8e6912132896 | 115 | motor1->move(StepperMotor::FWD, 400); |
Bitelli | 39:8e6912132896 | 116 | motor2->move(StepperMotor::FWD, 400); |
Bitelli | 39:8e6912132896 | 117 | motor3->move(StepperMotor::FWD, 400); |
NathanLederman | 38:6e846a303dec | 118 | } |
NathanLederman | 38:6e846a303dec | 119 | if (botao_B==0) { |
NathanLederman | 38:6e846a303dec | 120 | b++; |
NathanLederman | 38:6e846a303dec | 121 | pc.printf("\n\rTecla B=%d",b); |
Bitelli | 39:8e6912132896 | 122 | motor1->move(StepperMotor::BWD, 400); |
Bitelli | 39:8e6912132896 | 123 | motor2->move(StepperMotor::BWD, 400); |
Bitelli | 39:8e6912132896 | 124 | motor3->move(StepperMotor::BWD, 400); |
NathanLederman | 38:6e846a303dec | 125 | } |
NathanLederman | 38:6e846a303dec | 126 | if (botao_C==0) { |
NathanLederman | 38:6e846a303dec | 127 | c++; |
NathanLederman | 38:6e846a303dec | 128 | pc.printf("\n\rTecla C=%d",c); |
NathanLederman | 38:6e846a303dec | 129 | } |
NathanLederman | 38:6e846a303dec | 130 | if (botao_D==0) { |
NathanLederman | 38:6e846a303dec | 131 | d++; |
NathanLederman | 38:6e846a303dec | 132 | pc.printf("\n\rTecla D=%d",d); |
NathanLederman | 38:6e846a303dec | 133 | } |
NathanLederman | 38:6e846a303dec | 134 | wait(0.2); |
NathanLederman | 38:6e846a303dec | 135 | } |
NathanLederman | 38:6e846a303dec | 136 | } |