Commit 8a293e47 authored by Anders Blomdell's avatar Anders Blomdell
Browse files

Add sigma-delta filtering to position signal, double sampling speed

parent 1d27c84a
......@@ -13,11 +13,12 @@
* DO 0 -- Motor Brake
* DO 1 -- Accelerometer Self-Test
*
* AI 0 -- Ball Position
* AI 0 -- Ball Position (sigma-delta filtered)
* AI 1 -- Motor Current
* AI 2 -- Accelerometer X
* AI 3 -- Accelerometer Y
* AI 4 -- Accelerometer Z
* AI 5 -- Ball Position (raw)
*
* AO 0 -- Motor Speed
* EI 0 -- Motor Position
......@@ -63,14 +64,15 @@ struct values {
uint8_t accelerometerSelfTest;
/* Inputs */
int16_t ballPosition;
int16_t motorCurrent;
int16_t accelerometerX;
int16_t accelerometerY;
int16_t accelerometerZ;
int32_t motorEncoder;
int8_t motorThermalFlag;
int8_t ballOnBeam;
uint16_t ballPosition;
uint16_t motorCurrent;
uint16_t accelerometerX;
uint16_t accelerometerY;
uint16_t accelerometerZ;
uint16_t ballPositionRaw;
uint32_t motorEncoder;
uint8_t motorThermalFlag;
uint8_t ballOnBeam;
};
volatile struct values global;
......@@ -82,7 +84,13 @@ SIGNAL(ADC_vect)
switch (channel) {
case 0: {
channel = 1;
global.ballPosition = value;
global.ballPositionRaw = value;
uint16_t ballPosition = global.ballPosition;
if (global.ballPositionRaw > ballPosition) {
global.ballPosition++;
} else if (ballPosition > 0) {
global.ballPosition--;
}
} break;
case 1: {
channel = 2;
......@@ -97,7 +105,7 @@ SIGNAL(ADC_vect)
global.accelerometerY = value;
} break;
case 4: {
channel = 5;
channel = 0;
global.accelerometerZ = value;
} break;
default: {
......@@ -105,7 +113,7 @@ SIGNAL(ADC_vect)
} break;
}
ADMUX = 0x00 | channel; // Vref = external, right adjust
ADCSRA = 0xcf; // Enable ADC interrupts, Clock/128
ADCSRA = 0xce; // Enable ADC interrupts, Clock/64
}
typedef enum { cmd_clear_bit, cmd_set_bit,
......@@ -220,7 +228,7 @@ int main()
UBRRL = 7; // USART: 115200 @ 14.7456MHz
ADMUX = 0x00; // Vref = external, right adjust
ADMUX = 0x0e; // Vref = external, right adjust, read 1.22V (Vbg)
ADCSRA = 0xcf; // Enable ADC interrupts, Clock/128
ADCSRA = 0xce; // Enable ADC interrupts, Clock/64
global.motorEncoder = 0x80000000;
......@@ -243,7 +251,8 @@ int main()
if (channels & 0x04) { serialio_putchannel(2, local.accelerometerX); }
if (channels & 0x08) { serialio_putchannel(3, local.accelerometerY); }
if (channels & 0x10) { serialio_putchannel(4, local.accelerometerZ); }
if (channels & 0x20) { serialio_putchannel(5, local.motorEncoder); }
if (channels & 0x20) { serialio_putchannel(5, local.ballPositionRaw); }
if (channels & 0x40) { serialio_putchannel(6, local.motorEncoder); }
if (bits & 0x01) {
// ballOnBeam
serialio_putbit(0, PINB & 0x01);
......@@ -259,7 +268,7 @@ int main()
CONF_DIGITAL_OUT(0, CONF_RESOLUTION(1)); // motorBrake
CONF_DIGITAL_OUT(1, CONF_RESOLUTION(1)); // accelerometerSelfTest
CONF_ANALOG_IN(0, CONF_RESOLUTION(10)); // ballPosition
CONF_ANALOG_IN(0, CONF_RESOLUTION(10)); // ballPosition (filtered)
CONF_ANALOG_IN(0, CONF_MIN(CONF_NEGATIVE_MILLIVOLT(10000)));
CONF_ANALOG_IN(0, CONF_MAX(CONF_POSITIVE_MILLIVOLT(10000)));
CONF_ANALOG_IN(1, CONF_RESOLUTION(10)); // motorCurrent
......@@ -274,7 +283,10 @@ int main()
CONF_ANALOG_IN(4, CONF_RESOLUTION(10)); // accelerometerZ
CONF_ANALOG_IN(4, CONF_MIN(CONF_NEGATIVE_MILLIVOLT(10000)));
CONF_ANALOG_IN(4, CONF_MAX(CONF_POSITIVE_MILLIVOLT(10000)));
CONF_ENCODER_IN(5, CONF_RESOLUTION(32)); // motorPosition
CONF_ANALOG_IN(5, CONF_RESOLUTION(10)); // ballPosition (raw)
CONF_ANALOG_IN(5, CONF_MIN(CONF_NEGATIVE_MILLIVOLT(10000)));
CONF_ANALOG_IN(5, CONF_MAX(CONF_POSITIVE_MILLIVOLT(10000)));
CONF_ENCODER_IN(6, CONF_RESOLUTION(32)); // motorPosition
CONF_ANALOG_OUT(0, CONF_RESOLUTION(11)); // motorSpeed
CONF_ANALOG_OUT(0, CONF_MIN(CONF_NEGATIVE_MILLIVOLT(12000)));
......
......@@ -6,7 +6,7 @@ Model {
NumRootInports 0
NumRootOutports 0
ParameterArgumentNames ""
ComputedModelVersion "1.11"
ComputedModelVersion "1.12"
NumModelReferences 0
NumTestPointedSignals 0
}
......@@ -28,9 +28,9 @@ Model {
ModifiedByFormat "%<Auto>"
LastModifiedBy "andersb"
ModifiedDateFormat "%<Auto>"
LastModifiedDate "Thu Sep 13 13:46:49 2018"
RTWModifiedTimeStamp 458747140
ModelVersionFormat "1.%<AutoIncrement:11>"
LastModifiedDate "Tue Oct 16 17:05:14 2018"
RTWModifiedTimeStamp 461593970
ModelVersionFormat "1.%<AutoIncrement:12>"
ConfigurationManager "None"
SampleTimeColors off
SampleTimeAnnotations off
......@@ -690,7 +690,7 @@ Model {
}
System {
Name "process_test"
Location [764, 206, 1479, 852]
Location [764, 206, 1675, 859]
Open on
ModelBrowserVisibility off
ModelBrowserWidth 200
......@@ -704,7 +704,7 @@ Model {
ShowPageBoundaries off
ZoomFactor "100"
ReportName "simulink-default.rpt"
SIDHighWatermark "25"
SIDHighWatermark "26"
Block {
BlockType Constant
Name "Constant1"
......@@ -750,6 +750,15 @@ Model {
Decimation "1"
Lockdown off
}
Block {
BlockType Display
Name "Display2"
SID "26"
Ports [1]
Position [690, 430, 850, 600]
Decimation "1"
Lockdown off
}
Block {
BlockType Scope
Name "Inputs"
......@@ -757,7 +766,7 @@ Model {
Ports [1]
Position [590, 280, 620, 310]
Floating off
Location [73, 93, 843, 579]
Location [360, 169, 1130, 655]
Open off
NumInputPorts "1"
TickLabels "on"
......@@ -776,7 +785,7 @@ Model {
MarkerStyles "none|none|none|none|none|none"
}
ShowLegends off
TimeRange "100"
TimeRange "10"
YMin "-10"
YMax "10"
SampleTime "0"
......@@ -788,7 +797,7 @@ Model {
Ports [1]
Position [590, 55, 620, 85]
Floating off
Location [217, 355, 977, 816]
Location [207, 347, 967, 808]
Open off
NumInputPorts "1"
TickLabels "on"
......@@ -874,7 +883,7 @@ Model {
Ports [1, 2]
Position [425, 236, 485, 269]
FunctionName "analogin"
Parameters "h [30 31 32 33 34]"
Parameters "h [30 31 32 33 34 35]"
EnableBusSupport off
}
Block {
......@@ -999,8 +1008,16 @@ Model {
Line {
SrcBlock "Mux2"
SrcPort 1
DstBlock "Inputs"
DstPort 1
Points [5, 0]
Branch {
DstBlock "Inputs"
DstPort 1
}
Branch {
Points [0, 55; 45, 0; 0, 165]
DstBlock "Display2"
DstPort 1
}
}
Line {
SrcBlock "S-Function5"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment