Microchip
直播中

杨芳

7年用户 287经验值
私信 关注
[问答]

如何使用Timer2控制加速度

我的设计是使用pic16f1937并在MPLABX V3.35中开发它,XC8 v1.38和ICD3I使用Fosc=4MHzI,使用操纵杆y-pos的10位模数转换器来控制电机的速度(哪个齿轮)。该电机在操纵杆y-pos 2.5V和4V之间有5个前进齿轮,在2.5V和1V之间有3个倒档。上移到FWD5下移到REV3工作正常。我想用timer2控制加速度(我换档的速度有多快),但是中断例程中的计数器不会改变换档的速度。无论在中断服务例程中如何更改计数器,它似乎都会快速移动。以下是我的计时器2配置:UINT8._to_.=0;UINT32 timer_2_cntr=0;T2CONbits.T2OUTPS=0b1111;将//设置postscaler为1:16T2CONbits.T2CKPS=0b11;将//设置预调焦器1:64PR2=0xFF;最大周期寄存器PIR1bits.TMR2IF=0;//复位定时器2中断标志PIE1bits.TMR2IE=1;//启用定时器2中断T2CONbits.TMR2ON=1;//打开定时器2我的定时器2中断例程是://定时器2中断处理程序,用于设置加速/减速比率//一旦电机换档等待X秒以继续换档(PIR1bits.TMR2IF){PIR1bits.TMR2IF=0;timer_2_cntr++;if(timer_2_cntr=0xFFFFFF){//加速周期调整_timer_2_cntr=0;._to_.=1;}加速周期调整(增加计时器_2_c)没有人知道为什么吗?这是控制电机加速的最佳方法吗?谢谢

回帖(11)

王璨

2020-4-27 12:47:08
换档后是否重置“Read YytoToSHIFT”?这可能是显而易见的,但是很容易遗漏。timer_2_cntr的事情相当可疑:我是否假设您在每次TMR2溢出时都收到一个中断?如果其他情况正常,则当前代码的TMR2IF速率为15Hz左右。通过0xFFFF比较,如果一切正常,则每隔4294s移动一次——或多或少从不。因此请检查._to_shift的重置!当做
举报

谢剑萍

2020-4-27 12:57:54
这些也是我的计算,我的意思是包括Read YytoToSHIFT重置代码。此代码低于ADC Y-POS读数,并决定所需的齿轮是什么。参见下面的重置代码:if(._.<._.){if(._to_.){._to_.=0;._.++;troll_._._up();}}否则if(._.>._.){if(._to_.){._to_.=0;._.--;troll_._._down();}否则;
举报

王璨

2020-4-27 13:09:25
非常神秘。4xxxxs超过1小时……除非——如果有比TMR2IF更多的东西需要清除,以便确认定时器中断……您每次进入TMR2 ISR时都有LED来切换吗?
举报

谢剑萍

2020-4-27 13:16:24
不幸的是,没有LED切换到自己的笔记:包括一个通用的LED故障排除
举报

更多回帖

发帖
×
20
完善资料,
赚取积分