Messa in campo 4 file - 26/06/2020 Francia

Dependencies:   mbed X_NUCLEO_IHM03A1_for

Fork of FORIGO_Modula_V7_3_VdcStep_maggio2020 by Francesco Pistone

Revision:
13:d1030d4e51a8
Parent:
12:b0fc1d313813
Child:
14:e2b5efa06c41
--- a/main.cpp	Mon Mar 25 11:32:34 2019 +0000
+++ b/main.cpp	Mon Mar 25 15:42:04 2019 +0000
@@ -264,8 +264,16 @@
     memoTimeHole = (double)timeHole;
     metalTimer.reset();
     if (encoder==true) {
-        speedOfSeedWheel=((seedPerimeter/((SDreductionRatio*25.5f)))/memo_TimeHole)*1000000.0f;    //mtS
+        speedOfSeedWheel=((seedPerimeter/seedWheelDcPulse)/memo_TimeHole)*1000000.0f;    //mtS
         pulseRised2=1;
+        dcEncoderCnt++;
+        double sincronizza = frazioneImpulsi * dcEncoderCnt;        
+        prePosSD=500+(uint32_t)sincronizza; // preposizionamento SD
+        #if defined(speedMaster)
+            if (quinconceActive==0) {
+                posForQuinc=500+(uint32_t)sincronizza;
+            }
+        #endif
     }
     #if defined(pcSerial)
         #if defined(checkLoop)
@@ -420,8 +428,10 @@
     K_WheelRPM = 60.0f/seedPerimeter;                                   // calcola il K per i giri al minuto della ruota di semina
     K_WhellFrequency = (seedWheelMotorSteps*SDreductionRatio)/60.0f;    // calcola il K per la frequenza di comando del motore di semina
     rapportoRuote = pickNumber/cellsNumber;                             // calcola il rapporto tra il numero di becchi ed il numero di celle
-    SDsectorStep = (double)fixedStepGiroSD / (double)pickNumber;
+    SDsectorStep = fixedStepGiroSD / pickNumber;
     TBsectorStep = (TBmotorSteps*TBreductionRatio)/cellsNumber;
+    seedWheelDcPulse=SDreductionRatio*dcPulseTurn;
+    frazioneImpulsi= (SDsectorStep/(seedWheelDcPulse/pickNumber));
     #if defined(runner)
         #if defined(Zucca)
             KcorT = (SDsectorStep/TBsectorStep)*2.0f;
@@ -1352,10 +1362,10 @@
                     if (speedFromMaster>0.0f) {
                         if (enableSimula==0) {
                             tractorSpeed_MtS_timed = speedFromMaster + percento;
-                            if (tractorSpeed_MtS_timed > (oldLocalTractorSpeed*1.15f){
+                            if (tractorSpeed_MtS_timed > (oldLocalTractorSpeed*1.15f)){
                                 tractorSpeed_MtS_timed = oldLocalTractorSpeed*1.15f;
                             }
-                            if (tractorSpeed_MtS_timed < (oldLocalTractorSpeed/1.15f){
+                            if (tractorSpeed_MtS_timed < (oldLocalTractorSpeed/1.15f)){
                                 tractorSpeed_MtS_timed = oldLocalTractorSpeed/1.15f;
                             }
                         }
@@ -1403,10 +1413,10 @@
                         if (speedFromMaster>0.0f) {
                             if (enableSimula==0) {
                                 tractorSpeed_MtS_timed = speedFromMaster + percento;
-                                if (tractorSpeed_MtS_timed > (oldLocalTractorSpeed*1.15f){
+                                if (tractorSpeed_MtS_timed > (oldLocalTractorSpeed*1.15f)){
                                     tractorSpeed_MtS_timed = oldLocalTractorSpeed*1.15f;
                                 }
-                                if (tractorSpeed_MtS_timed < (oldLocalTractorSpeed/1.15f){
+                                if (tractorSpeed_MtS_timed < (oldLocalTractorSpeed/1.15f)){
                                     tractorSpeed_MtS_timed = oldLocalTractorSpeed/1.15f;
                                 }
                             }
@@ -1529,6 +1539,7 @@
     wait_ms(500);
 
     dcVeri.attach(&controllaCorrente,2.0f);
+    delaySpeedCheck.start();
 
     #if defined(runnerTos)
         thread.start(step_Reading);
@@ -1724,6 +1735,7 @@
                 SDzeroDebounced=1;
                 sincroQui=1;
                 SDwheelTimer.reset();
+                dcEncoderCnt=0;
                 #if defined(speedMaster)
                     if (quinconceActive==0) {
                         posForQuinc=500;
@@ -2014,7 +2026,14 @@
                 if(enableSpeed>=2) {
                     if ((pulseSpeedInterval>=0.0f)) { //minIntervalPulse)&&(pulseSpeedInterval<maxInterval)){
                         if((quincCnt<3)||(speedFromMaster==0.0f)||(enableSimula==1)) {
+                            //TODO: limite inferiore e superiore per non modificare la velocità selezionata
+                            // serve un timer a 5 secondi dopo l'avviamento che fa partire il controllo
                             tractorSpeed_MtS_timed = ((pulseDistance  / pulseSpeedInterval));  // tractor speed (unit= Mt/S) from pulse time interval
+                            if (delaySpeedCheck.read()>=5.0f){
+                                if ((tractorSpeed_MtS_timed<=(oldLocalTractorSpeed+hiLimitSpeed))&&(tractorSpeed_MtS_timed>=(oldLocalTractorSpeed-loLimitSpeed))){
+                                    tractorSpeed_MtS_timed=oldLocalTractorSpeed;
+                                }
+                            }
                             oldLocalTractorSpeed = tractorSpeed_MtS_timed;
                         }
                         if (checkSDrotation==0) {
@@ -2370,6 +2389,7 @@
                 }
                 //*************************************************************
             } else { // fine ciclo con velocita maggiore di 0
+                delaySpeedCheck.reset();
                 if (cycleStopRequest==1) {
                     SDwheelTimer.stop();
                     SDwheelTimer.reset();