找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2431|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

BLCD無刷電機(jī)仿真模型 附單片機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
BLDC無刷電機(jī)的驅(qū)動(dòng)都是用方波,我想了想。能不能簡(jiǎn)化一下。STC8G單片機(jī)IO口輸出頻率可以到30KHZ左右的。
然后直接用3個(gè)IO口PWM方式驅(qū)動(dòng)三個(gè)2104單端半橋驅(qū)動(dòng)。組成120度正玄波呢?
在利用反饋?zhàn)奉l率不就可以想怎么控制就怎么控制了嗎?
說干就干。
代碼非常簡(jiǎn)單。驅(qū)動(dòng)方式采用兩兩導(dǎo)通制
電路原理圖如下:



單片機(jī)源程序如下:
#include <stc8.h>                        //調(diào)用51常規(guī)庫頭文件
#include <INTRINS.H>
#define uint unsigned int   //宏命令,聲明uint替代unsignde int
#define uchar unsigned char        //宏命令,聲明uchar替代unsigned char

sbit a=P2^0;
sbit b=P2^1;
sbit c=P2^2;
sbit hla=P2^3;            //外接393比較器 檢測(cè)A相
sbit hlb=P2^4;           //外接393比較器  檢測(cè)B相
sbit hlc=P2^5;           //外接393比較器  檢測(cè)C相

uchar pwm,num,mod,ym;
uchar scnt;
uchar azkb,bzkb,czkb;

void main()                                        //主程序
{  
   P0M0=0X00;
   P0M1=0X00;
   P1M0=0X00;
   P1M1=0X00;
   P2M0=0X00;
   P2M1=0X00;
   P4M0=0X00;
   P4M1=0X00;
   P5M0=0X20;
   P5M1=0X00;
   P6M0=0X00;
   P6M1=0X00;
   P7M0=0X00;
   P7M1=0X00;
   P3M1=0x00;                                 
   P3M0=0x00;

   ym=100;  //油門                                

   azkb=5;
   bzkb=5;
   czkb=5;                        
   while(1)
   {

        pwm++;if(pwm>11){pwm=0;}
        mod++;
        if(mod>ym)
        {
        switch(num)
         {
          case 0 : if(azkb<9){azkb++;} if(bzkb>1){bzkb--;} if(czkb>5){czkb--;} if(hlc==0&scnt==0){scnt=1;}if(hlc==1&scnt==1){scnt=2;} if(hlc==0&scnt==2){scnt=0;num=1;} break;         //AB    檢測(cè)C相過零點(diǎn),并且經(jīng)過兩次上升沿濾波
          case 1 : if(azkb<9){azkb++;} if(bzkb<5){bzkb++;} if(czkb>1){czkb--;} if(hlb==0&scnt==0){scnt=1;}if(hlb==1&scnt==1){scnt=2;} if(hlb==0&scnt==2){scnt=0;num=2;} break;         //AC   檢測(cè)B相過零點(diǎn),并且經(jīng)過兩次上升沿濾波
          case 2 : if(azkb>5){azkb--;} if(bzkb<9){bzkb++;} if(czkb>1){czkb--;} if(hla==0&scnt==0){scnt=1;}if(hla==1&scnt==1){scnt=2;} if(hla==0&scnt==2){scnt=0;num=3;} break;         //BC   檢測(cè)A相過零點(diǎn),并且經(jīng)過兩次上升沿濾波
          case 3 : if(azkb>1){azkb--;} if(bzkb<9){bzkb++;} if(czkb<5){czkb++;} if(hlc==0&scnt==0){scnt=1;}if(hlc==1&scnt==1){scnt=2;} if(hlc==0&scnt==2){scnt=0;num=4;} break;         //BA   檢測(cè)C相過零點(diǎn),并且經(jīng)過兩次上升沿濾波
          case 4 : if(azkb>1){azkb--;} if(bzkb>5){bzkb--;} if(czkb<9){czkb++;} if(hlb==0&scnt==0){scnt=1;}if(hlb==1&scnt==1){scnt=2;} if(hlb==0&scnt==2){scnt=0;num=5;} break;         //CA   檢測(cè)B相過零點(diǎn),并且經(jīng)過兩次上升沿濾波
          case 5 : if(azkb<5){azkb++;} if(bzkb>1){bzkb--;} if(czkb<9){czkb++;} if(hla==0&scnt==0){scnt=1;}if(hla==1&scnt==1){scnt=2;} if(hla==0&scnt==2){scnt=0;num=0;} break;         //CB  檢測(cè)A相過零點(diǎn),并且經(jīng)過兩次上升沿濾波
         }
         mod=0;
        }

        if(pwm>azkb){a=0;} else{a=1;}
        if(pwm>bzkb){b=0;} else{b=1;}
        if(pwm>czkb){c=0;} else{c=1;}

   }
}


最后查看輸出波形



可以看到輸出的階梯波。主要是我仿真的BLDC模型電感設(shè)置得太小了。之后0.01UH。
下面再看我把BLDC電感設(shè)置為0.1UH的波形。



評(píng)分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:718536 發(fā)表于 2023-3-3 22:07 | 只看該作者
檢測(cè)過零點(diǎn),就跟音箱過零保護(hù)一樣,原理是檢測(cè)音箱磁鐵的反電動(dòng)勢(shì),檢測(cè)到直流電就保護(hù)。我這里是檢測(cè)到直流(即轉(zhuǎn)子跨越定子磁場(chǎng))就換相。切換下一步相序形成追頻接力。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1060905 發(fā)表于 2023-8-18 10:50 | 只看該作者
可以看看工程不
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表