洪嵐峰 發表於 2023-3-18 06:45:20

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]
查看完整版本: AT89S52 製作遙控飛機