Impedance Fast Circuitry Software

Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

Revision:
33:9806eb964362
Parent:
32:bf1e079a2ee3
Child:
34:44cc9b76a507
diff -r bf1e079a2ee3 -r 9806eb964362 main.cpp
--- a/main.cpp	Thu Jan 08 20:16:19 2015 +0000
+++ b/main.cpp	Fri Jan 09 20:07:09 2015 +0000
@@ -123,7 +123,7 @@
 void timed_sampling();
 
 
-int motorVal = 50;
+int motorVal = 0;
 void releaseMallet()
 {
     motorA = 0;
@@ -360,96 +360,104 @@
                             }
                                 break;
                                 
-                            case '1': // run motor and sample
+                            case '3': // run motor and sample
                             {
-                                // release mallet                                
-                                motorA = 0;
-                                motorB = 1;
-                                wait_ms(10);
-                                motorB = 0;
-                                wait_ms(75);
-                                
-                                motorA = 0.7;
-                                wait_ms(8);
-                                motorA = 0;
-                                
-                                // wait for mallet to drop some before beginning to sample
-                                wait_ms(50); 
-                                                                
-                                // begin sampling
-                                BW_ADC_SC1n_ADCH(0, 0, kAdcChannel12);      // This corresponds to starting an ADC conversion on channel 12 of ADC 0 - which is A0 (PTB2)
-                                BW_ADC_SC1n_ADCH(1, 0, kAdcChannel14);      // This corresponds to starting an ADC conversion on channel 14 of ADC 1 - which is A2 (PTB10)
-                                client[index].write((void *)"Data\n",5);    
-                                
-                                TotalInd = 1;
+                                // set angle to 0
+                                led_blue = 0;
+                                while(!angle_encoder.set_zero()) {}
+                                led_blue = 1;
                                 
-                                uint32_t AMT20_AB;
-                                rotary_count = 0;
-                                __disable_irq();
-                                SampleInd = 0;
-                                for(int i = 0; i < TOTAL_SAMPLES; i++)
-                                {
-                                    SampleInd = !SampleInd;
-                                    sample_array1[i] = adc_hal_get_conversion_value(0, 0);
-                                    sample_array2[i] = adc_hal_get_conversion_value(1, 0);
-                                    BW_ADC_SC1n_ADCH(0, 0, kAdcChannel12);      // This corresponds to starting an ADC conversion on channel 12 of ADC 0 - which is A0 (PTB2)
-                                    BW_ADC_SC1n_ADCH(1, 0, kAdcChannel14);      // This corresponds to starting an ADC conversion on channel 14 of ADC 1 - which is A2 (PTB10)
-                                    
-                                    // The following updates the rotary counter for the AMT20 sensor
-                                    // Put A on PTC0
-                                    // Put B on PTC1
-                                    AMT20_AB = HW_GPIO_PDIR_RD(HW_PORTC) & 0x03;
-                                    
-                                    if (AMT20_AB != last_AMT20_AB_read)
-                                    {
-                                        // change "INVERT_ANGLE" to change whether relative angle counts up or down.
-                                        if ((AMT20_AB >> 1)^(last_AMT20_AB_read) & 1U)
-                                        #if INVERT_ANGLE == 1
-                                            {rotary_count--;}
-                                        else
-                                            {rotary_count++;}
-                                        #else
-                                            {rotary_count++;}
-                                        else
-                                            {rotary_count--;}
-                                        #endif
-                                        
-                                        last_AMT20_AB_read = AMT20_AB;        
-                                    }
-                                    angle_array[i] = rotary_count;
-                                    wait_us(8);
-                                }
-                                __enable_irq();
+                                // release mallet
+                                wait(1);
+                                
                                 
                                 // reset mallet
                                 motorA = 0;
-                                motorB = 1;
-                                wait_ms(138);
+                                int angleVar = 1;
+                                int counter = 0;
+                                while(angleVar)
+                                {
+                                    counter++;
+                                    angleVar = angle_encoder.absolute_angle();
+                                    //angleVar -= motorVal;
+                                    if(angleVar == 0x00ff0000) {} // do nothing
+                                    else if(angleVar > 340) motorB.pulsewidth_us(8000); // max speed 
+                                    else if(angleVar < motorVal) {
+                                        angleVar = 0; // exit loop
+                                        motorB.pulsewidth_us(0);} // min speed
+                                    else motorB.pulsewidth_us(angleVar*800/34);
+                                    }
                                 motorB = 0;
                                 
+                                char buf[29];
+                                sprintf(buf,"MotorVal: %i\n",motorVal);
+                                client[index].write((void *) buf,29);
+                                
                                 
                                 
-                                NVIC_SetPriority(ENET_1588_Timer_IRQn,0);
-                                NVIC_SetPriority(ENET_Transmit_IRQn,0);
-                                NVIC_SetPriority(ENET_Receive_IRQn,0);
-                                NVIC_SetPriority(ENET_Error_IRQn,0);
-                                TotalInd = 1;
-                                client[index].write((void *)&sample_array1,2*TOTAL_SAMPLES);
-                                client[index].write((void *)&sample_array2,2*TOTAL_SAMPLES);
-                                client[index].write((void *)&angle_array,2*TOTAL_SAMPLES);                                
-                                TotalInd = 0;
-                                
-                                NVIC_SetPriority(ENET_1588_Timer_IRQn,1);
-                                NVIC_SetPriority(ENET_Transmit_IRQn,1);
-                                NVIC_SetPriority(ENET_Receive_IRQn,1);
-                                NVIC_SetPriority(ENET_Error_IRQn,1);
-                                
+                                /*
+                                int tempDutyCycle = 2000;
+                                for(int i = counter; i > 0; i--)
+                                {
+                                    motorA.pulsewidth_us(tempDutyCycle);
+                                    }
+                                */
+                                // make sure motors are off
+                                motorA = 0;
+                                motorB = 0;
+                                //wait_ms(138);
+                                motorB = 0;
                                 }
                                 break;
+                            case '1':
+                            {
+                                // set angle to 0
+                                led_blue = 0;
+                                while(!angle_encoder.set_zero()) {}
+                                led_blue = 1;
                                 
-                            case '2': // just reset the mallet
+                                // release mallet
+                                wait(1);
+                                
+                                
+                                // reset mallet
+                                motorA = 0;
+                                int angleVar = 1;
+                                int counter = 0;
+                                while(angleVar)
+                                {
+                                    counter++;
+                                    angleVar = angle_encoder.absolute_angle();
+                                    angleVar -= motorVal;
+                                    if(angleVar == 0x00ff0000) {} // do nothing
+                                    else if(angleVar > 340) motorB.pulsewidth_us(8000); // max speed 
+                                    else if(angleVar < 43) {
+                                        angleVar = 0; // exit loop
+                                        motorB.pulsewidth_us(0);} // min speed
+                                    else motorB.pulsewidth_us(angleVar*800/34);
+                                    }
+                                motorB = 0;
+                                
+                                char buf[29];
+                                sprintf(buf,"MotorVal: %i\n",motorVal);
+                                client[index].write((void *) buf,29);
+                                
+                                
+                                
+                                /*
+                                int tempDutyCycle = 2000;
+                                for(int i = counter; i > 0; i--)
+                                {
+                                    motorA.pulsewidth_us(tempDutyCycle);
+                                    }
+                                */
+                                // make sure motors are off
+                                motorA = 0;
+                                motorB = 0;
+                                }
+                                break;    
+                            case '2':
                             {
-                                
                                 // release mallet                                
                                 motorA = 0;
                                 motorB = 1;
@@ -552,10 +560,19 @@
                                 break;
                             case '+':
                                 motorVal++;
+                                if(motorVal > 8000) motorVal = 43;
+                                char buf[29];
+                                sprintf(buf,"MotorVal: %i\n",motorVal);
+                                client[index].write((void *) buf,29);
+                                
                                 break;
                             case '-':
                                 motorVal--;
                                 if(motorVal < 0) motorVal = 0;
+                                char buf[29];
+                                sprintf(buf,"MotorVal: %i\n",motorVal);
+                                client[index].write((void *) buf,29);
+                                
                                 break;
                             case 'a':
                                 if(angle_encoder.set_zero(&rotary_count)) {