public void LoopPinTest() { Stopwatch timer = new Stopwatch(); long expectedTime; if (FX3.ActiveFX3.BoardType < FX3BoardType.iSensorFX3Board_C) { Console.WriteLine("The connected boards do not have loop back pins"); return; } for (double freq = 100; freq < 2000; freq += 100) { Console.WriteLine("Setting " + freq.ToString() + "Hz PWM on loop pin 1"); FX3.StartPWM(freq, 0.5, FX3.FX3_LOOPBACK1); Assert.AreEqual(freq, FX3.MeasurePinFreq(FX3.FX3_LOOPBACK2, 1, 1000, 100), 0.02 * freq, "ERROR: Invalid value measured on loop pin 2"); FX3.StopPWM(FX3.FX3_LOOPBACK1); Console.WriteLine("Setting " + freq.ToString() + "Hz PWM on loop pin 2"); FX3.StartPWM(freq, 0.5, FX3.FX3_LOOPBACK2); Assert.AreEqual(freq, FX3.MeasurePinFreq(FX3.FX3_LOOPBACK1, 1, 1000, 100), 0.02 * freq, "ERROR: Invalid value measured on loop pin 1"); FX3.StopPWM(FX3.FX3_LOOPBACK2); } Console.WriteLine("Testing SPI triggering with loop back pins..."); FX3.StartPWM(100, 0.5, FX3.FX3_LOOPBACK1); FX3.DrPin = FX3.FX3_LOOPBACK2; FX3.DrActive = true; expectedTime = 1000 * 1000 / 100; timer.Start(); FX3.TransferArray(new uint[1], 1, 1000); timer.Stop(); Console.WriteLine("Elapsed stream time " + timer.ElapsedMilliseconds.ToString() + "ms"); Assert.AreEqual(expectedTime, timer.ElapsedMilliseconds, 0.05 * expectedTime, "ERROR: Invalid stream time"); }
public void PinFreqMeasureTest() { Console.WriteLine("Starting pin frequency measure test..."); const double MIN_FREQ = 5; const double MAX_FREQ = 10000; double measuredFreq, expectedFreq; Console.WriteLine("Sweeping PWM duty cycle with fixed frequency..."); expectedFreq = 4000; for (double dutyCycle = 0.02; dutyCycle < 0.98; dutyCycle += 0.01) { Console.WriteLine("Testing duty cycle of " + dutyCycle.ToString()); FX3.StartPWM(4000, dutyCycle, FX3.DIO3); measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 500, 5); Console.WriteLine("Pin freq measured on DIO2: " + measuredFreq.ToString() + "Hz"); Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO2"); } FX3.StopPWM(FX3.DIO3); Console.WriteLine("Sweeping freq range..."); for (expectedFreq = MIN_FREQ; expectedFreq < MAX_FREQ; expectedFreq = expectedFreq * 1.08) { Console.WriteLine("Testing PWM freq of " + expectedFreq.ToString() + "Hz"); FX3.StartPWM(expectedFreq, 0.5, FX3.DIO3); measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 2000, 3); Console.WriteLine("Pin freq measured on DIO4: " + measuredFreq.ToString() + "Hz"); Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO4"); FX3.StopPWM(FX3.DIO3); FX3.StartPWM(expectedFreq, 0.5, FX3.DIO4); measuredFreq = FX3.MeasurePinFreq(FX3.DIO3, 1, 2000, 3); Console.WriteLine("Pin freq measured on DIO3: " + measuredFreq.ToString() + "Hz"); Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO3"); FX3.StopPWM(FX3.DIO4); } Console.WriteLine("Testing averaging..."); expectedFreq = 4000; FX3.StartPWM(expectedFreq, 0.5, FX3.DIO3); for (ushort average = 1; average < 1000; average += 2) { Console.WriteLine("Testing pin freq measure with " + average.ToString() + " averages..."); measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 1000, average); Console.WriteLine("Pin freq measured on DIO4: " + measuredFreq.ToString() + "Hz"); Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO4"); } }
public void PWMPinInfoTest() { Console.WriteLine("Starting pin PWM info test..."); int exCount; PinPWMInfo info; Console.WriteLine("Testing default PWM pin info for each pin..."); foreach (PropertyInfo prop in FX3.GetType().GetProperties()) { if (prop.PropertyType == typeof(AdisApi.IPinObject)) { Assert.AreEqual(0, FX3.GetPinPWMInfo((AdisApi.IPinObject)prop.GetValue(FX3)).IdealFrequency, "ERROR: Expected PWM pins to be disabled for all pins initially"); } } Console.WriteLine("Testing PWM pin info for each pin..."); foreach (PropertyInfo prop in FX3.GetType().GetProperties()) { if (prop.PropertyType == typeof(AdisApi.IPinObject)) { if (((AdisApi.IPinObject)prop.GetValue(FX3)).pinConfig % 8 != 0) { FX3.StartPWM(2000, 0.5, (AdisApi.IPinObject)prop.GetValue(FX3)); info = FX3.GetPinPWMInfo((AdisApi.IPinObject)prop.GetValue(FX3)); Assert.AreEqual(((AdisApi.IPinObject)prop.GetValue(FX3)).pinConfig, info.FX3GPIONumber, "ERROR: Invalid GPIO Number"); Assert.AreEqual(info.FX3GPIONumber % 8, info.FX3TimerBlock, "ERROR: Invalid FX3 timer block"); Assert.AreEqual(2000, info.IdealFrequency, "ERROR: Invalid frequency"); Assert.AreEqual(0.5, info.IdealDutyCycle, "ERROR: Invalid duty cycle"); FX3.StopPWM((AdisApi.IPinObject)prop.GetValue(FX3)); } else { exCount = 0; try { FX3.StartPWM(2000, 0.5, (AdisApi.IPinObject)prop.GetValue(FX3)); } catch (Exception e) { Console.WriteLine(e.Message); exCount = 1; } Assert.AreEqual(1, exCount, "ERROR: Expected exception to be thrown for pins which cannot run PWM"); } } } Console.WriteLine("Sweeping PWM freq..."); { for (double freq = 0.5; freq < 100000; freq = freq * 1.1) { FX3.StartPWM(freq, 0.5, FX3.DIO1); Assert.AreEqual(freq, FX3.GetPinPWMInfo(FX3.DIO1).IdealFrequency, "ERROR: Invalid IdealFrequency"); Assert.AreEqual(freq, FX3.GetPinPWMInfo(FX3.DIO1).RealFrequency, 0.001 * freq, "ERROR: Invalid RealFrequency"); } } Console.WriteLine("Sweeping PWM duty cycle at 1KHz..."); for (double dutyCycle = 0.01; dutyCycle < 1.0; dutyCycle += 0.01) { FX3.StartPWM(1000, dutyCycle, FX3.DIO1); Assert.AreEqual(dutyCycle, FX3.GetPinPWMInfo(FX3.DIO1).IdealDutyCycle, "ERROR: Invalid ideal duty cycle"); Assert.AreEqual(dutyCycle, FX3.GetPinPWMInfo(FX3.DIO1).RealDutyCycle, 0.001 * dutyCycle, "ERROR: Invalid real duty cycle"); } }