在线时间613 小时
UID252169
注册时间2010-12-5
NXP金币0
TA的每日心情 | 开心 2019-2-14 16:49 |
---|
签到天数: 296 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 4473
- 最后登录
- 2020-4-14
|
PWM实验算是一半成功,原因是还没有找到如何能将PWM频率见地道500Hz,目前在1000Hz以上都正常。
一样的方法,PWM没有改变board.h函数,将pin_mux.c增加:
//Set PORTC_1,2 Alt4_FTM0 for 2 Output PWMs
PORT_SetPinMux(PORTC,1U,kPORT_MuxAlt4);
PORT_SetPinMux(PORTC,2U,kPORT_MuxAlt4);
在主函数的IO口设置中增加:
//define PWM0
ftmParam[0].chnlNumber=(ftm_chnl_t)BOARD_FIRST_FTM_CHANNEL;
ftmParam[0].level=kFTM_LowTrue;
ftmParam[0].dutyCyclePercent=0U;
ftmParam[0].firstEdgeDelayPercent=0U;
//define PWM1
ftmParam[1].chnlNumber=(ftm_chnl_t)BOARD_SECOND_FTM_CHANNEL;
ftmParam[1].level=kFTM_LowTrue;
ftmParam[1].dutyCyclePercent=0U;
ftmParam[1].firstEdgeDelayPercent=0U;
FTM_GetDefaultConfig(&ftmInfo);
增加一段PWM初始化函数:
//PWM Initial
void pwmInit(void){
FTM_Init(BOARD_FTM_BASEADDR,&ftmInfo);
FTM_SetupPwm(BOARD_FTM_BASEADDR,ftmParam,2U,kFTM_EdgeAlignedPwm,dutyMax,FTM_SOURCE_CLOCK);
FTM_StartTimer(BOARD_FTM_BASEADDR,kFTM_SystemClock);//kFTM_ExternalClock);//
}
在while(1)中增加,改变duty的语句即可,本例如下[PWM0的,PWM1的如法炮制即可]:
if(duty1>(dutyMax-100)){ddut1=-dutyMin;}if(duty1<dutyMin){ddut1=dutyMin;};duty1 +=ddut1;
FTM_UpdatePwmDutycycle(BOARD_FTM_BASEADDR,(ftm_chnl_t)BOARD_FIRST_FTM_CHANNEL,kFTM_EdgeAlignedPwm,duty1);
全采用变量的好处是只需要改变头变量定义即可。由于设置了PWM0和PWM1为交替增减,因此一个最亮时另一个不亮。照片如下:双色二极管只有绿色亮,红色不亮。
|
-
LCD上边的LED双色,只有绿色亮
|