motore cofano

Dependencies:   mbed X-NUCLEO-IHM05A1

Committer:
Vito1704
Date:
Mon Nov 19 11:45:23 2018 +0000
Revision:
11:196c4677e0ca
Parent:
10:2622d1ab5984
finale robot

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pinofal 9:900e18a2310b 1 /**
pinofal 9:900e18a2310b 2 ******************************************************************************
pinofal 9:900e18a2310b 3 * @file main.cpp
pinofal 9:900e18a2310b 4 * @author IPC Rennes
pinofal 9:900e18a2310b 5 * @version V1.0.0
pinofal 9:900e18a2310b 6 * @date April 13th, 2016
pinofal 9:900e18a2310b 7 * @brief mbed simple application for the STMicroelectronics X-NUCLEO-IHM05A1
pinofal 9:900e18a2310b 8 * Motor Control Expansion Board: control of 1 motor.
pinofal 9:900e18a2310b 9 ******************************************************************************
pinofal 9:900e18a2310b 10 * @attention
pinofal 9:900e18a2310b 11 *
pinofal 9:900e18a2310b 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
pinofal 9:900e18a2310b 13 *
pinofal 9:900e18a2310b 14 * Redistribution and use in source and binary forms, with or without modification,
pinofal 9:900e18a2310b 15 * are permitted provided that the following conditions are met:
pinofal 9:900e18a2310b 16 * 1. Redistributions of source code must retain the above copyright notice,
pinofal 9:900e18a2310b 17 * this list of conditions and the following disclaimer.
pinofal 9:900e18a2310b 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
pinofal 9:900e18a2310b 19 * this list of conditions and the following disclaimer in the documentation
pinofal 9:900e18a2310b 20 * and/or other materials provided with the distribution.
pinofal 9:900e18a2310b 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
pinofal 9:900e18a2310b 22 * may be used to endorse or promote products derived from this software
pinofal 9:900e18a2310b 23 * without specific prior written permission.
pinofal 9:900e18a2310b 24 *
pinofal 9:900e18a2310b 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
pinofal 9:900e18a2310b 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
pinofal 9:900e18a2310b 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
pinofal 9:900e18a2310b 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
pinofal 9:900e18a2310b 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
pinofal 9:900e18a2310b 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
pinofal 9:900e18a2310b 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
pinofal 9:900e18a2310b 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
pinofal 9:900e18a2310b 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
pinofal 9:900e18a2310b 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
pinofal 9:900e18a2310b 35 *
pinofal 9:900e18a2310b 36 ******************************************************************************
pinofal 9:900e18a2310b 37 */
pinofal 9:900e18a2310b 38
pinofal 9:900e18a2310b 39 /* Includes ------------------------------------------------------------------*/
pinofal 9:900e18a2310b 40
pinofal 9:900e18a2310b 41 /* mbed specific header files. */
pinofal 9:900e18a2310b 42 #include "mbed.h"
pinofal 9:900e18a2310b 43
pinofal 9:900e18a2310b 44 /* Component specific header files. */
pinofal 9:900e18a2310b 45 #include "L6208.h"
Vito1704 11:196c4677e0ca 46 #include "SampledSound.h"
Vito1704 11:196c4677e0ca 47 #include "Clacson.h"
francesco01 10:2622d1ab5984 48 DigitalIn myButton(USER_BUTTON);
francesco01 10:2622d1ab5984 49 DigitalIn Input (PC_0);
Vito1704 11:196c4677e0ca 50 AnalogIn InWave(PA_0);
Vito1704 11:196c4677e0ca 51 Serial pc(USBTX, USBRX);
Vito1704 11:196c4677e0ca 52 //DigitalOut myRele(PC_3);
Vito1704 11:196c4677e0ca 53 DigitalOut LedAD (PC_2) ;//bianche telecamere
Vito1704 11:196c4677e0ca 54 DigitalOut LedAS (PC_3) ;//bianche telecamere
Vito1704 11:196c4677e0ca 55 DigitalOut LedPD (PC_10) ;//rosse
Vito1704 11:196c4677e0ca 56 DigitalOut LedPS (PC_12) ;//rosse
Vito1704 11:196c4677e0ca 57 AnalogOut OutWave(PA_4); // pin di output per la forma d'onda analogica
Vito1704 11:196c4677e0ca 58 DigitalOut myD2(PA_10);//pin di output proveniente dal raspberry
Vito1704 11:196c4677e0ca 59 DigitalOut led2(LED2); // LED su scheda
pinofal 9:900e18a2310b 60 /* Definitions ---------------------------------------------------------------*/
pinofal 9:900e18a2310b 61 #ifdef TARGET_NUCLEO_F334R8
pinofal 9:900e18a2310b 62 #define VREFA_PWM_PIN D11
pinofal 9:900e18a2310b 63 #define VREFB_PWM_PIN D9
pinofal 9:900e18a2310b 64 #elif TARGET_NUCLEO_F302R8
pinofal 9:900e18a2310b 65 #define VREFA_PWM_PIN D11
pinofal 9:900e18a2310b 66 #define VREFB_PWM_PIN D15 /* HW mandatory patch: bridge manually D9 with D15 */
pinofal 9:900e18a2310b 67 #else
pinofal 9:900e18a2310b 68 #define VREFA_PWM_PIN D3
pinofal 9:900e18a2310b 69 #define VREFB_PWM_PIN D9
pinofal 9:900e18a2310b 70 #endif
Vito1704 11:196c4677e0ca 71 #define NUMSAMPLE 300
Vito1704 11:196c4677e0ca 72 // ticker per la generazione dell'onda con DAC
Vito1704 11:196c4677e0ca 73 Ticker SampleOutTicker;
pinofal 9:900e18a2310b 74
Vito1704 11:196c4677e0ca 75 void my_error_handler(uint16_t error)
Vito1704 11:196c4677e0ca 76 {
Vito1704 11:196c4677e0ca 77 /* Printing to the console. */
Vito1704 11:196c4677e0ca 78 pc.printf("Error %d detected\r\n\n", error);
Vito1704 11:196c4677e0ca 79
Vito1704 11:196c4677e0ca 80 /* Infinite loop */
Vito1704 11:196c4677e0ca 81 while (true) {
Vito1704 11:196c4677e0ca 82 }
Vito1704 11:196c4677e0ca 83 }
Vito1704 11:196c4677e0ca 84
Vito1704 11:196c4677e0ca 85
Vito1704 11:196c4677e0ca 86
Vito1704 11:196c4677e0ca 87 // ticker per l'acquisizione dell'onda con ADC
Vito1704 11:196c4677e0ca 88 Ticker SamplingTicker;
Vito1704 11:196c4677e0ca 89
Vito1704 11:196c4677e0ca 90 // carattere in arrivo dal PC ed equivalente numerico
Vito1704 11:196c4677e0ca 91 volatile char cReadChar;
Vito1704 11:196c4677e0ca 92 volatile int nReadChar;
Vito1704 11:196c4677e0ca 93
Vito1704 11:196c4677e0ca 94 // flag che diventa true quando si vuole fermare l'acquisizione
Vito1704 11:196c4677e0ca 95 volatile bool bStop;
Vito1704 11:196c4677e0ca 96
Vito1704 11:196c4677e0ca 97 // valore letto dall'ADC e corrispondente in tensione
Vito1704 11:196c4677e0ca 98 volatile unsigned short usReadADCLux;
Vito1704 11:196c4677e0ca 99 volatile float fReadVoltage;
Vito1704 11:196c4677e0ca 100
Vito1704 11:196c4677e0ca 101 // valore di temperatura letto dall'ADC
Vito1704 11:196c4677e0ca 102 volatile float fLux;
Vito1704 11:196c4677e0ca 103
Vito1704 11:196c4677e0ca 104 // prototipo di funzione che genera i campioni della sinusoide da utilizzare per la generazione tramite DAC
Vito1704 11:196c4677e0ca 105 void CalculateSinewave(void);
Vito1704 11:196c4677e0ca 106 // funzione di generazione suono della frequenza e ampiezza selezionate
Vito1704 11:196c4677e0ca 107 void SoundGenerate(double fFrequency);
Vito1704 11:196c4677e0ca 108
Vito1704 11:196c4677e0ca 109 // carattere in arrivo dal PC
Vito1704 11:196c4677e0ca 110
Vito1704 11:196c4677e0ca 111 volatile char CReadMusic;
Vito1704 11:196c4677e0ca 112
Vito1704 11:196c4677e0ca 113 uint32_t nProva;
Vito1704 11:196c4677e0ca 114
Vito1704 11:196c4677e0ca 115 // indice nell'array dei campioni da porre in output da DAC per Marimba
Vito1704 11:196c4677e0ca 116 volatile uint32_t nSampleSoundIndex;
Vito1704 11:196c4677e0ca 117
Vito1704 11:196c4677e0ca 118 // Periodo di generazione campioni in output DeltaT = T/NumSample
Vito1704 11:196c4677e0ca 119 double fDeltaT;
Vito1704 11:196c4677e0ca 120 // amplificazione per il dato da spedire sull'ADC
Vito1704 11:196c4677e0ca 121 volatile double fAmp;
Vito1704 11:196c4677e0ca 122 //volatile double fAmpNew;
Vito1704 11:196c4677e0ca 123 // flag per bloccare la generazione del segnale
Vito1704 11:196c4677e0ca 124 volatile int bGenerate = false;
Vito1704 11:196c4677e0ca 125
Vito1704 11:196c4677e0ca 126 // frequenza segnale da generare
Vito1704 11:196c4677e0ca 127 volatile double fFreq;
Vito1704 11:196c4677e0ca 128 //flag che diventa true se bisogna fermare la generazione di suoni
Vito1704 11:196c4677e0ca 129
Vito1704 11:196c4677e0ca 130 // periodo della sinusoide da generare
Vito1704 11:196c4677e0ca 131 double fPeriod;
Vito1704 11:196c4677e0ca 132 // tipo di suono da generare: 0=Sine, 1= Square
Vito1704 11:196c4677e0ca 133 char cSoundWave;
Vito1704 11:196c4677e0ca 134
Vito1704 11:196c4677e0ca 135 // nota corrispondente al tasto premuto
Vito1704 11:196c4677e0ca 136 volatile char cKeyToPlay= '\0';
Vito1704 11:196c4677e0ca 137
Vito1704 11:196c4677e0ca 138
Vito1704 11:196c4677e0ca 139 //**********************************************************************
Vito1704 11:196c4677e0ca 140 // generazione suoni con i sample da file di campioni in SoundSample.h
Vito1704 11:196c4677e0ca 141 //**********************************************************************
Vito1704 11:196c4677e0ca 142 void SampleOut()
Vito1704 11:196c4677e0ca 143 {
Vito1704 11:196c4677e0ca 144
Vito1704 11:196c4677e0ca 145 // genera campioni fino al raggiungimento del numero di campioni nel file Sound.h
Vito1704 11:196c4677e0ca 146 if((nSampleSoundIndex < nSampleNum) && (bGenerate == true))
Vito1704 11:196c4677e0ca 147 {
Vito1704 11:196c4677e0ca 148 // mette in output un campione della forma d'onda moltiplicato per l'amplificazione fAmp
Vito1704 11:196c4677e0ca 149 OutWave.write_u16(naInputSoundWave[nSampleSoundIndex]*fAmp);
Vito1704 11:196c4677e0ca 150 // incrementa l'indice del campione in output, nSampleNum è il numero dei campioni nle file Sound.h
Vito1704 11:196c4677e0ca 151 nSampleSoundIndex++;
Vito1704 11:196c4677e0ca 152 }
Vito1704 11:196c4677e0ca 153 else
Vito1704 11:196c4677e0ca 154 {
Vito1704 11:196c4677e0ca 155 // se è stato generato il numero di campioni del file oppure bGenerate = false, ferma la generazione di suoni
Vito1704 11:196c4677e0ca 156 bGenerate = false;
Vito1704 11:196c4677e0ca 157 }
Vito1704 11:196c4677e0ca 158 }
Vito1704 11:196c4677e0ca 159
Vito1704 11:196c4677e0ca 160 // prototipo di funzione che genera i campioni della sinusoide da utilizzare per la generazione tramite DAC
Vito1704 11:196c4677e0ca 161 void CalculateSinewave(void);
Vito1704 11:196c4677e0ca 162 // funzione di generazione suono della frequenza e ampiezza selezionate
Vito1704 11:196c4677e0ca 163 void SoundGenerate(double fFrequency);
pinofal 9:900e18a2310b 164
pinofal 9:900e18a2310b 165 /* Variables -----------------------------------------------------------------*/
pinofal 9:900e18a2310b 166
pinofal 9:900e18a2310b 167 /* Initialization parameters of the motor connected to the expansion board. */
pinofal 9:900e18a2310b 168 l6208_init_t init =
pinofal 9:900e18a2310b 169 {
francesco01 10:2622d1ab5984 170
pinofal 9:900e18a2310b 171 1500, //Acceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes
francesco01 10:2622d1ab5984 172 20, //Acceleration current torque in % (from 0 to 100)
pinofal 9:900e18a2310b 173 1500, //Deceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes
pinofal 9:900e18a2310b 174 30, //Deceleration current torque in % (from 0 to 100)
pinofal 9:900e18a2310b 175 1500, //Running speed in step/s or (1/16)th step/s for microstep modes
pinofal 9:900e18a2310b 176 50, //Running current torque in % (from 0 to 100)
pinofal 9:900e18a2310b 177 20, //Holding current torque in % (from 0 to 100)
pinofal 9:900e18a2310b 178 STEP_MODE_1_16, //Step mode via enum motorStepMode_t
pinofal 9:900e18a2310b 179 FAST_DECAY, //Decay mode via enum motorDecayMode_t
pinofal 9:900e18a2310b 180 0, //Dwelling time in ms
pinofal 9:900e18a2310b 181 FALSE, //Automatic HIZ STOP
pinofal 9:900e18a2310b 182 100000 //VREFA and VREFB PWM frequency (Hz)
pinofal 9:900e18a2310b 183 };
pinofal 9:900e18a2310b 184
pinofal 9:900e18a2310b 185 /* Motor Control Component. */
pinofal 9:900e18a2310b 186 L6208 *motor;
pinofal 9:900e18a2310b 187
pinofal 9:900e18a2310b 188 /* Functions -----------------------------------------------------------------*/
pinofal 9:900e18a2310b 189
pinofal 9:900e18a2310b 190 /**
pinofal 9:900e18a2310b 191 * @brief This is an example of user handler for the flag interrupt.
pinofal 9:900e18a2310b 192 * @param None
pinofal 9:900e18a2310b 193 * @retval None
pinofal 9:900e18a2310b 194 * @note If needed, implement it, and then attach and enable it:
pinofal 9:900e18a2310b 195 * + motor->attach_flag_irq(&my_flag_irq_handler);
pinofal 9:900e18a2310b 196 * + motor->enable_flag_irq();
pinofal 9:900e18a2310b 197 * To disable it:
pinofal 9:900e18a2310b 198 * + motor->DisbleFlagIRQ();
pinofal 9:900e18a2310b 199 */
pinofal 9:900e18a2310b 200 void my_flag_irq_handler(void)
pinofal 9:900e18a2310b 201 {
pinofal 9:900e18a2310b 202 pc.printf(" WARNING: \"FLAG\" interrupt triggered:\r\n");
pinofal 9:900e18a2310b 203 motor->disable();
pinofal 9:900e18a2310b 204 pc.printf(" Motor disabled.\r\n\n");
pinofal 9:900e18a2310b 205 }
pinofal 9:900e18a2310b 206
pinofal 9:900e18a2310b 207 /**
pinofal 9:900e18a2310b 208 * @brief This is an example of error handler.
pinofal 9:900e18a2310b 209 * @param[in] error Number of the error
pinofal 9:900e18a2310b 210 * @retval None
pinofal 9:900e18a2310b 211 * @note If needed, implement it, and then attach it:
pinofal 9:900e18a2310b 212 * + motor->attach_error_handler(&my_error_handler);
pinofal 9:900e18a2310b 213 */
pinofal 9:900e18a2310b 214
pinofal 9:900e18a2310b 215 /* Main ----------------------------------------------------------------------*/
pinofal 9:900e18a2310b 216
pinofal 9:900e18a2310b 217 int main()
pinofal 9:900e18a2310b 218 {
Vito1704 11:196c4677e0ca 219 //inizializza variabili
Vito1704 11:196c4677e0ca 220 bGenerate= false;
Vito1704 11:196c4677e0ca 221 bStop= true;
Vito1704 11:196c4677e0ca 222 cReadChar= 0;
Vito1704 11:196c4677e0ca 223 //nSampleOutIndex= 0;
Vito1704 11:196c4677e0ca 224 //nSampleOutCount= 0;
Vito1704 11:196c4677e0ca 225 nSampleSoundIndex= 0;
Vito1704 11:196c4677e0ca 226
Vito1704 11:196c4677e0ca 227 //imposta il funzionamento del pulsante come "PullDown": Aperto = '0'. L'altra modalità di funzionamento è PullUp
Vito1704 11:196c4677e0ca 228 myButton.mode(PullUp);
Vito1704 11:196c4677e0ca 229
Vito1704 11:196c4677e0ca 230 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
Vito1704 11:196c4677e0ca 231 pc.baud(921600); //921600 bps
Vito1704 11:196c4677e0ca 232
Vito1704 11:196c4677e0ca 233 // test dei LED
Vito1704 11:196c4677e0ca 234 led2=1; // Blu
Vito1704 11:196c4677e0ca 235 wait_ms(500);
Vito1704 11:196c4677e0ca 236 led2=0;
Vito1704 11:196c4677e0ca 237
Vito1704 11:196c4677e0ca 238 pc.printf("\r\nHallo Amaldi Students - Exercise 12 \r\n");
Vito1704 11:196c4677e0ca 239 pc.printf("\n\r*** Sampled Sound Generator ***\n\r");
Vito1704 11:196c4677e0ca 240
Vito1704 11:196c4677e0ca 241 // fissa l'amplificazione da 0 a 1
Vito1704 11:196c4677e0ca 242 fAmp = 1.0;
Vito1704 11:196c4677e0ca 243
Vito1704 11:196c4677e0ca 244 // attende la pressione di tasti sulla marimba
Vito1704 11:196c4677e0ca 245 while(true)
Vito1704 11:196c4677e0ca 246 {
Vito1704 11:196c4677e0ca 247 if(myButton == 0)
Vito1704 11:196c4677e0ca 248 {
Vito1704 11:196c4677e0ca 249 while(myButton != 1){}; // attendi che il tasto sia rilasciato
Vito1704 11:196c4677e0ca 250 fFreq=nSamplePerSec/nUnderSampleFactor;// campioni per secondo da generare = nSamplePerSec/nUnderSampleFactor
Vito1704 11:196c4677e0ca 251 pc.printf("--- Sound Generation ---\n\r");
Vito1704 11:196c4677e0ca 252 pc.printf("--- Clacson ---\n\r");
Vito1704 11:196c4677e0ca 253 if (myD2 == 1)
Vito1704 11:196c4677e0ca 254 {
Vito1704 11:196c4677e0ca 255 bGenerate = true; // flag true quando è attiva la generazione di suoni
Vito1704 11:196c4677e0ca 256 nSampleSoundIndex =0; //inizializza indice dell'array
Vito1704 11:196c4677e0ca 257 fDeltaT = (1.0/fFreq); // fFreq dipende dal periodo di campionamento e dal fattore di sottocampionamento
Vito1704 11:196c4677e0ca 258 SampleOutTicker.attach(&SampleOut,fDeltaT); // avvia generazione
Vito1704 11:196c4677e0ca 259 }
Vito1704 11:196c4677e0ca 260 else
Vito1704 11:196c4677e0ca 261 {
Vito1704 11:196c4677e0ca 262 bGenerate = false; // arresta la generazione di suoni
Vito1704 11:196c4677e0ca 263 }
Vito1704 11:196c4677e0ca 264 }
Vito1704 11:196c4677e0ca 265 } // while
Vito1704 11:196c4677e0ca 266 // periodo di campionamento
Vito1704 11:196c4677e0ca 267 int nDeltaT;
Vito1704 11:196c4677e0ca 268
Vito1704 11:196c4677e0ca 269
Vito1704 11:196c4677e0ca 270 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
Vito1704 11:196c4677e0ca 271 pc.baud(921600); //921600 bps
Vito1704 11:196c4677e0ca 272 // messaggio di benvenuto
Vito1704 11:196c4677e0ca 273 pc.printf("\r\nHey Bro! Say Goodbye to your Sister !\r\n");
Vito1704 11:196c4677e0ca 274 pc.printf("Enter Acquisition Time, DeltaT[sec]= [1 - 9]: \r\n");
Vito1704 11:196c4677e0ca 275 // pc.printf("\r\n*** Bluetooth Temp Acquisition ***\r\n");
Vito1704 11:196c4677e0ca 276
Vito1704 11:196c4677e0ca 277 // inizializza variabili
Vito1704 11:196c4677e0ca 278 bStop=true;
Vito1704 11:196c4677e0ca 279 //myRele = 0x00; // spegni il relè
Vito1704 11:196c4677e0ca 280
Vito1704 11:196c4677e0ca 281
Vito1704 11:196c4677e0ca 282
Vito1704 11:196c4677e0ca 283 LedAD =0x00 ;
Vito1704 11:196c4677e0ca 284 LedAS =0x00 ;
Vito1704 11:196c4677e0ca 285 LedPD =0x00 ;
Vito1704 11:196c4677e0ca 286 LedPS =0x00 ;
Vito1704 11:196c4677e0ca 287 wait(1);
Vito1704 11:196c4677e0ca 288 LedAD =0x01 ;
Vito1704 11:196c4677e0ca 289 LedAS =0x01 ;
Vito1704 11:196c4677e0ca 290 LedPD =0x01 ;
Vito1704 11:196c4677e0ca 291 LedPS =0x01 ;
Vito1704 11:196c4677e0ca 292 wait(1);
Vito1704 11:196c4677e0ca 293 LedAD =0x00 ;
Vito1704 11:196c4677e0ca 294 LedAS =0x00 ;
Vito1704 11:196c4677e0ca 295 LedPD =0x00 ;
Vito1704 11:196c4677e0ca 296 LedPS =0x00 ;
Vito1704 11:196c4677e0ca 297 wait(1);
Vito1704 11:196c4677e0ca 298 LedAD =0x01;
Vito1704 11:196c4677e0ca 299 wait_ms(500);
Vito1704 11:196c4677e0ca 300 LedAS =0x01 ;
Vito1704 11:196c4677e0ca 301 wait_ms(500);
Vito1704 11:196c4677e0ca 302 LedPD =0x01 ;
Vito1704 11:196c4677e0ca 303 wait_ms(500);
Vito1704 11:196c4677e0ca 304 LedPS =0x01 ;
Vito1704 11:196c4677e0ca 305 wait(1);
pinofal 9:900e18a2310b 306 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 9:900e18a2310b 307 pc.baud(921600); //921600 bps
pinofal 9:900e18a2310b 308 //pc.baud(9600); //256000 bps
pinofal 9:900e18a2310b 309 pc.printf("*** Test Motor ***\n\r");
pinofal 9:900e18a2310b 310
pinofal 9:900e18a2310b 311 /* Printing to the console. */
pinofal 9:900e18a2310b 312 pc.printf("STARTING MAIN PROGRAM\r\n");
pinofal 9:900e18a2310b 313 pc.printf(" Reminder:\r\n");
pinofal 9:900e18a2310b 314 pc.printf(" The position unit is in agreement to the step mode.\r\n");
pinofal 9:900e18a2310b 315 pc.printf(" The speed, acceleration or deceleration unit depend on the step mode:\r\n");
pinofal 9:900e18a2310b 316 pc.printf(" - For normal mode and half step mode, the unit is steps/s or /s^2.\r\n");
pinofal 9:900e18a2310b 317 pc.printf(" - For microstep modes, the unit is (1/16)steps/s or /s^2.\r\n");
pinofal 9:900e18a2310b 318
pinofal 9:900e18a2310b 319 //----- Initialization
pinofal 9:900e18a2310b 320 /* Initializing Motor Control Component. */
pinofal 9:900e18a2310b 321 motor = new L6208(D2, D8, D7, D4, D5, D6, VREFA_PWM_PIN, VREFB_PWM_PIN);
pinofal 9:900e18a2310b 322 if (motor->init(&init) != COMPONENT_OK) {
pinofal 9:900e18a2310b 323 exit(EXIT_FAILURE);
pinofal 9:900e18a2310b 324 }
pinofal 9:900e18a2310b 325
pinofal 9:900e18a2310b 326 /* Attaching and enabling an interrupt handler. */
pinofal 9:900e18a2310b 327 motor->attach_flag_irq(&my_flag_irq_handler);
pinofal 9:900e18a2310b 328 motor->enable_flag_irq();
pinofal 9:900e18a2310b 329
pinofal 9:900e18a2310b 330 /* Attaching an error handler */
pinofal 9:900e18a2310b 331 motor->attach_error_handler(&my_error_handler);
pinofal 9:900e18a2310b 332
pinofal 9:900e18a2310b 333 /* Printing to the console. */
pinofal 9:900e18a2310b 334 pc.printf("Motor Control Application Example for 1 Motor\r\n");
pinofal 9:900e18a2310b 335
pinofal 9:900e18a2310b 336 //----- run the motor BACKWARD
pinofal 9:900e18a2310b 337 pc.printf("--> Running the motor backward.\r\n");
pinofal 9:900e18a2310b 338 motor->run(StepperMotor::BWD);
pinofal 9:900e18a2310b 339
pinofal 9:900e18a2310b 340 while (motor->get_status()!=STEADY) {
pinofal 9:900e18a2310b 341 /* Print reached speed to the console in step/s or microsteps/s */
pinofal 9:900e18a2310b 342 pc.printf(" Reached Speed: %d microstep/s.\r\n", motor->get_speed());
pinofal 9:900e18a2310b 343 wait_ms(50);
pinofal 9:900e18a2310b 344 }
pinofal 9:900e18a2310b 345 pc.printf(" Reached Speed: %d microstep/s.\r\n", motor->get_speed());
pinofal 9:900e18a2310b 346
pinofal 9:900e18a2310b 347 /* Wait for 1 second */
pinofal 9:900e18a2310b 348 wait_ms(1000);
pinofal 9:900e18a2310b 349
pinofal 9:900e18a2310b 350
pinofal 9:900e18a2310b 351
pinofal 9:900e18a2310b 352 //----- Soft stop required while running
pinofal 9:900e18a2310b 353 pc.printf("--> Soft stop requested.\r\n");
francesco01 10:2622d1ab5984 354 motor->soft_stop();
pinofal 9:900e18a2310b 355
francesco01 10:2622d1ab5984 356
pinofal 9:900e18a2310b 357 //----- Change step mode to full step mode
pinofal 9:900e18a2310b 358 motor->set_step_mode(StepperMotor::STEP_MODE_FULL);
pinofal 9:900e18a2310b 359 pc.printf(" Motor step mode: %d (0:FS, 1:1/2, 2:1/4, 3:1/8, 4:1/16).\r\n", motor->get_step_mode());
pinofal 9:900e18a2310b 360
pinofal 9:900e18a2310b 361 /* Get current position of device and print to the console */
pinofal 9:900e18a2310b 362 pc.printf(" Position: %d.\r\n", motor->get_position());
pinofal 9:900e18a2310b 363
pinofal 9:900e18a2310b 364 /* Set speed, acceleration and deceleration to scale with normal mode */
pinofal 9:900e18a2310b 365 motor->set_max_speed(init.maxSpeedSps>>4);
pinofal 9:900e18a2310b 366 motor->set_acceleration(motor->get_acceleration()>>4);
pinofal 9:900e18a2310b 367 motor->set_deceleration(motor->get_deceleration()>>4);
pinofal 9:900e18a2310b 368 /* Print parameters to the console */
pinofal 9:900e18a2310b 369 pc.printf(" Motor Max Speed: %d step/s.\r\n", motor->get_max_speed());
pinofal 9:900e18a2310b 370 pc.printf(" Motor Min Speed: %d step/s.\r\n", motor->get_min_speed());
pinofal 9:900e18a2310b 371 pc.printf(" Motor Acceleration: %d step/s.\r\n", motor->get_acceleration());
pinofal 9:900e18a2310b 372 pc.printf(" Motor Deceleration: %d step/s.\r\n", motor->get_deceleration());
pinofal 9:900e18a2310b 373
pinofal 9:900e18a2310b 374 //----- move of 200 steps in the FW direction
pinofal 9:900e18a2310b 375 pc.printf("--> Moving forward 200 steps.\r\n");
pinofal 9:900e18a2310b 376 motor->move(StepperMotor::FWD, 200);
francesco01 10:2622d1ab5984 377 int i,a=0;
pinofal 9:900e18a2310b 378
francesco01 10:2622d1ab5984 379 while (true) {
pinofal 9:900e18a2310b 380
francesco01 10:2622d1ab5984 381 if ( Input == 0 )
francesco01 10:2622d1ab5984 382 {
francesco01 10:2622d1ab5984 383 a=a+1;
francesco01 10:2622d1ab5984 384 }
francesco01 10:2622d1ab5984 385 if(a>1)
francesco01 10:2622d1ab5984 386 {
francesco01 10:2622d1ab5984 387 a=0;
francesco01 10:2622d1ab5984 388
francesco01 10:2622d1ab5984 389 }
francesco01 10:2622d1ab5984 390
francesco01 10:2622d1ab5984 391 if(a==0)
francesco01 10:2622d1ab5984 392 {
francesco01 10:2622d1ab5984 393 /* Request device to go position -3200 */
francesco01 10:2622d1ab5984 394 motor->go_to(150);
francesco01 10:2622d1ab5984 395 /* Waiting while the motor is active. */
francesco01 10:2622d1ab5984 396 motor->wait_while_active();
francesco01 10:2622d1ab5984 397 }
francesco01 10:2622d1ab5984 398 else
francesco01 10:2622d1ab5984 399 {
francesco01 10:2622d1ab5984 400 /* Request device to go position -3200 */
francesco01 10:2622d1ab5984 401 motor->go_to(-150);
francesco01 10:2622d1ab5984 402 /* Waiting while the motor is active. */
francesco01 10:2622d1ab5984 403 motor->wait_while_active();
pinofal 9:900e18a2310b 404
francesco01 10:2622d1ab5984 405 }
francesco01 10:2622d1ab5984 406
pinofal 9:900e18a2310b 407
francesco01 10:2622d1ab5984 408 }
pinofal 9:900e18a2310b 409 }
pinofal 9:900e18a2310b 410 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/