微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机STC15W408AS驱动无感无刷电机BLDC

51单片机STC15W408AS驱动无感无刷电机BLDC

时间:12-12 来源:互联网 点击:

ms(100);

while(1)

{

for(i=0;ireturn(1);

if(Step<5)Step++;

else Step=0;

StepXL();

}

}

2.5闭环控制

电机启动以后,需要闭环控制电机的通电时序和速度。这个在比较器的中断函数里面实现。

void CMP_INT(void) interrupt 21 // 比较器中断函数

{

CMPCR1 &=~0X40; // 需软件清除中断标志位

if(Step<5)Step++;

else Step=0;

StepXL();

}

ADC转换结束后,必须软件清除转换标志,再重新开启ADC转换

void ADC_ISR() interrupt 5

{

ADC_CONTR&=0xEF; // 清ADC转换标志

ADC_CONTR|=0X08; // 启动ADC转换

}

2.6通信控制接口

用电脑上的串口调试助手给单片机串口发送“启动”“加速”“减速”“停止”命令。这个功能放到主函数while循环中。

串口初始化函数:

void serial_open(void)

{

SCON = 0X50;//工作在串口模式

AUXR |= 0X04;//

TL2 = 0X71;// 9600 @35MHz

TH2 = 0Xfc;

AUXR|=0X10;

}

主函数:

void main(void)

{

uchar rec=0; // 定义串口接收数据变量

PWM_Init(); // 初始化PWM

ADC_Init(); // 初始化ADC

CMP_Init(); // 初始化比较器

serial_open(); // 打开串口

while (1)

{

if(RI) // 如果串口收到数据

{

rec=SBUF; // 把收到的数据给了rec

RI=0; // 串口接收标志清0

if(rec==0x22)// 加速命令

{

if(PWM_Value<250)

{

PWM_Value++; // 增加占空比

}

}

else if(rec==0x33)// 减速命令

{

if(PWM_Value>10)

{

PWM_Value--; // 减小占空比

}

}

else if(rec==0x11) // 启动命令

{

QiDong(); // 启动

ENABLE_CMP_INT; // 允许比较器中断

EA=1; // 打开全局中断

}

else if(rec==0x44) // 停止命令

{

CCAP0H=0;CCAP1H=0;CCAP2H=0; // 占空比都置0

EA=0; // 关闭全局中断

DISABLE_CMP_INT; // 关闭比较器中断

}

}

}

}

3.总结

上面的软件和硬件,只是实现了简单的控制转动。缺点:1.没有任何的保护程序,比如电流检测、堵转保护等。我在做实验的过程中,烧了2个PMOS、1个NMOS、3个TC4427A.2.比较器过0直接换相,有些提前。电机转动噪音比较大。期待日后改进吧!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top