I am doing a temperature-controlled fan, which means that the fan speed will depend on the temperature. I use PWM and PID in this code. My LCD have shown the temperature and humidity but the fan does not work. Can someone explain to this?
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_I2C1_Init(); MX_TIM4_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim4); lcd_init(); //initialize lcd lcd_send_string("INITIALIZING.."); //display string on lcd HAL_Delay(1000); //wait for 1 seconds lcd_clear(); HAL_TIM_PWM_Start(&htim4, PWM_CHANNEL); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_WritePin(FAN_PORT, FAN_PIN, GPIO_PIN_RESET); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ //Calculate temperature error temp_error = temp_setpoint - Temperature; //Update PWM duty cycle based on temperature error update_pwm_duty_cycle(temp_error); Display_Temp(Temperature); Display_Rh(Humidity); /*******DHT11*********/ DHT11_Start(); Presence = DHT11_Check_Response(); //record the response from the sensor //Five bytes of data Rh_byte1 = DHT11_Read (); Rh_byte2 = DHT11_Read (); Temp_byte1 = DHT11_Read (); Temp_byte2 = DHT11_Read (); SUM = DHT11_Read (); TEMP = Temp_byte1; RH = Rh_byte1; Temperature = (float) TEMP; Humidity = (float) RH; HAL_Delay(1200); } /* USER CODE END 3 */ }
What
- Keil product
- Microcontroller
do you have in use?
I use Keil uVision 5, STM32F103C8T6, DHT11, LCD I2C to show the temperature and humidity, a BLDC 5V fan and module relay
I recommend implementing your sources into one of the example projects provided by the Keil Pack Installer
Without anyone but you getting to see any line of code that actually tries to set that duty cycle, it's quite impossible for anyone to help you meaningfully.