info@kodmek.com
Kodmek
  • Anasayfa
  • Blog
  • Araçlar
Kodmek
  • Anasayfa
  • Blog
  • Araçlar
  • Anasayfa
  • Blog
  • Araçlar
  • Anasayfa
  • Blog
  • Araçlar
Mikrodenetleyiciler
Home Elektronik Archive by Category "Mikrodenetleyiciler"

Category: Mikrodenetleyiciler

Mikrodenetleyiciler programlama ve devre tasarımı
Mikrodenetleyiciler

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek

Mikrodenetleyici PIC16F877A, CCP modüllerini kullanırsak, sadece RC1 ve RC2 pimleri üzerinde PWM sinyalleri üretebiliriz. Ancak PWM sinyaline ihtiyacımız olan bir çok durumla karşılaşabiliriz ve bu sinyal için diğer pimlerden yararlanmamız gerekebilir. Bu durumda, zamanlayıcı modüllerini kullanarak PWM sinyalleri üretmek için GPIO pimlerini programlayabiliriz. Bu şekilde, GPIO pinleri ile birçok PWM sinyali üretebiliriz. Bu projemizde bir potansiyometre kullanarak servo motorumuzu kontrol edeceğiz.

PWM Sinyali Nedir?

Proje detaylarına girmeden önce, PWM Sinyallerinin ne olduğunu biraz inceleyelim. Darbe Genişliği Modülasyonu (PWM), kontrol devrelerinde en sık kullanılan dijital bir sinyaldir. Bu sinyal önceden tanımlanmış bir zaman aralığında ve hızda yüksek (5v) ve düşük (0v) olarak ayarlanır. Sinyalin yüksek kaldığı süre “açık süre”, sinyalin düşük kaldığı süre “kapalı süre” olarak adlandırılır.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 1

PWM için Duty Cycle Hesapı

Bir GPIO pininde PWM sinyali üretmek için önceden tanımlanmış bir süre için onu açıp kapatmak zorundayız. Ama göründüğü kadar basit değildir. Bu açık ve kapalı zaman her döngü için doğru zamanda olmalıdır, bu nedenle gecikme fonksiyonlarını kullanamayız, bu nedenle zamanlayıcı modülünü kullanarak zamanlayıcı kesmesinden yararlanabiliriz. Ayrıca ürettiğimiz PWM sinyalinin görev döngüsünü ve sıklığını da göz önünde bulundurmalıyız. Parametreleri tanımlamak için aşağıdaki değişken isimleri programda kullanılır.

PWM_Frequency = PWM Sinyalinin Frekansı
T_TOTAL = Bir tam PWM döngüsü için harcanan toplam süre

T_ON = PWM sinyalinin açık kalma süresi
T_OFF = PWM sinyalinin kapalı kalma süresi
Duty_cycle = Görev döngüsü

T_TOTAL = (1/PWM_Frequency)

T_ON = (Duty_Cycle*T_TOTAL)/100

T_OFF = T_TOTAL – T_ON

Mikrodenetleyici GPIO Pimleri Üzerinde PWM Üretmek İçin Programlama

Kodların tamamı sayfanın altındandır. Kodların açıklamaları

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 2

Gerekli ayarlamaları yaptıktan sonra aşağıda bir hobi RC servo motoru kontrol etmek için Frekans değeri olarak 0.05KHz’i ayarlandı. Bunu uygulama gereksinimlerinize göre değiştirebilirsiniz.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 3

T_Total değeri yukardaki formüle göre hesaplandı

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 4

Ana fonksiyonun içinde zamanlayıcı modülünü yapılandırırız. Burada Timer modülünü her 0.1ms için yapılandırıldı.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 5

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 6

Ardından Giriş ve Çıkış yapılandırmasını ayarlamalıyız. Burada ADC değerini okumak için AN0 pimini ve PWM sinyallerini vermek için PORTD pimlerini kullanıyoruz. Bu nedenle, bunları çıkış pimleri ayarlayın ve aşağıdaki kod satırlarını kullanarak bunları düşük kenarlı yapınız.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 7

Potansiyometrenin durumuna göre Görev süresini hesapladık

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 8

Zamanlayıcı kullanarak 0.1 sn de bir kesme ayarladık.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 9

Son olarak GPIO pinlerini T_on ve T_off değerlerine göre değiştirdik.

 

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 10

Circuit Diagram

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 11

Mikrodenetleyici PWM Sinyali Servo Motor

 

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 12En uygun Fiyat1pcs PIC16F877A-I/P PIC16F877A PIC16F877 16F877A-I/P MICROCHIP DIP40
 

Tam Kodlar :

Icon

Microcontroller Servo Motor

1 file(s) 0
Please login to download

Read More
MeK 27 Aralık 2018 0 Comments
93
Mikrodenetleyiciler

Pic16f877 ile termometre devresi

Ccs C ile termometre uygulamasına bakacağız birlikte. Proje için Lm35 sıcaklık sensörü kullanılmıştır.

National şirması taraşından üretilen LM35 sıcaklık sensörü, analog tipte olup santigrad derece başlına 10 milivolt gerilim üretir. Yani, sıcaklığın her 1°C artışına karşlılık, çıkış gerilimi 10mV artar. Örneğin, 20°C için çıkış gerilimi 200mV iken, 100°C için çıkış gerilimi 1V’dur. LM35 sıcaklık sensörünün pek çok tipi vardır. Her bir modelin sıcaklık ölçüm aralığı ve doğruluğu farklıdır. Örneğin, LM35DZ adlı sensör, 0°C ile 100°C arasındaki sıcaklıkları ölçer ve son derece doğrusal bir karakteristiğe sahiptir.

Devre ve Çalışması : A/D dönüştürücü için gerekli analog giriş için LM 35 ısı sensörü kullanılmıştır.LM 35 ısı sensöründen gelen analog sinyaller A/D dönüştürücü tarafından dijital sinyallere dönüştürülerek mikrodenetleyici tarafından işlene bilecek hale getirilir. İşlenen bu sinyaller çıkış birimi olan LCD ye sıcaklık değeri olarak yazdırılır.

Pic16f877 ile termometre devresi 13

16f877 Lm35

#include <16f877.h>    

#device ADC=10  // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(a) //Port yönlendirme komutları A portu için geçerli

#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd.c>   // lcd.c dosyası tanıtılıyor

unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj,sicaklik;   // ondalıklı tipte değişkenler tanıtılıyor

//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0x01);  // RA0 Giriş olarak yönlendiriliyor

   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
   setup_adc_ports(AN0); //RA0/AN0 girişi analog

   lcd_init();   // LCD hazır hale getiriliyor

   set_adc_channel(0);   // RA0/AN0 ucundaki sinyal A/D işlemine tabi tutulacak
   delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir

   printf(lcd_putc,"\fSicaklik="); // LCD'ye yazı yazdırılıyor
   while(1)   // sonsuz döngü
   {
      bilgi=read_adc();  // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

      voltaj=(0.0048828125*bilgi)*1000;   // Dijitale çevirme işlemine uğrayan sinyalin mV olarak gerilimi hesaplanıyor
      sicaklik=(voltaj/10)+2;    // Her 10mV'ta 1 derece artma

      lcd_gotoxy(10,1); // İmleç 1. satır 10.sütunda
      printf(lcd_putc,"%5.1f'C",sicaklik); // LCD'ye sıcaklık değeri yazdırılıyor
      // Gösterilecek ondalıklı değerin toplam basamak sayısı 5 olacak.
      // Gösterilecek değerin ondalıklı kısmı ise 1 basamak olacak. %5.1f
      // komutu ile bu işlemler yaptırılmıştır.
      delay_ms(100); // 100 msn gecikme
   }
}

 

Proteus ve Ccsc dosyalarını indirmek için : [ddownload id="3142"]

Read More
MeK 14 Mart 2018 0 Comments
67
New Comments
  • SP Flash Tool için veysel25
  • DZ09 Smartwatch Saat modelleri ekleme için MeK
  • DZ09 Smartwatch Saat modelleri ekleme için furkan öztoprak
  • STM32F103 1602A LCD Bağlantısı için MeK

Kodmek güncel teknoloji ve programlama platformu
Bültene kayıt ol

[mc4wp_form id="357"]

Kullanım koşulları | Gizlilik Çevreve politikası

Copyright © 2023 kodmek.com. All Rights Reserved.