کنترل دور موتور DC با PIC 16F877A
What you will read ...
کنترل دور موتور DC با PIC 16F877A :
کنترل دور موتور DC با PIC 16F877A :
برای طراحی یک برنامه کنترل دور موتور با استفاده از میکروکنترلر PIC16F877A، شما میتوانید از PWM (مدولاسیون پهنای پالس) استفاده کنید. PWM یک روش مؤثر برای کنترل سرعت موتورهای DC است. در زیر یک مثال ساده از برنامهای که با استفاده از زبان برنامهنویسی C و کامپایلر MPLAB XC8 نوشته شده، آورده شده است.
الزامات سختافزاری:
- میکروکنترلر PIC16F877A
- موتور DC
- درایور موتور (مانند L298N یا L293D)
- منبع تغذیه مناسب
- نوسانساز کریستالی (معمولاً 20 مگاهرتز)
- خازنها و مقاومتهای مورد نیاز برای نوسانساز
اتصال سختافزاری:
- پینهای PWM میکروکنترلر را به ورودی درایور موتور متصل کنید.
- موتور DC را به خروجی درایور موتور متصل کنید.
- منبع تغذیه موتور را به درایور موتور متصل کنید.
- تغذیه و زمین را به میکروکنترلر و درایور موتور وصل کنید.
کد برنامه:
این برنامه از PWM برای کنترل سرعت موتور DC استفاده میکند. شما میتوانید با تغییر مقدار PWM، سرعت موتور را کنترل کنید.
#include <xc.h>
// پیکربندی بیتهای کانفیگوراسیون
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (single-supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define _XTAL_FREQ 20000000 // فرکانس کریستال
void PWM_Init()
{
// تنظیم پینهای PWM
TRISC2 = 0; // پین RC2 به عنوان خروجی PWM
// تنظیم تایمر 2 برای PWM
T2CKPS0 = 0;
T2CKPS1 = 0; // پیشتقسیمکننده تایمر 2: 1
// تنظیم PWM
PR2 = 255; // پریود PWM
CCP1M3 = 1;
CCP1M2 = 1; // فعالسازی PWM
TMR2ON = 1; // فعالسازی تایمر 2
while (!TMR2IF); // انتظار برای تایمر 2 برای تثبیت
TMR2IF = 0; // پاک کردن فلگ تایمر 2
}
void PWM_Duty(unsigned int duty)
{
// محدود کردن مقدار دیوتی سیکل به بازه معتبر
if(duty < 1024)
{
CCP1Y = duty & 1;
CCP1X = (duty & 2) >> 1;
CCPR1L = duty >> 2;
}
}
void main()
{
PWM_Init(); // مقداردهی اولیه PWM
while(1)
{
PWM_Duty(512); // تنظیم دیوتی سیکل به 50%
__delay_ms(1000);
PWM_Duty(256); // تنظیم دیوتی سیکل به 25%
__delay_ms(1000);
PWM_Duty(768); // تنظیم دیوتی سیکل به 75%
__delay_ms(1000);
}
}
توضیحات کد:
- این کد PWM را برای پین RC2 (CCP1) میکروکنترلر تنظیم میکند.
- تابع
PWM_Init
تنظیمات اولیه PWM و تایمر 2 را انجام میدهد. - تابع
PWM_Duty
دیوتی سیکل PWM را تنظیم میکند. - در تابع
main
، دیوتی سیکل PWM در فواصل زمانی 1 ثانیه تغییر میکند.
این برنامه به شما امکان میدهد تا با تغییر مقدار دیوتی سیکل، سرعت موتور DC را کنترل کنید. برای پروژههای پیچیدهتر، میتوانید ورودیهای مختلف مانند پتانسیومتر یا سنسورهای دیگر را برای تنظیم دیوتی سیکل استفاده کنید.
PIC 16F877A Original مشخصات
PIC 16F877A Original, PIC 16F877A Original Price, PIC 16F877A Original قیمت, PIC 16F877A Original خرید
PIC 18F4550 Original, PIC 18F4550 Original Price, PIC 18F4550 Original قیمت, PIC 18f4550 Original خرید
PIC 16F84A Original, PIC 16F84A Original Price, PIC 16F84A Original قیمت, PIC 16F84A Original خرید
جهت خرید میکرو کنترلر اصلی و ارجینال با ما تماس بگیرید.