那个 哥我在您的基础上去添加另一个电机为啥都不转了呢
void Parameter_adjustment(void)
{
if(MT_STARTL) //启动状态
{
PWM_DUTY_0 = PID_Choice(1,TargetL,speedL,PWM_DUTY_0,PID_P,1,1);//调用PID计算公式第一次加五
MotorL_PWM_Config(MT_STARTL,MT_DIR);
}
if(MT_STARTR) //启动状态
{
PWM_DUTY_1 = PID_Choice(1,TargetR,speedR,PWM_DUTY_1,PID_P,1,1);//调用PID计算公式第一次加五
MotorR_PWM_Config(MT_STARTR,MT_DIR);
}
}
PWM_DUTY_1把这个值放OLED屏上观察数值,用示波器观察PWM5和6有没有输出波型,这个程序要用编码器电机,接普通电机是不能正常工作的,PWMA已接了一路编码器,另一路我没看到有程序。 现在我把值直接给了寄存器PWMB_CCR7H PWMB_CCR7L PWMB_CCR5HPWMB_CCR5L pwm波形 能正常输出是想要的值 但是 赋给变量PWM_DUTY_0的值存到寄存器里会变化 占空比一直是百分之一 PID_Choice 调节后把值给PWM_DUTY_0 PWM_DUTY_0在存到寄存器会出错
你转动电机时侯检查Lspeed_number和Rspeed_number这两个值有没有娈化?我没记错的话STC一路PWM只能支持一路编码器,两路PWM同时接PWMA应该是不行的,这个手册里没有说,我之前做调试时好像碰到过这个问题,或者你可以直接咨询一下STC,PWMA能不能同时支持两路编码器 这个speed_number代表什么 是脉冲个数吗 如果是脉冲个数 除以 二之后 speed那就是脉冲数啊
还有就是speed那里 的除2是因为上升沿和下降沿都检测吗 lsm 发表于 2024-7-26 15:36
还有就是speed那里 的除2是因为上升沿和下降沿都检测吗
void ENCODER_Config()
{
PWMA_ENO = 0x00; // 配置成 TRGI 的 pin 需关掉 ENO 对应 bit 并配成 input
PWMA_PS |= 0x08; // 切换PWM管脚 P1.0 P6.2
PWMA_CCER1 = 0x00; // 清零CCER,关闭通道
PWMA_CCER2 = 0x00;
PWMA_CCMR1 = 0x21; // 通道模式配置为输入,接编码器 , 滤波器 4 时钟
PWMA_CCMR2 = 0x21; // 通道模式配置为输入,接编码器 , 滤波器 4 时钟
PWMA_CCER1 = 0x55; // 配置通道使能和极性
PWMA_CCER2 = 0x55; // 配置通道使能和极性
// PWMA_SMCR = 0x01; // 编码器模式 1
// PWMA_SMCR = 0x02; // 编码器模式 2
PWMA_SMCR = 0x03; // 编码器模式 3
PWMA_IER = 0x0A; // 使能中断
PWMA_CR1 |= 0x01; // 使能PWM计数器
}
看手册,里面有说明
页:
1
[2]