with hardware oversampling

This commit is contained in:
Noah Piqué 2021-11-17 11:35:41 +01:00
parent e15e692e89
commit 04d2bab659
10 changed files with 42 additions and 14 deletions

View File

@ -6,7 +6,7 @@
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1144835129296112427" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="557024645362649502" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@ -18,7 +18,7 @@
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1144835129296112427" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="557024645362649502" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

View File

@ -183,7 +183,14 @@ PRIVATE VOID vInitTask( PVOID arg )
boOK &= MAIN_boInitializeModule();
//!boOK ? RTOS_vFatalError() : NULL;
if(!boOK){
osKernelLock(); // lock kernel to prevent task switch
while(1){
DIPO_vToggleOutput(DIPO_eLED);
DELAY_MS( 100 );
}
}
// boInitConfig ? ELOG_ADD_LOG( ELOG_eFactoryReset ) : NULL;
//

View File

@ -298,6 +298,11 @@ PRIVATE VOID vMainTask( PVOID arg )
S16 OutputVoltage = ((S16)(ANPI_flGetInputValue(ANPI_eOutputVoltage)*1000));
S16 OutputCurrent = ((S16)(ANPI_flGetInputValue(ANPI_eOutputCurrent)*1000));
/*U16 SupplyVoltage24V = ANPI_flGetInputValue(ANPI_eSupplyVoltage24V);
U16 SupplyCurrent24V = ANPI_flGetInputValue(ANPI_eSupplyCurrent24V);
U16 OutputVoltage = ANPI_flGetInputValue(ANPI_eOutputVoltage);
U16 OutputCurrent = ANPI_flGetInputValue(ANPI_eOutputCurrent);*/
au8Buffer[0] = (SupplyVoltage24V & 0xFF00) >> 8;
au8Buffer[1] = SupplyVoltage24V & 0xFF;
au8Buffer[2] = (SupplyCurrent24V & 0xFF00) >> 8;
@ -335,7 +340,7 @@ PRIVATE VOID vMainTask( PVOID arg )
}
if( u32Flags & EVENT_TIMER_UPDATE )
{
DIPO_vToggleOutput(DIPO_eLED);
//DIPO_vToggleOutput(DIPO_eLED);
}
}
@ -360,7 +365,7 @@ PRIVATE VOID vEventCallback( PVOID pvData )
//-------------------------------------------------------------------------------------------------
PRIVATE VOID vMsgRxCallback( CAND_Message stMessage )
{
osMessageQueuePut(m_pstCANRxMsgQueueID, &stMessage, 0, 0);
osMessageQueuePut(m_pstCANRxMsgQueueID, &stMessage, 0, 0);
osEventFlagsSet( m_pstEventID, EVENT_NEW_MESSAGE );
}

View File

@ -38,6 +38,7 @@
// Toolbox
#include "../Toolbox/UTIL_Utility.h"
#include "DIPO_DigitalPorts.h"
// include STM32 drivers
#include "stm32l4xx_hal.h"
@ -49,11 +50,11 @@
// Description: Definition of local constants (visible by this module only).
//=================================================================================================
#define ADC_RES (4096) // ADC resolution: 12 bits
#define ADC_RES (4096) // ADC resolution: 12 bits
#define NR_OF_ADCS 5 // number of internal adc channels
// definitions of internal adc
#define INT_ADC_REF_HI (3.28f) // HI int. reference voltage for conversion
#define INT_ADC_REF_HI (3.3f) // HI int. reference voltage for conversion
#define INT_ADC_REF_LO (0.0f) // LO int. reference voltage for conversion
#define INT_ADC_REF (INT_ADC_REF_HI-INT_ADC_REF_LO)// int. reference voltage for conversion
@ -269,6 +270,8 @@ VOID ANPI_vTask( PVOID arg )
{
u32Flags = osEventFlagsWait( m_pstEventID, ANPI_FLAGS_ALL, osFlagsWaitAny, osWaitForever );
DIPO_vSetOutput(DIPO_eLED);
if( u32Flags & ANPI_ADC_FULL_COMPLETE )
{
u16Offset = BUFFER_HALF_SIZE;
@ -288,6 +291,7 @@ VOID ANPI_vTask( PVOID arg )
for(U16 u16Cnt = 0; u16Cnt < BUFFER_HALF_SIZE; u16Cnt++ )
{
m_au32ADCRawData[ u16Cnt % NR_OF_ADCS ] += m_au16ADCDataBuffer[eADC1][u16Cnt + u16Offset];
//m_au32ADCRawData[ u16Cnt % NR_OF_ADCS ] = m_au16ADCDataBuffer[eADC1][u16Cnt + u16Offset];
}
// ... multiply by the conversion factor and add the offset
@ -297,9 +301,12 @@ VOID ANPI_vTask( PVOID arg )
{
m_aflValues[u16Cnt] = ((((FLOAT)m_au32ADCRawData[u16Cnt] / (FLOAT)ANPI_OVERSAMPLING_FACTOR * OFFSET) - (FLOAT)m_aflOffset1[u16Cnt] ) *
(FLOAT)m_aflConversionFactor[u16Cnt]) - (FLOAT)m_aflOffset2[u16Cnt];
//m_aflValues[u16Cnt] = (FLOAT)m_au32ADCRawData[u16Cnt];
}
osMutexRelease( m_pstMutexID ); // release mutex
DIPO_vResetOutput(DIPO_eLED);
}
}
@ -323,6 +330,7 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
{
osEventFlagsSet( m_pstEventID, ANPI_ADC_HALF_COMPLETE );
}
//-------------------------------------------------------------------------------------------------

View File

@ -7,7 +7,7 @@
//-------------------------------------------------------------------------------------------------
//
// Project: Peltier Controller V2
// Author: Noah Piqué (noah.pique@psi.ch)
// Author: Noah Piqu<EFBFBD> (noah.pique@psi.ch)
//
//-------------------------------------------------------------------------------------------------
//
@ -41,10 +41,11 @@ extern "C" {
//=================================================================================================
// attention: perhaps you have to change the ADC sample time in ANPI_AnalogPortsIn.c
//#define ANPI_OVERSAMPLING_FACTOR 64
#define ANPI_OVERSAMPLING_FACTOR 64
#if( ANPI_OVERSAMPLING_FACTOR % 2 != 0 )
#error "ANPI_OVERSAMPLING_FACTOR must be power of 2!"
//#error "ANPI_OVERSAMPLING_FACTOR must be power of 2!"
#endif
//=================================================================================================

View File

@ -159,7 +159,7 @@ BOOL ANPO_boSetVoltage( FLOAT Voltage ){
U32 u32ConvertVoltagetoRaw( FLOAT Voltage ){
U32 RawData;
RawData = Voltage * 4095 / 3.28;
RawData = Voltage * 4095 / 3.3;
return RawData;
}

View File

@ -66,7 +66,7 @@
#define RTD_A 3.9083e-3
#define RTD_B -5.775e-7
#define R_REF 3900
#define R_REF 4000
#define R_NOMINAL 1000
//=================================================================================================

View File

@ -250,7 +250,11 @@ static void MX_ADC1_Init(void)
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.OversamplingMode = DISABLE;
hadc1.Init.OversamplingMode = ENABLE;
hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_64;
hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_2;
hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
hadc1.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();

View File

@ -48,7 +48,7 @@
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.max_halt_delay" value="2"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.reset_strategy" value="connect_under_reset"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_check_serial_number" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_check_serial_number" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_txt_serial_number" value="001A002F5553500920393256"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.watchdog_config" value="none"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkenable_rtos" value="false"/>

View File

@ -7,7 +7,7 @@ ADC1.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_15
ADC1.ContinuousConvMode=ENABLE
ADC1.DMAContinuousRequests=ENABLE
ADC1.EOCSelection=ADC_EOC_SEQ_CONV
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag,master,NbrOfConversion,ContinuousConvMode,DMAContinuousRequests,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,EOCSelection
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag,master,NbrOfConversion,ContinuousConvMode,DMAContinuousRequests,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,EOCSelection,OversamplingMode,RightBitShift,Ratio
ADC1.NbrOfConversion=5
ADC1.NbrOfConversionFlag=1
ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
@ -15,11 +15,14 @@ ADC1.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.OffsetNumber-3\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.OffsetNumber-4\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.OversamplingMode=ENABLE
ADC1.Rank-0\#ChannelRegularConversion=1
ADC1.Rank-1\#ChannelRegularConversion=2
ADC1.Rank-2\#ChannelRegularConversion=3
ADC1.Rank-3\#ChannelRegularConversion=4
ADC1.Rank-4\#ChannelRegularConversion=5
ADC1.Ratio=ADC_OVERSAMPLING_RATIO_64
ADC1.RightBitShift=ADC_RIGHTBITSHIFT_2
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5