查看: 4899|回复: 8

[其他] 我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

[复制链接]

该用户从未签到

8

主题

32

帖子

0

新手上路

Rank: 1

积分
71
最后登录
1970-1-1
发表于 2011-8-4 09:48:14 | 显示全部楼层 |阅读模式
我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出,我查了寄存器又看不出问题来;程序如下;谢谢!
单片机为MC9S08DZ60     外部晶振为8M
/********************************************************************************************
* 原型:void Init_tpm1_ch0_edge_pwm(void)
* 功能:初始化TPM1;总线频率8M;TPM1溢出中断禁止;通道0中断使能;
* 说明:PWM高电平时间=15us,PWM周期=25us
* 参数:
* 返回:
********************************************************************************************/
static  void Init_tpm1_ch0_edge_pwm(void)//Init_tpm1_ch0_edge_pwm();
{
 TPM1MODH=0x00;
 TPM1MODL=25;
  // TPM1MOD=0x19; 
 TPM1C0VH=0x00;
 TPM1C0VL=15;
 TPM1C0SC=0x68;            //通道0中断使能,边沿对齐PWM
 TPM1SC=0x0a;              //TPM1时钟源为总线时钟;分频系数为4;定时器溢出中断禁止
 TPM1CNTH=0;               //任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零)
}
//==================计数器1通道0事件中断服务程序===========================
interrupt void Vtpm1ch0_ISR(void)
{
 if((TPM1C0SC & 0x80)==0x80)
  {
    csbcnt++;
   TPM1C0SC_CH0F=0;
  }
}
我知道答案 目前已有7人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-8-4 09:59:04 | 显示全部楼层

    RE:我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

    你先确定中断有没有产生,仿真一下试试。你按照下面的代码试试:
    void Init_tpm1_ch0_center_pwm(void)
    {
       TPM1C0VH=0x4E;
       TPM1C0VL=0x20;
       TPM1C0SC=0x44;//通道0中断使能,中心对齐PWM
    }
    该会员没有填写今日想说内容.

    该用户从未签到

    8

    主题

    32

    帖子

    0

    新手上路

    Rank: 1

    积分
    71
    最后登录
    1970-1-1
     楼主| 发表于 2011-8-4 10:03:32 | 显示全部楼层

    RE:我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

    他进不了通道0的中断,但设置时有开中断;

    该用户从未签到

    8

    主题

    32

    帖子

    0

    新手上路

    Rank: 1

    积分
    71
    最后登录
    1970-1-1
     楼主| 发表于 2011-8-4 10:07:19 | 显示全部楼层

    RE:我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

    版主谢谢你,我用了你这段程序后,通道0一直输出高电平;也没波形输出
    void Init_tpm1_ch0_center_pwm(void)
    {
    TPM1C0VH=0x4E;
    TPM1C0VL=0x20;
    TPM1C0SC=0x44;//通道0中断使能,中心对齐PWM
    }
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-8-4 14:04:41 | 显示全部楼层

    RE:我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

    你使用下面这段程序试试。我这没有板子,只能给你找例程试试了。
    void PWM_INIT()
    {   
        TPMSC=0X08; //不允许溢出中断,不启动计数,分频因子=4     
       
        TPMMODH =0x00;//设置PWM周期   
        TPMMODL =0x28;      
       
        TPMC0VH = 0x00;//初始化设置PWM脉宽为0
        TPMC0VL = 0x14;
       
        TPMC0SC=0X28; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲     
         
      }
    该会员没有填写今日想说内容.

    该用户从未签到

    8

    主题

    32

    帖子

    0

    新手上路

    Rank: 1

    积分
    71
    最后登录
    1970-1-1
     楼主| 发表于 2011-8-5 10:09:42 | 显示全部楼层

    RE:我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

    再次感谢热心的版主,如果这个论坛再有几位你这样的热心版主,那就很好了,像OURAVR的论坛就做的很好;
    目前我的程序在你的指导下基本可以工作了
    static  void Init_tpm1_ch0_edge_pwm(void)//I void Init_tpm1_ch0_center_pwm(void)
    {
    TPM1SC=0X09; //TPM1SC=0X09;不允许溢出中断,启动计数,分频因子=2
    TPM1MODH =0x00;//设置PWM周期
    TPM1MODL =0x30;
    TPM1C0VH = 0x00;//初始化设置PWM脉宽为0
    TPM1C0VL = 0x1C;
    TPM1C0SC=0X68; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
    }

    //==================计数器1通道0事件中断服务程序===========================
    interrupt void Vtpm1ch0_ISR(void)   //      
    {
            if((TPM1C0SC & 0x80)==0x80)
                    {
                      TPM1C0SC_CH0F=0;
                      csbcnt++;
                      if(csbcnt>=10)
                      { //
                        delay_10us (3);
                        f_closecsb=1;csbcnt=0;   
                          TPM1C0SC=0x00;TPM1SC=0x00;//关闭PWM的输出                     TPM1CNTH=0; TPM1CNTL=0;                     
                      }
                    }
    }

    该用户从未签到

    8

    主题

    32

    帖子

    0

    新手上路

    Rank: 1

    积分
    71
    最后登录
    1970-1-1
     楼主| 发表于 2011-8-5 10:12:36 | 显示全部楼层

    RE:我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

    TPM1C0SC=0X68; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
    这个注解是错的;

    该用户从未签到

    8

    主题

    32

    帖子

    0

    新手上路

    Rank: 1

    积分
    71
    最后登录
    1970-1-1
     楼主| 发表于 2011-8-5 10:55:40 | 显示全部楼层

    RE:我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

    再请示下版主,能否在PWM关闭后让其输出通道输出为0呢?我目前是在关闭PWM后将该通道设置为IO再输出低电平,但这时会有个问题,它的输出会有个8us的高电平脉冲输出,不知是何原因?
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-8-11 09:05:45 | 显示全部楼层

    RE:我想用PWM输出个40K的方波,不知道为何TPM1CH0的输出端就是没波形输出

    首先要关闭PWM、还有中断、再将IO口设置为普通IO功能。输出功能、输出低电平。
    该会员没有填写今日想说内容.
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-12 04:10 , Processed in 0.099237 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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