Move stimulus instead of sampling pulse, eliminates ADC alignment issue
The ADC can only trigger on whole clock pulses, so when we move the sampling pulse in fractional increments, the relative alignment of the ADC's sampling phase w.r.t. sampling pulse moves around +/-0.5 clock periods. Since our opamps ring a bit, that leads to an artifact in the measurements with a period of 32 samples (one whole clock pulse). Moving the stimulus pulse instead fixes this issue, as now the alignment between the sampling pulse and the ADC's sampling is constant.
This commit is contained in:
parent
54ccc277c2
commit
b32c4d9d61
1 changed files with 7 additions and 10 deletions
|
|
@ -7,9 +7,9 @@ uint64_t sync_time_us;
|
|||
|
||||
void update_leds(void);
|
||||
|
||||
int global_sampling_offset = 16;
|
||||
int global_sampling_offset = 50;
|
||||
int stimulus_width = 0x20*8;
|
||||
int sampling_width = 0x20*8;
|
||||
int sampling_width = 0x20*2;
|
||||
int sampling_phase = 0;
|
||||
uint16_t adc1_raw[128];
|
||||
uint16_t adc2_raw[COUNT_OF(adc1_raw)];
|
||||
|
|
@ -257,8 +257,8 @@ int main(void) {
|
|||
HRTIM1->sTimerxRegs[1].TIMxCR = HRTIM_TIMCR_MSTU;
|
||||
HRTIM1->sTimerxRegs[1].PERxR = HRTIM1->sMasterRegs.MPER;
|
||||
HRTIM1->sTimerxRegs[1].RSTxR = HRTIM_RSTR_MSTPER;
|
||||
HRTIM1->sTimerxRegs[1].CMP3xR = 160 * 0x20;
|
||||
HRTIM1->sTimerxRegs[1].CMP4xR = 160 * 0x20;
|
||||
HRTIM1->sTimerxRegs[1].CMP3xR = (global_sampling_offset + 18) * 0x20;
|
||||
HRTIM1->sTimerxRegs[1].CMP4xR = (global_sampling_offset + 40) * 0x20;
|
||||
HRTIM1->sTimerxRegs[1].TIMxDIER = HRTIM_TIMDIER_CMP3IE;
|
||||
|
||||
HRTIM1->sMasterRegs.MCR |= HRTIM_MCR_TCCEN | HRTIM_MCR_TDCEN | HRTIM_MCR_TBCEN;
|
||||
|
|
@ -427,12 +427,9 @@ void HRTIM1_Master_IRQHandler(void) {
|
|||
|
||||
HRTIM1->sMasterRegs.MICR = HRTIM_MICR_MREP;
|
||||
|
||||
int t = 0 + sampling_phase;
|
||||
HRTIM1->sTimerxRegs[3].CMP3xR = t + 0x20 * 0;
|
||||
HRTIM1->sTimerxRegs[3].CMP4xR = t + 0x20 * 8;
|
||||
HRTIM1->sTimerxRegs[1].CMP3xR = t + 0x20 * 30;
|
||||
HRTIM1->sTimerxRegs[1].CMP4xR = t + 0x20 * 30;
|
||||
GPIOC->BRR = (1<<10);
|
||||
int t = (global_sampling_offset + 24) * 0x20 - sampling_phase;
|
||||
HRTIM1->sTimerxRegs[2].CMP1xR = t;
|
||||
HRTIM1->sTimerxRegs[2].CMP2xR = t + stimulus_width;
|
||||
}
|
||||
|
||||
void update_leds() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue