当前位置:文档之家› 电机编码器解码

电机编码器解码

电机编码器解码
电机编码器解码

/*功能名称 IM3_PWM_Init(u16 arr,u16 psc)

描述 TIM3产生四路PWM

*/

void TIM3_PWM_Init(u16 arr,u16 psc)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟使能

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //Timer3全映射GPIOC-> 6,7,8,9 //用于TIM3的CH2输

出的PWM通过该LED显示

//设置该引脚为复用输出功能,输出TIM3 CH1 CH2 CH3 CH4 的PWM脉冲波形

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 |

GPIO_Pin_9; //初始化GPIO

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_ResetBits(GPIOC,GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 |

GPIO_Pin_9);//默认电机使能端状态:不使能

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值这里是72分频,那么时钟频率就是1M

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS =

Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据

TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM 输出比较极性高

TIM_OC1Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR1上的预装载寄存器

TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR2上的预装载寄存器

TIM_OC3Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR3上的预装载寄存器

TIM_OC4Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR4上的预装载寄存器

TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx外设

}

/*功能名称 TIM4_PWMINPUT_INIT(u16 arr,u16 psc)

描述 PWM输入初始化*/

void TIM4_PWMINPUT_INIT(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //TIM的初始化结构体

NVIC_InitTypeDef NVIC_InitStructure; //中断配置

TIM_ICInitTypeDef TIM4_ICInitStructure; //TIM4 PWM配置结构体 GPIO_InitTypeDef GPIO_InitStructure; //IO口配置结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //Open TIM4 clock

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //open gpioB clock GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //GPIO 7

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS =

Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据

TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

/*配置中断优先级*/

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2;

TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

TIM4_ICInitStructure.TIM_ICFilter = 0x3; //Filter:过滤

TIM_PWMIConfig(TIM4, &TIM4_ICInitStructure); //PWM输入配置

TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); //选择有效输入端

TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset); //配置为主从复位模式

TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);//启动定时器的被动触发

TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_Update, ENABLE); //中断配置

TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位

TIM_Cmd(TIM4, ENABLE);

}

void TIM4_IRQHandler(void)

{

if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)//捕获1发生捕获事件 {

duty_TIM4 = TIM_GetCapture1(TIM4); //采集占空比

if (TIM_GetCapture2(TIM4)>600) period_TIM4 =

TIM_GetCapture2(TIM4);//简单的处理

CollectFlag_TIM4 = 0;

}

TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位

}

/*功能名称 TIM1_PWMINPUT_INIT(u16 arr,u16 psc)

描述 PWM输入初始化*/

void TIM1_PWMINPUT_INIT(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //TIM的初始化结构体

NVIC_InitTypeDef NVIC_InitStructure; //中断配置

TIM_ICInitTypeDef TIM1_ICInitStructure; //PWM配置结构体

GPIO_InitTypeDef GPIO_InitStructure; //IO口配置结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //Open TIM1 clock

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //open gpioE clock

GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); //Timer1完全重映射TIM1_CH2->PE11

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //GPIO 11

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS =

Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据

TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

/*配置中断优先级*/

NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn; //TIM1捕获中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

TIM1_ICInitStructure.TIM_Channel = TIM_Channel_2;

TIM1_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

TIM1_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM1_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

TIM1_ICInitStructure.TIM_ICFilter = 0x03; //Filter:过滤

TIM_PWMIConfig(TIM1, &TIM1_ICInitStructure); //PWM输入配置

TIM_SelectInputTrigger(TIM1, TIM_TS_TI2FP2); //选择有效输入端

TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset); //配置为主从复位模式

TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable);//启动定时器的被动触发

// TIM_ITConfig(TIM1, TIM_IT_CC2|TIM_IT_Update, ENABLE); //中断配置

TIM_ITConfig(TIM1, TIM_IT_CC2, ENABLE); //通道2 捕获中断打开

//TIM_ClearITPendingBit(TIM1, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位 TIM_Cmd(TIM1, ENABLE);

}

void TIM1_CC_IRQHandler(void)

{

{

if (TIM_GetITStatus(TIM1, TIM_IT_CC2) != RESET)//捕获1发生捕获事件 {

duty_TIM1 = TIM_GetCapture1(TIM1); //采集占空比

if (TIM_GetCapture2(TIM1)>600) period_TIM1 = TIM_GetCapture2(TIM1);

CollectFlag_TIM1 = 0;

}

}

TIM_ClearITPendingBit(TIM1, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位

}

/*功能名称 TIM2_PWMINPUT_INIT(u16 arr,u16 psc)

描述 PWM输入初始化*/

void TIM2_PWMINPUT_INIT(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //TIM的初始化结构体

NVIC_InitTypeDef NVIC_InitStructure; //中断配置

TIM_ICInitTypeDef TIM2_ICInitStructure; //TIM2 PWM配置结构体

GPIO_InitTypeDef GPIO_InitStructure; //IO口配置结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //Open TIM2 clock

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //open gpioB clock

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //关闭JTAG

GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE); //Timer2完全重映射TIM2_CH2->PB3

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //GPIO 3

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //浮空输入上拉输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS =

Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据

TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

/*配置中断优先级*/

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

TIM2_ICInitStructure.TIM_Channel = TIM_Channel_2;

TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

TIM2_ICInitStructure.TIM_ICFilter = 0x3; //Filter:过滤

TIM_PWMIConfig(TIM2, &TIM2_ICInitStructure); //PWM输入配置

TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2); //选择有效输入端

TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset); //配置为主从复位模式

TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);//启动定时器的被动触发

TIM_ITConfig(TIM2, TIM_IT_CC2|TIM_IT_Update, ENABLE); //中断配置

TIM_ClearITPendingBit(TIM2, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位

TIM_Cmd(TIM2, ENABLE);

}

void TIM2_IRQHandler(void)

{

{

if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)//捕获1发生捕获事件

{

duty_TIM2 = TIM_GetCapture1(TIM2); //采集占空比

if (TIM_GetCapture2(TIM2)>600) period_TIM2 = TIM_GetCapture2(TIM2);

CollectFlag_TIM2 = 0;

}

}

TIM_ClearITPendingBit(TIM2, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位

}

/*功能名称 TIM5_PWMINPUT_INIT(u16 arr,u16 psc)

描述 PWM输入初始化*/

void TIM5_PWMINPUT_INIT(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //TIM的初始化结构体

NVIC_InitTypeDef NVIC_InitStructure; //中断配置

TIM_ICInitTypeDef TIM5_ICInitStructure; //TIM4 PWM配置结构体 GPIO_InitTypeDef GPIO_InitStructure; //IO口配置结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //Open TIM4 clock

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //open gpioB clock GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //GPIO 1

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //浮空输入上拉输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS =

Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据

TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

/*配置中断优先级*/

NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2;

TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

TIM5_ICInitStructure.TIM_ICFilter = 0x3; //Filter:过滤

TIM_PWMIConfig(TIM5, &TIM5_ICInitStructure); //PWM输入配置

TIM_SelectInputTrigger(TIM5, TIM_TS_TI2FP2); //选择有效输入端

TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Reset); //配置为主从复位模式

TIM_SelectMasterSlaveMode(TIM5, TIM_MasterSlaveMode_Enable);//启动定时器的被动触发

TIM_ITConfig(TIM5, TIM_IT_CC2|TIM_IT_Update, ENABLE); //中断配置

TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位

TIM_Cmd(TIM5, ENABLE);

}

void TIM5_IRQHandler(void)

{

{

if (TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)//捕获1发生捕获事件 {

duty_TIM5 = TIM_GetCapture1(TIM5); //采集占空比

if (TIM_GetCapture2(TIM5)>600) period_TIM5 = TIM_GetCapture2(TIM5);

CollectFlag_TIM5 = 0;

}

}

TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位

}

PID部分

typedef struct

{

int setpoint;//设定目标

int sum_error;//误差累计

float proportion ;//比例常数

float integral ;//积分常数

float derivative;//微分常数

int last_error;//e[-1]

int prev_error;//e[-2]

}PIDtypedef;

float Kp = 0.32 ; //比例常数

float Ti = 0.09 ; //积分时间常数

float Td = 0.0028 ; //微分时间常数

#define T 0.02 //采样周期

#define Ki Kp*(T/Ti) // Kp Ki Kd 三个主要参数

#define Kd Kp*(Td/T)

PID.H

void PIDperiodinit(u16 arr,u16 psc); //PID 采样定时器设定

void incPIDinit(void); //初始化,参数清零清零

int incPIDcalc(PIDtypedef*PIDx,u16 nextpoint); //PID计算

void PID_setpoint(PIDtypedef*PIDx,u16 setvalue); //设定 PID预期值

void PID_set(float pp,float ii,float dd);//设定PID kp ki kd三个参数

void set_speed(float W1,float W2,float W3,float W4);//设定四个电机的目标转速

int incPIDcalc(PIDtypedef *PIDx,u16 nextpoint)

{

int iError,iincpid;

iError=PIDx->setpoint-nextpoint; //当前误差

/*iincpid= //增量计算

PIDx->proportion*iError //e[k]项

-PIDx->integral*PIDx->last_error //e[k-1]

+PIDx->derivative*PIDx->prev_error;//e[k-2]

*/

iincpid= //增量计算

PIDx->proportion*(iError-PIDx->last_error)

+PIDx->integral*iError

+PIDx->derivative*(iError-2*PIDx->last_error+PIDx->prev_error);

PIDx->prev_error=PIDx->last_error; //存储误差,便于下次计算

PIDx->last_error=iError;

return(iincpid) ;

}

void TIM6_IRQHandler(void) // 采样时间到,中断处理函数

{

if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)//更新中断

{

frequency1=1000000/period_TIM4 ; //通过捕获的波形的周期算出频率

frequency2=1000000/period_TIM1 ;

frequency3=1000000/period_TIM2 ;

frequency4=1000000/period_TIM5 ;

/********PID1处理**********/

PID1.sum_error+=(incPIDcalc(&PID1,frequency1)); //计算增量并累加 pwm1=PID1.sum_error*4.6875 ; //pwm1 代表将要输出PWM的占空比

frequency1=0; //清零

period_TIM4=0;

/********PID2处理**********/

PID2.sum_error+=(incPIDcalc(&PID2,frequency2)); //计算增量并累加Y=Y+Y'

pwm2=PID2.sum_error*4.6875 ; //将要输出PWM的占空比

frequency2=0;

period_TIM1=0;

/********PID3处理**********/

PID3.sum_error+=(incPIDcalc(&PID3,frequency3)); //常规PID控制

pwm3=PID3.sum_error*4.6875 ; //将要输出PWM的占空比

frequency3=0;

period_TIM2=0;

/********PID4处理**********/

PID4.sum_error+=(incPIDcalc(&PID4,frequency4)); //计算增量并累加

pwm4=PID4.sum_error*4.6875 ; //将要输出PWM的占空比

frequency4=0;

period_TIM5=0;

}

TIM_SetCompare(pwm1,pwm2,pwm3,pwm4); //重新设定PWM值 TIM_ClearITPendingBit(TIM6, TIM_IT_Update); //清除中断标志位

}

万能增量式光电编码器控制的伺服电机零位调整技巧

万能增量式光电编码器控制的伺服 电机零位调整技巧 下述述两种调法完全取决于你的手工能力和熟练程度,一般来说,每款伺服电机都有自己专门的编码器自动调零软件.不外传仅是出于商业羸利和技术保密.如果你是一家正规的维修店,请不要采用以下方法,应通过正常渠道购买相应的专业设备.实践证明,手工调整如果技巧掌握得当, 工作仔细负责,也可达到同样的效果. 大批量更换新编码器调零方法 第一步:折下损坏的编码器 第二步:把新的编码器按标准固定于损坏的电机上第三步:按图纸找出Z信号和两根电源引出线,一般电源均为5V. 第四步:准备好一个有24V与5V两组输出电源的开关电源和一个略经改装的断线报警器,把0V线与Z 信号线接到断线报警器的两个光耦隔离输入端上。 第五步:在电机转动轮上固定一根二十厘米长的横杆,这样转动电机时转角精度很容易控制. 第六步:所有连线接好后用手一点点转动电机轮子

直到报警器发出报警时即为编码器零位,前后反复感觉一下便可获得最佳的位置,经实测用这种方法校正的零位误差极小,很适于批量调整,经实际使用完全合格.报警器也可用示波器代替,转动时当示波器上的电压波形电位由4V左右跳变0V时或由0V跳变为4V 左右即是编码器的零位.这个也很方便而且更精确.杆子的长度越长精度则越高,实际使用还是用报警器更方便又省钱.只要用耳朵感知就行了.在编码器的转子与定圈相邻处作好零位标记,然后拆下编码器。 第七步:找一个好的电机,用上述方法测定零位后在电机转轴与处壳相邻处作好电机的机械零位标记第八步:引出电机的U V W动力线,接入一个用可控制的测试端子上,按顺序分别对其中两相通入24V 直流电,通电时间设为2秒左右,观察各个电机最终停止位置(即各相的机械零位位置)其中一个始必与刚才所作的机械零位标记是同一个位置.这就是厂方软件固定的电机机械零位,当然能通过厂方专用编码器测试软件直接更改编码器的初始零位数据就更方便了.如果你只有一台坏掉的伺服电机,你就要根据以上获得的几个相对机械零位逐个测试是不是我们所要的那个位置,这一步由伺服放大器的试运行模式来进行测试.有关资料是必须的,否则不要轻易动手,以

编码器和译码器的应用

编码器、译码器及应用电路设计 一、实验目的: 1、掌握中规模集成编码器、译码器的逻辑功能测试和使用方法; 2、学会编码器、译码器应用电路设计的方法; 3、熟悉译码显示电路的工作原理。 二、实验原理: 1、什么是编码: 教材说:用文字、符号、或者数字表示特定对象的过程称为编码 具体说:编码的逻辑功能是把输入的每个高、低电平信号编成对应的二进制代码 2、编码器74LS147的特点及引脚排列图: 74LS147是优先编码器,当输入端有两个或两个以上为低电平,它将对优先级别相对较高的优先编码。其引脚排列图: 3、什么是译码:译码是编码的逆过程,把给定的代码进行“翻译”,变成相应的状态,使输出通道中相应的一路有信号输出,译码器广泛用于代码转换、终端的数字显示、数据分配、组合控制信号等。 译码器按照功能的不同,一般分为三类:二进制译码器、二—十进制译码器、显示译码器。 (1)变量译码器(用以表示输入变量的状态) 74LS138的特点及其引脚排列图:反码输出。 ABC是地址输入端,Y0—Y7是输出端,G1、G2A’、G2B’为 使能端,只有当G1=G2A’=G2B’=1时,译码器才工作。 (2)码制变换译码器:用于同一个数据的不同代码之间的相互转换,代表是4—10线译码器 译码器74LS42的特点及其引脚排列图: 译码器74LS42的功能是将8421BCD码译成10个对象 其原理与74LS138类同,只不过它有四个输入端, 十个输出端,4位输入代码0000—1111十六种状态组合

其中有1010—1111六个没有与其对应的输出端, 这六组代码叫做伪码,十个输出端均为无效状态。 (3)数码显示与七段译码驱动器:将数字、文字、符号的代码译成数字、文字、符号的电路 a、七段发光二极管数码显示管的特点:(共阴极) b、七段译码驱动器: 4、在本数字电路实验装置上已完成了译码器74LS48和数码管之间的连接图。 三四五脚接高电频,数码管的单独端接低电频。

电机编码器解码器

maxon motor maxon motor control Encoder HEDL 550_Technical Documentation April 2000 edition The latest edition of these operating instructions may also be found in the internet under:https://www.doczj.com/doc/6c14711401.html,/Service&Support/Downloads/Tacho.htm Encoder Line Drivers Technical Data HEDL-550X/554X HEDL-556X/557X HEDL-560X/564X HEDL-9000/9100/9200HEDL-9040/9140 HEDL-9060/9160/9260HEDL-9061/9161 Features ? Available on Both Encoder Modules (HEDS-9000Series) and Encoder Kit Housings (HEDS-5500Series) ? Complementary Outputs ? Industry Standard Line Driver IC ? Single 5 V Supply ? Onboard Bypass Capacitor ? 70°C and 100°C Versions Available Description Line Drivers are available for the HEDS-55XX/56XX series and the HEDS-9000/9100/9200/9040/ 9140 series encoders. The line driver offers enhanced perform-ance when the encoder is used in noisy environments, or when it is required to drive long distances.The 70°C version utilizes an industry standard line driver IC (26LS31) which provides comple-mentary outputs for each encoder channel. The 100°C version utilizes an industry standard line driver IC, 26C31, which provides complementary outputs for each encoder channel. Thus, the output of the line driver encoder is A, A, B, B and I/I for three channel versions. Suggested line receivers are 26LS32 and 26LS33. For additional information, please refer to: HEDS-5500/5540/5600/5640data sheet, HEDS-90X0/91X0/92X0 data sheets, HEDS-9000 series extended resolution data sheet, and 26LS31 data sheet.Device Characteristics ESD WARNING: NORMAL HANDLING PRECAUTIONS SHOULB BE TAKEN TO AVOID STATIC DISCHARGE also refer to: https://www.doczj.com/doc/6c14711401.html,/motion/hedl550x.html

各种编码器的调零方法

各种编码器的调零方法 增量式编码器的相位对齐方式 增量式编码器的输出信号为方波信号,又可以分为带换相信号的增量式编码器和普通的增量式编码器,普通的增量式编码器具备两相正交方波脉冲输出信号A和B,以及零位信号Z;带换相信号的增量式编码器除具备ABZ输出信号外,还具备互差120度的电子换相信号UVW,UVW各自的每转周期数与电机转子的磁极对数一致。带换相信号的增量式编码器的UVW电子换相信号的相位与转子磁极相位,或曰电角度相位之间的对齐方法如下: 1.用一个直流电源给电机的UV绕组通以小于额定电流的直流电,U入,V出,将电机轴定向至一个平衡位置; 2.用示波器观察编码器的U相信号和Z信号; 3.调整编码器转轴与电机轴的相对位置; 4.一边调整,一边观察编码器U相信号跳变沿,和Z信号,直到Z信号稳定在高电平上(在此默认Z信号的常态为低电平),锁定编码器与电机的相对位置关系; 5.来回扭转电机轴,撒手后,若电机轴每次自由回复到平衡位置时,Z信号都能稳定在高电平上,则对齐有效。 撤掉直流电源后,验证如下: 1.用示波器观察编码器的U相信号和电机的UV线反电势波形; 2.转动电机轴,编码器的U相信号上升沿与电机的UV线反电势波形由低到高的过零点重合,编码器的Z信号也出现在这个过零点上。 上述验证方法,也可以用作对齐方法。 需要注意的是,此时增量式编码器的U相信号的相位零点即与电机UV线反电势的相位零点对齐,由于电机的U相反电势,与UV线反电势之间相差30度,因而这样对齐后,增量式编码器的U相信号的相位零点与电机U相反电势的-30度相位点对齐,而电机电角度相位与U相反电势波形的相位一致,所以此时增量式编码器的U相信号的相位零点与电机电角度相位的-30度点对齐。 将编码器的U相信号零点与电机电角度的零点直接对齐,为达到此目的,可以: 1.用3个阻值相等的电阻接成星型,然后将星型连接的3个电阻分别接入电机的UVW三相绕组引线; 2.以示波器观察电机U相输入与星型电阻的中点,就可以近似得到电机的U相反电势波形; 3.依据操作的方便程度,调整编码器转轴与电机轴的相对位置,或者编码器外壳与电机外壳的相对位置; 4.一边调整,一边观察编码器的U相信号上升沿和电机U相反电势波形由低到高的过零点,最终使上升沿和过零点重合,锁定编码器与电机的相对位置关系,完成对齐。 由于普通增量式编码器不具备UVW相位信息,而Z信号也只能反映一圈内的一个点位,不具备直接的相位对齐潜力,因而不作讨论。 绝对式编码器的相位对齐方式 绝对式编码器的相位对齐对于单圈和多圈而言,差别不大,其实都是在一圈内对齐编码器的检测相位与电机电角度的相位。早期的绝对式编码器会以单独的引脚给出单圈相位的最高位的电平,利用此电平的0和1的翻转,也可以实现编码器和电机的相位对齐,方法如下:1.用一个直流电源给电机的UV绕组通以小于额定电流的直流电,U入,V出,将电机轴定向至一个平衡位置; 2.用示波器观察绝对编码器的最高计数位电平信号;

伺服电机编码器

伺服电机编码器 伺服电机编码器是安装在伺服电机上用来测量磁极位置和伺服电机转角及转速的一种传感器,从物理介质的不同来分,伺服电机编码器可以分为光电编码器和磁电编码器,另外旋转变压器也算一种特殊的伺服编码器,市场上使用的基本上是光电编码器,不过磁电编码器作为后起之秀,有可靠,便宜,抗污染等特点,有赶超光电编码器的趋势。 基本信息 ?中文名称 伺服电机编码器 ?OC输出 三极管输出 ?推挽输出 接口连接方便 ?分类 abz uvw 目录1原理 2输出信号 3分类 4正余弦 5维修更换 6注意事项 7选型注意 8订货代码 原理 伺服编码器这个基本的功能与普通编码器是一样的,比如绝对型的有A,A反,B,B反,Z,Z反等信号,除此之外,伺服编码器还有着跟普通编码器不同的地方,那就是伺服电机多数为同步电机,同步电机启动的时候需要知道转子的磁极位置,这样才能够大力矩启动伺服电机,这样需要另外配几路信号来检测转子的当前位置,比如增量型的就有UVW等信号,正因为有了这几路检测转子位置的信号,伺服编码器显得有点复杂了,以致一般人弄不懂它的道理了,加上有些厂家故意掩遮一些信号,相关的资料不齐全,就更加增添了伺服电机编码器的神秘色彩。

由于A、B两相相差90度,可通过比较A相在前还是B相在前,以判别编码器的正转与反转,通过零位脉冲,可获得编码器的零位参考位。 编码器码盘的材料有玻璃、金属、塑料,玻璃码盘是在玻璃上沉积很薄的刻线,其热稳定性好,精度高,金属码盘直接以通和不通刻线,不易碎,但由于金属有一定的厚度,精度就有限制,其热稳定性就要比玻璃的差一个数量级,塑料码盘是经济型的,其成本低,但精度、热稳定性、寿命均要差一些。 分辨率-编码器以每旋转360度提供多少的通或暗刻线称为分辨率,也称解析分度、或直接称多少线,一般在每转分度5~10000线。 输出信号 1、OC输出:就是平常说的三极管输出,连接需要考虑输入阻抗和电路回路问题. 2、电压输出:其实也是OC输出一种格式,不过置了有源电路. 3、推挽输出:接口连接方便,不用考虑NPN和PNP问题. 4、差动输出:抗干扰好,传输距离远,大部分伺服编码器采用这种输出. 分类 增量编码除了普通编码器的ABZ信号外,增量型伺服编码器还有UVW信号,国产和早期的进口伺服大都采用这样的形式,线比较多。 增量式编码器以转动时输出脉冲,通过计数设备来知道其位置,当编码器不动或停电时,依靠计数设备的部记忆来记住位置。这样,当停电后,编码器不能有任何的移动,当来电工作时,编码器输出脉冲过程中,也不能有干扰而丢失脉冲,不然,计数设备记忆的零点就会偏移,而且这种偏移的量是无从知道的,只有错误的生产结果出现后才能知道。 解决的方法是增加参考点,编码器每经过参考点,将参考位置修正进计数设备的记忆位置。在参考点以前,是不能保证位置的准确性的。为此,在工控中就有每次操作先找参考点,开机找零等方法。 比如,打印机扫描仪的定位就是用的增量式编码器原理,每次开机,我们都能听到噼哩啪啦的一阵响,它在找参考零点,然后才工作。 这样的方法对有些工控项目比较麻烦,甚至不允许开机找零(开机后就要知道准确位置),于是就有了绝对编码器的出现。

编码器、译码器及应用电路设计

实验六编码器、译码器及应用电路设计 一、实验目的: 1、掌握中规模集成编码器、译码器的逻辑功能测试和使用方法; 1、学会编码器、译码器应用电路设计的方法; 3、熟悉译码显示电路的工作原理。 二、实验原理: 编码是用文字、符号或者数字表示特定对象的过程,在数字电路中是用二进制数进行编码的,相应的二进制数叫二进制代码。编码器就是实现编码操作的电路。本实验使用的是优先编码器74LS147,当输入端有两个或两个以上为低电平时,将对输入信号级别相对高的优先编码,其引脚排列如图6—1所示。 图6—1 74LS147引脚排列图图6—2 74LS138引脚排列图译码是编码的逆过程,是把给定的代码进行“翻译”,变成相应的状态,使输出通道中相应的一路有信号输出。译码器在数字系统有广泛的用途,不仅用于代码的转换、终端的数字显示,还用于数据分配和组合控制信号等。不同的功能可选用不同种类的译码器。 译码器按照功能的不同,一般分为三类: 1、变量译码器(二进制译码器):用以表示输入变量的状态,如2—4线、3—8线、4—16线译码器。以3—8线译码器74LS138为例介绍: 图6—2为74LS138的引脚图,其中,A2A1A0为地址输入端,为译码器输出端,为使能端(只有当时,才能进行译码)。 图6—3 74LS42引脚排列图图6—5为CC4511引脚排列图 2、码制变换译码器:用于同一个数据的不同代码之间的相互变换。这种译码器的代表是4—10线译码器,它的功能是将8421BCD码译为十个对象,如74LS42等。它的原理与 74LS138译码器类同,只不过它有四个输入端,十个输出端。4位输入代码共有0000—1111

3 译码器和编码器的仿真实验报告

实验三译码器与编码器的设计与仿真 一、实验内容 1.参照芯片74LS138的电路结构,用VHDL语言设计3-8译码器; 2.参照芯片74LS148的电路结构,用VHDL语言设计8-3优先编码器。二、电路功能介绍 1.74148:8-3优先编码器(8 to 3 Priority Encoder) 用途:将各种输入信号转换成一组二进制代码,使得计算机可以识别这一信号的作用。键盘里就有大家天天打交道的编码器,当你敲击按键时,被敲击的按键被键盘里的编码器编码成计算机能够识别的ASCII码。译码器与编码器的功能正好相反。 2.74138:3-8译码器(3 to 8 Demultiplexer),也叫3-8解码器 用途:用一组二进制代码来产生各种独立的输出信号,这种输出信号可以用来执行不同的工作。显示器中的像素点受到译码器的输出控制。 逻辑框图:用逻辑符号(Symbol)来解释该电路输入与输出信号之间的逻辑关系,既省事又直观。如下图所示。 一、编码器 1.VHDL实现 library IEEE; use IEEE.std_logic_1164.all; entity pencoder is port ( i7,i6,i5,i4,i3,i2,i1,i0:in STD_LOGIC; a2,a1,a0,idle:out STD_LOGIC); 解 码 信 号 输 出 端低 电 平 有 效 代 码 输入 端 使能输入端

end pencoder; architecture pencoder_arch of pencoder is signal h:STD_LOGIC_VECTOR(7 downto 0); begin h(7)<=i7; h(6)<=i6 and not i7; h(5)<=i5 and not i6 and not i7; h(4)<=i4 and not i5 and not i6 and not i7; h(3)<=i3 and not i4 and not i5 and not i6 and not i7; h(2)<=i2 and not i3 and not i4 and not i5 and not i6 and not i7; h(1)<=i1 and not i2 and not i3 and not i4 and not i5 and not i6 and not i7; h(0)<=i0 and not i1 and not i2 and not i3 and not i4 and not i5 and not i6 and not i7; idle<=not i0 and not i1 and not i2 and not i3 and not i4 and not i5 and not i6 and not i7; a0<=h(1) or h(3) or h(5) or h(7); a1<=h(2) or h(3) or h(6) or h(7); a2<=h(4) or h(5) or h(6) or h(7); 2.波形图:

各种编码器调零方法

各种编码器的调零 量式编码器的相位对齐方式 在此讨论中,增量式编码器的输出信号为方波信号,又可以分为带换相信号的增量式编码器和普通的增量式编码器,普通的增量式编码器具备两相正交方波脉冲输出信号A 和B,以及零位信号Z;带换相信号的增量式编码器除具备ABZ输出信号外,还具备互差120度的电子换相信号UVW,UVW各自的每转周期数与电机转子的磁极对数一致。带换相信号的增量式编码器的UVW电子换相信号的相位与转子磁极相位,或曰电角度相位之间的对齐方法如下: 1.用一个直流电源给电机的UV绕组通以小于额定电流的直流电,U入,V出,将电机轴定向至一个平衡位置; 2.用示波器观察编码器的U相信号和Z信号; 3.调整编码器转轴与电机轴的相对位置; 4.一边调整,一边观察编码器U相信号跳变沿,和Z信号,直到Z信号稳定在高电平上(在此默认Z信号的常态为低电平),锁定编码器与电机的相对位置关系; 5.来回扭转电机轴,撒手后,若电机轴每次自由回复到平衡位置时,Z信号都能稳定在高电平上,则对齐有效。 撤掉直流电源后,验证如下: 1.用示波器观察编码器的U相信号和电机的UV线反电势波形; 2.转动电机轴,编码器的U相信号上升沿与电机的UV线反电势波形由低到高的过零点重合,编码器的Z信号也出现在这个过零点上。 上述验证方法,也可以用作对齐方法。 需要注意的是,此时增量式编码器的U相信号的相位零点即与电机UV线反电势的相位零点对齐,由于电机的U相反电势,与UV线反电势之间相差30度,因而这样对齐后,增量式编码器的U相信号的相位零点与电机U相反电势的-30度相位点对齐,而电机电角度相位与U相反电势波形的相位一致,所以此时增量式编码器的U相信号的相位零点与电机电角度相位的-30度点对齐。 有些伺服企业习惯于将编码器的U相信号零点与电机电角度的零点直接对齐,为达到此目的,可以: 1.用3个阻值相等的电阻接成星型,然后将星型连接的3个电阻分别接入电机的UVW 三相绕组引线; 2.以示波器观察电机U相输入与星型电阻的中点,就可以近似得到电机的U相反电势波形; 3.依据操作的方便程度,调整编码器转轴与电机轴的相对位置,或者编码器外壳与电机外壳的相对位置; 4.一边调整,一边观察编码器的U相信号上升沿和电机U相反电势波形由低到高的过零点,最终使上升沿和过零点重合,锁定编码器与电机的相对位置关系,完成对齐。 由于普通增量式编码器不具备UVW相位信息,而Z信号也只能反映一圈内的一个点位,不具备直接的相位对齐潜力,因而不作为本讨论的话题。 绝对式编码器的相位对齐方式 绝对式编码器的相位对齐对于单圈和多圈而言,差别不大,其实都是在一圈内对齐编码器的检测相位与电机电角度的相位。早期的绝对式编码器会以单独的引脚给出单圈相位的最高位的电平,利用此电平的0和1的翻转,也可以实现编码器和电机的相位对齐,方法如下: 1.用一个直流电源给电机的UV绕组通以小于额定电流的直流电,U入,V出,将电机轴定向至一个平衡位置;

西门子伺服电机编码器的正确安装法

雒补清关于西门子伺服电机内置编码器的正确安装方法 一、工作内容 1、这项技术适用于对德国西门子伺服电机(型号为1FT603-1FT613, 1FK604-1FK610)内置编码器损坏后的安装、调试,配置的增量型编码器为德国海德汉公司的ERN1387.001/020, 绝对值编码器为海德汉公司EQN1325.001。 2、使用工具公制内六方扳手一套,自制专用工具一个,十字改锥及一 字改锥各一把,梅花改锥6件套。 3、可解决的问题对有故障的西门子伺服电机进行修理或更换损坏的 伺服电机内置编码器,做到修旧利废,节约维修费用。 二、操作方法 1、该操作方法和一般操作方法的区别 在数控机床配置的西门子数控系统中,驱动电机分主轴电机和伺服电机两种。当电机定子、转子、轴承有故障或其电机内置编码器损坏时,我们都需要对编码器拆卸进行修理或更换。对主轴电机来说,更换或安装编码器只要用专用工具将其安装到相应位置就可以试车了,不需要调整电机轴或编码器的角度及位置。但对伺服电机来说,则必须按照编码器的安装要求,严格执行安装步骤。只要安装过程中出一点差错,就会出现编码器方面的报警而不能起动机床或出现飞车事故,导致电机报废或机械部件损坏。因此正确安装非常重要。 2、该项技术的操作步骤 2.1拆卸损坏的编码器 关掉机床电源,解掉伺服电机的电源电缆及反馈电缆,把电机从机床

上拆下来放到工作台案上,用内六方扳手去掉电机端盖上的四条螺栓,打开端盖,先卸下编码器盖,拔下编码器上的插接电缆,用十字改锥卸下支持盘上的两条小螺丝,用内六方扳手卸出编码器中心孔内的螺栓,然后用自制专用工具把编码器从电机轴上顶出来。这样第一步工作即告完成。 图1自制专用工具尺寸图 2.2安装海德汉公司ERN1387.001/020或EQN1325.001编码器 2.2.1先安装支持盘 不同型号的电机,其支持盘的外形也不一样,如图2和图3,这由购买的备件提供。用4条M2.5*6的小螺丝将支持盘安装到编码器的轴端。注意事项:确保支持盘面和编码器的底面间距为 5.2mm或12mm。 1.支持盘 2.编码器 图2 1FT606-1FT613/1FK606-1FK613电机内置编码器的支持盘

解码器与编码器的区别

解码器与编码器的区别 解码器 在多媒体方面,编码器主要把模拟视音频信号压缩数据编码文件,而解码器把数 据编码文件转为模拟视音频信号的过程。 解码器的分类: 解码器按照云台供电电压分为交流解码器和直流解码器。交流解码器为交流云台 提供交流230V或24V电压驱动云台转动;直流云台为直流云台提供直流12V或24V 电源,如果云台是变速控制的还要要求直流解码器为云台提供0-33或36V直流电压信号,来控制直流云台的变速转动。 按照通讯方式分为单向通讯解码器和双向通讯解码器。 单向通讯解码器只接收来自控制器的通讯信号并将其翻译为对应动作的电压/电流 信号驱动前端设备; 双向通讯的解码器除了具有单向通讯解码器的性能外还向控制器发送通讯信号, 因此可以实时将解码器的工作状态传送给控制器进行分析,另外可以将报警探测器等 前端设备信号直接输入到解码器中由双向通讯来传诵现场的报警探测信号,减少线缆 的使用。 按照通讯信号的传输方式可分为同轴传输和双绞线传输。一般的解码器都支持双绞 线传输的通讯信号,而有些解码器还支持或者同时支持同轴电缆传输方式,也就是将 通讯信号经过调制与视频信号以不同的频率共同传输在同一条视频电缆上。 解码器的电路是以单片机为核心,由电源电路、通讯接口电路、自检及地址输入电路、输出驱动电路、报警输入接口等电路组成。 解码器一般不能单独使用,需要与系统主机配合使用。 ●解码器到云台、镜头的连接线不要太长,因为控制镜头的电压为直流12伏左右,传输太远则压降太大,会导致镜头不能控制。另外由于多芯控制电缆比屏蔽双绞线要贵,所以成本也会增加。 ●室外解码器要做好防水处理,在进线口处用防水胶封好是一种不错的方法,而且 操作简单。 ●从主机到解码器通常采用屏蔽双绞线,一条线上可以并联多台解码器,总长度不超过1500米(视现场情况而定)。如果解码器数量太大,需要增加一些辅助设备,如增加控制码分配器或在最后一台解码器上并联一个匹配电阻(以厂家的说明为准)。

密勒码编码器和解码器的设计

密勒码编码器和解码器的设计 1、基本原理 密勒码又称延迟调制码,它是双相码的一种变形。它的编码规则如下:“1”码用码元中心点出现跃变来表示,即用“10”或“01”表示。“0”码有两种情况:单个“0”时,在码元持续时间内不出现电平跃变,且与相邻码元的边界处也不跃变,连“0”时,在两个“0”码的边界处出现电平跃变,即“00”与“11”交替 由图可知双相码下跳沿对应着密勒码的跳变沿。因此用双相码的下降沿去触发双稳态电路即可输出密勒码。 2、设计方案 Miller码的主要特点是:(1)由编码规则可知,当信码序列出现“101”时,Miller码出现最大脉冲宽度为两个码元周期,而信码出现连“0时,它的最小脉冲宽度为一个码元周期,这一性质可用于进行误码检测。(2)比较双相码与Miller 码的码型,可以发现后者时前者经过一级触发器得来。 编译码过程如下: 编码: 1)、将NRZ码与位同步信号BS相异或,生成信号作为D0触发器的输入,D0触发器采用2BS频率的信号对其采样输出信号BPH码。 2)、BPH码取非后输入D1触发器双稳态电路,生成密勒码。 解码: 1)、将输出的密勒码输入触发器D2的D端,将2BS信号接入D2; 2)、触发器D2生成信号输入触发器D3的D端; 3)、将2BS信号接入触发器D3对密勒码进行采样,将D3生成信号与D2生成信号相异或后的信号作为触发器D4的输入。 4)、将BS信号接入触发器D4,即可输出密勒码解码输出。 编码、解码原理图如下所示:

仿真图: 波形分析:NRZ码输入为:01010011010011,BPH码输出为:01 10 01 10 01 01 10 10 01 10 01 01 10 10,密勒码输出为:00 01 11 10 00 11 10 01 11 00 01 10。观察BPH码与Miller码波形,可知BPH码下跳沿对应着密勒码的跳变沿,符合设计原理。观察NRZ输入码波形、BPH码波形、密勒码波形、译码输出码波形,BPH码波形和密勒码波形相对于NRZ码波形有0.25个码元延迟,译码输出码波形相对于NRZ码有2个码元延迟。 3、心得体会 刚接触这个课程设计,觉得对有些概念有点模糊,于是我们又重新翻开了通信原理这本书,把有关概念弄清楚,遇到不明白的地方我们相互讨论,加强对理论的理解,当然中间还涉及到了有关数电、模电的知识。接着我们把整体的思路、设计框架都大概写了出来。而在

译码器和编码器实验

实验三译码器和编码器 一实验目的 1.掌握译码器、编码器的工作原理和特点。 2.熟悉常用译码器、编码器的逻辑功能和它们的典型应用。 二、实验原理和电路 按照逻辑功能的不同特点,常把数字电路分两大类:一类叫做组合逻辑电路,另一类称为时序逻辑电路。组合逻辑电路在任何时刻其输出的稳态值,仅决定于该时刻各个输入信号取值组合的电路。在这种电路中,输入信号作用以前电路所处的状态对输出信号无影响。通常,组合逻辑电路由门电路组成。 组合逻辑电路的分析方法:根据逻辑图进行二步工作: a.根据逻辑图,逐级写出函数表达式。 b.进行化简:用公式法、图形法或真值表进行化简、归纳。 组合逻辑电路的设计方法:就是从给定逻辑要求出发,求出逻辑图。一般分四步进行。 a.分析要求;将问题分析清楚,理清哪些是输入变量,哪些是输出函数。 b.列真值表。 c.进行化简:变量比较少时,用图形法。变量多时,可用公式化简。 d.画逻辑图:按函数要求画逻辑图。 进行前四步工作,设计已基本完成,但还需选择元件——集成电路,进行实验论证。 值得注意的是,这些步骤并不是固定不变的程序,实际设计时,应根据具体情况和问题难易程度进行取舍。 1.译码器 译码器是组合电路的一部分,所谓译码,就是把代码的特定含义“翻译”出来的过程,而实现译码操作的电路称为译码器。译码器分成三类: a.二进制译码器:如中规模2—4线译码器74LS139。,3—8线译码器74LS138等。 b.二—十进制译码器:实现各种代码之间的转换,如BCD码—十进制译码器74LS145等。 c.显示译码器:用来驱动各种数字显示器,如共阴数码管译码驱动74LS48,(74LS248),共阳数码管译码驱动74LS47(74LS247)等。 2.编码器 编码器也是组合电路的一部分。编码器就是实现编码操作的电路,编码实际上是译码相反的过程。按照被编码信号的不同特点和要求,编码器也分成三类: a.二进制编码器:如用门电路构成的4—2线,8—3线编码器等。 b.二—十进制编码器:将十进制的0~9编成BCD码,如:10线十进制—4线BCD码编码器74LS147等。 c.优先编码器:如8—3线优先编码器74LS148等。 三、实验内容及步骤 1.译码器实验 (1)将二进制2-4线译码器74LS139,及二进制3-8译码器74LS138分别插入实验系统IC 空插座中。 按图1.3.1接线,输入G、A、B信号(开关开为“1”、关为“0”),观察LED输出Yo、Y1、Y2、Y3的状态(亮为“1”,灭为“0”),并将结果填入表1.3.1中。

各种编码器校正方式

各种编码器校正方式: 增量式编码器的相位对齐方式 在此讨论中,增量式编码器的输出信号为方波信号,又可以分为带换相信号的增量式编码器和普通的增量式编码器,普通的增量式编码器具备两相正交方波脉冲输出信号A 和B,以及零位信号Z;带换相信号的增量式编码器除具备ABZ输出信号外,还具备互差120度的电子换相信号UVW,UVW各自的每转周期数与电机转子的磁极对数一致。带换相信号的增量式编码器的UVW电子换相信号的相位与转子磁极相位,或曰电角度相位之间的对齐方法如下: 1.用一个直流电源给电机的UV绕组通以小于额定电流的直流电,U入,V出,将电机轴定向至一个平衡位置; 2.用示波器观察编码器的U相信号和Z信号; 3.调整编码器转轴与电机轴的相对位置; 4.一边调整,一边观察编码器U相信号跳变沿,和Z信号,直到Z信号稳定在高电平上(在此默认Z信号的常态为低电平),锁定编码器与电机的相对位置关系; 5.来回扭转电机轴,撒手后,若电机轴每次自由回复到平衡位置时,Z信号都能稳定在高电平上,则对齐有效。 撤掉直流电源后,验证如下: 1.用示波器观察编码器的U相信号和电机的UV线反电势波形; 2.转动电机轴,编码器的U相信号上升沿与电机的UV线反电势波形由低到高的过零点重合,编码器的Z信号也出现在这个过零点上。 上述验证方法,也可以用作对齐方法。 需要注意的是,此时增量式编码器的U相信号的相位零点即与电机UV线反电势的相位零点对齐,由于电机的U相反电势,与UV线反电势之间相差30度,因而这样对齐后,增量式编码器的U相信号的相位零点与电机U相反电势的-30度相位点对齐,而电机电角度相位与U相反电势波形的相位一致,所以此时增量式编码器的U相信号的相位零点与电机电角度相位的-30度点对齐。 有些伺服企业习惯于将编码器的U相信号零点与电机电角度的零点直接对齐,为达到此目的,可以:

伺服电机编码器

编码器的工作原理及作用:它是一种将旋转位移转换成一串数字脉冲信号的旋转式传感器,这些脉冲能用来控制角位移,如果编码器与齿轮条或螺旋丝杠结合在一起,也可用于测量直线位移。 编码器产生电信号后由数控制置CNC、可编程逻辑控制器PLC、控制系统等来处理。这些传感器主要应用在下列方面:机床、材料加工、电动机反馈系统以及测量和控制设备。在ELTRA编码器中角位移的转换采用了光电扫描原理。读数系统是基于径向分度盘的旋转,该分度由交替的透光窗口和不透光窗口构成的。此系统全部用一个红外光源垂直照射,这样光就把盘子上的图像投射到接收器表面上,该接收器覆盖着一层光栅,称为准直仪,它具有和光盘相同的窗口。接收器的工作是感受光盘转动所产生的光变化,然后将光变化转换成相应的电变化。一般地,旋转编码器也能得到一个速度信号,这个信号要反馈给变频器,从而调节变频器的输出数据。故障现象:1、旋转编码器坏(无输出)时,变频器不能正常工作,变得运行速度很慢,而且一会儿变频器保护,显示“PG 断开”...联合动作才能起作用。要使电信号上升到较高电平,并产生没有任何干扰的方波脉冲,这就必须用电子电路来处理。编码器pg接线与参数矢量变频器

与编码器pg之间的连接方式,必须与编码器pg的型号相对应。一般而言,编码器pg型号分差动输出、集电极开路输出和推挽输出三种,其信号的传递方式必须考虑到变频器pg卡的接口,因此选择合适的pg卡型号或者设置合理. 编码器一般分为增量型与绝对型,它们存着最大的区别:在增量编码器的情况下,位置是从零位标记开始计算的脉冲数量确定的,而绝对型编码器的位置是由输出代码的读数确定的。在一圈里,每个位置的输出代码的读数是唯一的;因此,当电源断开时,绝对型编码器并不与实际的位置分离。如果电源再次接通,那么位置读数仍是当前的,有效的;不像增量编码器那样,必须去寻找零位标记。 现在编码器的厂家生产的系列都很全,一般都是专用的,如电梯专用型编码器、机床专用编码器、伺服电机专用型编码器等,并且编码器都是智能型的,有各种并行接口可以与其它设备通讯。 编码器是把角位移或直线位移转换成电信号的一种装置。前者成为码盘,后者称码尺.按照读出方式编码器可以分为接触式和非接触式两种.接触式采用电刷输出,一电刷接触导电区或绝缘区来表示代码的状态是“1”还是“0”;非接触式的接受敏感元件是光敏

编码器与解码器

编码电路设计报告 目录 一、设计任务 二、题目分析与整体构思 三、硬件电路设计 四、程序设计 五、心得体会

一.设计任务 在数字系统中,编码指将特定的逻辑信号编为一组二进制代码。能够实现编码功能的逻辑部件称为编码器。一般而言,M 个不同的信号,至少需要N 位二进制数编码。M 和N 之间 满足2N≥M 的关系。在实际工作中,同时有多个输入被编码时,必须根据轻重缓急,规定好这些控制对象允许操作的先后次序,即优先识别。能够识别信号的优先级并进行编码的逻辑部件称为优先编码器。 8-3 线优先编码器是常见编码器之一,它有8 个输入端、3 个二进制码输出端,作用是将输入X0~X7 八个状态分别编成842l 码的反码输出,优先级分别从X7~X0 递减。 使用VHDL硬件描述语言的设计方法和思想设计8-3 线优先编码器。用ISE 软件运行仿真,观察波形图,并将程序下载到FPGA,验证编码器的逻辑功能。 使用VDHL语言实现8-3 线优先编码器,操作简单、易懂,将8个拨码开关的状态作为输入,3个LED显示高低电平作为输出,很容易理解编码器的工作原理。 二.题目分析与整体构思 题目要求使用VHDL 语言设计8-3 线优先编码器。用ISE 软件运行仿真,观察波形图,并将程序下载到FPGA,验证编码器的逻辑功能。用开发板EXCD-1上的8个拨码开关的状态作为输入,3个LED显示高低电平作为输出,通过改变8个拨码开关的开关来控制3个LED的输出状态。 三.硬件电路设计

拨码开关SW7~SW0输入,D0~D2输出高低电平,通过改变8个拨码开关的开关来控制3个LED的输出状态。 四.程序设计 (1)创建工程 制定工程名,工程路径以及顶层设计所使用的输入方式,此设计我们选择硬件描述语言作为顶层设计的输入方式HDL。 (2)选择目标器件 (3)创建新源文件 这里我们选择“VHDL Module”,进行新源文件模块定义,所定义的内容是所要设计模块的实体说明,即模块的端口说明。本实验所要实现的是编码器的设计,设定SW7~SW0 为六个输入端口,共3 个输出信号D(0)~D(2),选择输出为总线模式(Bus),Msb、Lsb 分别表示最大端口号与最小端口号(注意:选择端口方向in、out、inout)。 检查模块端口定义是否正确。 (4)添加源文件 (5)完成工程创建 在工程设置统计窗口,可以看到对工程的描述总结,目标器件的描述,以及新建源文件 的总结,此工程创建完成。 (6)设计输入 包括库的声明,包的声明,完整的实体说明以及结构体框架。使用VHDL 语言设计完善基本编码器电路设计,拨动开关SW0~SW1 作为六个输入端,LED0~LED2作为输出显示,以观察实验结果。 1. LED 与编码器电路对应关系 SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0D2D1 D0 0 0 0 0 00 01000 00 00 00 1×00 1

电视机编码器与解码器

彩色电视机编码器和解码器的设计 摘要 集成电路彩色电视机按制式可分为:NTSC制、PAL制和SECAM制等。我国采用PAL 制式,标准的PAL制式彩色电视机也称为PAL-D彩色电视机。典型的PAL-D彩色电视机电路主要由公共通道、伴音通道、解码电路、图像重显电路、控制电路和电源电路等部分组成。 PAL制使彩色相序逐行改变,使串色极性逐行取反,加之梳状滤波器在频域的分离作用,使串色大为减小。又由于人眼的视觉平均作用,就使得传输失真不再对重现彩色图像的色调产生明显的影响。可使微分相位的容限达±40°以上。 PAL制采用1/4行间置再加25Hz彩色副载波,有效地实现了亮度信号与色度信号的频谱交错,因而有较好的兼容性。梳状滤波器在分离色度信号的同时,使亮度串色的幅度也下降了3dB,从而使彩色信杂比提高了3dB。由于PAL制为1/4行间置,所以亮、色分离要比NTSC制困难(NTSC制可以用1个整行延迟线的梳状滤波器实现亮、色分离,而PAL需要2行延迟),且分离质量也较差。在要求高质量分离的场合(如制式转换和数字编码等),可采用数字滤波这类较复杂的技术。与NTSC制相比,PAL制电路复杂,对同步精度要求高等缺点。 关键字:PAL制,数字滤波,编码器,解码器

目录 1彩色电视机三大制式简介 (1) 1.1NTSC制的特点 (1) 1.2 SECAM制特点 (2) 1.3 PAL制及其特点 (3) 2PAL制原理 (3) 3 PAL制PAL制编码原理 (4) 3.1逐行倒相 (5) 3.2 PAL调制原理 (6) 3.3PAL制频谱间置原理 (7) 4PAL解码原理 (8) 4.1亮度信号和色度信号的分离 (9) 4.2色同步信号和色度信号的分离 (9) 4.3色度信号的两个分量F U、F V的分离 (10) 4.4同步检波将F U、F V分量解调为U、V信号 (11) 4.5解码矩阵将Y、U、V信号还原为三基色信号 (12) 5梳状滤波器解码原理 (12) 6PAL彩色电视机原理框图 (15) 总结 (17) 致谢 (18) 参考文献 (19)

编码器和译码器实验报告

译码器、编码器及其应用 一、实验目的 (1) 掌握中规模集成译码器的逻辑功能和使用方法; (2) 熟悉掌握集成译码器和编码器的应用; (3) 掌握集成译码器的扩展方法。 二、实验设备 数字电路实验箱,74LS20,74LS138。 三、实验内容 (1) 74LS138译码器逻辑功能的测试。将74LS138输出??接数字实验箱LED 管,地址输入接实验箱开关,使能端接固定电平(或GND)。电路图如Figure 1所示: Figure 2 ??????????????时,任意拨动开关,观察LED显示状态,记录观察结果。 ??????????????时,按二进制顺序拨动开关,观察LED显示状态,并与功能表对照,记录观察结果。 用Multisim进行仿真,电路如Figure 3所示。将结果与上面实验结果对照。

Figure 4 (2) 利用3-8译码器74LS138和与非门74LS20实现函数: ?? 四输入与非门74LS20的管脚图如下: 对函数表达式进行化简: ?? ?? A ? ??????????? ???? 按Figure 5所示的电路连接。并用Multisim进行仿真,将结果对比。 Figure 6

(3) 用两片74LS138组成4-16线译码器。 因为要用两片3-8实现4-16译码器,输出端子数目刚好够用。 而输入端只有 A、、三个,故要另用使能端进行片选使两片138译码器 进行分时工作。而实验台上的小灯泡不够用,故只用一个灯泡,而用连接灯泡的导线测试?,在各端子上移动即可。在multisim中仿真电路连接如Figure 7所示(实验台上的电路没有接下面的两个8灯LED): Figure 8 四、实验结果 (1) 74LS138译码器逻辑功能的测试。 当输入 A时,应该是输出低电平,故应该第一个小灯亮。实际用实验台测试时,LE0灯显示如Figure 9所示。当输入 A时,应该是输出低电平,故理论上应该第二个小灯亮。实际用实验台测试时,LE0灯显示如Figure 6所示。 Figure 10

电机编码器对零点的方法

伺服电机编码器与转子磁极相位对齐方法[原创] 波恩 | 2008-10-05 12:12:05楼主 论坛中总是有人问及伺服电机编码器相位与转子磁极相位零点如何对齐的问题,这样的问题论坛中多有回答,本人也曾在多个帖子有所回复,鉴于本人的回复较为零散,早就想整理集中一下,只是一直未能如愿,今借十一长假之际,将自己对这一问题的经验和体会整理汇总一下,以供大家参考,或者有个全面的了解。 永磁交流伺服电机的编码器相位为何要与转子磁极相位对齐 其唯一目的就是要达成矢量控制的目标,使d轴励磁分量和q轴出力分量解耦,令永磁交流伺服电机定子绕组产生的电磁场始终正交于转子永磁场,从而获得最佳的出力效果,即“类直流特性”,这种控制方法也被称为磁场定向控制(FOC),达成FOC控制目标的外在表现就是永磁交流伺服电机的“相电流”波形始终与“相反电势”波形保持一致,如下图所示: 图1 因此反推可知,只要想办法令永磁交流伺服电机的“相电流”波形始终与“相反电势”波形保持一致,就可以达成FOC控制目标,使永磁交流伺服电机的初级电磁场与磁极永磁场正交,即波形间互差90度电角度,如下图所示: 图2

如何想办法使永磁交流伺服电机的“相电流”波形始终与“相反电势”波形保持一致呢?由图1 可知,只要能够随时检测到正弦型反电势波形的电角度相位,然后就可以相对容易地根据电角度相位生成与反电势波形一致的正弦型相电流波形了。 在此需要明示的是,永磁交流伺服电机的所谓电角度就是a相(U相)相反电势波形的正弦(Sin)相位,因此相位对齐就可以转化为编码器相位与反电势波形相位的对齐关系;另一方面,电角度也是转子坐标系的d轴(直轴)与定子坐标系的a轴(U轴)或α轴之间的 夹角,这一点有助于图形化分析。 在实际操作中,欧美厂商习惯于采用给电机的绕组通以小于额定电流的直流电流使电机转子定向的方法来对齐编码器和转子磁极的相位。当电机的绕组通入小于额定电流的直流电流时,在无外力条件下,初级电磁场与磁极永磁场相互作用,会相互吸引并定位至互差0度相位 的平衡位置上,如下图所示: 图3 对比上面的图3和图2可见,虽然a相(U相)绕组(红色)的位置同处于电磁场波形的 峰值中心(特定角度),但FOC控制下,a相(U相)中心与永磁体的q轴对齐;而空载定向时,a相(U相)中心却与d轴对齐。也就是说相对于初级(定子)绕组而言,次级(转子)磁体坐标系的d轴在空载定向时有会左移90度电角度,与FOC控制下q轴的原有位 置重合,这样就实现了转子空载定向时a轴(U轴)或α轴与d轴间的对齐关系。 此时相位对齐到电角度0度,电机绕组中施加的转子定向电流的方向为bc相(VW相)入, a相(U相)出,由于b相(V相)与c相(W相)是并联关系,流经b相(V相)和c相(W相)的电流有可能出现不平衡,从而影响转子定向的准确性。 实用化的转子定向电流施加方法是b相(V相)入,a相(U相)出,即a相(U相)与b 相(V相)串联,可获得幅值完全一致的a相(U相)和b相(V相)电流,有利于定向的

相关主题
文本预览
相关文档 最新文档