383015160
发表于 2024-8-4 19:06:14
梁工求一份按键调速的例程参考哦
梁工
发表于 2024-8-4 19:29:43
本帖最后由 梁工 于 2024-8-4 19:32 编辑
383015160 发表于 2024-8-4 19:06
梁工求一份按键调速的例程参考哦
按键的很简单,,我没加上去,自己加两个按键可以接在P3.0 P.31,去掉电位器改变占空比,换成按键加减操作占空比即可,可以按键一次加减10,加快调整速度。
zhouyubo
发表于 2024-8-4 19:52:18
zhouyubo 发表于 2024-8-4 14:03
今天又用新做的实验板验证了一下,运转正常,就是电位器要拧到很高的位置才开始转动。先做的圆板上QFN的m ...
原来是指数的电位器太水了,换了个电位器调速正常了。驱动22V的250W高速吸尘器暴力电机也可以的。但是电压只能是4S不能上到5S。可能是moa换耐压问题吧。
383015160
发表于 2024-8-4 22:09:46
梁工 发表于 2024-8-4 19:29
按键的很简单,,我没加上去,自己加两个按键可以接在P3.0 P.31,去掉电位器改变占空比,换成按键加减操作 ...
好的谢谢
dbq406
发表于 2024-8-8 21:38:20
梁工,你好,根据中功率图纸参数,单片机STC32G12K128 ,12V电机正常启动,24V 启动抖动很大电流,是不是哪里要改变参数
梁工
发表于 2024-8-8 22:03:13
dbq406 发表于 2024-8-8 21:38
梁工,你好,根据中功率图纸参数,单片机STC32G12K128 ,12V电机正常启动,24V 启动抖动很大电流,是不是哪 ...
那个电路不能超过18V,否则MOSFET的栅压过高会烧MOSFET的。
要工作到24V,栅压要分压一下,其中一相如下:
dbq406
发表于 2024-8-8 22:09:16
梁工 发表于 2024-8-8 22:03
那个电路不能超过18V,否则MOSFET的栅压过高会烧MOSFET的。
要工作到24V,栅压要分压一下,其中一相如下 ...
我用2个560R电阻分压,但也一样,我的MOS管用永源微AP30G04GD管
梁工
发表于 2024-8-9 10:52:39
dbq406 发表于 2024-8-8 22:09
我用2个560R电阻分压,但也一样,我的MOS管用永源微AP30G04GD管
先用12V启动,慢慢调高电压,观察其正常否。
垂柳工作室
发表于 2024-8-10 22:55:21
请大佬详解一下红线这一句,不理解哦。电位器调到中间不动,程序开始运行时adc11 =0,进入主循环后,adc11 是不是一直增加?
void main(void)
{
WTST= 0; //CPU读取程序存储器的等待时间控制等于0即不等待。
CKCON = 0; //外部数据总线时钟控制寄存器(上电复位值为7,强烈建议上电初始化为0)
EAXFR = 1; //访问XFR区域的扩展SFR,需要先将EAXFR(PSW2.7)置1,
P_LED = 0; //LED指示灯亮
P2n_standard(0x08); //LED\P2M1 &= ~(0x08), P2M0 &= ~(0x08)
P3n_standard(0x0f); //串口,P3.2 P3.3,本例未用
P5n_standard(0x0c); //P5.2 P5.3用于测试指示
adc11 = 0;
PWMA_config();
PWMB_config();
ADC_config();
Timer0_config(); //Timer0初始化函数
PWW_Set = 0;
EA= 1; // 打开总中断
while (1)
{
if(B_4ms) // 4ms时隙
{
B_4ms = 0;
adc11 = (adc11 *3)/4 + Get_ADC12bitResult(11); //低通滤波结果为14位
YouMen= adc11 >> 5; //油门是9位的, P0.3 ADC11-->控制电位器输入
if(YouMen >= 256) PWW_Set = YouMen - 256, B_direct = 0; //顺时针, PWM设置值0~255
else PWW_Set = 255 - YouMen, B_direct = 1; //逆时针, PWM设置值0~255
if(!B_RUN && (PWW_Set >= 30)) // PWM_Set >= 30, 并且电机未运行, 则启动电机
{
P_LED = 0; //LED指示灯亮
PWM_Value= 30; //启动电机的最低PWM, 根据具体电机而定
PWMA_CCR1L = PWM_Value; //输出PWM
PWMA_CCR2L = PWM_Value;
PWMA_CCR3L = PWM_Value;
B_RUN = 1; //标注运行
StepMotor(); //启动换相
}
if(B_RUN) //正在运行中
{
P_LED = 0; //LED指示灯亮
if(PWM_Value < PWW_Set) PWM_Value++; //油门跟随电位器, 调速柔和
if(PWM_Value > PWW_Set) PWM_Value--;
if(PWM_Value < 20) // 停转
{
B_RUN = 0;
PWMB_IER = 0;
PWMB_CCER1 = 0;
PWMB_CCER2 = 0;
PWM_Value= 0;
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(++cnt500ms == 125) //500ms
{
cnt500ms = 0;
P_LED = ~P_LED; //LED指示灯闪烁, 待机
}
}
}
}
}
梁工
发表于 2024-8-11 17:12:26
垂柳工作室 发表于 2024-8-10 22:55
请大佬详解一下红线这一句,不理解哦。电位器调到中间不动,程序开始运行时adc11 =0,进入主循环后,adc11...
那是数字一阶低通滤波程序,a=0.25,fc/fs = a/2pi = 0.04。
数字一阶低通滤波对应的是模拟电路的一节RC滤波。