AT89S52 製作遙控飛機
製作遙控飛機需要的材料會因為不同的設計而有所不同,以下列出一些可能需要的材料:AT89S52 微控制器
遙控器和接收器
电机和电调
螺旋桨
電池
飛機骨架
遙控器電池
程式碼範例可以參考下面的程式碼,程式碼簡單的設定了兩個通道,分別用來控制飛機的上下和左右移動:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit PWMA = P1^0;
sbit AIN2 = P1^1;
sbit AIN1 = P1^2;
sbit STBY = P1^3;
sbit BIN1 = P1^4;
sbit BIN2 = P1^5;
sbit PWMB = P1^6;
void delay(uint i)
{
while(i--);
}
void main()
{
uint m1 = 0, m2 = 0;
uchar command;
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x67;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1)
{
if(command == 0x80) // 前進
{
AIN1 = 1;
AIN2 = 0;
PWMA = 1;
STBY = 1;
}
else if(command == 0x40) // 後退
{
AIN1 = 0;
AIN2 = 1;
PWMA = 1;
STBY = 1;
}
else if(command == 0x20) // 左轉
{
BIN1 = 1;
BIN2 = 0;
PWMB = 1;
STBY = 1;
}
else if(command == 0x10) // 右轉
{
BIN1 = 0;
BIN2 = 1;
PWMB = 1;
STBY = 1;
}
else if(command == 0x00) // 停止
{
STBY = 0;
PWMA = 0;
PWMB = 0;
}
else
{
// 做一些錯誤處理
}
}
}
void timer0() interrupt 1
{
static uchar count = 0;
static uchar command = 0;
if(count == 0)
{
command = 0;
}
if(count < 8)
{
command <<= 1;
if(P3 & 0x01)
{
command |= 0x01;
}
}
if(count == 8)
{
count = 0;
}
else
{
count++;
}
}
以下是連接腳位的示意圖:
+-----+
| |
VCC
+-------------+--+ +--+
| | | |
| | | |
| | | |
| AT89S52 | | |
| | | |
| | | |
| | | |
+-------------+ | |
| |
P1.0-----PWMA-------+ |
P1.1-----AIN2---------+
P1.2-----AIN1----------+
P1.3-----STBY-----------+
P1.4-----BIN1-------------+
P1.5-----BIN2--------------+
P1.6-----PWMB----------------+
P3.0-----Signal (遙控信號輸入)
GND------------------------GND
這裡是腳位的解釋:
VCC 和 GND 分別是 AT89S52 的電源輸入和地線腳位。
PWMA、AIN2、AIN1 和 STBY 是控制馬達的四個控制腳。 PWMA 是 PWM 輸出, AIN2 和 AIN1 是控制電機轉向的輸入, STBY 是啟用和停用馬達的輸入。
BIN1、BIN2 和 PWMB 是控制另一個電機的三個控制腳。 BIN1 和 BIN2 是控制電機轉向的輸入, PWMB 是 PWM 輸出。
Signal 是從遙控器接收信號的腳位,這裡連接到 P3.0 上。
頁:
[1]