大脸猫爱吃鱼
发表于 2024-11-1 04:24:52
梁工 发表于 2024-10-31 21:46
因为比较器也使用了ADC输入端,为了避免竞争冲突,启动电机后在换相程序里做ADC,电机停止后在主程序做AD ...
忽略比较器这边的使用了,理解了!谢谢梁工
zwf33335
发表于 2024-11-3 18:59:12
梁工你好!我按你开源的电路和开源程序做一个无霍尔的无刷直流电机控制器,已经做完了,调试好用,我要用编码器按档位调速,分六个档位,利用P32外中断和P34端口接编码器AB脚,利用外中断0读取编码器信号,都很好,就是用编码器的信号数据改变占空比,调速调不了,请教一下必须用PWM编码器函数调速吗?我这个利用外中断获取编码器信号数据调整占空比调速应该怎么编写程序,请梁工百忙中指教一下好吗。谢谢、 ...
梁工
发表于 2024-11-3 23:01:16
zwf33335 发表于 2024-11-3 18:59
梁工你好!我按你开源的电路和开源程序做一个无霍尔的无刷直流电机控制器,已经做完了,调试好用,我要用编 ...
要用PID控制才行,根据编码器信号计算速度,再根据给定的速度,做PID稳速控制,其实不需要编码器都可以的,从换相信号即可得到转速信号,可以参考我的PID例子:
三相无刷电机驱动-32G系列-无HALL-PID控制-OLED显示-串口绘图
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7472
(出处: 国芯技术交流网站)
zwf33335
发表于 2024-11-4 04:51:12
梁工 发表于 2024-11-3 23:01
要用PID控制才行,根据编码器信号计算速度,再根据给定的速度,做PID稳速控制,其实不需要编码器都可以的 ...
谢谢梁工{:victory:}我这个编码器是一个实际应用的调速,并且方便档位调速,速度准确,电位器调速方便无级调速,对某一个速度不准确
梁工
发表于 2024-11-4 09:49:55
zwf33335 发表于 2024-11-4 04:51
谢谢梁工我这个编码器是一个实际应用的调速,并且方便档位调速,速度准确,电位器调速方便无级调速,对某 ...
不好意思,我以为编码器是装在电机轴上测速度的,原来是手调编码器,海子街将调整的PWM值代替电位器的就可以了。
zwf33335
发表于 2024-11-4 18:04:53
梁工您好!
这是我用EC11编码器调速在您的调速程序上改动的程序,出现的现象:就是换挡时,要停顿一下,然后启动效果就不好了,那种方法或函数可以让换挡时不停顿一下,连续换挡哪,请梁工指教帮助为盼
if(B_RUN) //正在运行中
{ ///*******************编码器EC11型 调速**********************************
// if(PWM_Value < PWW_Set) ADC11_Duty = PWM_Value+150;//PWM_Value++; //加速油门跟随电位器
//
// if(PWM_Value > PWW_Set) PWM_Value--;//减速油门跟随电位器
//======================rotate编码器档位数值==============================================================
if(rotate==0) //关闭第0挡
{
adc11 = 0;
B_RUN = 0;
PWM_Value = 0;
CMPCR1 = 0x8C; // 关比较器中断
PWMA_ENO= 0;
PWMA_CCR1L = 0;
PWMA_CCR2L = 0;
PWMA_CCR3L = 0;
PWM1_L=0;
PWM2_L=0;
PWM3_L=0;
}
if(rotate==1) //启动 第1挡速度
{
PWM_Value++;
adc11 = ((adc11 *7)>>3) + PWM_Value+200;
if(PWM_Value>40)
PWM_Value = 40;
}
if(rotate==2) //第2挡速度
{
PWM_Value++;
adc11 = ((adc11 *7)>>3) + PWM_Value+200;
if(PWM_Value>80)
PWM_Value = 80;
}
if(rotate==3) //第3挡速度
{
PWM_Value++;
adc11 = ((adc11 *7)>>3) + PWM_Value+200;
if(PWM_Value>120)
PWM_Value = 120;
}
if(rotate==4) //第4挡速度
{
PWM_Value++;
adc11 = ((adc11 *7)>>3) + PWM_Value+200;
if(PWM_Value>160)
PWM_Value = 160;
}
if(rotate==5) //第5挡速度
{
PWM_Value++;
adc11 = ((adc11 *7)>>3) + PWM_Value+200;
if(PWM_Value>200)
PWM_Value = 200;
}
if(rotate==6) //第6挡速度
{
PWM_Value++;
adc11 = ((adc11 *7)>>3) + PWM_Value+200;
if(PWM_Value>255)
PWM_Value = 255;
}
//===================================================================================
if(PWM_Value < (D_START_PWM-10)) //停转, 停转占空比 比 启动占空比 小10/256
{
B_RUN = 0;
PWM_Value = 0;
CMPCR1 = 0x8C; // 关比较器中断
PWMA_ENO= 0;
PWMA_CCR1L = 0;
PWMA_CCR2L = 0;
PWMA_CCR3L = 0;
PWM1_L=0;
PWM2_L=0;
PWM3_L=0;
}
else
{
PWMA_CCR1L = PWM_Value;
PWMA_CCR2L = PWM_Value;
PWMA_CCR3L = PWM_Value;
}
}
else //启动
{
if(rotate==1 )
{
//PWM_Value = 40;
adc11 = ((adc11 *7)>>3) + PWM_Value+200;//Get_ADC10bitResult(11);//ADC11输出数据
} //直接用数据代替,就直接启动,数值要Get_ADC10bitResult(11)=200 以上
}
j = adc11;
if(j != adc11)
j = adc11;
PWW_Set = (u8)(j >> 5); //油门是8位的
后附视频
zwf33335
发表于 2024-11-4 18:10:41
本帖最后由 zwf33335 于 2024-11-4 18:11 编辑
梁工您好!这是三相无刷无感直流风机视频机调速程序部分视频
zwf33335
发表于 2024-11-4 20:05:34
21cnxin 发表于 2023-4-15 17:18
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2051&extra=
冲哥淘宝店, 有售套件,亲们自己 ...
冲哥你好,能否把你的编码器调速程序分享一下,谢谢
zwf33335
发表于 2024-11-6 21:12:27
梁工你好!
我按您开源的电路和程序做的三相无刷无感直流风机已经做好了,转速很高,但就是启动时,方向总是不固定,有时顺时针启动,有时逆时针启动,怎么回事啊?请指导如何调整参数
zwf33335
发表于 2024-11-6 21:13:39
梁工你好!
我按您开源的电路和程序做的三相无刷无感直流风机已经做好了,转速很高,但就是启动时,方向总是不固定,有时顺时针启动,有时逆时针启动,怎么回事啊?请指导如何调整参数。附视频