历史上的今天
今天是:2024年09月26日(星期四)
2021年09月26日 | 基于STM8S的无感方波BLDC控制
2021-09-26 来源:eefocus
程序和电路参考的是下面这本书。程序是在这本书的基础上自己改的,电路的话基本上就是这本书的电路了。
反电势过零是采用的比较器的方式(最简单的方法了);
启动就是三段式启动,原理看起来很简单,但是实现起来还是花了点时间,因为这也是我第一次弄无感,全靠自己摸索,也没人问。最重要的是调试,因为这个涉及到开环启动,所以启动时的换向时间实际是自己设置的,所以需要不断的试,试过很多次后大概就知道这个规律了。
其实我觉得最重要的部分就是启动了,只要能启动得起来,那么就跟有霍尔的也没啥大区别了。
无感方波BLDC视频:http://v.youku.com/v_show/id_XMzEzMTg2NzgxNg==.html?spm=a2hzp.8244740.0.0
对于视频的一点说明:我设置的PID参数较小,所以在视频里面看到它响应很慢。
无感电机控制都是自学的,基本上就是看的下面这本书。里面有理论也有源程序。

//反电势过零中断
u8 Steps=0;
@far @interrupt void EXTI_PORTB_IRQHandler(void)
{
u8 bHStatus =0,i;
Speed_Count++;
bHStatus=(GPIO_ReadInputData(GPIOB)>>5)&0x07; //检测三相反电势信号--这儿倒是跟有霍尔的差不多
for(i=0;i<150;i++);
i=(GPIO_ReadInputData(GPIOB)>>5)&0x07;
if(bHStatus!=i)return;
if(StOk==0) //检查换向顺序是否正确,达到一定正确次数,则置StOK=1;
{
if(bHStatus==CheckBEMF[Steps])
{
StCountComm++;
Steps++;
if(Steps>5)Steps=0;
}
else
{
StCountComm=0; //换向顺序错误,则计数清零
}
if(StCountComm>=STCount) //换向顺序正确
{
StOk=1;
}
}
if(StOk==1)
{
if(Close_flag == 0) //我自己设置了先让它以开环转稳定了再进入闭环
{
Close_count++;
if(Close_count == 500)Close_flag = 1;;
Commutation(bHStatus,outpwm);
}
else if(Close_flag == 1)
{
Close_count = 0;
Commutation(bHStatus,outpwm);
}
}
}
启动部分的代码如下,对于不同的电机,启动时的换向时间需要自己设置。
//换向顺序:1 3 2 6 4 5
u8 Sensorless_START(void)
{
u16 tem_c;
u16 Com_time=0;
PID_init();
GPIOB->CR2|=BIT5|BIT6|BIT7;
EXTI->CR1|=BIT2|BIT3; //配置反电势的三个输入口,开启中断触发
StOk=0; //第一次定位
bHallStartStep=4;
outpwm=350;
Commutation(bHallStartStep,outpwm);
for(tem_c=0;tem_c<40000;tem_c++);
bHallStartStep=5; //第二次定位
outpwm=350;
Commutation(bHallStartStep,outpwm);
for(tem_c=0;tem_c<30000;tem_c++);
Com_time=0;
StCountComm=0;
enableInterrupts(); //使能中断
do{
bHallStartStep=bHallSteps[step];
step++;
if(step>5)step=0;
outpwm+=1; //启动过程中不断增加占空比
Commutation(bHallStartStep,outpwm);
ter_c=ter_c-200; //启动过程中不断减少换向时间
if(ter_c<2000)ter_c = 2000;
for(tem_c=0;tem_c }while(StOk==0&&Com_time<250); //达到一定次数还未启动成功,则停止启动 //StOK:启动成功则=1 if(Com_time>=250) { TIM1->BKR &= (uint8_t)(~TIM1_BKR_MOE); PWM_A_OFF; PWM_B_OFF; PWM_C_OFF; return 0; } return 1; }
上一篇:TIM1输入捕获测量方波信号周期
下一篇:STM8配置GPIO输入输出功能
史海拾趣
|
各俠大俠: 我想在WINCE下實現用SPI一次接收16位數據,因為S3C2440的SPI是8位的,而我的設備輸出是16位的,如何寫相應的驅動?用中斷還是查詢?歡迎指教.… 查看全部问答> |
|
E:\\WINCE500\\PBWorkspaces\\win_ce_pc\\WINCE500\\CEPC_x86\\cesysgen\\sdk\\lib\\x86\\retail\\coredll.lib E:\\WINCE500\\public\\common\\oak\\lib\\x86\\retail\\wzctool.lib E:\\WINCE500\\PBWorkspaces\\win_ce_pc\\WINCE500\\CEPC_x86\\ce ...… 查看全部问答> |
|
引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码:#ifdef __cplusplus extern \"C\" { #endif /*...*/ #ifdef __cplusplus } #endif 它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从 ...… 查看全部问答> |
|
之前一直用L6205D的H桥驱动电机,ST的话,一组线圈,由2个IN脚控制,那么一个脚接低电平,另外一个脚给PWM,容易理解电流的转动方向,要反向的话,低电平信号和PWM信号反过来输入就可以了 IN1 IN2 OUT1 OUT2 H L Vs ...… 查看全部问答> |




