梁工
发表于 2024-7-8 11:44:37
激流 发表于 2024-7-8 10:57
梁工,“BLDC, 三相无刷直流电机驱动-STC32G-无HALL 或 带HALL,例子打板测试已OK”下,恒电流环控制功能 ...
不控制电流,控制电流环那是FOC的驱动,我这个就是方波驱动。
激流
发表于 2024-7-8 13:35:45
梁工 发表于 2024-7-8 11:44
不控制电流,控制电流环那是FOC的驱动,我这个就是方波驱动。
谢谢
zzbinfo
发表于 2024-7-9 17:17:02
test_tmp 发表于 2024-4-3 13:55
梁工,MOS驱动还可以试试fd6288,我参考您的stc8h的方案,做了一款无刷电调,使用的就是fd6288,集成度更高 ...
你好,你是用的官网的stc8h的代码吗?是否是完全没有更改。我哦也是用的官网的代码,用来驱动自己绕的低压的13万转的吹风机电机,驱动不了,异响。用的电路是改了fd6288q的。看到信息麻烦指点一二,谢谢。
梁工
发表于 2024-7-22 17:09:25
zzbinfo 发表于 2024-7-9 17:17
你好,你是用的官网的stc8h的代码吗?是否是完全没有更改。我哦也是用的官网的代码,用来驱动自己绕的低 ...
你手上有别的三相电机吗?有的话,可以换一个电机试试。
自己改绕的高速电机,可以用手转动一下(当三相发电机用,用另一个电机比如钻机带动更好)、示波器看一下输出的三相电动势是否均匀对称。
zzbinfo
发表于 2024-7-23 09:15:48
梁工 发表于 2024-7-22 17:09
你手上有别的三相电机吗?有的话,可以换一个电机试试。
自己改绕的高速电机,可以用手转动一下(当三相 ...
用来驱动其他航模电机启动正常,运转也正常。我找机会按你说的试试,看看,手转动电机输出的波形。不过我用商用的电调驱动这个自己绕的电机正常运转,启动也正常。
383015160
发表于 2024-7-23 13:47:20
test_tmp 发表于 2024-4-3 13:55
梁工,MOS驱动还可以试试fd6288,我参考您的stc8h的方案,做了一款无刷电调,使用的就是fd6288,集成度更高 ...
大神用FD6288Q 做预驱软件需要改吗
潘豆豆
发表于 2024-7-23 14:22:33
支持国产!
梁工
发表于 2024-7-23 15:13:29
383015160 发表于 2024-7-23 13:47
大神用FD6288Q 做预驱软件需要改吗
只要逻辑相位没改变,换什么驱动芯片都不用改程序。
fisholive
发表于 2024-7-23 17:02:14
梁工,
我是用STC408AS写的无刷电机程序,最近有开发一个低速版本,客户在使用时候,发现有偶尔不能启动问题。
产品都已经灌胶了,我直接在比较器中断和定时器中断插入~LED看下波形。
现在问题是启动后运行一段时间,波形是正常的。但是刚开始的波形有些奇怪。宽窄相差很大。
开始时候,我观察刚一个两个step大概是6ms,我设置开始PhaseTimeTmp都是2000ms賦值。
下面这段程序,应该每次只赋值PhaseTimeTmp【】,应该对整体影响不大?为啥开始运行的时候宽窄差异这么大?
程序哪里写的不对?
***********************************
PhaseTimeTmp = PhaseTime; //保存一次换相时间
if(++TimeIndex >= 8) TimeIndex = 0; //累加8次
PhaseTime=0;
********************************************
if(motor_start_flag==1) //马达启动
{
run_time_period=0;//清零运行阶段的相位波形计数
motor_start_flag=0;
B_start=1;
StartMotor();
for(i=0; i<8; i++) PhaseTimeTmp = 2000;
motor_lockedtime=0; TH0 = 0; TL0 = 0; //启动赋值一个换相为400ms,换相时间不能太长,会和启动程序后面波形叠加
low_speed_number=0; PWM_Value_flag=0;//重置低速计数
motor_RUN=1; XiaoCiCnt = 0; //初始进入时
CMPCR1 &= ~0x40;
Delay100us();
B_start=0; // 清除中断标志位
if(Step%2==0) CMPCR1 =0x9C; //下降沿中断
else CMPCR1 =0xAC; //上升沿中断
}
*****************************************
void CMP_INT(void) interrupt 21
{
u8 i;
CMPCR1 &= ~0x40; // 需软件清除中断标志位
Red_LED=~Red_LED;
if(XiaoCiCnt == 0)
{
TR0=0; // Timer0停止运行
if( motor_lockedtime==1 ) //切换时间间隔(Timer0)有溢出,中断间隔:32ms
{
motor_lockedtime = 0;
PhaseTime =6000; //0.4漆包线PhaseTime=5000 ,0.3漆包线PhaseTim=6000
}
else
{
PhaseTime = (((u16)TH0 << 8) + TL0) >> 1; // Time0 12T的一个时钟为0.5us, 定时器时间换算单位为us,定时器时间/2
if(PhaseTime >= 6000)PhaseTime=6000;// 一圈360度所用时间= 500us*6 (相数)*2 (2对极/四级转子)=6ms, rpm=1000ms/6ms*60(分钟)=10000,超过转速会保护
}
TH0 = 0; TL0 = 0;
TR0=1; // Timer0运行
PhaseTimeTmp = PhaseTime; //保存一次换相时间
if(++TimeIndex >= 8) TimeIndex = 0; //累加8次
PhaseTime=0;
for(i=0; i<8; i++) PhaseTime += PhaseTimeTmp; //求8次换相时间累加和
PhaseTime = PhaseTime >> 4; // >>4 = 值/16 ,求8次换相时间的平均值的一半, 即30度电角度
PhaseTime_average = PhaseTime <<1; // 单次相位平均时间
if(PhaseTime_average<=over_speed_limit )over_speed_number++; //限速详见over_speed_limit定值
if( PhaseTime >= 150) PhaseTime -= 50; //修正由于滤波电容引起的滞后时间,50us的滤波电容滞后时间
else
PhaseTime= 150;
AUXR &=~0x10; //Timer2停止运行
PhaseTime= PhaseTime<< 1; // 2个12T 时钟为计数1us
PhaseTime = 0 - PhaseTime;
T2H = (u8)(PhaseTime >> 8); //装载30度角延时
T2L = (u8)PhaseTime;
AUXR |=0x10; //Timer2开始运行,
XiaoCiCnt = 1; //1:需要消磁, 2:正在消磁, 0已经消磁
}
}
*********************************
void CMP_INT(void) interrupt 21
{
u8 i;
CMPCR1 &= ~0x40; // 需软件清除中断标志位
Red_LED=~Red_LED;
383015160
发表于 2024-8-2 19:22:08
梁工 发表于 2024-7-23 15:13
只要逻辑相位没改变,换什么驱动芯片都不用改程序。
好的 谢谢大神