高级会员
- 积分
- 650
- 威望
- 397
- 贡献
- 171
- 兑换币
- 103
- 注册时间
- 2012-9-22
- 在线时间
- 41 小时
- 毕业学校
- 西安文理
|
我把程序写进去啦,但是电机控制的波形,是两组正弦波,我感觉不对头,哪路大神,帮我分析一下?
程序
//FTM0 ,PWM初始化
void FTM0_init()
{
/*打开所有的端口的时钟*/
SIM_SCGC6 |= SIM_SCGC6_FTM0_MASK;
SIM_SCGC5 |=SIM_SCGC5_PORTC_MASK;
PORTC_PCR1 =PORT_PCR_MUX(0x3) |PORT_PCR_DSE_MASK; //PTC口的3引脚使用第三功能,正转
PORTC_PCR2 =PORT_PCR_MUX(0x3); //PTC7口7引脚使用第三功能,反转
SIM_SCGC6|=SIM_SCGC6_FTM0_MASK; //使能FTM0时钟
//change MSnB = 1
//极性
FTM0_C3SC |= FTM_CnSC_ELSB_MASK; //0.3通道ELSB置1
FTM0_C3SC &= ~FTM_CnSC_ELSA_MASK; //0.3通道ELSA清0
FTM0_C4SC |= FTM_CnSC_ELSB_MASK; //0.4通道ELSB置1
FTM0_C4SC &= ~FTM_CnSC_ELSA_MASK; //0.4通道ELSA清0
FTM0_C4SC |= FTM_CnSC_MSB_MASK; //1X边缘对齐
FTM0_C5SC |= FTM_CnSC_MSB_MASK; //1X边缘对齐
FTM0_SC = 0x2a; //不能使中断屏蔽,欲分频系数
FTM0_MODE |= FTM_CnSC_MSB_MASK; // 自动清除中断
FTM0_MODE &=~1; //ftm使能禁止
FTM0_OUTMASK=0Xe7; //4、5通道输出不是掩没。它继续工作正常
//0、1、2、3、6、7通道输出掩没。它就被强迫其停滞状态
FTM0_COMBINE=0; //连接通道功能(FTMx_COMBINE)
FTM0_OUTINIT=0;
FTM0_EXTTRIG=0; //FTM外部触发(FTMx_EXTTRIG)
FTM0_POL=0; //通道,极性(FTMx_POL)
//0是活跃的频道极性高。
//1频道极性是积极的低。
//设置边缘对齐PWM
FTM0_QDCTRL &=~FTM_QDCTRL_QUADEN_MASK; //QUADEN 1点,将正交解码模式(QUADEN)使至0(残疾)
//这是第五场FTMx_SC(状态控制)-也设置pre-scale位在这里
FTM0_INVCTRL=0; //反转控制
FTM0_SWOCTRL=0; //软件输出控制FTM 软件输出控制(FTMx_SWOCTRL)
FTM0_PWMLOAD=0; //FTM PWM Load
//BIT9: 0加载更新值被禁用。
//更新值是1加载启用。
FTM0_CNTIN=0; //开始计数初值
//PMW频率=X系统率/FTM1_SC_PS/FTM1_MOD
FTM0_MOD=576; //模值,EPWM周期取于(决MOD - CNTIN + 1)
FTM0_MOD=576; //模值,EPWM周期取于(决MOD - CNTIN + 1)
//设置 脉冲宽度(责任周频期)是由(CnV - CNTIN)。
FTM0_C3V=0; //电机正转
FTM0_C4V=0; //电机反转
FTM0_CNT=0; //给计数器CNT清0,CNT只有低16位可用
}
//FTM1,PWM初始化
void FTM1_init()
{
/*打开所有的端口的时钟*/
SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK;
SIM_SCGC5 |=SIM_SCGC5_PORTA_MASK;
/*PTA9,PTA8作为PWM输出端口*/
PORTA_PCR8 =PORT_PCR_MUX(0x3); //PTA8口8引脚使用第三功能,舵机
SIM_SCGC6|=SIM_SCGC6_FTM1_MASK; //使能FTM1时钟
//change MSnB = 1
FTM1_C0SC |= FTM_CnSC_ELSB_MASK; //1.0通道ELSB置1
FTM1_C0SC &= ~FTM_CnSC_ELSA_MASK; //1.0通道ELSA清0
FTM1_C0SC |= FTM_CnSC_MSB_MASK; //1x边缘对齐
FTM1_SC = 0x2d; //不能使中断屏蔽
FTM1_MODE |= FTM_CnSC_MSB_MASK; // 自动清除中断
FTM1_MODE &=~1; //ftm使能禁
FTM1_OUTMASK=0Xfe; //0通道输出不是掩没。它继续工作正常
//1通道输出掩没。它就被强迫其停滞状态
FTM1_COMBINE=0; //连接通道功能(FTMx_COMBINE)
FTM1_OUTINIT=0;
FTM1_EXTTRIG=0; //FTM外部触发(FTMx_EXTTRIG)
FTM1_POL=0; //通道,极性(FTMx_POL)
//0是活跃的频道极性高。
//1频道极性是积极的低。
//设置边缘对齐PWM
FTM1_QDCTRL &=~FTM_QDCTRL_QUADEN_MASK; //QUADEN 1点,将正交解码模式(QUADEN)使至0(残疾)
FTM1_INVCTRL=0; //反转控制
FTM1_SWOCTRL=0; //软件输出控制FTM 软件输出控制(FTMx_SWOCTRL)
FTM1_PWMLOAD=0; //FTM PWM Load
//BIT9: 0加载更新值被禁用。
//更新值是1加载启用。
FTM1_CNTIN=0; //开始计数初值
FTM1_MOD=21624; //模值,EPWM周期取于(决MOD - CNTIN + 1)
FTM1_C0V=1622; //舵机
FTM1_CNT=0; //给计数器CNT清0,CNT只有低16位可用
}
|
|