注册 登录
查看: 420|回复: 12

KL26计数问题

[复制链接]
发表于 2014-6-9 09:34:28 | 显示全部楼层 |阅读模式
我用的一路ptm和一路lptm发现ptm计数还行但是lptm计数差别太大。想换一种分时计数 ,怎样学代码啊  ,求教
回复

使用道具 举报

 楼主| 发表于 2014-6-9 09:35:28 | 显示全部楼层
用ptm分时计数,
回复 支持 反对

使用道具 举报

发表于 2014-6-9 11:46:01 | 显示全部楼层
定时中断,切换不同的计数就好。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 13:15:48 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-9 11:46
定时中断,切换不同的计数就好。

tpm和lptm不能同时计数?我这个不开电机时lptm也有数1098但是开了电机就变成800多了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 13:16:16 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-9 11:46
定时中断,切换不同的计数就好。

这样正常?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 13:18:47 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-9 11:46
定时中断,切换不同的计数就好。

#define INT_COUNT  0xFFFF          //LPT 产生中断的计数次数  这个0xffff是不是也可以调  这是不是他的计数周期啊
回复 支持 反对

使用道具 举报

发表于 2014-6-9 13:34:44 | 显示全部楼层
sxy88665360 发表于 2014-6-9 13:15
tpm和lptm不能同时计数?我这个不开电机时lptm也有数1098但是开了电机就变成800多了.

应该是能的一起计数的,两个都是独立的模块
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 14:11:51 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-9 13:34
应该是能的一起计数的,两个都是独立的模块

怎么有这么大差别呢?动相同的幅度tpm和ltpm记得数差100多。怎么回事呢?
回复 支持 反对

使用道具 举报

发表于 2014-6-9 14:25:12 | 显示全部楼层
你应该这样测试速度  
把电机关掉 然后自己手推着小车直线前进 然后再比较统计的脉冲数量  

这样结果才准确一点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 14:42:09 | 显示全部楼层
a61115 发表于 2014-6-9 14:25
你应该这样测试速度  
把电机关掉 然后自己手推着小车直线前进 然后再比较统计的脉冲数量  

就是啊  一个是个位数  一个事百位数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 14:43:54 | 显示全部楼层
a61115 发表于 2014-6-9 14:25
你应该这样测试速度  
把电机关掉 然后自己手推着小车直线前进 然后再比较统计的脉冲数量  

这个百位数的是ltpm记得个位数的是tpm记得,是不是我的lptm初始化有问题?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 14:47:14 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-9 13:34
应该是能的一起计数的,两个都是独立的模块

void system_init(void)       //系统初始化
{   DisableInterrupts;      //关总中断  防止系统初始化被打断
   //DisableInterrupts
   // led_init(LED_MAX);            //初始化LED端口
    LCD5110_init();                 //5110液晶初始化
   /******ADC初始化*************/
    adc_init(ADC0_DM0);        // PTE21        //ADC初始化
    adc_init(ADC0_DM1);        // PTE17        //ADC初始化
    adc_init(ADC0_DM2);        // PTE19       //ADC初始化
    adc_init(ADC0_DM3);        // PTE23       //ADC初始化
    adc_init(ADC0_DP3);        // PTE22       //ADC初始化
    adc_init(ADC0_SE1);        // PTE16       //ADC初始化
     /******电机初始化*************/  
   tpm_pwm_init(TPM0, TPM_CH2,1000,0);        //初始化 TPM PWM ,使用 TPM0_CH3,频率为200k ,占空比为 30 / TPM0_PRECISON
                                                    // fire_port_cfg.h 里 配置 TPM0_CH3 对应为 PTE29、
   tpm_pwm_init(TPM0, TPM_CH3,1000,0);        //初始化 TPM PWM ,使用 TPM0_CH3,频率为200k ,占空比为 30 / TPM0_PRECISON
                                                    // fire_port_cfg.h 里 配置 TPM0_CH3 对应为 PTE30、
   tpm_pwm_init(TPM0, TPM_CH0,1000,0);        //初始化 TPM PWM ,使用 TPM0_CH3,频率为200k ,占空比为 30 / TPM0_PRECISON
                                                    // fire_port_cfg.h 里 配置 TPM0_CH3 对应为 PTE24、
   tpm_pwm_init(TPM0, TPM_CH1,1000,0);        //初始化 TPM PWM ,使用 TPM0_CH3,频率为200k ,占空比为 30 / TPM0_PRECISON
                                                     // fire_port_cfg.h 里 配置 TPM0_CH3 对应为 PTE25、
    /*********舵机初始化*******************/
   tpm_pwm_init(TPM1,TPM_CH0,50,355 );      //转向舵机 50HZ PTE20                 355+_     415    295                             

    /******编码器初始化*************/  
  
    tpm_pulse_init(TPM2,TPM_CLKIN1,TPM_PS_1); //初始化 TPM2 为脉冲累加,输入管脚为 TPM_CLKIN0_PIN ,分频系数为 1
     //tpm_pulse_init(TPM2,TPM_CLKIN1,TPM_PS_1); //初始化 TPM2 为脉冲累加,输入管脚为 TPM_CLKIN0_PIN ,分频系数为 1
     lptmr_pulse_init(LPT0_ALT2, 0xFFFF, LPT_Rising);         //初始化脉冲计数器,用LPT0_ALT1,即PTA19输入,每隔INT_COUNT产生中断(需要开中断才能产生中断),上升沿触发

    led_init(LED0);                                         //初始化LED0,PIT0中断用到LED0
    EnableInterrupts;       //开总中断
    pit_init_ms(PIT0, 2);                                   //初始化PIT0,定时时间为: 2ms
    set_vector_handler(PIT_VECTORn ,PIT_IRQHandler);       //设置PIT0的中断服务函数为 PIT0_IRQHandler
    enable_irq (PIT_IRQn);                                 //使能PIT0中断
  
}

/*********************** PWM **************************/

#define TPM0_PRECISON 100u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/TPM_PRECISON
#define TPM1_PRECISON 10000u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/TPM_PRECISON
#define TPM2_PRECISON 100u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/TPM_PRECISON
我的ltpm和tpm的定义有问题么?怎么一个记出来的是个位数,一个记得是百位数啊 ....3       100duo
回复 支持 反对

使用道具 举报

发表于 2014-6-11 00:33:42 | 显示全部楼层
sxy88665360 发表于 2014-6-9 14:47
void system_init(void)       //系统初始化
{   DisableInterrupts;      //关总中断  防止系统初始化 ...

ltpm的bug你修复了没有?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部