From 4ee027c7a4ca5d19790b49a02a2b2a16135970d8 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Sun, 1 Nov 2020 13:22:57 +0100 Subject: [PATCH] slow down adc to give idle some time back --- cube/Core/Inc/main.h | 6 ++- cube/Core/Src/adc.c | 67 +++++++++++++++++++++++++++++++++- cube/Core/Src/gpio.c | 15 +++++--- cube/Core/Src/main.c | 4 +- cube/Core/Src/main.c-bak | 4 +- cube/Makefile | 2 +- cube/Makefile-bak | 2 +- cube/User/Src/frontend.c | 17 +++------ cube/User/Src/main2.c | 3 ++ cube/cube.ioc | 79 ++++++++++++++++++++++++++++------------ 10 files changed, 148 insertions(+), 51 deletions(-) diff --git a/cube/Core/Inc/main.h b/cube/Core/Inc/main.h index c50aab3..f5c24e3 100644 --- a/cube/Core/Inc/main.h +++ b/cube/Core/Inc/main.h @@ -74,8 +74,10 @@ void Error_Handler(void); #define LED_Red_GPIO_Port GPIOE #define Frontend_In_Pin GPIO_PIN_1 #define Frontend_In_GPIO_Port GPIOA -#define Debug_Signal_Pin GPIO_PIN_10 -#define Debug_Signal_GPIO_Port GPIOB +#define Debug_Signal_2_Pin GPIO_PIN_12 +#define Debug_Signal_2_GPIO_Port GPIOE +#define Debug_Signal_1_Pin GPIO_PIN_10 +#define Debug_Signal_1_GPIO_Port GPIOB #define Debug_TX_Pin GPIO_PIN_10 #define Debug_TX_GPIO_Port GPIOC #define Debug_RX_Pin GPIO_PIN_11 diff --git a/cube/Core/Src/adc.c b/cube/Core/Src/adc.c index b7b79f4..1f48cd3 100644 --- a/cube/Core/Src/adc.c +++ b/cube/Core/Src/adc.c @@ -34,12 +34,12 @@ void MX_ADC1_Init(void) /** Common config */ hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; + hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 1; + hadc1.Init.NbrOfConversion = 10; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); @@ -53,6 +53,69 @@ void MX_ADC1_Init(void) { Error_Handler(); } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_2; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_3; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_4; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_5; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_6; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_7; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_8; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_9; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_10; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } } diff --git a/cube/Core/Src/gpio.c b/cube/Core/Src/gpio.c index 0b19048..206ed2f 100644 --- a/cube/Core/Src/gpio.c +++ b/cube/Core/Src/gpio.c @@ -50,16 +50,19 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOE, Loop_Enable_Pin|Loop_Disable_Pin|LED_Green_Pin|LED_Red_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOE, Loop_Enable_Pin|Loop_Disable_Pin|LED_Green_Pin|LED_Red_Pin + |Debug_Signal_2_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Debug_Signal_GPIO_Port, Debug_Signal_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(Debug_Signal_1_GPIO_Port, Debug_Signal_1_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(Frontend_Out_GPIO_Port, Frontend_Out_Pin, GPIO_PIN_RESET); - /*Configure GPIO pins : PEPin PEPin PEPin PEPin */ - GPIO_InitStruct.Pin = Loop_Enable_Pin|Loop_Disable_Pin|LED_Green_Pin|LED_Red_Pin; + /*Configure GPIO pins : PEPin PEPin PEPin PEPin + PEPin */ + GPIO_InitStruct.Pin = Loop_Enable_Pin|Loop_Disable_Pin|LED_Green_Pin|LED_Red_Pin + |Debug_Signal_2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; @@ -72,11 +75,11 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(Loop_Status_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : PtPin */ - GPIO_InitStruct.Pin = Debug_Signal_Pin; + GPIO_InitStruct.Pin = Debug_Signal_1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Debug_Signal_GPIO_Port, &GPIO_InitStruct); + HAL_GPIO_Init(Debug_Signal_1_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = Frontend_Out_Pin; diff --git a/cube/Core/Src/main.c b/cube/Core/Src/main.c index c9f3a56..5fb8b60 100644 --- a/cube/Core/Src/main.c +++ b/cube/Core/Src/main.c @@ -148,14 +148,14 @@ void SystemClock_Config(void) RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; + PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV8; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { Error_Handler(); diff --git a/cube/Core/Src/main.c-bak b/cube/Core/Src/main.c-bak index 8fffc81..bc1153f 100644 --- a/cube/Core/Src/main.c-bak +++ b/cube/Core/Src/main.c-bak @@ -139,14 +139,14 @@ void SystemClock_Config(void) RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; + PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV8; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { Error_Handler(); diff --git a/cube/Makefile b/cube/Makefile index 30a5f8a..13ae741 100644 --- a/cube/Makefile +++ b/cube/Makefile @@ -1,6 +1,6 @@ # Processed by ../tools/insertMyCode.sh ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [3.10.0-B14] date: [Sat Oct 31 23:48:06 CET 2020] +# File automatically-generated by tool: [projectgenerator] version: [3.10.0-B14] date: [Sun Nov 01 12:58:19 CET 2020] ########################################################################################################################## # ------------------------------------------------ diff --git a/cube/Makefile-bak b/cube/Makefile-bak index 533ef56..eac2cdf 100644 --- a/cube/Makefile-bak +++ b/cube/Makefile-bak @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [3.10.0-B14] date: [Sat Oct 31 23:48:06 CET 2020] +# File automatically-generated by tool: [projectgenerator] version: [3.10.0-B14] date: [Sun Nov 01 12:58:19 CET 2020] ########################################################################################################################## # ------------------------------------------------ diff --git a/cube/User/Src/frontend.c b/cube/User/Src/frontend.c index 157b4fd..30d3449 100644 --- a/cube/User/Src/frontend.c +++ b/cube/User/Src/frontend.c @@ -9,22 +9,12 @@ -static const double SHUNT_RESISTOR = 20.0; -static const double U_REF = 3.3; -static const double I_THRESHOLD = 0.005; -static const uint16_t N_MAX = 4095; - - static volatile uint16_t frontendAdcThreshold = 0; static volatile bool frontendEnabled = false; void frontendInit() { - // double u_threshold = I_THRESHOLD * SHUNT_RESISTOR; - // frontendAdcThreshold = (uint16_t) (u_threshold / U_REF * ((double) N_MAX)); - // logMsg("frontendInit, threshold calculated: %d", frontendAdcThreshold); - HAL_ADCEx_Calibration_Start(&frontendAdc); logMsg("frontendInit, calibration done"); HAL_ADC_Start_IT(&frontendAdc); @@ -44,7 +34,10 @@ void frontendDisable() { } void frontendAdcCallback(ADC_HandleTypeDef* hadc) { - uint16_t rawValue = HAL_ADC_GetValue(hadc); - HAL_GPIO_TogglePin(Debug_Signal_GPIO_Port, Debug_Signal_Pin); + HAL_GPIO_TogglePin(Debug_Signal_1_GPIO_Port, Debug_Signal_1_Pin); + uint32_t rawValue = HAL_ADC_GetValue(hadc); + if (rawValue > frontendAdcThreshold) { + HAL_GPIO_TogglePin(Frontend_Out_GPIO_Port, Frontend_Out_Pin); + } } diff --git a/cube/User/Src/main2.c b/cube/User/Src/main2.c index 719f669..506c818 100644 --- a/cube/User/Src/main2.c +++ b/cube/User/Src/main2.c @@ -43,6 +43,9 @@ void my_setup_2() { } void my_loop() { + HAL_GPIO_TogglePin(Debug_Signal_2_GPIO_Port, Debug_Signal_2_Pin); + + schExec(); logExec(); } diff --git a/cube/cube.ioc b/cube/cube.ioc index bd3bcdb..6b74249 100644 --- a/cube/cube.ioc +++ b/cube/cube.ioc @@ -1,11 +1,38 @@ #MicroXplorer Configuration settings - do not modify ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-5\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-6\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-7\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-8\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.Channel-9\#ChannelRegularConversion=ADC_CHANNEL_1 ADC1.ContinuousConvMode=ENABLE -ADC1.IPParameters=Rank-0\#ChannelRegularConversion,master,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,NbrOfConversion -ADC1.NbrOfConversion=1 +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,master,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,NbrOfConversion,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,Rank-6\#ChannelRegularConversion,Channel-6\#ChannelRegularConversion,SamplingTime-6\#ChannelRegularConversion,Rank-7\#ChannelRegularConversion,Channel-7\#ChannelRegularConversion,SamplingTime-7\#ChannelRegularConversion,Rank-8\#ChannelRegularConversion,Channel-8\#ChannelRegularConversion,SamplingTime-8\#ChannelRegularConversion,Rank-9\#ChannelRegularConversion,Channel-9\#ChannelRegularConversion,SamplingTime-9\#ChannelRegularConversion +ADC1.NbrOfConversion=10 ADC1.NbrOfConversionFlag=1 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.Rank-5\#ChannelRegularConversion=6 +ADC1.Rank-6\#ChannelRegularConversion=7 +ADC1.Rank-7\#ChannelRegularConversion=8 +ADC1.Rank-8\#ChannelRegularConversion=9 +ADC1.Rank-9\#ChannelRegularConversion=10 ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-5\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-6\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-7\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-8\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-9\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 ADC1.master=1 File.Version=6 GPIO.groupedBy=Group By Peripherals @@ -24,28 +51,29 @@ Mcu.Name=STM32F103V(C-D-E)Tx Mcu.Package=LQFP100 Mcu.Pin0=PE2 Mcu.Pin1=PE3 -Mcu.Pin10=PB14 -Mcu.Pin11=PB15 -Mcu.Pin12=PA13 -Mcu.Pin13=PA14 -Mcu.Pin14=PC10 -Mcu.Pin15=PC11 -Mcu.Pin16=PC12 -Mcu.Pin17=PD1 -Mcu.Pin18=PD2 -Mcu.Pin19=PB3 +Mcu.Pin10=PB13 +Mcu.Pin11=PB14 +Mcu.Pin12=PB15 +Mcu.Pin13=PA13 +Mcu.Pin14=PA14 +Mcu.Pin15=PC10 +Mcu.Pin16=PC11 +Mcu.Pin17=PC12 +Mcu.Pin18=PD1 +Mcu.Pin19=PD2 Mcu.Pin2=PE4 -Mcu.Pin20=PB4 -Mcu.Pin21=PB5 -Mcu.Pin22=VP_SYS_VS_Systick +Mcu.Pin20=PB3 +Mcu.Pin21=PB4 +Mcu.Pin22=PB5 +Mcu.Pin23=VP_SYS_VS_Systick Mcu.Pin3=PE5 Mcu.Pin4=PE6 Mcu.Pin5=OSC_IN Mcu.Pin6=OSC_OUT Mcu.Pin7=PA1 -Mcu.Pin8=PB10 -Mcu.Pin9=PB13 -Mcu.PinsNb=23 +Mcu.Pin8=PE12 +Mcu.Pin9=PB10 +Mcu.PinsNb=24 Mcu.ThirdPartyNb=0 Mcu.UserConstants=debugUart,huart4;mbusUart,huart5;frontendAdc,hadc1 Mcu.UserName=STM32F103VCTx @@ -78,7 +106,7 @@ PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK PB10.GPIOParameters=GPIO_Label -PB10.GPIO_Label=Debug_Signal +PB10.GPIO_Label=Debug_Signal_1 PB10.Locked=true PB10.Signal=GPIO_Output PB13.Mode=Full_Duplex_Master @@ -113,6 +141,10 @@ PD2.GPIOParameters=GPIO_Label PD2.GPIO_Label=MBus_RX PD2.Mode=Asynchronous PD2.Signal=UART5_RX +PE12.GPIOParameters=GPIO_Label +PE12.GPIO_Label=Debug_Signal_2 +PE12.Locked=true +PE12.Signal=GPIO_Output PE2.GPIOParameters=GPIO_Label PE2.GPIO_Label=Loop_Enable PE2.Locked=true @@ -164,13 +196,14 @@ ProjectManager.TargetToolchain=Makefile ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_ADC1_Init-ADC1-false-HAL-true,4-MX_SPI2_Init-SPI2-false-HAL-true,5-MX_SPI3_Init-SPI3-false-HAL-true,6-MX_UART4_Init-UART4-false-HAL-true,7-MX_UART5_Init-UART5-false-HAL-true -RCC.ADCFreqValue=12000000 -RCC.ADCPresc=RCC_ADCPCLK2_DIV6 +RCC.ADCFreqValue=4500000 +RCC.ADCPresc=RCC_ADCPCLK2_DIV8 RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 RCC.APB1Freq_Value=36000000 RCC.APB1TimFreq_Value=72000000 -RCC.APB2Freq_Value=72000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=36000000 RCC.APB2TimFreq_Value=72000000 RCC.FCLKCortexFreq_Value=72000000 RCC.FSMCFreq_Value=72000000 @@ -178,7 +211,7 @@ RCC.FamilyName=M RCC.HCLKFreq_Value=72000000 RCC.I2S2Freq_Value=72000000 RCC.I2S3Freq_Value=72000000 -RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FSMCFreq_Value,FamilyName,HCLKFreq_Value,I2S2Freq_Value,I2S3Freq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SDIOFreq_Value,SDIOHCLKDiv2FreqValue,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value +RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FSMCFreq_Value,FamilyName,HCLKFreq_Value,I2S2Freq_Value,I2S3Freq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SDIOFreq_Value,SDIOHCLKDiv2FreqValue,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value RCC.MCOFreq_Value=72000000 RCC.PLLCLKFreq_Value=72000000 RCC.PLLMCOFreq_Value=36000000