A popular miniature servo motor SG90. It runs at 5V. The control pulse is between 4.8 V to 5V. |
For more timing and angle relationship click here for more information.
In this example, PIC16F887 listens to the inputs from three buttons. They are used to control three angles of rotations, 0, 90 and 180 degrees.
Schematic diagram. PIC16F887 clocks at 4 MHz with 5 V DC supply. Three button used to rotate the servo between 0 and 180 degrees. |
Source code is written in XC8.
#include"xc.h"
// CONFIG1
#pragma config FOSC = XT
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = ON
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config IESO = ON
#pragma config FCMEN = ON
#pragma config LVP = ON
// CONFIG2
#pragma config BOR4V = BOR40V
#pragma config WRT = OFF
#define _XTAL_FREQ 4000000
#define sw0 RD0
#define sw90 RD1
#define sw180 RD2
void rotate0(void){
RD7=1;
__delay_us(1000);
RD7=0;
__delay_us(19000);
}
void rotate90(void){
RD7=1;
__delay_us(1500);
RD7=0;
__delay_us(18500);
}
void rotate180(void){
RD7=1;
__delay_us(2000);
RD7=0;
__delay_us(18000);
}
void main(void){
PORTD=0x00;
TRISD=0x07;
while(1){
if(sw0==0){
__delay_ms(100);
rotate0();
}
if(sw90==0){
__delay_ms(100);
rotate90();
}
if(sw180==0){
__delay_ms(100);
rotate180();
}
}
}
I took a screen shot of the simulation here.
A simulation screen shot. The picture show the rotation command of 90 degree with some rotation angle errors. |
This blog is incredibly insightful! The content is well-researched and presented in an engaging manner. I appreciate the valuable information shared. Keep up the great work, and I look forward to reading more!
ReplyDeleteHalltronics
Enrgtech
200 W Servo Drive