Messa in campo 4 file - 26/06/2020 Francia
Dependencies: mbed X_NUCLEO_IHM03A1_for
Fork of FORIGO_Modula_V7_3_VdcStep_maggio2020 by
Diff: main.cpp
- Revision:
- 10:9e70619e97ab
- Parent:
- 9:7f02256f6e8f
- Child:
- 12:b0fc1d313813
--- a/main.cpp Mon Mar 11 17:13:17 2019 +0000 +++ b/main.cpp Fri Mar 15 11:09:37 2019 +0000 @@ -123,47 +123,47 @@ motor->isrFlag = TRUE; /* Get the value of the status register. */ unsigned int statusRegister = motor->get_status(); -#if defined(pcSerial) - pc.printf(" WARNING: \"FLAG\" interrupt triggered.\r\n"); -#endif + #if defined(pcSerial) + pc.printf(" WARNING: \"FLAG\" interrupt triggered.\r\n"); + #endif /* Check SW_F flag: if not set, the SW input is opened */ if ((statusRegister & POWERSTEP01_STATUS_SW_F ) != 0) { -#if defined(pcSerial) + #if defined(pcSerial) pc.printf(" SW closed (connected to ground).\r\n"); -#endif + #endif } /* Check SW_EN bit */ if ((statusRegister & POWERSTEP01_STATUS_SW_EVN) == POWERSTEP01_STATUS_SW_EVN) { -#if defined(pcSerial) + #if defined(pcSerial) pc.printf(" SW turn_on event.\r\n"); -#endif + #endif } /* Check Command Error flag: if set, the command received by SPI can't be */ /* performed. This occurs for instance when a move command is sent to the */ /* Powerstep01 while it is already running */ if ((statusRegister & POWERSTEP01_STATUS_CMD_ERROR) == POWERSTEP01_STATUS_CMD_ERROR) { -#if defined(pcSerial) + #if defined(pcSerial) pc.printf(" Non-performable command detected.\r\n"); -#endif + #endif } /* Check UVLO flag: if not set, there is an undervoltage lock-out */ if ((statusRegister & POWERSTEP01_STATUS_UVLO)==0) { -#if defined(pcSerial) + #if defined(pcSerial) pc.printf(" undervoltage lock-out.\r\n"); -#endif + #endif } /* Check thermal STATUS flags: if set, the thermal status is not normal */ if ((statusRegister & POWERSTEP01_STATUS_TH_STATUS)!=0) { //thermal status: 1: Warning, 2: Bridge shutdown, 3: Device shutdown -#if defined(pcSerial) + #if defined(pcSerial) pc.printf(" Thermal status: %d.\r\n", (statusRegister & POWERSTEP01_STATUS_TH_STATUS)>>11); -#endif + #endif } /* Check OCD flag: if not set, there is an overcurrent detection */ if ((statusRegister & POWERSTEP01_STATUS_OCD)==0) { -#if defined(pcSerial) + #if defined(pcSerial) pc.printf(" Overcurrent detection.\r\n"); -#endif + #endif } /* Reset ISR flag. */ motor->isrFlag = FALSE; @@ -179,9 +179,9 @@ void my_error_handler(uint16_t error) { /* Printing to the console. */ -#if defined(pcSerial) - pc.printf("Error %d detected\r\n\n", error); -#endif + #if defined(pcSerial) + pc.printf("Error %d detected\r\n\n", error); + #endif /* Infinite loop */ //while (true) { @@ -223,35 +223,32 @@ void aggioVelocita() { realGiroSD = seedPerimeter / speedOfSeedWheel; - tempoBecco = (realGiroSD/360.0f)*16000.0f; + tempoBecco = realGiroSD*444.444f; //(realGiroSD/360.0f)*16000.0f; frequenzaReale = fixedStepGiroSD/realGiroSD; semiPeriodoReale = (1000000.0f/frequenzaReale); - //tempoTraBecchi_mS = 0.0f; seedWheelRPM = (speedOfSeedWheel)*K_WheelRPM ; // calcola i giri al minuto della ruota di semina 7.37 31,75 - TBrpm = seedWheelRPM*rapportoRuote; // 5.896 31,75 - TBfrequency = (TBrpm*K_TBfrequency); // 130Hz a 0,29Mts 1397,00 a 1,25mt/s con 15 becchi e 15 celle #if defined(runner) + TBrpm = seedWheelRPM*rapportoRuote; // 5.896 31,75 #if defined(Zucca) TBperiod=5.2f*TBrpm*2.0f; //prova dopo test con contagiri #else TBperiod=5.2f*TBrpm; //prova dopo test con contagiri #endif - //5.681818f #else + TBfrequency = (TBrpm*K_TBfrequency); // 130Hz a 0,29Mts 1397,00 a 1,25mt/s con 15 becchi e 15 celle TBperiod=1000000.0f/TBfrequency; // 715uS #endif } //************************************************************************ // rise of seed speed 25 pulse sensor -void sd25Fall() -{ +void sd25Fall(){ timeHole=metalTimer.read_ms(); - int memo_TimeHole= (memoTimeHole + timeHole)/ (int)2; - memoTimeHole = timeHole; + double memo_TimeHole= (memoTimeHole + (double)timeHole)/ 2.0f; + memoTimeHole = (double)timeHole; metalTimer.reset(); if (speedFromPick==0) { - speedOfSeedWheel=((seedPerimeter/25.0f)/(double)memo_TimeHole)*1000.0f; //mtS + speedOfSeedWheel=((seedPerimeter/25.0f)/memo_TimeHole)*1000.0f; //mtS } #if defined(pcSerial) #if defined(checkLoop) @@ -259,14 +256,15 @@ #endif #endif } +//************************************************************************ // rise of seed speed motor encoder void encoRise(){ timeHole=metalTimer.read_us(); - int memo_TimeHole= (memoTimeHole + timeHole)/ (int)2; - memoTimeHole = timeHole; + double memo_TimeHole= (memoTimeHole + (double)timeHole)/ 2.0f; + memoTimeHole = (double)timeHole; metalTimer.reset(); if (encoder==true) { - speedOfSeedWheel=((seedPerimeter/((SDreductionRatio*25.5f)))/(double)memo_TimeHole)*1000000.0f; //mtS + speedOfSeedWheel=((seedPerimeter/((SDreductionRatio*25.5f)))/memo_TimeHole)*1000000.0f; //mtS pulseRised2=1; } #if defined(pcSerial) @@ -313,6 +311,7 @@ } speedClock=1; speedFilter.reset(); + cntSpeedError=0; #if defined(pcSerial) #if defined(checkLoop) pc.printf("5\n"); @@ -330,11 +329,11 @@ } mediaSpeed[0]=lastPd; OLDpulseSpeedInterval=pulseSpeedInterval; -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("6\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("6\n"); + #endif + #endif } //******************************************************* @@ -345,14 +344,14 @@ { SDactualPosition++; prePosSD++; -#if defined(speedMaster) - posForQuinc++; -#endif -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("7\n"); -#endif -#endif + #if defined(speedMaster) + posForQuinc++; + #endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("7\n"); + #endif + #endif } //******************************************************* void step_TBPulseOut() @@ -363,11 +362,11 @@ TBactualPosition++; } } -#if defined(pcSerial) -#if defined(stepTamb) - pc.printf("step\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(stepTamb) + pc.printf("step\n"); + #endif + #endif /* #if defined(pcSerial) #if defined(checkLoop) @@ -552,39 +551,6 @@ TBdeltaStep=(fixedStepGiroSD/pickNumber)-(stepGrado*avvioGradi); TBfaseStep = (stepGrado*angoloFase); */ -//#if defined(Zucca) -/* if ((tractorSpeed_MtS_timed>0.01f)) { - if (inhibit==0) { - double posError =0.0f; - double posSD=((double)SDactualPosition)/KcorT; - posError = posSD - (double)TBactualPosition; - // interviene sulla velocità di TB per raggiungere la corretta posizione relativa - if((lowSpeed==0)&&(aspettaStart==0)) { - //if (posError>50.0f){posError=50.0f;} - //if (posError<-50.0f){posError=-50.0f;} - if ((posError >=1.0f)||(posError<=-1.0f)) { - ePpos = periodo *(1.0f+ ((posError/100.0f))); - #if defined(pcSerial) - #if defined(checkLoop) - pc.printf("da zucca\n"); - #endif - #endif - if (ePpos>0.0f) { - cambiaTB(ePpos); - } else { - cambiaTB(periodo);//2.0f; - } - #if defined(pcSerial) - #if defined(TBperS) - pc.printf("TBpos: %f SDpos: %f Err: %f Correggi: %f\n",(double)TBactualPosition,posSD,posError,ePpos); - #endif - #endif - } - } - } - } - */ -//#else if ((tractorSpeed_MtS_timed>0.01f)) { if (inhibit==0) { double posError =0.0f; @@ -637,12 +603,11 @@ } } } -//#endif -#if defined(pcSerial) -#if defined(checkLoopa) - pc.printf("12\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoopa) + pc.printf("12\n"); + #endif + #endif } //******************************************************* void videoUpdate() @@ -656,20 +621,20 @@ totalSpeed += speedForDisplay[aa]; } totalSpeed = totalSpeed / 5.0f; -#if defined(pcSerial) -#if defined(SDreset) - pc.printf("Fase: %d",fase); - pc.printf(" PrePosSD: %d",prePosSD); - pc.printf(" PosSD: %d",SDactualPosition); - pc.printf(" speed: %f",tractorSpeed_MtS_timed); - pc.printf(" Trigger: %d \n", trigRepos); -#endif -#endif -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("13\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(SDreset) + pc.printf("Fase: %d",fase); + pc.printf(" PrePosSD: %d",prePosSD); + pc.printf(" PosSD: %d",SDactualPosition); + pc.printf(" speed: %f",tractorSpeed_MtS_timed); + pc.printf(" Trigger: %d \n", trigRepos); + #endif + #endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("13\n"); + #endif + #endif } //******************************************************* void ciclaTB() @@ -802,44 +767,44 @@ alarmLowRegister = alarmLowRegister1; } -#if defined(pcSerial) -#if defined(VediAllarmi) - if (all_pickSignal==1) { - pc.printf("AllarmeBecchi\n"); - } - if (all_cellSignal==1) { - pc.printf("AllarmeCelle\n"); - } - if (all_lowBattery==1) { - pc.printf("AllarmeBassaCorrente\n"); - } - if (all_overCurrDC==1) { - pc.printf("AllarmeAltaCorrente\n"); - } - if (all_stopSistem==1) { - pc.printf("AllarmeStop\n"); - } - if (all_noDcRotati==1) { - pc.printf("AllarmeDCnoRotation\n"); - } - if (all_noStepRota==1) { - pc.printf("AllarmeNoStepRotation\n"); - } - if (all_speedError==1) { - pc.printf("AllarmeSpeedError\n"); - } - if (all_noSpeedSen==1) { - pc.printf("AllarmeNoSpeedSensor\n"); - } - if (all_no_Zeroing==1) { - pc.printf("AllarmeNoZero\n"); - } - if (all_genericals==1) { - pc.printf("AllarmeGenerico\n"); - } - pc.printf("Code: 0x%x%x\n",alarmHighRegister,alarmLowRegister); -#endif -#endif + #if defined(pcSerial) + #if defined(VediAllarmi) + if (all_pickSignal==1) { + pc.printf("AllarmeBecchi\n"); + } + if (all_cellSignal==1) { + pc.printf("AllarmeCelle\n"); + } + if (all_lowBattery==1) { + pc.printf("AllarmeBassaCorrente\n"); + } + if (all_overCurrDC==1) { + pc.printf("AllarmeAltaCorrente\n"); + } + if (all_stopSistem==1) { + pc.printf("AllarmeStop\n"); + } + if (all_noDcRotati==1) { + pc.printf("AllarmeDCnoRotation\n"); + } + if (all_noStepRota==1) { + pc.printf("AllarmeNoStepRotation\n"); + } + if (all_speedError==1) { + pc.printf("AllarmeSpeedError\n"); + } + if (all_noSpeedSen==1) { + pc.printf("AllarmeNoSpeedSensor\n"); + } + if (all_no_Zeroing==1) { + pc.printf("AllarmeNoZero\n"); + } + if (all_genericals==1) { + pc.printf("AllarmeGenerico\n"); + } + pc.printf("Code: 0x%x%x\n",alarmHighRegister,alarmLowRegister); + #endif + #endif all_semiFiniti=0; all_pickSignal=0; all_cellSignal=0; @@ -855,11 +820,11 @@ all_noSpeedSen=0; all_no_Zeroing=0; all_genericals=0; -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("17\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("17\n"); + #endif + #endif } //******************************************************* #if defined(speedMaster) @@ -928,19 +893,20 @@ val1[3]=val1[3]+(TBzeroPinInput*0x02); val1[3]=val1[3]+(DcEncoder*0x04); val1[3]=val1[3]+(seedWheelZeroPinInput*0x08); -#if defined(simulaPerCan) - if (buttonUser==0) { - val1[1]=0x02; - } else { - val1[1]=0x00; - } - val1[3]=valore; - valore+=1; - if(valore>50) { - valore=0; - } - tractorSpeed_MtS_timed=valore; -#endif + #if defined(simulaPerCan) + if (buttonUser==0) { + val1[1]=0x02; + } else { + val1[1]=0x00; + } + val1[3]=valore; + valore+=1; + if(valore>50) { + valore=0; + } + tractorSpeed_MtS_timed=valore; + oldLocalTractorSpeed=valore; + #endif allarmi(); valore = totalSpeed*36.0f; // tractorSpeed_MtS_timed*36.0f; val1[0]=valore; @@ -950,16 +916,16 @@ val1[4]=resetComandi; val1[5]=cellsCounterLow; val1[6]=cellsCounterHig; -#if defined(canbusActive) - if(can1.write(CANMessage(TX_ID, *&val1,8))) { - checkState=0; - } -#endif -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("19\n"); -#endif -#endif + #if defined(canbusActive) + if(can1.write(CANMessage(TX_ID, *&val1,8))) { + checkState=0; + } + #endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("19\n"); + #endif + #endif } //******************************************************* void leggiCAN() @@ -1212,18 +1178,18 @@ } } } -#endif -#if defined(overWriteCanSimulation) - enableSimula=1; - speedSimula=25; - avviaSimula=1; - simOk=1; -#endif -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("20\n"); -#endif -#endif + #endif + #if defined(overWriteCanSimulation) + enableSimula=1; + speedSimula=25; + avviaSimula=1; + simOk=1; + #endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("20\n"); + #endif + #endif } //******************************************************* @@ -1253,13 +1219,13 @@ } float SD_CurrentAnalogica=sommaTutto/20.0f; SD_CurrentScaled = floor(( (SD_CurrentAnalogica - SD_CurrentStart)*3.3f) / (SD_CurrentFactor/1000.0f)*10)/10; -#if defined(pcSerial) -#if defined(correnteAssorbita) - pc.printf("CorrenteStart: %f ",SD_CurrentStart); - pc.printf(" CorrenteScaled: %f ",SD_CurrentScaled); - pc.printf(" CorrenteMedia: %f \n",SD_CurrentAnalogica); -#endif -#endif + #if defined(pcSerial) + #if defined(correnteAssorbita) + pc.printf("CorrenteStart: %f ",SD_CurrentStart); + pc.printf(" CorrenteScaled: %f ",SD_CurrentScaled); + pc.printf(" CorrenteMedia: %f \n",SD_CurrentAnalogica); + #endif + #endif reduceCurrent=false; incrementCurrent=false; /* @@ -1273,9 +1239,9 @@ if (SD_CurrentScaled > 10.0f) { timeCurr.start(); if (timeCurr.read() > 5.0f) { -#if defined(canbusActive) + #if defined(canbusActive) all_overCurrDC=1; -#endif + #endif reduceCurrent=true; timeCurr.reset(); } @@ -1283,11 +1249,11 @@ timeCurr.stop(); } //} -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("21\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("21\n"); + #endif + #endif } //******************************************************* void DC_prepare() @@ -1316,11 +1282,11 @@ } else { SD_faultB=0; } -#if defined(pcSerial) -#if defined(checkLoopa) - pc.printf("22\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoopa) + pc.printf("22\n"); + #endif + #endif } //******************************************************* void startDelay() @@ -1332,67 +1298,65 @@ timeout.attach_us(&DC_CheckCurrent,ritardo); } } -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("23\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("23\n"); + #endif + #endif } //******************************************************* -void quincTrigon() -{ +void quincTrigon(){ quincClock=true; -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("24\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("24\n"); + #endif + #endif } -void quincTrigof() -{ +void quincTrigof(){ quincClock=false; -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("25\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("25\n"); + #endif + #endif } //******************************************************* void quinCalc() { // riceve l'impulso di sincro dal master e fa partire il timer di verifica dell'errore -#if !defined(mezzo) - if ((quincClock==true)&&(oldQuincIn==0)) { - oldQuincIn=1; - if (quincStart==0) { - oldQuincTimeSD = (double) quincTimeSD.read_ms(); - quincTime.reset(); - quincTimeSD.reset(); - quincStart=1; + #if !defined(mezzo) + if ((quincClock==true)&&(oldQuincIn==0)) { + oldQuincIn=1; + if (quincStart==0) { + oldQuincTimeSD = (double) quincTimeSD.read_ms(); + quincTime.reset(); + quincTimeSD.reset(); + quincStart=1; + } } - } - if(quincClock==false) { - oldQuincIn=0; - } -#else - if ((((quinconceActive==0)&&(quincClock==true))||((quinconceActive==1)&&(quincClock==false)))&&(oldQuincIn==0)) { - oldQuincIn=1; - if (quincStart==0) { - oldQuincTimeSD = (double) quincTimeSD.read_ms(); - quincTime.reset(); - quincStart=1; - } - } - if (quinconceActive==0) { - if (quincClock==false) { + if(quincClock==false) { oldQuincIn=0; } - } else { - if (quincClock==true) { - oldQuincIn=0; + #else + if ((((quinconceActive==0)&&(quincClock==true))||((quinconceActive==1)&&(quincClock==false)))&&(oldQuincIn==0)) { + oldQuincIn=1; + if (quincStart==0) { + oldQuincTimeSD = (double) quincTimeSD.read_ms(); + quincTime.reset(); + quincStart=1; + } } - } -#endif + if (quinconceActive==0) { + if (quincClock==false) { + oldQuincIn=0; + } + } else { + if (quincClock==true) { + oldQuincIn=0; + } + } + #endif //**************************************************************************************** if (quincCnt>=4) { if (countPicks==0) { @@ -1441,6 +1405,12 @@ if (speedFromMaster>0.0f) { if (enableSimula==0) { tractorSpeed_MtS_timed = speedFromMaster + percento; + if (tractorSpeed_MtS_timed > (oldLocalTractorSpeed*1.15f){ + tractorSpeed_MtS_timed = oldLocalTractorSpeed*1.15f; + } + if (tractorSpeed_MtS_timed < (oldLocalTractorSpeed/1.15f){ + tractorSpeed_MtS_timed = oldLocalTractorSpeed/1.15f; + } } } } @@ -1451,7 +1421,7 @@ if (canDataCheckEnable==true) { if (canDataCheck==1) { // sincro da comunicazione can del valore di posizione del tamburo master canDataCheck=0; - double parametro = SDsectorStep/3.0f; + double parametro = SDsectorStep/2.0f; double differenza=0.0f; #if defined(mezzo) if (quinconceActive==1) { @@ -1486,6 +1456,12 @@ if (speedFromMaster>0.0f) { if (enableSimula==0) { tractorSpeed_MtS_timed = speedFromMaster + percento; + if (tractorSpeed_MtS_timed > (oldLocalTractorSpeed*1.15f){ + tractorSpeed_MtS_timed = oldLocalTractorSpeed*1.15f; + } + if (tractorSpeed_MtS_timed < (oldLocalTractorSpeed/1.15f){ + tractorSpeed_MtS_timed = oldLocalTractorSpeed/1.15f; + } } } } @@ -1549,7 +1525,8 @@ // dev_spi(mosi,miso,sclk) // D11= PA7; D12= PA6; D13= PA5 DevSPI dev_spi(D11, D12, D13); - + dev_spi.frequency(5000000); + /* Initializing Motor Control Component. */ // powerstep01( flag, busy,stby, stck, cs, dev_spi) // motor = new PowerStep01(D2, D4, D8, D9, D10, dev_spi); // linea standard per IHM03A1 @@ -1610,8 +1587,6 @@ if (inProva==0) { tractorSpeedRead.rise(&tractorReadSpeed); - - #if !defined(speedMaster) quinconceIn.rise(&quincTrigon); quinconceIn.fall(&quincTrigof); @@ -1639,19 +1614,20 @@ TBmotorDirecti=TBforward; // definire il pin di clock che è PB_3 #if defined(Zucca) - motor->step_clock_mode_enable(StepperMotor::FWD); + motor->run(StepperMotor::BWD,100.0f); + //motor->step_clock_mode_enable(StepperMotor::FWD); #else - motor->step_clock_mode_enable(StepperMotor::BWD); + //motor->step_clock_mode_enable(StepperMotor::BWD); #endif // attiva l'out per il controllo dello stepper in stepClockMode - DigitalOut TBmotorStepOut(PB_3); // PowerStep01 Step Input + //DigitalOut TBmotorStepOut(PB_3); // PowerStep01 Step Input #if defined(pcSerial) #if defined(checkLoop) pc.printf("11f\n"); #endif #endif - TBticker.attach(&step_TBPulseOut,0.0005f); // clock time are seconds and attach seed motor stepper controls - TATicker.attach(&invertiLo,3.0f); + //TBticker.attach(&step_TBPulseOut,0.0005f); // clock time are seconds and attach seed motor stepper controls + //TATicker.attach(&invertiLo,3.0f); #else // definire il pin di clock che è PB_3 motor->set_home(); @@ -1820,12 +1796,10 @@ if(speedForCorrection >= speedOfSeedWheel) { fase1=TBdeltaStep; } else { - //fase1=(TBdeltaStep)-(((speedOfSeedWheel-speedForCorrection)/maxWorkSpeed)*(TBfaseStep)); fase1=(TBdeltaStep)-(((speedOfSeedWheel)/maxWorkSpeed)*(TBfaseStep)); } if (fase1 > limite) { fase1 -= limite; // se la fase calcolata supera gli step del settore riporta il valore nell'arco precedente (es. fase 1 800, limite 750, risulta 50) - //forzaFase=1; } if ((fase1 > (limite -20.0f))&&(fase1<(limite +5.0f))) { fase1 = limite -20.0f; // se la fase è molto vicina al limite interpone uno spazio minimo di lavoro del sincronismo @@ -1857,11 +1831,11 @@ memoIntraPick = timeIntraPick; if ((speedFromPick==1)&&(encoder==false)) { speedOfSeedWheel=((seedPerimeter / pickNumber)/timeIntraPick)*1000.0f; - #if defined(pcSerial) - #if defined(Qnca) - pc.printf("perim: %f pickN: %f sped: %f\n", seedPerimeter, pickNumber,speedOfSeedWheel); + #if defined(pcSerial) + #if defined(Qnca) + pc.printf("perim: %f pickN: %f sped: %f\n", seedPerimeter, pickNumber,speedOfSeedWheel); + #endif #endif - #endif } if (encoder==false) { pulseRised2=1; @@ -1869,10 +1843,13 @@ #if defined(speedMaster) if ((tractorSpeed_MtS_timed==0.0f)) { if ((firstStart==0)&&(simOk==0)&&(enableSimula==0)) { - all_noSpeedSen=1; + cntSpeedError++; + if (cntSpeedError >= 3){ + all_noSpeedSen=1; + } } } - double oldLastPr = (double)oldLastPulseRead*1.5f; + double oldLastPr = (double)oldLastPulseRead*1.8f; if((double)speedTimeOut.read_us()> (oldLastPr)) { if ((firstStart==0)&&(simOk==0)&&(enableSimula==0)) { all_speedError =1; @@ -1883,30 +1860,14 @@ // esegue calcolo clock per la generazione della posizione teorica // la realtà in base al segnale di presenza del becco if (speedOfSeedWheel < 0.002f) { - #if defined(pcSerial) - #if defined(checkLoopb) - pc.printf("forza\n"); + #if defined(pcSerial) + #if defined(checkLoopb) + pc.printf("forza\n"); + #endif #endif - #endif speedOfSeedWheel=0.001f; } aggioVelocita(); - /* - realGiroSD = seedPerimeter / speedOfSeedWheel; - tempoBecco = (realGiroSD/360.0f)*16000.0f; - frequenzaReale = fixedStepGiroSD/realGiroSD; - semiPeriodoReale = (1000000.0f/frequenzaReale); - tempoTraBecchi_mS = 0.0f; - seedWheelRPM = (speedOfSeedWheel)*K_WheelRPM ; // calcola i giri al minuto della ruota di semina 7.37 31,75 - TBrpm = seedWheelRPM*rapportoRuote; // 5.896 31,75 - TBfrequency = (TBrpm*K_TBfrequency); // 130Hz a 0,29Mts 1397,00 a 1,25mt/s con 15 becchi e 15 celle - TBperiod=1000000.0f/TBfrequency; // 715uS - #if defined(pcSerial) - #if defined(checkLoop) - pc.printf("sep: %f sposw: %f rgsd: %f tpb: %f fr: %f spr: %f swr: %f tbfr: %f \n",seedPerimeter,speedOfSeedWheel,realGiroSD,tempoBecco,frequenzaReale,semiPeriodoReale,seedWheelRPM,TBfrequency); - #endif - #endif - */ } // ---------------------------------------- // check SD fase @@ -1920,20 +1881,20 @@ } if(countCicli>=cicliAspettaStart) { aspettaStart=0; -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("NoAspetta\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("NoAspetta\n"); + #endif + #endif } if ((lowSpeed==0)&&(aspettaStart==0)&&(lockStart==0)) { syncroCheck=1; beccoPronto=0; -#if defined(pcSerial) -#if defined(checkLoop) - pc.printf("BeccoNo\n"); -#endif -#endif + #if defined(pcSerial) + #if defined(checkLoop) + pc.printf("BeccoNo\n"); + #endif + #endif } if (trigTB==0) { inhibit=1; @@ -2107,6 +2068,7 @@ if ((pulseSpeedInterval>=0.0f)) { //minIntervalPulse)&&(pulseSpeedInterval<maxInterval)){ if((quincCnt<3)||(speedFromMaster==0.0f)||(enableSimula==1)) { tractorSpeed_MtS_timed = ((pulseDistance / pulseSpeedInterval)); // tractor speed (unit= Mt/S) from pulse time interval + oldLocalTractorSpeed = tractorSpeed_MtS_timed; } if (checkSDrotation==0) { checkSDrotation=1; @@ -2119,9 +2081,10 @@ double oldLastPr = (double)oldLastPulseRead*1.7f; if((double)speedTimeOut.read_us()> (oldLastPr)) { tractorSpeed_MtS_timed = 0.0f; -#if defined(seedSensor) - resetDelay(); -#endif + oldLocalTractorSpeed=0.0f; + #if defined(seedSensor) + resetDelay(); + #endif pntMedia=0; speedTimeOut.reset(); enableSpeed=0; @@ -2129,16 +2092,16 @@ } } -#if defined(seedSensor) - if (seedSensorEnable==true) { - if (delaySeedCheck.read_ms()>100) { - if (seedSee==0) { - all_noSeedOnCe=1; + #if defined(seedSensor) + if (seedSensorEnable==true) { + if (delaySeedCheck.read_ms()>100) { + if (seedSee==0) { + all_noSeedOnCe=1; + } + resetDelay(); } - resetDelay(); } - } -#endif + #endif // esegue il controllo di velocità minima /*if ((double)speedTimer.read_ms()>=maxInterval){ tractorSpeed_MtS_timed = 0.0f; @@ -2154,6 +2117,7 @@ if (enableSimula==1) { if(simOk==0) { tractorSpeed_MtS_timed=0.0f; + oldLocalTractorSpeed=0.0f; } } if ((tractorSpeed_MtS_timed>0.01f)) { @@ -2180,9 +2144,8 @@ #endif #endif #if !defined(speedMaster) - double pippo=0.0f; - pippo = seedPerimeter / speedFromMaster; - tempoBecchiPerQuinc = (pippo / pickNumber)*1000.0f; + double tempoGiroSDfomMaster = seedPerimeter / speedFromMaster; + tempoBecchiPerQuinc = (tempoGiroSDfomMaster / pickNumber)*1000.0f; #endif } //*******************************************