Ejemplo n.º 1
0
        //设置PWM连续插补
        private void SetVPwm()
        {
            ushort channel = GetChannel();
            double duty    = Convert.ToDouble(this.txtDuty.Value) / 100;
            double freq    = Convert.ToDouble(this.txtFreq.Value);

            m_main.PWMChannel = channel;
            m_main.PWMDuty    = duty;
            m_main.PWMFreq    = freq;

            LTDMC.dmc_set_pwm_onoff_duty(m_cardId, 0, 0.8, 0.05);//设置PWM开关状态对应的占空比

            LTDMC.dmc_set_pwm_enable(m_cardId, GetEnable());
            LTDMC.dmc_set_pwm_output(m_cardId, channel, duty, freq);

            //设置插补轴脉冲
            LTDMC.dmc_set_equiv(m_cardId, 0, 100);
            LTDMC.dmc_set_equiv(m_cardId, 1, 100);

            //设置插补速度曲线参数,Crd坐标系
            LTDMC.dmc_set_vector_profile_unit(m_cardId, 0, 0, 100, 0.1, 0, 0);
            //设置跟随速度参数
            LTDMC.dmc_conti_set_pwm_follow_speed(m_cardId, 0, channel, GetPwmMode(), 100, 0, 0);

            //PWM跟随模式模式为0、1、2时,MaxValue/MaxVel/OutValue此三个参数无效

            ushort onOff   = 1; //PWM输出状态为:打开
            ushort deMode  = 0; //滞后模式为:滞后时间
            double deTime  = 2; //滞后时间:2S
            double revTime = 0; //保留参数:固定为0

            //设置轨迹段起点滞后时间
            LTDMC.dmc_conti_delay_pwm_to_start(m_cardId, 0, channel, onOff, deTime, deMode, revTime);

            //打开连续插补缓冲区
            LTDMC.dmc_conti_open_list(m_cardId, 0, 2, new ushort[] { 0, 1 });

            //第一段轨迹直线插补,绝对模式
            ushort[] axiss = { 0, 1 };
            //目标位置
            double[] tPos = { 200, 0 };
            LTDMC.dmc_conti_line_unit(m_cardId, 0, 2, axiss, tPos, 0, 1);

            //相当于轨迹终点,提前1S关闭使能
            double ahValue = 1; //提前1秒
            ushort ahMode  = 0; //输出提前模式:提前时间

            LTDMC.dmc_conti_ahead_pwm_to_stop(m_cardId, 0, channel, 0, ahValue, ahMode, 0);

            //禁止PWM输出
            //LTDMC.dmc_set_pwm_enable(m_cardId, 0);

            //设置第二段轨迹直线插补,绝对模式
            //目标位置
            double[] ePos = { 0, 0 };
            LTDMC.dmc_conti_line_unit(m_cardId, 0, 2, axiss, ePos, 0, 1);

            //开始连续插补
            LTDMC.dmc_conti_start_list(m_cardId, 0);

            //关闭连续插补缓冲区
            LTDMC.dmc_conti_close_list(m_cardId, 0);
        }