请选择 进入手机版 | 继续访问电脑版
查看: 2532|回复: 0

【S08P闯关赛经验分享】(五)S08P-Lite FTM-PWM简单点灯测试

[复制链接]
  • TA的每日心情
    擦汗
    2023-12-24 19:50
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    7

    主题

    95

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    374
    最后登录
    2023-12-24
    发表于 2020-7-12 23:33:36 | 显示全部楼层 |阅读模式
    本帖最后由 xyzml 于 2020-7-12 23:43 编辑

    FTM模块是16 位定时器,功能强大,可以用于中断、产生 PWM、输入
    捕捉等,适合应用于电机调速、电力电子变换器控制等许多方面。
    S08P中FTM共3组,有关FTM的引脚对应如下:

    FTM0_CH0 A0
    FTM0_CH1 A1
    FTM1_CH0 C4
    FTM1_CH1 C5
    FTM2_CH0 C0
    FTM2_CH1 C1
    FTM2_CH2 C2 D0
    FTM2_CH3 C3 D1
    FTM2_CH4 B4
    FTM2_CH5 B5
    FTM2_FAULT1 A6
    FTM2_FAULT2 A7
    其中FTM2功能最多,有6个通道,还有2个错误联防引脚能检测错误信号,保证电路的可靠性,因此可以做直流无刷电机等要求较高的控制。今天主要测试PWM基本发波。
    由于FTM寄存器较多,因此只列出此次用到的寄存器。

    FTMx (x=0,1,2)
    FTMx_SC                8Bit        状态控制
    FTMx_CNT             16Bit      计数
    FTMx_MOD            16Bit      模
    FTMx_CySC            8Bit        (y=0,1,2,3,4,5)      通道状态控制
    FTMx_CyV              16Bit      (y=0,1,2,3,4,5)      比较值,设置这个就相当于设置占空比

    FTMx_SC                8Bit        状态控制
    TOF TOIE CPWMS CLKS   PS
    0       0         0         0 0    000
    [7] TOF                FTM中断标志位  只读
    [6] TOIE              计时器溢出中断使能
    [5] CPWMS         为0:向上计数模式                        为1:上下计数模式
    [4:3] CLKS          时钟管理        
    00:没有选择时钟(即禁用FTM计数器)
    01:为FTM0和FTM1选择系统时钟
    10:固定频率的时钟
    11:外部时钟
    [2:0] PS              分频系数(分别为1,2,4,8,16,32,64,128)




    FTMx_CNT               16Bit      计数寄存器
    FTMx_MOD              16Bit      模寄存器
    FTM计数器达到模值后,在下一个时钟设置中断溢出标志TOF

    FTMx_CySC               8Bit      (y=0,1,2,3,4,5)      通道状态控制

    通道状态与控制,用于配置通道及其中断状态标志、控制位中断启用和引脚功能。

    CHF CHIE MSB MSA ELSB ELSA X X
    0   0   1   0   1    0   00

    [7]  CHF              通道事件产生标志位(只读)1产生0没有
    [6]  CHIE=0       0禁用通道中断使用软件中断    1启用通道中断
    [5:4] MSn=10   通道模式选择01比较  1X 边沿对齐PWM..   (具体其他功能详见手册)
    [3:2] ELSn=10  设置边沿输出匹配     10:高脉冲     X1: 低脉冲 (具体其他功能详见手册)
    [1:0]保留


    以下是根据官方例程,FTM1配置一个占空比随时间发生变化的PWM输出
    (1)FTM-PWM初始化

    1. void FTM1_Init( void )
    2. {
    3.     //FTM frequency = CLKS/PS/MOD=16M/1/100Hz
    4.     FTM1_MOD = 99;                 //模:100
    5.     FTM1_C1SC = 0x28;                    //边沿PWM-高脉冲
    6.     FTM1_C1V = 1;    //占空比2%
    7.     FTM1_SC = 0x00;                        //不使能
    8. }
    复制代码
    FTM-PWM打开

    1. void FTM1_Start( void )
    2. {
    3.     FTM1_SC = 0x10; // clock source = 10, 固定频率时钟 向上计数 不分频
    4.         
    5. }
    复制代码
    (3)定时器0初始化(同上期)
    (4)在定时器0中设置占空比随时间递增(每0.02s PWMcnt++;)
    1. uint16_t mtim0_count = 0;
    2. interrupt VectorNumber_Vmtim0 void  Mtim0_ISR(void)
    3. {
    4.     if(MTIM0_SC_TOF)  // 清除标志位
    5.     {
    6.         MTIM0_SC_TOF = 0;               
    7.     }

    8.     mtim0_count++;
    9.     if (mtim0_count > 20)
    10.     {        
    11.             PWMcnt++;
    12.         mtim0_count = 0;
    13.     }
    14.     if (PWMcnt==100) PWMcnt=0;
    15.    
    16. }
    复制代码
    (5)main函数循环中刷新占空比。为了现象直观,在主函数中将FTM-CH1值给到LED不断刷新
    1.             FTM1_C1V=PWMcnt;
    2.             PORT_PTCIE_PTCIE5=1;
    3.             LED1=PORT_PTCD_PTCD5;
    4.             LED2=PORT_PTCD_PTCD5;
    5.                 LED3=PORT_PTCD_PTCD5;//PTC5/FTM1CH1
    6.                 PORT_PTCIE_PTCIE5=0;
    复制代码

    实际运行效果如下:LED共阳,占空比越来越大所以此时可看到LED随时间逐渐变暗
    PWM(1).gif


    参考资料:
    [1]MC9S08PT60芯片手册
    [2]MC9S08PT60数据手册
    [3]MC9S08PT60官方教程
    [4]官方例程S08P_LITE_SAMPLES
    [5]S08P_LITE说明书


    本人知识水平与能力有限,难免有误,欢迎各位大佬们对存在的不足进行批评指正











    哎...今天够累的,签到来了~
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-4-27 18:59 , Processed in 0.110189 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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