Modul 1 Percobaan 3 Kondisi 5
Langkah - langkah men-simulasikan rangkaiannya :
- Buatlah rangkaian sesuai dengan gambar di modul di Proteus 8.17
- Lalu buka STMCUBEIDE,klik New STM32 Project
- Pilih MPU/MCU SELECTOR, dan ketik STM32F103C8
- Setting pin di file.ioc nya sesuai dengan kebutuhan
- Lalu generate code dan masukkan kode di main.c dan main.h
- Klik Build project dan Masukkan file.hex yang telat digenerate
- Masukkan file.hex ke STM32F103C8 di Proteus
- Run simulasi di Proteus
2. Hardware dan Diagram Blok [kembali]
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Prinsip Kerja :
Rangkaian ini bekerja dengan memanfaatkan sensor suhu LM35 yang menghasilkan tegangan analog sebanding dengan suhu (10 mV/°C), kemudian dibaca oleh ADC 12-bit pada mikrokontroler STM32 sehingga menghasilkan nilai digital dalam rentang 0–4095. Nilai tersebut dikonversi menjadi tegangan dan selanjutnya dihitung menjadi suhu dalam derajat Celcius. Mikrokontroler kemudian membandingkan suhu dengan ambang batas 30°C; jika suhu melebihi batas, sistem mengaktifkan kipas melalui driver L298 dengan sinyal PWM dari timer (TIM1) sehingga kipas menyala dan mati secara bergantian setiap 5 detik berdasarkan pengaturan waktu menggunakan fungsi HAL_GetTick(). Jika suhu di bawah 30°C, kipas dimatikan. Selain itu, terdapat tombol yang terhubung ke interrupt untuk mengaktifkan atau menonaktifkan sistem secara keseluruhan.
4. Flowchart dan Listing Program [kembali]
Flowchart :
Listing Program :
#include "main.h"
ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_TIM1_Init(void);
uint32_t adcValue = 0;
float voltage = 0;
float temperature = 0;
uint8_t system_on = 1;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_TIM1_Init();
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
while (1)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
adcValue = HAL_ADC_GetValue(&hadc1);
voltage = ( adcValue / 4095.0) * 3.3;
temperature = ( voltage * 100);
if(system_on)
{
if(temperature >= 27.0)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
float duty;
if(temperature >= 35.0)
{
duty = 0.5;
}
else
{
duty = 1.0 - ((temperature - 27.0) / 8.0) * 0.5;
}
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty *
65535);
}
else
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
}
}
else
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
}
HAL_Delay(200);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType =
RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
}
static void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};
Buatlah rangkaian seperti percobaan 3 dengan kondisi ketika sensor LM35 mendeteksi suhu 30C maka kipas menyala selama 5 detik lalu mati dan setelah 5 detik kipas menyala lagi.
Download File Proteus [klik disini]
Download File .hex [klik disini]
Download Datasheet STM32F103C8 [klik disini]
Download Datasheet Resistor [klik disini]
Download Datasheet LM35 [klik disini]
Download Datasheet L298N [klik disini]
Download Datasheet Push Button [klik disini]
Tidak ada komentar:
Posting Komentar