//设置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); }