打印
[技术问题解答]

定时时间5ms跟过零不同步mc9s08dz60

[复制链接]
2228|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cl234583745|  楼主 | 2014-10-21 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cl234583745 于 2014-10-21 14:35 编辑

mc9s08dz60总线24m
市电半个周期10ms  要在期间输出50%占空比。定时5ms取反一次。逻辑分析仪看出来,开始还可以,然后就不同步了。需要在电压取反后关闭定时器,等外部中断检测到0电压时候再开始定时5ms后,再取反。大概就能同步了。但我关闭不了定时器啊,改怎么弄

程序的过程:等待市电过零点 (外部中断)---开始定时器2 (定时5ms)----5ms时间到了电平取反----5ms时间到了电平取反
                                                                 市电半个周期10ms                                           总是和这2个5ms不匹配。怎么办呢?我等第一个5ms过后 TPM2SC_TOIE=0;(想关闭定时器,等待外部中断时候再开定时器TPM2SC_TOIE=1;)结果这两条语句加上后  一直也不启动定时器了

//=================================================================================================
//函数名:Init_tpm2_counter

  
void Init_tpm2_counter2(void)
{
        TPM2SC=0x0e;//TPM1时钟源为总线时钟;分频系数为64;溢出中断允许
        TPM2CNTH=0;//任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零)
        TPM2MOD=1875; //5ms   总线24m  mod/(24m/64)=mod/375=5ms   
}
//==================计数器2溢出中断服务程序==========================
interrupt VectorNumber_Vtpm2ovf void TPM2_OVF_ISR(void)
{
   
    TPM2CNTH=0;
        if((TPM2SC & 0x80)==0x80)
        {
                TPM2SC_TOF=0;
                yanshi_f l g=1;//5ms时间到了
        }
  
   
   
}
void Init_IRQ(void)
{
IRQSC_IRQMOD=0;//0:边沿方式;1:电平方式
IRQSC_IRQIE=1;//0:中断使能;1:禁止中断
IRQSC_IRQPE=1;//1:中断引脚使能;0:普通IO
IRQSC_IRQEDG=1;//0下降沿或低电平信号有效 1上升沿 高电平

}


interrupt VectorNumber_Virq void IRQ_ISR(void)
{
        if((IRQSC & 0x08)==0x08)
        {
           IRQSC_IRQACK=1;//清除外部中断标志位
           
           guoling_f l g=1;
           
         
    }  
}
void jrys(void) //加热延时
{
    if(guoling_标志寄存器==1) //过零 中断
        {
            guoling_f l g=0;
            TPM2SC_TOIE=1; //使能定时器2
            TPM2MOD=1875;  //开始计时5ms
            
        }   
}
void jrcf(void) //加热触发
{
    if(yanshi_f l g==1)   //5ms时间到了
    {   yanshi_f l g=0;
        KKG_WIND=~KKG_WIND; //输入驱动
         
    }
}
for(;;)
{
   
  jrys();
  jrcf();

}

相关帖子

沙发
FSL_TICS_ZJJ| | 2014-10-21 13:16 | 只看该作者
楼主你好,请问你使用的是飞思卡尔的什么产品?
请告之芯片全称。

使用特权

评论回复
板凳
cl234583745|  楼主 | 2014-10-21 13:46 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-10-21 13:16
楼主你好,请问你使用的是飞思卡尔的什么产品?
请告之芯片全称。

mc9s08dz60

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2014-10-22 09:56 | 只看该作者
cl234583745 发表于 2014-10-21 13:46
mc9s08dz60

楼主你好!
关于8位的问题,论坛的8位工程师暂时不在,你可以到我们官网提交一个技术服务请求,那边也会有相关的工程师帮你解答,提交技术服务请求的链接:
https://bbs.21ic.com/icview-684518-1-1.html
点击其中的申请SR按钮。

使用特权

评论回复
5
cl234583745|  楼主 | 2014-10-22 10:08 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-10-22 09:56
楼主你好!
关于8位的问题,论坛的8位工程师暂时不在,你可以到我们官网提交一个技术服务请求,那边也会 ...

知道了 应该是TPM2SC|=0x18;  不是ie

使用特权

评论回复
6
FSL_TICS_ZJJ| | 2014-10-22 10:17 | 只看该作者
cl234583745 发表于 2014-10-22 10:08
知道了 应该是TPM2SC|=0x18;  不是ie

一般如果要控制TPM定时器的开关,是需要控制时钟模式,可以关闭counter。
IE只是中断使能。

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2014-10-22 10:18 | 只看该作者
cl234583745 发表于 2014-10-22 10:08
知道了 应该是TPM2SC|=0x18;  不是ie

一般如果要控制TPM定时器的开关,是需要控制时钟模式,可以关闭counter。
IE只是中断使能。

使用特权

评论回复
8
cl234583745|  楼主 | 2014-10-22 10:23 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-10-22 10:18
一般如果要控制TPM定时器的开关,是需要控制时钟模式,可以关闭counter。
IE只是中断使能。 ...

是的  禁止中断使能没有用  要关闭时钟源

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2014-10-22 10:35 | 只看该作者
cl234583745 发表于 2014-10-22 10:23
是的  禁止中断使能没有用  要关闭时钟源

好的,楼主如果问题解决了,还请帮我们及时结贴。
后续如果还有问题,要是和kinetis想通的,我也可以帮你看看,如果一些特殊的,你**坛的同时也可以发SR解决。

使用特权

评论回复
10
Thefantasy| | 2015-1-26 21:00 | 只看该作者
应该是TPM2SC|=0x18;  不是ie

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

644

帖子

1

粉丝