金牌会员
 
- 积分
- 2311
- 威望
- 1210
- 贡献
- 743
- 兑换币
- 775
- 注册时间
- 2013-8-11
- 在线时间
- 179 小时
|
2#

楼主 |
发表于 2015-5-20 14:18:10
|
只看该作者
CODE
void DiverMotorsAndPluse_Init(void)
{
TPMn_e tpmn=TPM0;
TPM_CHn_e ch=TPM_CH3;
gpio_init(PTB16 ,GPO,LOW) ;
gpio_init(PTC0 ,GPO,LOW) ;
tpm_port_mux(tpmn,ch);
TPM_SC_REG(TPMN[tpmn]) = ( 0
| TPM_SC_CPWMS_MASK //0:上升沿计数模式 ,1: 跳变沿计数模式选择 (注释了表示 0)
| TPM_SC_PS(2) //分频因子,分频系数 = 2^PS
| TPM_SC_CMOD(1)
);
TPM_MOD_REG(TPMN[tpmn]) = 1999; //模数, EPWM的周期为 :MOD - CNTIN + 0x0001
TPM_CNT_REG(TPMN[tpmn]) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会清0)
TPM_CnSC_REG(TPMN[tpmn], ch) &= ~TPM_CnSC_ELSB_MASK;
TPM_CnSC_REG(TPMN[tpmn], ch) = TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK;
// MSnB:MSnA = 1x 边沿对齐PWM
// ELSnB:ELSnA = 10 先高后低
// ELSnB:ELSnA = 11 先低后高
TPM_CnV_REG(TPMN[tpmn], ch) = 2;
ch=TPM_CH4;
tpm_port_mux(tpmn,ch);
TPM_CnSC_REG(TPMN[tpmn], ch) &= ~TPM_CnSC_ELSB_MASK;
TPM_CnSC_REG(TPMN[tpmn], ch) = TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK;
TPM_CnV_REG(TPMN[tpmn], ch) = 2;
}
void DirectMotor_Init(void)
{
}
void DiverMotors(int left,int right)
{
TPMn_e tpmn=TPM0;
TPM_CHn_e ch=TPM_CH3;
//TPM_CNT_REG(TPMN[tpmn]) = 0;
if(left>=0)
{
left+=LeftAdd;
//ELSnB:ELSnA 10 高真脉冲 x1 低真脉冲
// TPM_CnSC_REG(TPMN[TPM0], TPM_CH3)|= TPM_CnSC_ELSB_MASK;
// TPM_CnSC_REG(TPMN[TPM0], TPM_CH3) &= ~TPM_CnSC_ELSA_MASK;
MOTOR_L=0;
}
else
{
left=LeftAdd-left;
// TPM_CnSC_REG(TPMN[TPM0], TPM_CH3) &= ~TPM_CnSC_ELSB_MASK;
// TPM_CnSC_REG(TPMN[TPM0], TPM_CH3)|= TPM_CnSC_ELSA_MASK;
MOTOR_L=1;
}
if(right>=0)
{
right+=RightAdd;
// TPM_CnSC_REG(TPMN[TPM0], TPM_CH4) |= TPM_CnSC_ELSB_MASK;
// TPM_CnSC_REG(TPMN[TPM0], TPM_CH4) &= ~TPM_CnSC_ELSA_MASK;
MOTOR_R=0;
}
else
{
right=RightAdd-right;
// TPM_CnSC_REG(TPMN[TPM0], TPM_CH4) &= ~TPM_CnSC_ELSB_MASK;
// TPM_CnSC_REG(TPMN[TPM0], TPM_CH4) |= TPM_CnSC_ELSA_MASK;
MOTOR_R=1;
}
if(left>=1999) left=1999;
TPM_CnV_REG(TPMN[tpmn], ch) = (unsigned int)left;
ch=TPM_CH4;
if(right>=1999) right=1999;
TPM_CnV_REG(TPMN[tpmn], ch) = (unsigned int)right;
}
|
|