Anda di halaman 1dari 21

LAPORAN RESMI

MIKROKONTROLER

NAMA : M. IQBAL FITRIANTO


NRP : 1310151037
DOSEN : FARID DWI MURDIANTO, S.ST, MT

PROGRAM STUDI TEKNIK ELEKTRO INDUSTRI


DEPARTEMEN TEKNIK ELEKTRO
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
2017
PRAKTIKUM MIKROKONTOLER
PERCOBAAN 3
APLIKASI ARM STM32F407 UNTUK CONSTANT VOLTAGE

I. TUJUAN
Mahasiswa mampu memahami prinsip dasar pengaturan constant voltage dan
menerapkannya menggunakan pemrograman pada mikrokontroller ARM STM32F407.

II. DASAR TEORI


CONSTANT VOLTAGE
Pengemudi tegangan konstan dirancang untuk mempertahankan tingkat tegangan konstan
selama pengoperasian tanpa memperhatikan variasi arus. Misalnya Sunpower's RS-25-5 dapat
memberikan 5V / 0 ~ 5A, tegangan output tetap konstan pada 5V sementara arus keluaran
bervariasi dari 0 ~ 5A berdasarkan kondisi beban. Jika power supply tegangan konstan melebihi
5A (arus pengenal) maka catu daya akan masuk ke mode proteksi overload (beroperasi dari 105
~ 150% dari daya keluaran pengenal).
Sumber tegangan konstan memberikan tegangan konstan pada beban terlepas dari variasi
atau perubahan pada tahanan beban. Agar hal ini terjadi, sumber harus memiliki tahanan internal
yang sangat rendah dibandingkan dengan daya tahan beban yang dimilikinya.

Gambar 1: Perilaku tegangan konstan ideal

Beberapa karakteristik sumber tegangan konstan ideal adalah:


 Nol resistansi internal
 Mempertahankan voltase yang sama terlepas dari variasi jumlah arus yang ditarik oleh
beban,
 Tidak ada arus yang mengalir saat rangkaian tidak dimuat (open circuited).

Bagaimana sumber tegangan konstan bekerja?


Untuk sumber tegangan untuk menyediakan tegangan konstan, resistor internal harus
sangat rendah, sebaiknya nol - meskipun hal ini mungkin tidak mungkin dilakukan. Bila
resistansi sangat rendah dan menggunakan aturan pembagi tegangan, sebagian besar tegangan
akan dijatuhkan melintasi beban, yang memiliki ketahanan lebih tinggi. Bila tahanan internal
jauh lebih rendah dibandingkan resistansi beban, sehingga bisa diabaikan, output sumber daya
mendekati tegangan konstan ideal.
Gambar 2 Sumber tegangan ideal dengan impedansi nol Gambar

Dalam sumber tegangan ideal, resistansi harus nol dan semua voltase dijatuhkan di
tahanan beban. Namun, sumber tegangan ideal biasanya tidak mungkin dilakukan, dan sumber
tegangan tipikal masih memiliki beberapa bentuk tahan internal.

Sumber tegangan konstan


Sumber tegangan konstan yang umum adalah baterai dan catu daya yang diatur. Namun,
baterai tidak bisa mensuplai voltase konstan untuk waktu yang lama dan harus diisi ulang atau
diganti sekali habis. Selanjutnya, rangkaian mungkin memerlukan tingkat tegangan lain yang
berbeda dari apa yang disediakan baterai. Dalam kasus seperti itu, sirkuit konversi voltase dan
regulator digunakan untuk mengkondisikan voltase.
Ada berbagai cara untuk mendapatkan voltase konstan pada catu daya atau bila voltase
masukan lebih tinggi dari pada keluaran. Beberapa metode untuk mendapatkan tegangan konstan
termasuk menggunakan pembagi tegangan, transistor seri, dioda Zener atau kombinasi antara
dioda Zener dan perangkat switching seperti transistor atau thryristor. Selain itu, IC regulator
tegangan dapat digunakan untuk memberikan keluaran yang lebih stabil lebih baik daripada
komponen diskrit. SMPS digunakan untuk memberikan voltase konstan yang lebih stabil dan
efisien. Dibandingkan dengan regulator linier, SMP adalah yang terbaik, namun lebih mahal.
Tegangan konstan biasanya digunakan pada sirkuit yang membutuhkan suplai voltase
stabil untuk operasi efisien. Sebagai contoh, penggerak tegangan konstan digunakan untuk
pencahayaan strip LED paralel karena disain rangkaian, yang menghasilkan arus paling
seimbang melalui saluran keluaran independen.
' Tegangan konstan ' mengacu pada kemampuan untuk berfluktuasi arus keluaran untuk
mempertahankan voltase yang ditetapkan. Tegangan konstan dapat digunakan untuk aplikasi di
mana benda kerja tidak memiliki permukaan rata, misalnya kawat berlapis, dan di mana
resistansi sangat bervariasi, dan untuk lasan yang sangat pendek (kurang dari 1 milidetik).

Modus tegangan konstan :


 Mengompensasi masalah keliru dan masalah paksa
 Mengurangi splash las
 Cocok untuk bagian bulat (non-flat)
LCD (Liquid Crystal Display)
LCD (Liquid Crystal Display) adalah suatu jenis media tampil yang menggunakan kristal
cair sebagai penampil utama. LCD sudah digunakan diberbagai bidang misalnya alal–alat
elektronik seperti televisi, kalkulator, atau pun layar komputer. LCD sangat berfungsi sebagai
penampil yang nantinya akan digunakan untuk menampilkan status kerja alat.
Pada aplikasi umumnya RW diberi logika rendah “0”. Bus data terdiri dari 4-bit atau 8-
bit. Jika jalur data 4-bit maka yang digunakan ialah DB4 sampai dengan DB7. Sebagaimana
terlihat pada table diskripsi, interface LCD merupakan sebuah parallel bus, dimana hal ini sangat
memudahkan dan sangat cepat dalam pembacaan dan penulisan data dari atau ke LCD. Kode
ASCII yang ditampilkan sepanjang 8-bit dikirim ke LCD secara 4-bit atau 8 bit pada satu waktu.
Jika mode 4-bit yang digunakan, maka 2 nibble data dikirim untuk membuat sepenuhnya 8-bit
(pertama dikirim 4-bit MSB lalu 4-bit LSB dengan pulsa clock EN setiap nibblenya). Jalur
kontrol EN digunakan untuk memberitahu LCD bahwa mikrokontroller mengirimkan data ke
LCD. Untuk mengirim data ke LCD program harus menset EN ke kondisi high “1” dan
kemudian menset dua jalur kontrol lainnya (RS dan R/W) atau juga mengirimkan data ke jalur
data bus.
Saat jalur lainnya sudah siap, EN harus diset ke “0” dan tunggu beberapa saat (tergantung
pada datasheet LCD), dan set EN kembali ke high “1”. Ketika jalur RS berada dalam kondisi low
“0”, data yang dikirimkan ke LCD dianggap sebagai sebuah perintah atau instruksi khusus
(seperti bersihkan layar, posisi kursor dll). Ketika RS dalam kondisi high atau “1”, data yang
dikirimkan adalah data ASCII yang akan ditampilkan dilayar. Misal, untuk menampilkan huruf
“A” pada layar maka RS harus diset ke “1”. Jalur kontrol R/W harus berada dalam kondisi low
(0) saat informasi pada data bus akan dituliskan ke LCD. Apabila R/W berada dalam kondisi
high “1”, maka program akan melakukan query (pembacaan) data dari LCD. Instruksi
pembacaan hanya satu, yaitu Get LCD status (membaca status LCD), lainnya merupakan
instruksi penulisan. Jadi hampir setiap aplikasi yang menggunakan LCD, R/W selalu diset ke
“0”. Jalur data dapat terdiri 4 atau 8 jalur (tergantung mode yang dipilih pengguna), DB0, DB1,
DB2, DB3, DB4, DB5, DB6 dan DB7. Mengirim data secara parallel baik 4-bit atau 8-bit
merupakan 2 mode operasi primer. Untuk membuat sebuah aplikasi interface LCD, menentukan
mode operasi merupakan hal yang paling penting.
Mode 8-bit sangat baik digunakan ketika kecepatan menjadi keutamaan dalam sebuah
aplikasi dan setidaknya minimal tersedia 11 pin I/O (3 pin untuk kontrol, 8 pin untuk data).
Sedangkan mode 4 bit minimal hanya membutuhkan 7-bit (3 pin untuk kontrol, 4 pin untuk
data). Bit RS digunakan untuk memilih apakah data atau instruksi yang akan ditransfer antara
mikrokontroller dan LCD. Jika bit ini di set (RS = 1), maka byte pada posisi kursor LCD saat itu
dapat dibaca atau ditulis. Jika bit ini di reset (RS = 0), merupakan instruksi yang dikirim ke LCD
atau status eksekusi dari instruksi terakhir yang dibaca. Untuk gambar skematik LCD 16x2
adalah sebagai berikut:
.
Adapun fitur yang disajikan dalam LCD ini adalah :
a) Terdiri dari 16 karakter dan 2 baris.
b) Mempunyai 192 karakter tersimpan.
c) Terdapat karakter generator terprogram.
d) Dapat dialamati dengan mode 4-bit dan 8-bit.
e) Dilengkapi dengan back light

Spesifikasi Kaki LCD 16 x 2


Pin Deskripsi
1 Ground
2 Vcc
3 Pengatur kontras
4 “RS” Instruction/Register Select
5 “R/W” Read/Write LCD Registers
6 “EN” Enable
7-14 Data I/O Pins
15 Vcc
16 Ground
ADC (Analog To Digital Convertion)
Analog To Digital Converter (ADC) adalah pengubah input analog menjadi kode – kode
digital. ADC banyak digunakan sebagai Pengatur proses industri, komunikasi digital dan
rangkaian pengukuran/ pengujian. Umumnya ADC digunakan sebagai perantara antara sensor
yang kebanyakan analog dengan sistim komputer seperti sensor suhu, cahaya, tekanan/ berat,
aliran dan sebagainya kemudian diukur dengan menggunakan sistim digital (komputer).
ADC (Analog to Digital Converter) memiliki 2 karakter prinsip, yaitu kecepatan
sampling dan resolusi.
Kecepatan Sampling ADC
Kecepatan sampling suatu ADC menyatakan “seberapa sering sinyal analog
dikonversikan ke bentuk sinyal digital pada selang waktu tertentu”. Kecepatan sampling
biasanya dinyatakan dalam sample per second (SPS).

Ilustrasi Kecepatan Sampling ADC


Resolusi ADC
Resolusi ADC menentukan “ketelitian nilai hasil konversi ADC”. Sebagai contoh: ADC
8 bit akan memiliki output 8 bit data digital, ini berarti sinyal input dapat dinyatakan dalam 255
(2n – 1) nilai diskrit. ADC 12 bit memiliki 12 bit output data digital, ini berarti sinyal input dapat
dinyatakan dalam 4096 nilai diskrit. Dari contoh diatas ADC 12 bit akan memberikan ketelitian
nilai hasil konversi yang jauh lebih baik daripada ADC 8 bit.
Prinsip Kerja ADC
Prinsip kerja ADC adalah mengkonversi sinyal analog ke dalam bentuk besaran yang
merupakan rasio perbandingan sinyal input dan tegangan referensi. Sebagai contoh, bila
tegangan referensi 5 volt, tegangan input 3 volt, rasio input terhadap referensi adalah 60%. Jadi,
jika menggunakan ADC 8 bit dengan skala maksimum 255.
Komparator ADC
Bentuk komunikasi yang paling mendasar antara wujud digital dan analog adalah piranti
(biasanya berupa IC) disebut komparator. Piranti ini, yang diperlihatkan secara skematik pada
gambar dibawah, secara sederhana membandingkan dua tegangan pada kedua terminal inputnya.
Bergantung pada tegangan mana yang lebih besar, outputnya akan berupa sinyal digital 1 (high)
atau 0 (low). Komparator ini digunakan secara luas untuk sinyal alarm ke komputer atau sistem
pemroses digital. Elemen ini juga merupakan satu bagian dengan konverter analog ke digital dan
digital ke analog yang akan didiskusikan nanti.
Konsep Kompataror Pada ADC (Analog to Digital Converter)
Gambar diatas memperlihatkan sebuah komparator merubah keadaan logika output sesuai
fungsi tegangan input analog. Sebuah komparator dapat tersusun dari sebuah opamp yang
memberikan output terpotong untuk menghasilkan level yang diinginkan untuk kondisi logika
(+5 dan 0 untuk TTL 1 dan 0). Komparator komersil didesain untuk memiliki level logika yang
dperlukan pada bagian outputnya.

Jenis-Jenis ADC (Analog To Digital Converter)


ADC Simultan
ADC Simultan atau biasa disebut flash converter atau parallel converter. Input analog Vi
yang akan diubah ke bentuk digital diberikan secara simultan pada sisi + pada komparator
tersebut, dan input pada sisi – tergantung pada ukuran bit converter. Ketika Vi melebihi tegangan
input – dari suatu komparator, maka output komparator adalah high, sebaliknya akan
memberikan output low.

ADC Simultan
Bila Vref diset pada nilai 5 Volt, maka dari gambar 3 dapat didapatkan :
V(-) untuk C7 = Vref * (13/14) = 4,64
V(-) untuk C6 = Vref * (11/14) = 3,93
V(-) untuk C5 = Vref * (9/14) = 3,21
V(-) untuk C4 = Vref * (7/14) = 2,5
V(-) untuk C3 = Vref * (5/14) = 1,78
V(-) untuk C2 = Vref * (3/14) = 1,07
V(-) untuk C1 = Vref * (1/14) = 0,36
Misal :
Vin diberi sinyal analog 3 Volt, maka output dari C7=0, C6=0, C5=0, C4=1, C3=1, C2=1, C1=1,
sehingga didapatkan output ADC yaitu 100 biner

Tabel Output ADC Simultan


Ada beberapa konsep dasar dari ADC adalah dengan cara Counter Ramp ADC, Successive
Aproximation ADC dan lain sebagainya.

Counter Ramp ADC

Blok Diagram Counter Ramp ADC


Pada gambar diatas, ditunjukkan blok diagram Counter Ramp ADC didalamnya tedapat
DAC yang diberi masukan dari counter, masukan counter dari sumber Clock dimana sumber
Clock dikontrol dengan cara meng AND kan dengan keluaran Comparator. Comparator
membandingkan antara tegangan masukan analog dengan tegangan keluaran DAC, apabila
tegangan masukan yang akan dikonversi belum sama dengan tegangan keluaran dari DAC maka
keluaran comparator = 1 sehingga Clock dapat memberi masukan counter dan hitungan counter
naik.
Misal akan dikonversi tegangan analog 2 volt, dengan mengasumsikan counter reset,
sehingga keluaran pada DAC juga 0 volt. Apabila konversi dimulai maka counter akan naik dari
0000 ke 0001 karena mendapatkan pulsa masuk dari Clock oscillator dimana saat itu keluaran
Comparator = 1, karena mendapatkan kombinasi biner dari counter 0001 maka tegangan
keluaran DAC naik dan dibandingkan lagi dengan tegangan masukan demikian seterusnya nilai
counter naik dan keluaran tegangan DAC juga naik hingga suatu saat tegangan masukan dan
tegangan keluaran DAC sama yang mengakibatkan keluaran komparator = 0 dan Clock tidak
dapat masuk. Nilai counter saat itulah yang merupakan hasil konversi dari analog yang
dimasukkan.
Kelemahan dari counter tersebut adalah lama, karena harus melakukan trace mulai dari
0000 hingga mencapai tegangan yang sama sehingga butuh waktu.

SAR (Successive Aproximation Register) ADC

Blok Diagram SAR ADC


Pada gambar diatas ditunjukkan diagram ADC jenis SAR, Yaitu dengan memakai konvigurasi
yang hampir sama dengan counter ramp tetapi dalam melakukan trace dengan cara tracking
dengan mengeluarkan kombinasi bit MSB = 1 ====> 1000 0000. Apabila belum sama (kurang
dari tegangan analog input maka bit MSB berikutnya = 1 ===>1100 0000) dan apabila tegangan
analog input ternyata lebih kecil dari tegangan yang dihasilkan DAC maka langkah berikutnya
menurunkan kombinasi bit ====> 10100000.
Untuk mempermudah pengertian dari metode ini diberikan contoh seperti pada timing diagram
gambar 6 Misal diberi tegangan analog input sebesar 6,84 volt dan tegangan referensi ADC 10
volt sehingga apabila keluaran tegangan sbb :
Jika D7 = 1 Vout = 5 volt
Jika D6 = 1 Vout = 2,5 volt
Jika D5 = 1 Vout = 1,25 volt
Jika D4 = 1 Vout = 0,625 volt
Jika D3 = 1 Vout = 0,3125 volt
Jika D2 = 1 Vout = 0,1625 volt
Jika D1 = 1 Vout = 0,078125 volt
Jika D0 = 1 Vout = 0,0390625 volt

Timing diagram urutan Trace SAR ADC


Setelah diberikan sinyal start maka konversi dimulai dengan memberikan kombinasi
1000 0000 ternyata menghasilakan tegangan 5 volt dimana masih kurang dari tegangan input
6,84 volt, kombinasi berubah menjadi 1100 0000 sehingga Vout = 7,5 volt dan ternyata lebih
besar dari 6,84 sehingga kombinasi menjadi 1010 0000 tegangan Vout = 6,25 volt kombinasi
naik lagi 1011 0000 demikian seterusnya hingga mencapai tegangan 6,8359 volt dan
membutuhkan hanya 8 clock.

III. ALAT DAN BAHAN


1. Komputer / laptop
2. Modul STM32F4
3. Kabel Downloader
4. Adaptor

IV. LANGKAH PERCOBAAN


1. Atur GPIO sebagi berikut

2. Atur Clock Configuration


3. Atur ADC Configuration
4. Generate Code
V. DATA HASIL PERCOBAAN
PROGRAM
/**

******************************************************************************
* File Name : main.c
* Description : Main program body

******************************************************************************
*
* COPYRIGHT(c) 2017 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*

******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"
#include "stdio.h"
#include "lcd_character.h"
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/


ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;

/* USER CODE BEGIN PV */


/* Private variables ---------------------------------------------------------*/

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/


void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_ADC1_Init(void);
__IO uint16_t Nilai_ADC [8];
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

int main(void)
{
int a;
float SP, PV, Vo, Error, POT1;
char pvoltage[20],spoint[20],error[20],vout[20];
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration----------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();

/* Initialize all configured peripherals */


MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&Nilai_ADC,8);
/* USER CODE BEGIN 2 */

/* USER CODE END 2 */


lcd_init();
while (1)
{
POT1=Nilai_ADC[5];
POT1=(POT1/4095)*100;
sprintf(pvoltage,"PV:%.2f",POT1);
lcd_gotoxy(0,1);
lcd_puts(pvoltage);
PV = POT1;
SP=90;
HAL_Delay(5000);

for(i=0;i<=500;i++)
{
Error=SP-PV;
if(Error>0)
{
PV=PV+0.1;
}
if(Error<0)
{
PV=PV-0.1;
}
if(Error==0)
{
PV=PV;
}
}
Vo=PV;
sprintf(vout,"Vo:%.2f",Vo);
lcd_gotoxy(8,1);
lcd_puts(vout);
sprintf(spoint,"SP:%.2f",SP);
lcd_gotoxy(8,0);
lcd_puts(spoint);
sprintf(error,"E :%.2f",E);
lcd_gotoxy(0,0);
lcd_puts(error);
}

/** System Clock Configuration


*/
void SystemClock_Config(void)
{

RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;

__PWR_CLK_ENABLE();

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

/* SysTick_IRQn interrupt configuration */


HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

/* ADC1 init function */


void MX_ADC1_Init(void)
{

ADC_ChannelConfTypeDef sConfig;

/**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number
of conversion)
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
hadc1.Init.Resolution = ADC_RESOLUTION12b;
hadc1.Init.ScanConvMode = ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 8;
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.EOCSelection = EOC_SINGLE_CONV;
HAL_ADC_Init(&hadc1);

/**Configure for the selected ADC regular channel its corresponding rank in the sequencer
and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_8;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

/**Configure for the selected ADC regular channel its corresponding rank in the sequencer
and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_9;
sConfig.Rank = 2;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

/**Configure for the selected ADC regular channel its corresponding rank in the sequencer
and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_10;
sConfig.Rank = 3;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

/**Configure for the selected ADC regular channel its corresponding rank in the sequencer
and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_11;
sConfig.Rank = 4;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

/**Configure for the selected ADC regular channel its corresponding rank in the sequencer
and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_12;
sConfig.Rank = 5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

/**Configure for the selected ADC regular channel its corresponding rank in the sequencer
and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_13;
sConfig.Rank = 6;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

/**Configure for the selected ADC regular channel its corresponding rank in the sequencer
and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_14;
sConfig.Rank = 7;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

/**Configure for the selected ADC regular channel its corresponding rank in the sequencer
and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_15;
sConfig.Rank = 8;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

/**
* Enable DMA controller clock
*/
void MX_DMA_Init(void)
{
/* DMA controller clock enable */
__DMA2_CLK_ENABLE();

/* DMA interrupt init */


HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);

}
/** Configure pins as
* Analog
* Input
* Output
* EVENT_OUT
* EXTI
*/
void MX_GPIO_Init(void)
{

GPIO_InitTypeDef GPIO_InitStruct;

/* GPIO Ports Clock Enable */


__GPIOH_CLK_ENABLE();
__GPIOC_CLK_ENABLE();
__GPIOB_CLK_ENABLE();
__GPIOD_CLK_ENABLE();

/*Configure GPIO pins : PD0 PD1 PD2 PD3


PD4 PD5 PD6 PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

#ifdef USE_FULL_ASSERT

/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
}
#endif
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***

VI. ANALISA
Pada percobaan constant voltage kali ini bertujuan untuk memperoleh tegangan output
yang konstan sesuai dengan set point yang telah ditentukan, meskipun tegangan input yang
diberikan berubah-ubah sesuai dengan putaran potensio meter.
Pada percobaan kali ini, set point disetting 90V, dengan rumus error = SP – PV, dimana
PV merupakan present value atau nilai tegangan yang diset pada potensiometer. Pada program,
apabila error>0 maka nilai dari PV=PV+0.1, apabila error<0 maka nilai PV=PV-0.1, dan apabila
error=0 maka nilai PV=PV. Proses increment dan decrement tersebut pada program dilakukan
sebanyak 500 kali sesuai dengan program for.

POT1=Nilai_ADC[5];
POT1=(POT1/4095)*100;
Setting PV pada program
sprintf(pvoltage,"PV:%.2f",POT1);
melalui pembacaan ADC
lcd_gotoxy(0,1);
pada potensiometer
lcd_puts(pvoltage);
PV = POT1;
SP=90; Setting SP pada program

for(i=0;i<=500;i++)
{
Error=SP-PV; Perumusan error pada program
if(Error>0)
{ Program pada if untuk error>0,
PV=PV+0.1; maka nilai PV akan increment
}
Program for untuk increment
if(Error<0)
atau decrement nilai PV, pada
{ Program pada if untuk error<0, program for ini disetting
PV=PV-0.1; maka nilai PV akan decrement sebanyak 500 iterasi
}
if(Error==0)
{
PV=PV; Program pada if untuk error=0
}
} Nilai Vo merupakan nilai akhir
Vo=PV; dari PV setelah melewati banyak
iterasi
Pada percobaan pertama, nilai PV diset sekitar 2V, dan diperoleh tegangan output
Vo=52V dengan error=38V. Pada percobaan kedua, nilai PV diset 25.4V, dan diperoleh
Vo=75.5V dengan error=14.6V. Dari kedua percobaan tersebut, nilai Vo tidak mencapai set
point. Hal ini karena dengan nilai increment decrement 0.1 setiap iterasi, apabila terdapat 500
iterasi maka penambahan PV yang dimungkinkan hanya sebesar 50V, sehingga dengan set
PV=2V maka diperoleh Vo=2+50=52 V.
Pada percobaan ketiga dengan set PV=43.1V, diperoleh Vo=89.9V yang mendekati SP.
Hal ini berarti nilai iterasi sebanyak 500 dengan increment decrement sebesar 0.1 dapat
menjangkau nilai set point SP=90V. Sehingga pada percobaan constant voltage ini terdapat batas
minimum tegangan sehingga diperoleh tegangan output Vo yang mendekati SP. Secara
perhitungan, tegangan minimum PV untuk mencapai setpoint yaitu PV=SP-50V. 50V
merupakan tegangan maksimum yang dapat diincrementkan atau didecrementkan pada tegangan
PV dengan iterasi sebanyak 500 dan nilai increment atau decrement sebesar 0.1.
Dengan mengatur PV=100V atau lebih besar dari set point, juga didapatkan tegangan
output Vo yang mendekati SP. Artinya program diatas bekerja untuk tegangan present value PV
dibawah maupun diatas set point SP.
Untuk lebih jelasnya, akan dipaparkan pada video dengan link dibawah ini:
https://youtu.be/-P5-Sdc2Pyg

VII. KESIMPULAN
Berdasarkan praktikum yang telah dilakukan dapat ditarik kesimpulan bahwa :
1. Pemrograman constant voltage bertujuan untuk memperoleh tegangan output yang
mendekati set point yang telah ditentukan, meskipun dengan tegangan input yang
berubah-ubah sesuai dengan pengaturan tegangan input awal.
2. Untuk memperoleh tegangan output yang mendekati set point, maka dilakukan increment
atau decrement terhadap tegangan input dengan banyak iterasi, bergantung pada nilai
awal tegangan input tersebut.
3. Apabila present value kurang dari set point maka akan diincrementkan, sedangkan
apabila pesent value lebih dari set point maka akan didecrementkan.

Anda mungkin juga menyukai