查看: 2307|回复: 0

[原创] 【MAPS - K22套件试用】KSDK2.0+KDS3.0实现PWM

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15255
    最后登录
    1970-1-1
    发表于 2016-5-24 00:00:53 | 显示全部楼层 |阅读模式
    在Kinetis K22 MCU中的TPM模块可实现PWM波形,可以控制比如最近活动的小车电机调速等。

    这次使用MAPS-K22套件测试一下KSDK2.0的PWM波形的产生,为了查看效果方便,查了一下电路,发现LD3接在PTB1上面,而PTB1是TPM1的CH1通道,正好就那这个做下实验吧。

    要求产生周期1ms的PWM方波,占空比从0%-100%变化,然后在从100%-0%,重复,效果就是呼吸灯

    1010.png

    1011.png
    这个是TPM模块原理图
    1012.png

    其它就不多说了,简单来看一下程序
    (1)设置端口复用功能
    1013.png
    (2)初始化FTM
    1014.png

    (3)启动TPM
    1015.png

    (4)更改占空比
    1016.png
    主程序:
    1. int main(void) {
    2.   /* Init board hardware. */
    3.   BOARD_InitPins();
    4.   BOARD_BootClockRUN();
    5.   BOARD_InitDebugConsole();

    6.   /* Add your code here */
    7.   PRINTF("This is a Test of FTM PWM...\r\n");
    8.   bool upFlag = true;
    9.   uint8_t updatedDutycycle = 0;
    10.   ftm_config_t ftmConfig;
    11.   ftm_chnl_pwm_signal_param_t ftmChnlPwmParam;

    12.   ftmChnlPwmParam.chnlNumber = kFTM_Chnl_1;
    13.   ftmChnlPwmParam.level = kFTM_LowTrue;
    14.   ftmChnlPwmParam.dutyCyclePercent = updatedDutycycle;
    15.   ftmChnlPwmParam.firstEdgeDelayPercent = 0;

    16.   FTM_GetDefaultConfig(&ftmConfig);
    17.   ftmConfig.prescale = kFTM_Prescale_Divide_32;
    18.   FTM_Init(FTM1, &ftmConfig);

    19.   FTM_SetupPwm(FTM1, &ftmChnlPwmParam, 1, kFTM_EdgeAlignedPwm, 1000, CLOCK_GetBusClkFreq());

    20.   FTM_StartTimer(FTM1, kFTM_SystemClock);

    21.   for(;;) { /* Infinite loop to avoid leaving the main function */
    22.     delay();
    23.     if (upFlag == true)
    24.     {
    25.       if (++updatedDutycycle == 100)
    26.       {
    27.         upFlag = false;
    28.       }
    29.     }
    30.     else
    31.     {
    32.       if (--updatedDutycycle == 0)
    33.       {
    34.         upFlag = true;
    35.       }
    36.     }
    37.     FTM_UpdatePwmDutycycle(FTM1, kFTM_Chnl_1, kFTM_EdgeAlignedPwm, updatedDutycycle);
    38.     FTM_SetSoftwareTrigger(FTM1, true);
    39.   }
    40. }
    复制代码
    演示效果就不上了
    上一下工程文件!
    tpm1_ch1_pwm_maps_k22.rar (460.34 KB, 下载次数: 9)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-26 18:16 , Processed in 0.108802 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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