智能车制作
标题:
kL25 PWM
[打印本页]
作者:
admingj
时间:
2015-5-20 14:17
标题:
kL25 PWM
KL25 调pwm遇到了问题,初始化成功了,改变占空比时用的改变 TPM C3V 的值可是发现跟变不是 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;
这样就能行的,监视CnV发现它压根没变,除非在每次改变CnV是来一句
TPM_CNT_REG(TPMN[tpmn]) = 0;
但这样对于有深度强迫症的我是没法接受的,因为这样的话每次调用这个函数就会影响周期与波形,
KL系列同学们有无遇到类似问题啊?
作者:
admingj
时间:
2015-5-20 14:18
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;
}
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2