在线时间954 小时
UID336767
注册时间2011-12-29
NXP金币523
TA的每日心情 | 开心 2018-7-23 21:04 |
---|
签到天数: 103 天 [LV.6]常住居民II
金牌会员
- 积分
- 15255
- 最后登录
- 1970-1-1
|
在Kinetis K22 MCU中的TPM模块可实现PWM波形,可以控制比如最近活动的小车电机调速等。
这次使用MAPS-K22套件测试一下KSDK2.0的PWM波形的产生,为了查看效果方便,查了一下电路,发现LD3接在PTB1上面,而PTB1是TPM1的CH1通道,正好就那这个做下实验吧。
要求产生周期1ms的PWM方波,占空比从0%-100%变化,然后在从100%-0%,重复,效果就是呼吸灯
这个是TPM模块原理图
其它就不多说了,简单来看一下程序
(1)设置端口复用功能
(2)初始化FTM
(3)启动TPM
(4)更改占空比
主程序:
- int main(void) {
- /* Init board hardware. */
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- /* Add your code here */
- PRINTF("This is a Test of FTM PWM...\r\n");
- bool upFlag = true;
- uint8_t updatedDutycycle = 0;
- ftm_config_t ftmConfig;
- ftm_chnl_pwm_signal_param_t ftmChnlPwmParam;
- ftmChnlPwmParam.chnlNumber = kFTM_Chnl_1;
- ftmChnlPwmParam.level = kFTM_LowTrue;
- ftmChnlPwmParam.dutyCyclePercent = updatedDutycycle;
- ftmChnlPwmParam.firstEdgeDelayPercent = 0;
- FTM_GetDefaultConfig(&ftmConfig);
- ftmConfig.prescale = kFTM_Prescale_Divide_32;
- FTM_Init(FTM1, &ftmConfig);
- FTM_SetupPwm(FTM1, &ftmChnlPwmParam, 1, kFTM_EdgeAlignedPwm, 1000, CLOCK_GetBusClkFreq());
- FTM_StartTimer(FTM1, kFTM_SystemClock);
- for(;;) { /* Infinite loop to avoid leaving the main function */
- delay();
- if (upFlag == true)
- {
- if (++updatedDutycycle == 100)
- {
- upFlag = false;
- }
- }
- else
- {
- if (--updatedDutycycle == 0)
- {
- upFlag = true;
- }
- }
- FTM_UpdatePwmDutycycle(FTM1, kFTM_Chnl_1, kFTM_EdgeAlignedPwm, updatedDutycycle);
- FTM_SetSoftwareTrigger(FTM1, true);
- }
- }
复制代码 演示效果就不上了
上一下工程文件!
tpm1_ch1_pwm_maps_k22.rar
(460.34 KB, 下载次数: 9)
|
|