金牌会员
- 积分
- 1462
- 威望
- 691
- 贡献
- 329
- 兑换币
- 391
- 注册时间
- 2016-11-2
- 在线时间
- 221 小时
- 毕业学校
- 山东蓝翔高级技工学校
|
使用LPTMR进行编码器测速,寄存器的计数值显示为零,测速函数是写在中断里的,到底是软件的问题还是硬件的问题?
- #include "include.h"
- /*************************
- 设置系统的全局变量
- *************************/
- extern u8 LPT_INT_count ; //LPT 脉冲计数器
- extern u8 TIME0flag_5ms ; //PTI0 5ms标志位
- extern u8 TIME0flag_10ms ; //PTI0 10ms标志位
- extern u8 TIME0flag_15ms ; //PTI0 15ms标志位
- extern u8 TIME0flag_20ms ; //PTI0 20ms标志位
- extern u8 TIME0flag_80ms ; //PTI0 80ms标志位
- s16 count = 0,RingtSpeedC=0,LeftSpeedC=0 ;
- s16 Atemp[6];
- u8 SendData[15]={0xff,0xff,0};
- extern u8 LPT_INT_count;
- #define LIN_COUT 100
- void main()
- {
- u8 i;
- DisableInterrupts; //禁止总中断
- //自行添加代码
- uart_init(UART0,115200);
-
- // FTM_PWM_init(FTM0 , CH0, 8000,0); //电机占空比设置初始化 占空比 = duty /(MOD +1 ) ;FTM_CnV_REG(FTMx[ftmn], ch) = cv;
- // FTM_PWM_init(FTM0 , CH1, 8000,0);
- FTM_PWM_init(FTM0 , CH2, 8000,0); //电机占空比设置初始化 占空比 = duty /(MOD +1 ) ;FTM_CnV_REG(FTMx[ftmn], ch) = cv;
- FTM_PWM_init(FTM0 , CH3, 8000,0);
-
- lptmr_counter_init(LPT0_ALT2, LIN_COUT, 2, LPT_Rising) ; //初始化脉冲计数器 ,PTC5输入捕获脚,LIN_cout =100,预处理为2,上升沿捕获
- pit_init_ms(PIT0, 5); //初始化PIT0,定时时间为: 5ms
-
- gpio_init (PORTA , 16, GPO,HIGH); ///LED闪烁
-
- EnableInterrupts; //开总中断
-
- while(1)
- {
-
-
- /*********************
- 10ms程序执行代码段
- *********************/
- if(TIME0flag_10ms == 1)
- {
- TIME0flag_10ms = 0 ;
- count = LPTMR0_CNR; //保存脉冲计数器计算值
- lptmr_counter_clean(); //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)
- count = LPT_INT_count * LIN_COUT + count; //间隔10ms的脉冲次数
-
- Atemp[0]=LPT_INT_count;
- Atemp[1]=count;
-
- LPT_INT_count = 0; //清空LPT中断次数
-
- for(i=0;i<6;i++)
- {
- SendData[i*2+2]=(u8)(Atemp[i]>>8);
- SendData[i*2+3]=(u8)Atemp[i];
- }
- }
-
- uart_sendN (UART0, SendData, 15);
-
- // FTM_PWM_Duty(FTM0 , CH0,0);
- // FTM_PWM_Duty(FTM0 , CH1,20);
- FTM_PWM_Duty(FTM0 , CH2,0);
- FTM_PWM_Duty(FTM0 , CH3,20);
- delayms(50);
- PTA16_OUT=~PTA16_OUT;
- }
- }
复制代码
|
|