|
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)通制
電路原理圖如下:
BLDC仿真.png (67.02 KB, 下載次數(shù): 72)
下載附件
2023-3-3 21:55 上傳
單片機(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.png (59.93 KB, 下載次數(shù): 56)
下載附件
2023-3-3 21:56 上傳
可以看到輸出的階梯波。主要是我仿真的BLDC模型電感設(shè)置得太小了。之后0.01UH。
下面再看我把BLDC電感設(shè)置為0.1UH的波形。
BLDC仿真2.png (132.24 KB, 下載次數(shù): 65)
下載附件
2023-3-3 22:01 上傳
|
評(píng)分
-
查看全部評(píng)分
|