光电编码盘测量电机速实验实验报告
模拟编码电机实验报告(3篇)

第1篇一、实验目的1. 理解模拟编码电机的工作原理及结构;2. 掌握模拟编码电机的安装、调试及测试方法;3. 熟悉模拟编码电机在电机控制系统中的应用。
二、实验原理模拟编码电机是一种将电机的角位移转换为模拟电压信号的装置。
它主要由旋转编码盘、光电传感器、信号处理电路等组成。
当电机旋转时,编码盘上的透明及不透明的区域依次通过光电传感器,产生一系列脉冲信号,经信号处理电路处理后,输出与电机角位移成比例的模拟电压信号。
三、实验器材1. 模拟编码电机1台;2. 光电传感器1套;3. 信号处理电路1套;4. 数字示波器1台;5. 电机驱动器1台;6. 实验平台1套。
四、实验步骤1. 模拟编码电机的安装:将模拟编码电机安装在实验平台上,确保电机轴与编码盘的旋转轴同心。
2. 光电传感器的安装:将光电传感器安装在编码盘旁边,确保传感器与编码盘的相对位置正确。
3. 信号处理电路的连接:将光电传感器输出的脉冲信号连接到信号处理电路,将信号处理电路输出的模拟电压信号连接到数字示波器。
4. 电机驱动器的连接:将电机驱动器连接到电机,确保电机驱动器输出电压与电机相匹配。
5. 电机驱动器的调试:打开电机驱动器,输入合适的驱动电压,观察电机是否正常启动。
6. 模拟编码电机的测试:启动电机,观察数字示波器上的模拟电压信号,分析信号的变化规律。
7. 模拟编码电机在电机控制系统中的应用:将模拟编码电机应用于电机控制系统,实现电机的精确控制。
五、实验结果与分析1. 模拟编码电机的安装与调试过程顺利,电机启动正常。
2. 在数字示波器上观察到的模拟电压信号与电机角位移成比例,验证了模拟编码电机的工作原理。
3. 通过实验,发现模拟编码电机的精度较高,适用于对电机角位移要求较高的场合。
4. 在电机控制系统中,模拟编码电机能够实现对电机的精确控制,提高了系统的控制精度。
六、实验总结本次实验成功实现了模拟编码电机的安装、调试及测试,掌握了模拟编码电机的工作原理及在电机控制系统中的应用。
电机实验报告

电机实验报告引言:电机是一种将电能转化为机械能的装置,它在现代社会中扮演着至关重要的角色。
通过学习电机实验,我们可以更好地了解电机的工作原理和性能指标,为电机的设计和应用提供参考。
通过本次电机实验,我们将深入研究电机的转速、效率和动力等关键参数,并探讨如何优化电机的运行。
实验目的:本次实验的目的是探究不同电机电压对电机性能的影响,通过测量电机的转速和功率,以及计算其效率和扭矩,来获取直观的实验数据。
实验装置和方法:实验所用的电机为直流电机,实验过程中使用的电压依次为5V、10V、15V和20V。
为了测量电机的转速,我们将一个光电编码器连接到电机轴上,并通过与电脑连接的计数器来记录每分钟的脉冲数。
为了测量电机的输出功率,我们采用了一种简单的方式:将电机轴与一个刻度盘连接,并通过一个秤来测量电机输出的牵引力,再通过刻度盘的读数来计算电机的输出功率。
为了减小误差,我们进行了多次实验,并取平均值作为最终结果。
实验结果与分析:在实验过程中,我们发现电机的转速随着电压的增加而增加。
当电压为5V时,电机的转速为2500 rpm;当电压升至10V时,转速达到5000 rpm;15V时转速为7500 rpm;20V时转速为10000 rpm。
这表明电机的转速与电压呈线性关系,电机的输出转速可以通过调节电压来实现。
同时,我们还测量了在不同电压下电机的输出功率。
结果显示,电机的输出功率随电压的增加而增加,与转速呈正相关。
这是因为功率与转速和扭矩的乘积有关,而电机在增大电压的情况下,能够提供更高的转速和更大的扭矩,从而增加了输出功率。
进一步计算得到电机的效率。
效率可以通过功率的输出与输入比来计算,即输出功率除以输入功率。
在我们的实验中,输入功率可以通过测量供给电机的电压和电流来确定,输出功率则是通过测量电机的输出功率得到的。
结果显示,电机的效率在不同电压下波动在60%到80%之间。
这是因为电机在运行过程中会产生一定的损耗,如机械摩擦损耗、电磁铁损耗等。
测控实验报告电机驱动及转速测量实验

测控实验报告电机驱动及转速测量实验实验目的:1.理解电机驱动的基本原理;2.掌握电机的驱动方式及控制方法;3.学会使用光电编码器测量电机转速;4.了解电机在不同转速下的性能特点。
实验器材:1.电机驱动装置;2.光电编码器;3.转速测量仪。
实验步骤:1.将电机与电机驱动装置连接,并接通电源;2.设置电机驱动的参数,包括电流、电压等;3.钳住电机的轴心,使其不能转动;4.将光电编码器与电机轴连接;5.将转速测量仪连接到光电编码器,并设置好测量参数;6.解除电机的钳住状态,使其开始旋转;7.启动转速测量仪并记录电机的转速;8.增加电机驱动的电流或电压,再次记录电机的转速;9.重复步骤7和8,直至达到一定的转速范围。
实验数据处理:1.将实验记录的电机转速数据整理成表格,包括不同电流或电压下的转速;2.绘制电机转速与电流或电压之间的关系曲线;3.分析曲线的特点,如转速与电流或电压的线性关系、转速的上限等。
实验结果与讨论:根据实验数据和曲线分析可得:1.电机的转速与电流或电压呈正相关关系,增加电流或电压会使电机的转速增加;2.当电流或电压达到一定值时,电机的转速会趋于稳定,不再继续增加;3.电机在低速和高速情况下性能可能有所变化,如启动力矩、转速稳定性等。
实验结论:通过电机驱动及转速测量实验,我们掌握了电机驱动的基本原理和控制方法,学会使用光电编码器测量电机转速,并了解了电机在不同转速下的性能特点。
实验结果显示,电机的转速与电流或电压呈正相关关系,并且当电流或电压达到一定值时,电机的转速趋于稳定。
此外,电机在低速和高速情况下的性能可能有所变化。
这些实验结果对电机的应用、控制和优化具有重要的参考价值。
光电编码器角度测量实验报告

光电编码器角度测量实验报告
编码器是一种传感器,主要是用来检测机械运动的速度、位置、角度、距离或计数,它是一种集光、机、电为一体的数字化检测装置,它具有分辨率高、精度高、结构简单、体积小、使用可靠、易于维护、性价比高等优点。
近些年来,它发展为一种成熟的多规格、高性能的系列工业化产品,在数控机床、机器人、雷达、光电经纬仪、地面指挥仪、高精度闭环调速系统、伺服系统等诸多领域中得到了广泛的引用。
那么,光电编码器可以定义为:一种通过光电转换,将输至轴上的机械、几何位移量转换成脉冲或数字量的传感器,它主要用于速度或位置(角度)的检测。
比较典型的光电编码器由码盘(Disk)、检测光栅(Mask)、光电转换电路(包括光源、光敏器件、信号转换电路)、机械部件等组成。
增量式光电编码器的特点是没产生一个输出脉冲信号就对应于
一个增量位移,但是不能通过输出脉冲区别出在哪个位置上的增量。
它能够产生与位移增量等值的脉冲信号,其作用是提供一种对连续位移量离散化或增量化以及位移变化(速度)的传感方法,它相对于某个基准点的相对位置增量,不能够直接检测出轴的绝对位置信息。
一般来说,增量式光电编码器输出A、B两相互差90读电角度的脉冲信号(也即是两组正交输出信号),从而可以方便地判断出旋转方向。
同时还有用作参考零位的Z相标志(指示)脉冲信号,码盘每
旋转一周,只发出一个标志信号。
标志脉冲通常用来指示机械位置或对积累量清零。
光电编码器测量电机转速的方法

光电编码器测量电机转速的方法光电编码器测量电机转速的方法可以利用定时器/计数器配合光电编码器的输出脉冲信号来测量电机的转速。
具体的测速方法有M法、T法和M/T法3种。
一、M法又称之为测频法,其测速原理是在规定的检测时间Tc内,对光电编码器输出的脉冲信号计数的测速方法,例如光电编码器是N线的,则每旋转一周可以有4N个脉冲,因为两路脉冲的上升沿与下降沿正好使编码器信号4倍频。
现在假设检测时间是Tc,计数器的记录的脉冲数是M1,在实际的测量中,时间Tc内的脉冲个数不一定正好是整数,而且存在最大半个脉冲的误差。
如果要求测量的误差小于规定的范围,比如说是小于百分之一,那么M1就应该大于50。
在一定的转速下要增大检测脉冲数M1以减小误差,可以增大检测时间Tc单考虑到实际的应用检测时间很短,例如伺服系统中的测量速度用于反馈控制,一般应在0.01秒以下。
由此可见,减小测量误差的方法是采用高线数的光电编码器。
M法测速适用于测量高转速,因为对于给定的光电编码器线数N机测量时间Tc条件下,转速越高,计数脉冲M1越大,误差也就越小。
二、T法也称之为测周法,该测速方法是在一个脉冲周期内对时钟信号脉冲进行计数的方法。
为了减小误差,希望尽可能记录较多的脉冲数,因此T法测速适用于低速运行的场合。
但转速太低,一个编码器输出脉冲的时间太长,时钟脉冲数会超过计数器最大计数值而产生溢出;另外,时间太长也会影响控制的快速性。
与M法测速一样,选用线数较多的光电编码器可以提高对电机转速测量的快速性与精度。
三、M/T法M/T法测速是将M法和T法两种方法结合在一起使用,在一定的时间范围内,同时对光电编码器输出的脉冲个数M1和M2进行计数。
实际工作时,在固定的Tc时间内对光电编码器的脉冲计数,在第一个光电编码器上升沿定时器开始定时,同时开始记录光电编码器和时钟脉冲数,定时器定时Tc时间到,对光电编码器的脉冲停止计数,而在下一个光电编码器的上升沿到来时刻,时钟脉冲才停止记录。
光电编码器测速

实验三光电传感器转速测量实验实验目的1.通过本实验了解和掌握采用光电传感器测量的原理和方法。
2.通过本实验了解和掌握转速测量的基本方法。
实验原理直接测量电机转速的方法很多,可以采用各种光电传感器,也可以采用霍尔元件。
本实验采用光电传感器来测量电机的转速。
由于光电测量方法灵活多样,可测参数众多,一般情况下又具有非接触、高精度、高分辨率、高可靠性和相应快等优点,加之激光光源、光栅、光学码盘、CCD器件、光导纤维等的相继出现和成功应用,使得光电传感器在检测和控制领域得到了广泛的应用。
光电传感器在工业上的应用可归纳为吸收式、遮光式、反射式、辐射式四种基本形式。
图3.31说明了这四种形式的工作方式。
图3.31 光电传感器的工作方式图3.32直射式光电转速传感器的结构图直射式光电转速传感器的结构见图3.32。
它由开孔圆盘、光源、光敏元件及缝隙板等组成。
开孔圆盘的输入轴与被测轴相连接,光源发出的光,通过开孔圆盘和缝隙板照射到光敏元件上被光敏元件所接收,将光信号转为电信号输出。
开孔圆盘上有许多小孔,开孔圆盘旋转一周,光敏元件输出的电脉冲个数等于圆盘的开孔数,因此,可通过测量光敏元件输出的脉冲频率,得知被测转速,即n=f/N式中:n - 转速f - 脉冲频率N - 圆盘开孔数。
反射式光电传感器的工作原理见图3.33,主要由被测旋转部件、反光片(或反光贴纸)、反射式光电传感器组成,在可以进行精确定位的情况下,在被测部件上对称安装多个反光片或反光贴纸会取得较好的测量效果。
在本实验中,由于测试距离近且测试要求不高,仅在被测部件上只安装了一片反光贴纸,因此,当旋转部件上的反光贴纸通过光电传感器前时,光电传感器的输出就会跳变一次。
通过测出这个跳变频率f,就可知道转速n。
n=f如果在被测部件上对称安装多个反光片或反光贴纸,那么,n=f/N。
N-反光片或反光贴纸的数量。
图3.33 反射式光电转速传感器的结构图实验仪器和设备1. 计算机 n台2. DRVI快速可重组虚拟仪器平台 1套3. 并口数据采集仪(DRDAQ-EPP2)1台4. 开关电源(DRDY-A)1台5. 光电转速传感器(DRHYF-12-A) 1套6. 转子/振动实验台(DRZZS-A)/(DRZD-A) 1 台实验步骤及内容1.光电传感器转速测量实验结构示意图如图3.34所示,按图示结构连接实验设备,其中光电转速传感器接入数据采集仪A/D输入通道。
光电编码器测速
飞思卡尔智能车舵机和测速的控制设计与实现时间:2010-04-14 11:53:10 来源:电子设计工程作者:雷贞勇谢光骥五邑大学2.1 舵机工作原理舵机在6 V电压下正常工作,而大赛组委会统一提供的标准电源输出电压为7.2 V,则需一个外围电压转换电路将电源电压转换为舵机的工作电压6 V。
图2为舵机供电电路。
舵机由舵盘、位置反馈电位计、减速齿轮组、直流动电机和控制电路组成,内部位置反馈减速齿轮组由直流电动机驱动,其输出轴带动一个具有线性比例特性的位置反馈电位器作为位置检测。
当电位器转角线性地转换为电压并反馈给控制电路时,控制电路将反馈信号与输入的控制脉冲信号相比较,产生纠正脉冲,控制并驱动直流电机正向或反向转动,使减速齿轮组输出的位置与期望值相符。
从而达到舵机精确控制转向角度的目的。
舵机工作原理框图如图3所示。
2.2 舵机的安装与调节舵机的控制脉宽与转角在-45°~+45°范围内线性变化。
对于对速度有一定要求的智能车,舵机的响应速度和舵机的转向传动比直接影响车模能否以最佳速度顺利通过弯道。
车模在赛道上高速行驶,特别是对于前瞻性不够远的红外光电检测智能车,舵机的响应速度及其转向传动比将直接影响车模行驶的稳定性,因此必须细心调试,逐一解决。
由于舵机从执行转动指令到响应输出需占用一定的时间,因而产生舵机实时控制的滞后。
虽然车模在进入弯道时能够检测到黑色路线的偏转方向,但由于舵机的滞后性,使得车模在转弯过程中时常偏离跑道,且速度越快,偏离越远,极大限制车模在连续弯道上行驶的最大时速,使得车模全程赛道速度很难进一步提高。
为了减小舵机响应时间,在遵守比赛规则不允许改造舵机结构的前提下,利用杠杆原理,采用加长舵机力臂的方案来弥补这一缺陷,加长舵机力臂示意图如图4所示。
图4中,R为舵机力臂;θ为舵机转向角度;F为转向所需外力;α为外力同力臂的夹角。
在舵机输出盘上增加长方形杠杆,在杠杆的末端固定转向传动连杆,其表达式为:加长力臂后欲使前轮转动相同角度时,在舵机角速度ω相同的条件下舵机力臂加长后增大了线速度v,最终使得舵机的转向角度θ减小。
光电式直流电机测速实验
光电式直流电机测速实验一、实验目的了解光电耦合器的工作原理及开关特性,掌握光电耦合器在直流电机转速测量应用、基本方法。
二、实验原理1、光电耦合器器件(详见光电密码锁实验)。
2、光电式直流电机测速实验原理本实验主要涉及电机转速的测量和控制。
直流电机的转速与所提供的电压有关,电压与转速成单调关系。
本实验中电机的控制方法为滑动电阻电源供电,通过利用调节滑动变阻器来改变控制电压。
由于电机的转动需要一定的功率,所以本试验中所用到的三极管要用功率管。
测速系统的前端由光电耦合器与栅格圆盘组成。
当直流电机通过转动部分带动栅格圆盘旋转时,测速光电耦合器获得一系列脉冲信号。
通过示波器可观察到光耦产生的脉冲,设其频率为f。
根据栅格圆盘上有4个叶片,电机转一圈有4个脉冲产生,因此可得转速计算公式为(f/4)*60,即15f RPM(每分钟转的圈数)。
电机的驱动需要较大的电流,在电路中采用TIP122集成芯片驱动,TIP122是NPN型的功率达林顿晶体管。
达林顿电路的原理是将两个晶体管的集电极相连,再将第一个晶体管的发射极和第二个晶体管的基极相连,这样就会提高第二个晶体管的输出电流。
如图1-19所示放大器正常工作时正负两端虚短,其正端由可调电源提供电压,间接控制电机的转速;由于采用了负反馈,此电路具有一定的抗干扰能力当有瞬时的尖峰毛刺影响而引起的电机两端电压突然升高或降低时,电路可自动调节消除,防止电机烧毁。
检测电路由光耦和比较器构成。
电机旋转时,叶扇从光耦中间经过,引起光耦的输出电压变化,从而引起比较器的输出电压发生变化,产生方波,便于测量。
实验原理图如图1-19所示。
3、测频原理(详见光变频率实验)4、流程图(详见光变频率实验)三、实验仪器1、光电检测与信息处理实验台(一套)2、光电式直流电机测速实验板3、示波器4、万用表5、导线若干6、十芯扁平线220uFC2D212345678U2LM311NU3MQ110KR1510K R5100R4200R710KR3200R2220KR6220uFC1+12V-12V+5V+5V+5V600R8+5VD1+5V85326741U1AD741CN 接总线模块的38接线端接总线模块的36接线端电机光电耦合器接总线模块的40接线端图1-19 光电式直流电机测速稳速原理四、实验内容步骤1、按图1-20连接实验线路。
光电转速测量仪的制作 实验报告
光电转速测量仪的制作实验报告学院:汽车工程学院专业:能源与动力工程学号:42xxxxxx姓名:xx指导教师:王丹目录一.实验目的••••••••••••••••••5二.实验原理••••••••••••••••••5三.实验装置••••••••••••••••••6四.其他测量转速的方法••••••••8五.光耦的应用••••••••••••••••10六.实验感想••••••••••••••••••12一.实验目的1. 了解光耦的特性。
2. 了解光耦测转速原理。
3. 设计光耦法测转速实验装置。
4. 了解其他测量转速的方法。
5. 学习光耦其他方面的应用。
二.实验原理光耦合器一般由三部分组成:光的发射、光的接收及信号放大。
本实验采用发光二极管(LED )作为光的发射,采用光敏三极管作为光的接受,当光照射到光敏三极管时,光敏三极管会产生脉冲。
在被测速的主轴上装一圆形遮光板,在圆板外围上打a 个均匀分布的小洞,调整发光二极管、小洞所在的圆线、光敏三极管,使其在同一直线,只有经过小洞后才输出一个脉冲,其它位置时,由于遮光板的挡光作用,光敏三极管无输出。
如果测得一分钟内光敏三极管输出的脉冲个数为b ,则转速n 为min /r a b n耦合器以光为媒介传输电信号。
它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。
目前它已成为种类最多、用途最广的光电器件之一。
光耦合器一般由三部分组成:光的发射、光的接收及信号放大。
输入的电信号驱动发光二极管(LED ),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。
这就完成了电—光—电的转换,从而起到输入、输出、隔离的作用。
由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。
又由于光耦合器的输入端属于电流型工作的低阻元件,因而具有很强的共模抑制能力。
所以,它在长线传输信息中作为终端隔离元件可以大大提高信噪比。
【报告】北航仪器光电综合实验报告电机测速及磁悬浮实验
2012/4/13【关键字】报告光电编码盘测量电机转速实验报告实验时间:2012年4月13日星期五(一)实验目的:1.了解光电编码盘的组成和工作原理;2.掌握增量式光电编码盘的使用方法。
(二)实验内容:1.了解绝对式光电码盘的工作原理,使用方法和如何提高绝对式光电码盘分辨率的措施;2.了解增量式光电码盘的原理,学习其使用方法,利用电路板、光电码盘、示波器等设备观察光电码盘的输出波形,并实现码盘测速;了解增量式光电编码器的辨向电路原理并用实验验证。
(三)实验仪器:实验设备主要有电机和码盘实验装置组成,如图5所示。
其它实验仪器包括:可调直流电源1台、万用表1个、双踪示波器1台、实验板(学生自搭建)1个,74LS74和74LS08芯片各1片,导线若干。
(四)实验步骤:1.用74LS74(双上升沿D触发器)和74LS08(四——二输入与门)及导线搭建辨向电路和计数脉冲电路;2.调整可调直流电源输出的电压在0∼20V之间,用万用表标定;3.连接电源输出到永磁直流电机(连线时关闭电源);4.检查光电码盘的电源供电、辨向电路和与门连接是否正确(光电编码盘引线定义:白色线—— +5V电源,黑色线—— 电源和信号的公共地,红色线——A相输出,绿色线—— B相输出,黄色线——C相输出);5.电源上电(先给光电码盘供电,再给电机供电);6.用示波器观测码盘输出信号的波形;7.测量码盘输出脉冲的频率,计算电机的转速;8.更换电机供电电压值,重复2∼7;9.数据处理,绘制电压与电机转速之间的实验曲线;10.撰写实验报告。
(五)实验数据记录:a)实测的输入电压和输出频率对应表;*频率1、2、3组单位:kHzb)输入电压与转速的关系曲线(六) 实验小结及思考题:1.通过电路方法提高测量精度:实验中使用的增量式光电码盘主要参数如下:LEC-102.4BM-G05E型增量式光电码盘:电源电压:直流5V,每转输出脉冲数1024实验中主要用到了D触发器和与非门,通过与非门获得的计数波形如下:电路结构如下:分析波形可以看出,通过与门电路获得的计数脉冲,其频率和输入A或B频率相同,此时获得的每转输出脉冲数为1024;若将A和B同时输入同或门,此时当AB电平相同时,输出电平为高;不同时输出电平为低:分析波形,由此可以得到将每一格输入周期一分为二,即每转输出脉冲数为2048。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三、 实验结果
输入电压/V
0
测量频率/KHZ
0
6
9
12.4
18
21
24
5
8.5
14
25.5
30.5
38
四、 输入电压与转速的关系曲线
利用了频率与转速的转化关系后得到下图
25
20 转 速 15 转
/ 10 s
5
0
0
5
10
15
20
25
30
输入电压/v
实验七电机测速及悬浮实验
五、 思考题
我认为在实际的工作中如果碰到此类问题,应先分析数据量的大小,比如是 4 位 2 进制 数的循环码,完全可以使用对应关系来解决,短时省力。使用的对应关系如下图
实验七电机测速及悬浮实验
Temp=Counter+((End-Start+1)>>1); if(Type^(lValue<Temp)) { if(Type) Counter=Temp; Start=(Start+End+1)>>1; Type=false; } else { if(!Type) Counter=Temp; End=(Start+End-1)>>1; Type=true; } } return Start; }
* @useage a=b2g(0,15,4); //取得 4 所对应循环码的二进制值 结果 a 等于 6
* @memo lValue 的值必须在区间[lStart,lEnd]里,否则无法求得所求结果.相应地,如果区间越 小,求得结 * 果所用的时间就越少.而且 lStart,lEnd 的值必须为 2 的 N 次方减 1. 通常 lStart 为 0.为了 方便求得 * 其值,建议使用 BtoG()函数来进行操作.不过这样会使计算时间加长到原来的 120%~180%. */ unsigned long b2g(unsigned long lStart,unsigned long lEnd,unsigned long lValue) { unsigned long Start=lStart,End=lEnd,Temp=0,Counter=0; bool Type=true; while(Start<End)
scanf("%x",&input);
while (input!=-1) {
printf("------BtoG------\nBinary:%08Xh\nGray :%08Xh\n------GtoB------\nGray :%08Xh\nBinary:%08Xh\n----------------\n",input,BtoG(input),input,GtoB(input));
但是当面临多位的 2 进制数表示的循环码时,这种对应的方法费时费力,所以此时应该 从算法的角度考虑解决转换的问题。 /* 循环码与二进制的转换程序
* 本程序采用递推的方法进行推导,可以转换 0~2147483647 之间的数(1~31 位)
* 推导方式如下(以三位循环码为例): * 序号 循环码 循环码实值 二进制码 二进制实值 * 0 000 0 000 0 * 1 001 1 001 1 * 2 011 3 010 2 * 3 010 2 011 3 * 4 110 6 100 4 * 5 111 7 101 5 * 6 101 5 110 6 * 7 100 4 111 7
main() {
实验七电机测速及悬浮实验
long input=0; #ifdef test //程序测试部分 clock_t cStart,cEnd; unsigned long dTime; cStart=clock(); for (input=0;input<9999999;input++)
BtoG(32768); cEnd=clock(); dTime=(cEnd-cStart); printf("BtoG: %ld / %ld\n",dTime,CLOCKS_PER_SEC); //-----------------------------------------------------cStart=clock(); for (input=0;input<9999999;input++) b2g(0,65535,32768); cEnd=clock();
实验七电机测速及悬浮实验
由上面的数据可看出.如果,按照序号 01327645 的方式遍历循环码.其编码实值是按自然 数顺序排列.反之,如果按此顺序遍历其二进制实值.则会发现遍历过的数据的个数减一即为 二进制码所对应循环码的实值.再观察序号顺序,我们会发现: 如果把二进制码分半,前半部分 从前向后遍历,后半部从后向前遍历.如果分半部分可再分,则再将其分半.并按照前半部分从 前向后遍历(分解),后半部分从后向前遍历的方式遍历(分解).直到不可分.即可实现按序号所 描述顺序遍历二进制码.如果,按此顺序遍历二进制码,我们可以很方便地在序列中找到所要 的二进制码与其对应的循环码.本思想可以很方便地用递归实现.这样就实现了二进制到循环 码的转换.同样,循环码到二进制的转换,也可以用相同的方法推出.为了加快运算,我们跳过不 必要的遍历将递归改为递推.这样就实现了循环码与二进制之间的快速转换.此算法的时间复 杂度约为 O(n),n 为要转换数据的 BIT 数.
//b2g 外壳程序,用来算 lStart,lEnd;
long BtoG(unsigned long lValue) { register unsigned long lV=lValue,lMax=1; while (lV>0) {
lV>>=1; lMax<<=1; } if (lMax==0) return -1; return b2g(0,--lMax,lValue); } //g2b 外壳程序 long GtoB(unsigned long lValue) { register unsigned long lV=lValue,lMax=1; while (lV>0) { lV>>=1; lMax<<=1; } if (lMax==0) return -1; return g2b(0,--lMax,lValue); }
//#define test
#i nclude <stdio.h>
#ifdef test #i nclude <time.h> #endif /** * 二进制转换成循环码 * @param lStart lValue 所在区间下界 * @param lEnd lValue 所在区间上界 * @param lValue 要转换的二进制数的实值 * @return 返回循环码对应的二进制数的实值 * @see g2b() g2b 循环码转换二进制 * @see BtoG() BtoG 二进制转换循环码 * @see GtoB() BtoG 循环码转换二进制 * @author 黄34;); scanf("%x",&input); } #endif
实验七电机测速及悬浮实验
{ Temp=(End+Start-1)>>1;
实验七电机测速及悬浮实验
if (lValue<=Temp) { if(!Type) Counter+=((End-Start+1)>>1); End=Temp; Type=true;
}
else { if(Type) Counter+=((End-Start+1)>>1); Start=++Temp; Type=false; } } return Counter; } /** * 循环码转换成二进制 * @param lStart lValue 对应二进制数所在区间下界 * @param lEnd lValue 对应二进制数所在区间上界 * @param lValue 要转换的循环码的实值 * @return 返回二进制数对应的循环码的实值 * @see b2g() b2g 二进制转换循环码 * @see BtoG() BtoG 二进制转换循环码 * @see GtoB() BtoG 循环码转换二进制 * @author 黄毅 * @useage a=b2g(0,15,6); //取得 6 所对应二进制值的循环码 结果 a 等于 4 * @memo lValue 对应二进制数的值必须在区间[lStart,lEnd]里,否则无法求得所求结果.相应 地,如果区 * 间越小,求得结果所用的时间就越少.而且 lStart,lEnd 的值必须为 2 的 N 次方减 1. 通常 lStart 为 0. * 为了方便求得其值,建议使用 GtoB()函数来进行操作.但会使计算时间加长到原来的 105%~140%. */ unsigned long g2b(unsigned long lStart,unsigned long lEnd,unsigned long lValue) { unsigned long Start=lStart,End=lEnd,Counter=0,Temp=0; bool Type=true; while(Start<End) {