ziya202
Üye
- Katılım
- 21 Mar 2022
- Mesajlar
- 1
- Puanları
- 1
- Yaş
- 25
Selamünaleyküm iyi günler,
ben 16F877 PIC ile pot yardımıyla STEP motor(NEMA17) kontrol etmek istiyorum.
Çalışması şu şekilde potansiyometre kaç derece dönerse step motorda o kadar dönecek sağa veya sola
aynı zamanda döndüğü açı değeri Lcd’de yazacak. Kod kısmında sıkıntı yaşıyorum yardımcı olabilecek arkadaşlar var mı acaba ?
Step motoru L298 motor sürücü ile kontrol edeceğim
Başka bir arkadaşının işine yarayacaksa,
aynı çalışma şeklinin SERVO MOTOR kontrolü için olan kodlar;
// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT 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 = OFF // Brown-out Reset Enable bit (BOR disabled)
#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; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#define M1 RD0
#define RW RD3
#define RS RD2
#define EN RD1
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7
#define _XTAL_FREQ 4000000
#include <xc.h>
#include<LCD.h>
#include<stdio.h>
unsigned int duty_sure ;
unsigned int sayici1;
unsigned int analog_deger1;
unsigned int adc_bilgi(unsigned char kanal)
{
if(kanal>7)
return 0;
ADCON0&=0B11000101;
ADCON0|=kanal<<3;
__delay_ms(2);
GO_nDONE=1;
while(GO_nDONE);
return((ADRESH<<8)+ADRESL);
}
void __interrupt() kesme(void)
{
if(T0IF==1)
{
TMR0=231;
T0IF=0;
sayici1++;
}
if(sayici1>=duty_sure)
{
M1=0;
}
if(sayici1>=(200-duty_sure))
{
M1=1;
sayici1=0;
}
}
void main(void)
{
TRISA=0XFF;
OPTION_REG=0B00000010;
ADCON0=0B10000001;
ADCON1=0B10000000;
TRISD=0X00;
PORTD=0X00;
TMR0=231;
TMR0IE=1;
TMR0IF=0;
GIE=1;
PEIE=1;
Lcd_Init();
Lcd_Clear();
char dizi[20];
while(1)
{
analog_deger1=adc_bilgi(0)*20/1023;
duty_sure= analog_deger1;
__delay_ms(100);
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Masa 7 ");
sprintf(dizi,"motor adimi =%d",duty_sure);
Lcd_Set_Cursor(2,1);
Lcd_Write_String(dizi);
__delay_ms(100);
}
}
ben 16F877 PIC ile pot yardımıyla STEP motor(NEMA17) kontrol etmek istiyorum.
Çalışması şu şekilde potansiyometre kaç derece dönerse step motorda o kadar dönecek sağa veya sola
aynı zamanda döndüğü açı değeri Lcd’de yazacak. Kod kısmında sıkıntı yaşıyorum yardımcı olabilecek arkadaşlar var mı acaba ?
Step motoru L298 motor sürücü ile kontrol edeceğim
Başka bir arkadaşının işine yarayacaksa,
aynı çalışma şeklinin SERVO MOTOR kontrolü için olan kodlar;
// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT 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 = OFF // Brown-out Reset Enable bit (BOR disabled)
#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; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#define M1 RD0
#define RW RD3
#define RS RD2
#define EN RD1
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7
#define _XTAL_FREQ 4000000
#include <xc.h>
#include<LCD.h>
#include<stdio.h>
unsigned int duty_sure ;
unsigned int sayici1;
unsigned int analog_deger1;
unsigned int adc_bilgi(unsigned char kanal)
{
if(kanal>7)
return 0;
ADCON0&=0B11000101;
ADCON0|=kanal<<3;
__delay_ms(2);
GO_nDONE=1;
while(GO_nDONE);
return((ADRESH<<8)+ADRESL);
}
void __interrupt() kesme(void)
{
if(T0IF==1)
{
TMR0=231;
T0IF=0;
sayici1++;
}
if(sayici1>=duty_sure)
{
M1=0;
}
if(sayici1>=(200-duty_sure))
{
M1=1;
sayici1=0;
}
}
void main(void)
{
TRISA=0XFF;
OPTION_REG=0B00000010;
ADCON0=0B10000001;
ADCON1=0B10000000;
TRISD=0X00;
PORTD=0X00;
TMR0=231;
TMR0IE=1;
TMR0IF=0;
GIE=1;
PEIE=1;
Lcd_Init();
Lcd_Clear();
char dizi[20];
while(1)
{
analog_deger1=adc_bilgi(0)*20/1023;
duty_sure= analog_deger1;
__delay_ms(100);
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Masa 7 ");
sprintf(dizi,"motor adimi =%d",duty_sure);
Lcd_Set_Cursor(2,1);
Lcd_Write_String(dizi);
__delay_ms(100);
}
}