Codice per pilotare il motore IHM01A1

Dependencies:   mbed X_NUCLEO_IHM01A1

Committer:
Ignazio
Date:
Mon Oct 11 07:59:39 2021 +0000
Revision:
38:f3c848cd18cf
Parent:
35:2b44ed4ec7a0
Pilotaggio Motore

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 0:e6a49a092e2a 1 /**
Ignazio 38:f3c848cd18cf 2 **************************
Davidroid 0:e6a49a092e2a 3 * @file main.cpp
Davidroid 21:0189493b15ec 4 * @author Davide Aliprandi, STMicroelectronics
Davidroid 0:e6a49a092e2a 5 * @version V1.0.0
Davidroid 0:e6a49a092e2a 6 * @date October 14th, 2015
Davidroid 21:0189493b15ec 7 * @brief mbed test application for the STMicroelectronics X-NUCLEO-IHM01A1
Ignazio 38:f3c848cd18cf 8 * Motor Control Expansion Board: control of 2 motors.
Ignazio 38:f3c848cd18cf 9 **************************
Davidroid 0:e6a49a092e2a 10 * @attention
Davidroid 0:e6a49a092e2a 11 *
Davidroid 0:e6a49a092e2a 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
Davidroid 0:e6a49a092e2a 13 *
Davidroid 0:e6a49a092e2a 14 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 0:e6a49a092e2a 15 * are permitted provided that the following conditions are met:
Davidroid 0:e6a49a092e2a 16 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 0:e6a49a092e2a 17 * this list of conditions and the following disclaimer.
Davidroid 0:e6a49a092e2a 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 0:e6a49a092e2a 19 * this list of conditions and the following disclaimer in the documentation
Davidroid 0:e6a49a092e2a 20 * and/or other materials provided with the distribution.
Davidroid 0:e6a49a092e2a 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 0:e6a49a092e2a 22 * may be used to endorse or promote products derived from this software
Davidroid 0:e6a49a092e2a 23 * without specific prior written permission.
Davidroid 0:e6a49a092e2a 24 *
Davidroid 0:e6a49a092e2a 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 0:e6a49a092e2a 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 0:e6a49a092e2a 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 0:e6a49a092e2a 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 0:e6a49a092e2a 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 0:e6a49a092e2a 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 0:e6a49a092e2a 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 0:e6a49a092e2a 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 0:e6a49a092e2a 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 0:e6a49a092e2a 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 0:e6a49a092e2a 35 *
Ignazio 38:f3c848cd18cf 36 **************************
Davidroid 0:e6a49a092e2a 37 */
Davidroid 0:e6a49a092e2a 38
Davidroid 0:e6a49a092e2a 39
Davidroid 0:e6a49a092e2a 40 /* Includes ------------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 41
Davidroid 0:e6a49a092e2a 42 /* mbed specific header files. */
Davidroid 0:e6a49a092e2a 43 #include "mbed.h"
Davidroid 0:e6a49a092e2a 44
Davidroid 0:e6a49a092e2a 45 /* Helper header files. */
Davidroid 0:e6a49a092e2a 46 #include "DevSPI.h"
Davidroid 0:e6a49a092e2a 47
Davidroid 0:e6a49a092e2a 48 /* Component specific header files. */
davide.aliprandi@st.com 35:2b44ed4ec7a0 49 #include "L6474.h"
Ignazio 38:f3c848cd18cf 50 #define DELAY_3 6000
Davidroid 0:e6a49a092e2a 51
Davidroid 0:e6a49a092e2a 52 /* Definitions ---------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 53
Davidroid 26:b0203c2265e5 54 /* Number of steps. */
Ignazio 38:f3c848cd18cf 55 #define STEP_1 (3600)
Ignazio 38:f3c848cd18cf 56 #define STEP_2 (1500)
Davidroid 26:b0203c2265e5 57
Davidroid 26:b0203c2265e5 58 /* Delay in milliseconds. */
Ignazio 38:f3c848cd18cf 59
Ignazio 38:f3c848cd18cf 60
Davidroid 26:b0203c2265e5 61
Davidroid 29:a80a213c3c94 62 /* Speed in pps (Pulses Per Second).
Davidroid 29:a80a213c3c94 63 In Full Step mode: 1 pps = 1 step/s).
Davidroid 29:a80a213c3c94 64 In 1/N Step Mode: N pps = 1 step/s). */
Ignazio 38:f3c848cd18cf 65 #define SPEED_1 4800
Ignazio 38:f3c848cd18cf 66 Serial Serial1(PB_6,PB_7);
Ignazio 38:f3c848cd18cf 67 Serial pc(USBTX,USBRX);
Ignazio 38:f3c848cd18cf 68 char anglex[256];
Ignazio 38:f3c848cd18cf 69 char angley[256];
Ignazio 38:f3c848cd18cf 70 char dist[256];
Ignazio 38:f3c848cd18cf 71 float X,Y;
Ignazio 38:f3c848cd18cf 72 char m;
Ignazio 38:f3c848cd18cf 73 int D;
Ignazio 38:f3c848cd18cf 74 int differenza=0;
Ignazio 38:f3c848cd18cf 75 int precedente=0;
Ignazio 38:f3c848cd18cf 76 int j=0;
Ignazio 38:f3c848cd18cf 77 int g=0;
Ignazio 38:f3c848cd18cf 78 int C=0;
Ignazio 38:f3c848cd18cf 79 int i=0;
Ignazio 38:f3c848cd18cf 80 int k=0;
Ignazio 38:f3c848cd18cf 81 int B=0;
Ignazio 38:f3c848cd18cf 82 int appoggio=0;
Ignazio 38:f3c848cd18cf 83 int re=0;
Davidroid 0:e6a49a092e2a 84 /* Variables -----------------------------------------------------------------*/
davide.aliprandi@st.com 35:2b44ed4ec7a0 85 L6474_init_t init = {
Ignazio 38:f3c848cd18cf 86 1000, /* Acceleration rate in pps^2. Range: (0..+inf). */
Davidroid 29:a80a213c3c94 87 160, /* Deceleration rate in pps^2. Range: (0..+inf). */
Ignazio 38:f3c848cd18cf 88 10000, /* Maximum speed in pps. Range: (30..10000]. */
Ignazio 38:f3c848cd18cf 89 3200, /* Minimum speed in pps. Range: [30..10000). */
Ignazio 38:f3c848cd18cf 90 3000, /* Torque regulation current in mA. Range: 31.25mA to 4000mA. */
Ignazio 38:f3c848cd18cf 91 L6474_OCD_TH_3750mA, /* Overcurrent threshold (OCD_TH register). */
Davidroid 19:1cd7f65c155c 92 L6474_CONFIG_OC_SD_ENABLE, /* Overcurrent shutwdown (OC_SD field of CONFIG register). */
Davidroid 19:1cd7f65c155c 93 L6474_CONFIG_EN_TQREG_TVAL_USED, /* Torque regulation method (EN_TQREG field of CONFIG register). */
Davidroid 26:b0203c2265e5 94 L6474_STEP_SEL_1_8, /* Step selection (STEP_SEL field of STEP_MODE register). */
Davidroid 19:1cd7f65c155c 95 L6474_SYNC_SEL_1_2, /* Sync selection (SYNC_SEL field of STEP_MODE register). */
Davidroid 19:1cd7f65c155c 96 L6474_FAST_STEP_12us, /* Fall time value (T_FAST field of T_FAST register). Range: 2us to 32us. */
Davidroid 19:1cd7f65c155c 97 L6474_TOFF_FAST_8us, /* Maximum fast decay time (T_OFF field of T_FAST register). Range: 2us to 32us. */
Davidroid 19:1cd7f65c155c 98 3, /* Minimum ON time in us (TON_MIN register). Range: 0.5us to 64us. */
Davidroid 19:1cd7f65c155c 99 21, /* Minimum OFF time in us (TOFF_MIN register). Range: 0.5us to 64us. */
Davidroid 19:1cd7f65c155c 100 L6474_CONFIG_TOFF_044us, /* Target Swicthing Period (field TOFF of CONFIG register). */
Davidroid 19:1cd7f65c155c 101 L6474_CONFIG_SR_320V_us, /* Slew rate (POW_SR field of CONFIG register). */
Davidroid 19:1cd7f65c155c 102 L6474_CONFIG_INT_16MHZ, /* Clock setting (OSC_CLK_SEL field of CONFIG register). */
Davidroid 19:1cd7f65c155c 103 L6474_ALARM_EN_OVERCURRENT |
Davidroid 19:1cd7f65c155c 104 L6474_ALARM_EN_THERMAL_SHUTDOWN |
Davidroid 19:1cd7f65c155c 105 L6474_ALARM_EN_THERMAL_WARNING |
Davidroid 19:1cd7f65c155c 106 L6474_ALARM_EN_UNDERVOLTAGE |
Davidroid 19:1cd7f65c155c 107 L6474_ALARM_EN_SW_TURN_ON |
Davidroid 19:1cd7f65c155c 108 L6474_ALARM_EN_WRONG_NPERF_CMD /* Alarm (ALARM_EN register). */
Davidroid 19:1cd7f65c155c 109 };
Ignazio 38:f3c848cd18cf 110 /* Motor Control Component. */
Ignazio 38:f3c848cd18cf 111 L6474 *motor1;
Davidroid 19:1cd7f65c155c 112
Davidroid 0:e6a49a092e2a 113
Davidroid 0:e6a49a092e2a 114
Davidroid 19:1cd7f65c155c 115
Ignazio 38:f3c848cd18cf 116 //RICORDA 15V per l'alimentazione collega le alimentazioni con un GND sul COM e l'altro GND sul meno
Davidroid 19:1cd7f65c155c 117
Ignazio 38:f3c848cd18cf 118
Davidroid 0:e6a49a092e2a 119 /* Main ----------------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 120
Davidroid 0:e6a49a092e2a 121 int main()
Davidroid 0:e6a49a092e2a 122 {
Ignazio 38:f3c848cd18cf 123
Ignazio 38:f3c848cd18cf 124
Davidroid 6:32166bfc04b0 125 /*----- Initialization. -----*/
Davidroid 6:32166bfc04b0 126
Davidroid 0:e6a49a092e2a 127 /* Initializing SPI bus. */
Davidroid 0:e6a49a092e2a 128 DevSPI dev_spi(D11, D12, D13);
Davidroid 0:e6a49a092e2a 129
Ignazio 38:f3c848cd18cf 130 /* Initializing Motor Control Components. */
Ignazio 38:f3c848cd18cf 131 motor1 = new L6474(D2, D8, D7, D9, D10, dev_spi);
Ignazio 38:f3c848cd18cf 132 if (motor1->init(&init) != COMPONENT_OK) {
Davidroid 17:4830b25fec7f 133 exit(EXIT_FAILURE);
Davidroid 34:543d0d1147d9 134 }
Davidroid 0:e6a49a092e2a 135
Ignazio 38:f3c848cd18cf 136 /* motor1->set_max_speed(1000);
Ignazio 38:f3c848cd18cf 137 motor1->run(StepperMotor::FWD);
Ignazio 38:f3c848cd18cf 138 motor1->wait_while_active(); */
Davidroid 6:32166bfc04b0 139
Ignazio 38:f3c848cd18cf 140 while(1){
Ignazio 38:f3c848cd18cf 141
Ignazio 38:f3c848cd18cf 142 /* if (!motor1->set_step_mode((StepperMotor::step_mode_t) STEP_MODE_1_16)) {
Davidroid 26:b0203c2265e5 143 printf(" Step Mode not allowed.\r\n");
Ignazio 38:f3c848cd18cf 144 }*/
Ignazio 38:f3c848cd18cf 145 //motor1->move(StepperMotor::FWD, 7000);
Ignazio 38:f3c848cd18cf 146 motor1->set_max_speed(3200); //1600 fa un giro al secondo
Ignazio 38:f3c848cd18cf 147 motor1->run(StepperMotor::FWD);
Ignazio 38:f3c848cd18cf 148 int speed = motor1->get_speed();
Davidroid 6:32166bfc04b0 149
Davidroid 6:32166bfc04b0 150 /* Printing to the console. */
Davidroid 6:32166bfc04b0 151
Ignazio 38:f3c848cd18cf 152 // Waiting while the motor is active.
Ignazio 38:f3c848cd18cf 153 //motor1->wait_while_active();
Ignazio 38:f3c848cd18cf 154 wait(300);//5 minuti 300
Davidroid 6:32166bfc04b0 155 printf(" Speed: %d.\r\n", speed);
Ignazio 38:f3c848cd18cf 156 printf("primo\r\n");
Ignazio 38:f3c848cd18cf 157 //motor1->set_max_speed(6000);
Ignazio 38:f3c848cd18cf 158 //motor1->run(StepperMotor::FWD);
Ignazio 38:f3c848cd18cf 159 //wait_ms(8000);
Ignazio 38:f3c848cd18cf 160 //printf("secondo\r\n");
Ignazio 38:f3c848cd18cf 161 //motor1->go_to(7000);
Ignazio 38:f3c848cd18cf 162 // printf("giro\r\n");
Ignazio 38:f3c848cd18cf 163
Ignazio 38:f3c848cd18cf 164 // motor1->wait_while_active();
Ignazio 38:f3c848cd18cf 165 }
Davidroid 0:e6a49a092e2a 166
Ignazio 38:f3c848cd18cf 167
Ignazio 38:f3c848cd18cf 168
Ignazio 38:f3c848cd18cf 169
Ignazio 38:f3c848cd18cf 170 }