OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 3028|回复: 2

ATEMGA169捕捉测转速,低转速不能正确测试

[复制链接]

  离线 

5

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-3-11
在线时间
5 小时
发表于 2018-1-19 17:31:05 | 显示全部楼层 |阅读模式
//T1初始化
void tc1_init()
{
                 TCCR1B=0X42;//8·ÖÆμ
                 TIMSK1=0X21;
                 SREG|=0X80;
               
}

#pragma interrupt_handler TC1_yichu:10  //T1溢出中断
void TC1_yichu()
{
          ov_counter++;
          
}

#pragma interrupt_handler TC1_buzhuo:7  //T1捕捉中断
void TC1_buzhuo()
{
       
          if(icp_n==1)   
          {        
                        falling_edge=ICR1L;
                        temp=ICR1H;
                        falling_edge|=temp<<8;
                        buhuobiaozhiwei=1;
                       
                        TIMSK1=0X00;                          
          }
          else if(icp_n==0)
      {
                        rising_edge=ICR1L;
                        temp=ICR1H;
                        rising_edge|=temp<<8;   
          }
          icp_n++;
}

void main()
{

                 DDRD &=~(1<<PD0);  
                 PORTD|=BIT(0);  
                 tc1_init();
                 T2_init();
                 IO_init();         
                 uart_init(9600);
                 SREG|=BIT(7);                     
                 while(1)
                 {               
                          if(buhuobiaozhiwei)   //完成一次测量
                          {
                                        if(falling_edge >=rising_edge)
                                       
                                             pulse_clocks = (ulong)falling_edge -(ulong)rising_edge;
                                        else
                                             pulse_clocks = (ulong)falling_edge -(ulong)rising_edge+(ulong)ov_counter*65535;

                                        fadongjizhuansu=60000000/pulse_clocks;
                                    buhuobiaozhiwei=0;
                                        ov_counter=0;
                                        icp_n=0;
                                        TIFR1=0X21;
                                        TIMSK1=0X21;                                       
                          }
                       
                         
       
                 }
}

现在测试效果,900多以下就不能正常了,大于这个就可以。因为转速低于900多,就会溢出,也就超过了65535,不知道怎么弄了,求助各位大神。
8M外部晶振。

回复

使用道具 举报

  离线 

5

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-3-11
在线时间
5 小时
 楼主| 发表于 2018-1-19 17:32:31 | 显示全部楼层
对啦,这里还有其他的没有写出来,有显示函数还有串口函数,但不影响,现在1000以上,都能正常显示。
回复 支持 反对

使用道具 举报

  离线 

3

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-6-29
在线时间
9 小时
发表于 2018-3-1 13:57:10 | 显示全部楼层
很可以很可以很可以
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

必看,必学:"原子哥”力荐上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-9-22 03:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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