Motor Shield Example code for 2.74 Class @ MIT
Dependents: experiment_example motor_shield_example Lab3_experiment_example jumping_leg_clicky
Diff: HardwareSetup.cpp
- Revision:
- 7:e3a2ade56b79
- Parent:
- 6:417655779dc5
diff -r 417655779dc5 -r e3a2ade56b79 HardwareSetup.cpp --- a/HardwareSetup.cpp Wed Aug 26 19:35:02 2020 +0000 +++ b/HardwareSetup.cpp Wed Aug 26 23:42:07 2020 +0000 @@ -22,15 +22,13 @@ static void MX_ADC1_Init(void); static void MX_ADC2_Init(void); -uint16_t Current_A; -uint16_t Current_B; -uint16_t Current_C; -uint16_t Current_D; +void config_adc1_channel(int val); +void config_adc2_channel(int val); -AnalogIn currentA(PF_12); //Enable ADC pin -AnalogIn currentB(PF_11); //Enable ADC pin -AnalogIn currentC(PF_13); //Enable ADC pin -AnalogIn currentD(PA_4); //Enable ADC pin +AnalogIn currentA(PF_12); //Enable ADC hardware pin, don't use AnalogIn reads +AnalogIn currentB(PF_11); //Enable ADC hardware pin, don't use AnalogIn reads +AnalogIn currentC(PF_13); //Enable ADC hardware pin, don't use AnalogIn reads +AnalogIn currentD(PA_4); //Enable ADC hardware pin, don't use AnalogIn reads void initHardware(int periodTicks){ PWM_PERIOD = periodTicks; @@ -46,7 +44,7 @@ MX_TIM17_Init(); MX_ADC1_Init(); MX_ADC2_Init(); - //HAL_TIM_Base_Start(&htim15); + HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1); // start pwm generation HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_2); // start pwm generation @@ -62,37 +60,85 @@ uint16_t readADC1(int channel){ - + config_adc1_channel(channel); HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1,20); - Current_A = HAL_ADC_GetValue(&hadc1); - HAL_ADC_PollForConversion(&hadc1,20); - Current_B = HAL_ADC_GetValue(&hadc1); + uint32_t result = HAL_ADC_GetValue(&hadc1); HAL_ADC_Stop (&hadc1); - if (channel){ + return result; + +} - return Current_A; - } - else - return Current_B; +void config_adc1_channel(int val) +{ + ADC_ChannelConfTypeDef sConfig; + if (val == 0){ + sConfig.Channel = ADC_CHANNEL_6; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SingleDiff = ADC_SINGLE_ENDED; + sConfig.OffsetNumber = ADC_OFFSET_NONE; + sConfig.Offset = 0; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + //Error_Handler(); + } + } + else{ + sConfig.Channel = ADC_CHANNEL_2; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SingleDiff = ADC_SINGLE_ENDED; + sConfig.OffsetNumber = ADC_OFFSET_NONE; + sConfig.Offset = 0; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + //Error_Handler(); + } + } + } + uint16_t readADC2(int channel){ + config_adc2_channel(channel); HAL_ADC_Start(&hadc2); HAL_ADC_PollForConversion(&hadc2,20); - Current_C = HAL_ADC_GetValue(&hadc2); - HAL_ADC_PollForConversion(&hadc2,20); - Current_D = HAL_ADC_GetValue(&hadc2); + uint32_t result = HAL_ADC_GetValue(&hadc2); HAL_ADC_Stop (&hadc2); - if (channel){ - - return Current_C; - } - else - return Current_D; + return result; } +void config_adc2_channel(int val) +{ + ADC_ChannelConfTypeDef sConfig; + if (val == 0){ + sConfig.Channel = ADC_CHANNEL_18; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SingleDiff = ADC_SINGLE_ENDED; + sConfig.OffsetNumber = ADC_OFFSET_NONE; + sConfig.Offset = 0; + if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) + { + //Error_Handler(); + } + } + else{ + sConfig.Channel = ADC_CHANNEL_2; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SingleDiff = ADC_SINGLE_ENDED; + sConfig.OffsetNumber = ADC_OFFSET_NONE; + sConfig.Offset = 0; + if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) + { + //Error_Handler(); + } + } + +} static void MX_ADC1_Init(void) { @@ -103,11 +149,11 @@ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc1.Init.Resolution = ADC_RESOLUTION_16B; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; + hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; - hadc1.Init.NbrOfConversion = 2; + hadc1.Init.NbrOfConversion = 1; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; @@ -119,13 +165,6 @@ { //Error_Handler(); } - /** Configure the ADC multi-mode - */ - multimode.Mode = ADC_MODE_INDEPENDENT; - if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) - { - //Error_Handler(); - } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_2; @@ -138,17 +177,6 @@ { //Error_Handler(); } - - sConfig.Channel = ADC_CHANNEL_6; - sConfig.Rank = ADC_REGULAR_RANK_2; - sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; - sConfig.SingleDiff = ADC_SINGLE_ENDED; - sConfig.OffsetNumber = ADC_OFFSET_NONE; - sConfig.Offset = 0; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - //Error_Handler(); - } } /** @@ -158,18 +186,17 @@ */ static void MX_ADC2_Init(void) { - ADC_MultiModeTypeDef multimode = {0}; ADC_ChannelConfTypeDef sConfig = {0}; /** Common config */ hadc2.Instance = ADC2; hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc2.Init.Resolution = ADC_RESOLUTION_16B; - hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE; + hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc2.Init.LowPowerAutoWait = DISABLE; hadc2.Init.ContinuousConvMode = ENABLE; - hadc2.Init.NbrOfConversion = 2; + hadc2.Init.NbrOfConversion = 1; hadc2.Init.DiscontinuousConvMode = DISABLE; hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; @@ -181,13 +208,7 @@ { //Error_Handler(); } - /** Configure the ADC multi-mode - */ - multimode.Mode = ADC_MODE_INDEPENDENT; - if (HAL_ADCEx_MultiModeConfigChannel(&hadc2, &multimode) != HAL_OK) - { - //Error_Handler(); - } + /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_2; @@ -201,17 +222,6 @@ //Error_Handler(); } - sConfig.Channel = ADC_CHANNEL_18; - sConfig.Rank = ADC_REGULAR_RANK_2; - sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; - sConfig.SingleDiff = ADC_SINGLE_ENDED; - sConfig.OffsetNumber = ADC_OFFSET_NONE; - sConfig.Offset = 0; - if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) - { - //Error_Handler(); - } - }