• 方案介紹
    • 一、項(xiàng)目背景及目的
    • 二、設(shè)計(jì)思路
    • 三、設(shè)計(jì)代碼
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

通過51單片機(jī)實(shí)現(xiàn)直流電機(jī)調(diào)速

04/20 08:28
984
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請(qǐng)聯(lián)系.docx

共1個(gè)文件

一、項(xiàng)目背景及目的

隨著各種工業(yè)生產(chǎn)設(shè)備和機(jī)械設(shè)備的廣泛使用,直流電機(jī)調(diào)速技術(shù)的研究和應(yīng)用越來(lái)越受到人們的重視,具有廣泛的應(yīng)用前景。本項(xiàng)目通過51單片機(jī)實(shí)現(xiàn)直流電機(jī)調(diào)速功能,為實(shí)際工程應(yīng)用提供一個(gè)可靠和有效的調(diào)速方案。

image-20230618190643215

image-20230618190706115

二、設(shè)計(jì)思路

如果需要下載項(xiàng)目工程,可以去這里:
https://blog.csdn.net/xiaolong1126626497/category_10192120.html

(1)系統(tǒng)原理

本系統(tǒng)采用PWM脈沖寬度調(diào)制)技術(shù)對(duì)直流電機(jī)進(jìn)行調(diào)速控制。通過改變輸出信號(hào)占空比,實(shí)現(xiàn)對(duì)直流電機(jī)的轉(zhuǎn)速控制。系統(tǒng)中包括51單片機(jī)、直流電機(jī)、電路板以及控制程序。

(2)硬件設(shè)計(jì)

  1. 電機(jī):使用24V直流電機(jī)實(shí)現(xiàn)實(shí)際轉(zhuǎn)速控制。
  2. 驅(qū)動(dòng)電路:使用四個(gè)寄生二極管三相全橋驅(qū)動(dòng)電路控制電機(jī),使電機(jī)可以正反轉(zhuǎn),并控制電機(jī)的速度。
  3. 51單片機(jī):使用STC89C52單片機(jī),作為控制核心。單片機(jī)通過捕捉外部信號(hào)和計(jì)算控制電壓來(lái)實(shí)現(xiàn)對(duì)電機(jī)的轉(zhuǎn)速控制。同時(shí)還需通過編寫程序來(lái)控制電機(jī)的啟動(dòng)、停止等操作。
  4. 顯示器:使用1602LCD顯示屏,顯示轉(zhuǎn)速和其他操作信息。
  5. 電源:使用24V直流電源作為系統(tǒng)的電源。

(3)軟件設(shè)計(jì)

  1. 采用C語(yǔ)言編寫單片機(jī)程序進(jìn)行控制。
  2. 實(shí)現(xiàn)PWM技術(shù)控制直流電機(jī)的轉(zhuǎn)速。通過調(diào)整占空比來(lái)改變輸出電壓,從而達(dá)到控制直流電機(jī)轉(zhuǎn)速的目的。
  3. 使用定時(shí)器模塊實(shí)現(xiàn)計(jì)數(shù)來(lái)測(cè)量電機(jī)的轉(zhuǎn)速,并通過顯示器實(shí)時(shí)顯示。
  4. 設(shè)定按鍵和旋鈕控制,如啟動(dòng)、停止電機(jī)等。

三、設(shè)計(jì)代碼

#include <reg52.h>

sbit MotorP = P1^0;      //定義電機(jī)正極口
sbit MotorN = P1^1;      //定義電機(jī)負(fù)極口
float V_motor = 0;       //定義電機(jī)控制電壓
unsigned int speed = 0;  //定義電機(jī)轉(zhuǎn)速

//初始化函數(shù)
void Init()
{
    //定時(shí)器計(jì)數(shù)器及工作模式設(shè)置
    TMOD |= 0x01;         //T0定時(shí)器模式1
    TH0 = 0xfc;           //定時(shí)計(jì)數(shù)最大值,控制PWM頻率
    TL0 = 0x00;           //初值為0
    TR0 = 1;              //啟動(dòng)T0定時(shí)器

    //ADC設(shè)置
    ADC_CONTR = 0x84;     //啟動(dòng)AD轉(zhuǎn)換器
}

//ADC采樣函數(shù)
float ADConvert()
{
    ADC_CONTR &= 0xEF;    //清除AD轉(zhuǎn)換結(jié)束標(biāo)志位
    ADC_CONTR |= 0x40;    //啟動(dòng)AD轉(zhuǎn)換
    while(!(ADC_CONTR & 0x10));  //等待轉(zhuǎn)換完成
    return ADC_RES;       //返回轉(zhuǎn)換結(jié)果
}

//計(jì)算電機(jī)控制電壓函數(shù)
void ControlMotor()
{
    unsigned int value = ADConvert();  //采集電位器輸出
    V_motor = (value / 1023.0) * 5;    //根據(jù)電壓分壓公式計(jì)算電機(jī)控制電壓
}

//控制電機(jī)函數(shù)
void DriveMotor()
{
    if(V_motor >= 2.5)       //當(dāng)電位器輸出電壓大于2.5V時(shí)電機(jī)正轉(zhuǎn),當(dāng)小于2.5V時(shí)電機(jī)反轉(zhuǎn)
    {
        MotorP = 1;
        MotorN = 0;
    }
    else if(V_motor < 2.5)
    {
        MotorP = 0;
        MotorN = 1;
    }

    speed = 60 * 1000 / (3 * TH0 * 12);   //根據(jù)定時(shí)器計(jì)數(shù)值計(jì)算電機(jī)轉(zhuǎn)速
}

//顯示函數(shù)
void Display()
{
    //將電機(jī)轉(zhuǎn)速和狀態(tài)信息顯示在LCD顯示屏上
}

//主函數(shù)
void main()
{
    Init();       //初始化函數(shù)

    while(1)
    {
        ControlMotor();     //計(jì)算電機(jī)控制電壓
        DriveMotor();       //控制電機(jī)運(yùn)行
        Display();          //顯示電機(jī)狀態(tài)
    }
}

  • 更多詳細(xì)資料請(qǐng)聯(lián)系.docx
    下載

相關(guān)推薦