Servo SG90-9G PIC16F877A CCS
Code, mô phỏng điều khiển , Datasheet Servo SG90-9G dùng PIC16F877A CCS.
119 Downloads
I: Thông số kĩ thuật SG90-9G
Khối lượng : 9g
Kích thước: 22.2×11.8.32 mm
Momen xoắn: 1.8kg/cm
Tốc độ hoạt động: 60 độ trong 0.1 giây
Điện áp hoạt động: 4.8V(~5V)
Nhiệt độ hoạt động: 0 ºC – 55 ºC
II:Điều khiển SG90-9G
Kết nối dây màu đỏ với 5V, dây màu nâu với mass, dây màu cam với chân phát xung của vi điều khiển. Ở chân xung cấp một xung từ 1ms-2ms theo để điều khiển góc quay theo ý muốn.
III: Code điều khiển SG90-9G cho Pic16f877a dùngCCS 5.025
Code đơn giản mình viết để sử dụng delay để tạo xung 50Hz cấp cho chân RE0 trên Pic 16F877A
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#include <16F877A.h>
#device ADC=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used FOR I/O
#use delay(crystal=12MHz)
#define LED PIN_C1
#define DELAY 10
#define RC PIN_E0
#define LCD_ENABLE_PIN PIN_D2
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
INT16 Ticks = 0;
INT16 adc;
INT8 mode = 0;
#INT_EXT
void ngat_ngoai()
{
mode++;
IF(mode==1)
{
printf (LCD_PUTC, "\fMicro Servo SG90\nManual mode ");
}
IF(mode==2)
{
printf (LCD_PUTC, "\fMicro Servo SG90\nAuto mode ");
mode=0;
}
}
void main()
{
lcd_init ();
printf (LCD_PUTC, "\f MuaLinhKien.Vn \nPIC 16/18 Basic Kit");
enable_interrupts (INT_EXT) ;
enable_interrupts (INT_EXT_H2L);
delay_ms (2000);
setup_adc_ports (AN0);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel (0);
delay_us (10);
printf (LCD_PUTC, "\fMicro Servo SG90\nmualinhkien.vn");
enable_interrupts (GLOBAL);
WHILE (true)
{
IF (mode == 1)
{
adc = read_adc ();
IF (adc > 1000) adc = 1000;
output_high (RC);
delay_ms (1);
delay_us (adc);
output_low (RC);
delay_us (1000 - adc) ;
delay_ms (18);
}
IF (mode == 0)
{
for(int i=0;i<=50;i++ )
{
adc=1000;
output_high (RC);
delay_ms (1);
delay_us (adc);
output_low (RC);
delay_us (1000 - adc) ;
delay_ms (18);
}
for(i=0;i<=50;i++ )
{
adc=0;
output_high (RC);
delay_ms (1);
delay_us (adc);
output_low (RC);
delay_us (1000 - adc) ;
delay_ms (18);
}
}
}
}
|
http://laptrinhpic.info/dieu-khien-dong-co-rc-servo-sg90-90-voi-pic16f877a-su-dung-ccs/
Trả lờiXóa