سلام به همگی دوستان
بنده قصد راه اندازی موتور سروو رو دارم
میکرویی که استفاده میکنم atmega 32 هست
موقعی کد رو امتحان میکنم موتورم کار خاصی انجام نمیده
بیشتر از داخل صدا میده
بعضی وقتا هم حرکات خاصی انجام میده ولی نامنظم و بدون ترتیب هست
توی پروتیوس هم جواب گرفتم
توی پروتیوس موتوری که استفاده میکنم 180 درجه هست و کامل جواب میده ولی در واقعیت اشکال پیدا میکنه
البته موتوری که توی واقعیت استفاده میکنم 360 هست.
کد رو میذارم اگه کسی کار کرده لطفا کمکم کنه
این هم کد
بنده قصد راه اندازی موتور سروو رو دارم
میکرویی که استفاده میکنم atmega 32 هست
موقعی کد رو امتحان میکنم موتورم کار خاصی انجام نمیده
بیشتر از داخل صدا میده
بعضی وقتا هم حرکات خاصی انجام میده ولی نامنظم و بدون ترتیب هست
توی پروتیوس هم جواب گرفتم
توی پروتیوس موتوری که استفاده میکنم 180 درجه هست و کامل جواب میده ولی در واقعیت اشکال پیدا میکنه
البته موتوری که توی واقعیت استفاده میکنم 360 هست.
کد رو میذارم اگه کسی کار کرده لطفا کمکم کنه
این هم کد
کد:
#include <mega32a.h> #include <delay.h> #define FCLK_I/O 8000000 #define PRESCALER 8 #define TOP 10000 // TOP = ICR1 #define fOCnxPFCPWM (FCLK_I/O / (2 * PRESCALER * TOP)) // fOCnxPFCPWM = 50 void main (){ /* Waveform Generation Mode Bit Description: PWM, Phase and Frequency Correct TOP:ICR1 Update of OCR1x:BOTTOM TOV1 Flag Set on:BOTTOM WGM13 WGM12(CTC1) WGM11(PWM11) WGM10(PWM10):1 0 0 0 */ TCCR1A |= (1<<COM1A1)|(0<<COM1A0)|(0<<COM1B1)|(0<<COM1B0)|(0<<FOC1A)|(0<<FOC1B)|(0<<WGM11)|(0<<WGM10); /* CS12 CS11 CS10 Description 0 0 0 No clock source (Timer/Counter stopped). 0 0 1 clkI/O/1 (No prescaling) 0 1 0 clkI/O/8 (From prescaler) 0 1 1 clkI/O/64 (From prescaler) 1 0 0 clkI/O/256 (From prescaler) 1 0 1 clkI/O/1024 (From prescaler) */ TCCR1B |= (0<<ICNC1)|(0<<ICES1)|(1<<WGM13)|(0<<WGM12)|(0<<CS12)|(1<<CS11)|(0<<CS10); TCNT1H |= 0x00; TCNT1L |= 0x00; /* ICR1 = 10000 ; BIN = 10 0111(ICR1H) 0001 0000(ICR1L) */ ICR1H = 0x27; ICR1L = 0x10; DDRD=0x20; while (1){ OCR1A = ((5*TOP)/100); //delay_ms(2000); //OCR1A = ((7.5*TOP)/100); //delay_ms(2000); OCR1A = ((10*TOP)/100); // delay_ms(2000); } }
دیدگاه