牛卧堂MCU技术交流

标题: pwm nuedu nec 有关pwm配置问题 [打印本页]

作者: arm_nuedu    时间: 2017-11-16 14:39
标题: pwm nuedu nec 有关pwm配置问题
本帖最后由 arm_nuedu 于 2017-11-16 14:45 编辑

在新唐m4 nuedu 红外线接收与发送的程序中,关于pwm有一下配置。
问题:1:什么是施密特触发,
我的理解:平时都是高于某一临界值,高便为高,低便是低,施密特等于说设置了两个值。高于一个临界值才是高,低同样这样抗干扰的能力肯定会更高。
只是在trm技术手册上没有看到pwm  capture的相关简介,所以厚着脸皮来这里问问。。。。

2:capture的1000是怎么选的?在nec bit0/1 的规范中如图下面附件,有560us的pwm方波和560的低电平,capture下降沿应该不会收到560us pwm那个影响(因为他是30%占空比,它本身就有下降沿,从程序来看,这个下降沿应该没算),应该跟1000这个设置有关系,但就是想不通
我的理解:1/38000 =2.63*10^-5,就是26us,即使再 *0.3,高电平也是7.8us。
那么capture的1000怎么算出来的呢???
点进入,该参数的说明是计数的单位。该单位是ns级的,设为1000,也就是1us记一个数。
如果这样,pwm 输出时,NEC协议要求的,560us微妙的pwm,都会引起pwmcapture的捕获,不是吗?
在nec rx函数中是严格控制步骤,应该不会这样:
下面是部分rx程序:
voidIrDa_NEC_Rx(uint32_t u32Time)
{

if(IR_State == 0)
    {
        IR_LDC_Ready = 0;           // Clear LeaDer Code Ready
        IR_CTC_Ready = 0;           // Clear CusTomer Code Ready
        IR_State++;
    }
    // Leader or Repeater code
    else if(IR_State == 1)
    {
        // Leader code
        if((u32Time >= IR_LDC_MIN)&& (u32Time <= IR_LDC_MAX))
        {
            IR_LDC_Ready = 1;       // Set LeaDer Code Ready
            IR_State++;
        }
        else
        {
            IR_State = 1;
            IR_LDC_Ready = 0;           // Clear LeaDer Code Ready
            IR_CTC_Ready = 0;           // Clear CusTomer Code Ready
        }
    }
    // Customer code 0
    else if((IR_State >= 2 &&IR_State < 10) && (IR_LDC_Ready == 1))
    {
        IR_State++;
        IR_CTC0 = IR_CTC0 >> 1;

这是配置函数:
输出
PWM_ConfigOutputChannel(PWM0,3, 38000, 30);

接收
  /* set PWM1 channel 3 capture configuration*/
    PWM_ConfigCaptureChannel(PWM0, 5, 1000,0);//1000说是捕获单位,单位是ns,我觉得不对的是,72M对应不是ns. 0没有用

    /* Enable capture falling edge interruptfor PWM1 channel 3 */
    PWM_EnableCaptureInt(PWM0, 5,PWM_CAPTURE_INT_FALLING_LATCH);

    /* Enable PWM1 NVIC interrupt */
    NVIC_EnableIRQ(PWM0P2_IRQn);

    /* Enable Timer for PWM1 channel 3 */
    PWM_Start(PWM0, PWM_CH_5_MASK);

    /*Enable Input Schmitt Trigger*/
    PD->SMTEN |= GPIO_SMTEN_SMTEN7_Msk;

    /* Enable Capture Function for PWM1 channel3 */
    PWM_EnableCapture(PWM0, PWM_CH_5_MASK);

    /* Enable falling capture reload */
    PWM0->CAPCTL |= PWM_CAPCTL_FCRLDEN5_Msk;

作者: Angus    时间: 2017-12-28 17:50
这样的遥控器波形,发送可以用PWM,只要确定发出多少个PWM周期即可,发0配置一个引脚,输出常0
接收要是滤波的,把PWM全滤除。得出脉冲波,再用PWM的捕获测脉冲的时间。




欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2