单片机控制舵机机转动,怎么仿真的时候不是20ms,有误差。。

舵机的认识和选购_arduino吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:46,614贴子:
舵机的认识和选购收藏
直流伺服电机(舵机)一般来讲,舵机主要由以下几个部分组成: 舵盘、减速齿轮组、位置反馈电位计5k、直流电机、控制电路板等。 普通舵机拆解图 SR403p 拆解图工作原理:控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。 舵机的控制信号为周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。由此可见,舵机是一种位置伺服的驱动器,转动范围不能超过180度,适用于那些需要角度不断变化并可以保持的驱动当中。比方说机器人的关节、飞机的舵面等。舵机的输入线共有三条,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会搞错。厂商所提供的舵机规格资料,都会包含外形尺寸(mm)、扭力(kg/cm)、速度(秒/60°)、测试电压(V)及重量(g)等基本资料。扭力的单位是 kg/cm,意思是在摆臂长度 1 公分处,能吊起几公斤重的物体。这就是力臂的观念,因此摆臂长度愈长,则扭力愈小。速度的单位是 sec/60°,意思是舵机转动 60°所需要的时间。 电压会直接影响舵机的性能,例如 Futaba S-9001 在 4.8V 时扭力为 3.9kg/cm、速度为 0.22 秒/60°,在 6.0V 时扭力为 5.2kg/cm、速度为 0.18 秒/60° 。若无特别注明,JR 的舵机都是以 4.8V 为测试电压,Futaba则是以 6.0V 作为测试电压。速度快、扭力大的舵机,除了价格贵,还会伴随著高耗电的特点。因此使用高级的舵机时,务必搭配高品质、高容量的电池,能提供稳定且充裕的电流,才可发挥舵机应有的性能。数码舵机常见问题原理分析及解决:一、数码舵机与模拟舵机的区别
传统模拟舵机和数字比例舵机(或称之为标准舵机)的电子电路中无MCU微控制器,一般都称之为模拟舵机。老式模拟舵机由功率运算放大器等接成惠斯登电桥,根据接收到模拟电压控制指令和机械连动位置传感器(电位器)反馈电压之间比较产生的差分电压,驱动有刷直流电机伺服电机正/反运转到指定位置。数字比例舵机是模拟舵机最好的类型,由直流伺服电机、直流伺服电机控制器集成电路(IC),减速齿轮组和反馈电位器组成,它由直流伺服电机控制芯片直接接收PWM(脉冲方波,一般周期为20ms,脉宽1~2 ms,脉宽1 ms为上限位置,1.5ms为中位,2ms为下限位置)形式的控制驱动信号,迅速驱动电机执行位置输出,直至直流伺服电机控制芯片检测到位置输出连动电位器送来的反馈电压与PWM控制驱动信号的平均有效电压相等,停止电机,完成位置输出。
数码舵机电子电路中带MCU微控制器故俗称为数码舵机,数码舵机凭借比之模拟舵机具有反应速度更快,无反应区范围小,定位精度高,抗干扰能力强等优势已逐渐取代模拟舵机在机器人、航模中得到广泛应用。
数码舵机设计方案一般有两种:一种是MCU+直流伺服电机+直流伺服电机控制器集成电路(IC)+减速齿轮组+反馈电位器的方案,以下称为方案1,另一种是MCU+直流伺服电机+减速齿轮组+反馈电位器的方案,以下称为方案2。市面上加装数码驱动板把模拟舵机改数码舵机属方案1。
缺牙要及时修复,揭秘种植牙如何做到几十年不掉?
二、舵机电机调速原理及如何加快电机速度
常见舵机电机一般都为永磁直流电动机,如直流有刷空心杯电机。直流电动机有线形的转速-转矩特性和转矩-电流特性,可控性好,驱动和控制电路简单,驱动控制有电流控制模式和电压控制两种模式。舵机电机控制实行的是电压控制模式,即转速与所施加电压成正比,驱动是由四个功率开关组成H桥电路的双极性驱动方式,运用脉冲宽度调制(PWM)技术调节供给直流电动机的电压大小和极性,实现对电动机的速度和旋转方向(正/反转)的控制。电机的速度取决于施加到在电机平均电压大小,即取决于PWM驱动波形占空比(占空比为脉宽/周期的百分比)的大小,加大占空比,电机加速,减少占空比电机减速。
所以要加快电机速度:1、加大电机工作电压;2、降低电机主回路阻值,加大电流;二者在舵机设计中要实现,均涉及在满足负载转矩要求情况下重新选择舵机电机。三、数码舵机的反应速度为何比模拟舵机快
很多模友错误以为:“数码舵机的PWM驱动频率300Hz比模拟舵机的50Hz高6倍,则舵机电机转速快6倍,所以数码舵机的反应速度就比模拟舵机快6倍” 。这里请大家注意占空比的概念,脉宽为每周期有效电平时间,占空比为脉宽/周期的百分比,所以大小与频率无关。占空比决定施加在电机上的电压,在负载转矩不变时,就决定电机转速,与PWM的频率无关。
模拟舵机是直流伺服电机控制器芯片一般只能接收50Hz频率(周期20ms)~300Hz左右的PWM外部控制信号,太高的频率就无法正常工作了。若PWM外部控制信号为50Hz,则直流伺服电机控制器芯片获得位置信息的分辨时间就是20ms,比较PWM控制信号正比的电压与反馈电位器电压得出差值,该差值经脉宽扩展(占空比改变,改变大小正比于差值)后驱动电机动作,也就是说由于受PWM外部控制信号频率限制,最快20ms才能对舵机摇臂位置做新的调整。
数码舵机通过MCU可以接收比50Hz频率(周期20ms)快得多的PWM外部控制信号,就可在更短的时间分辨出PWM外部控制信号的位置信息,计算出PWM信号占空比正比的电压与反馈电位器电压的差值,去驱动电机动作,做舵机摇臂位置最新调整。
结论:不管是模拟还是数码舵机,在负载转矩不变时,电机转速取决于驱动信号占空比大小而与频率无关。数码舵机可接收更高频率的PWM外部控制信号,可在更短的周期时间后获得位置信息,对舵机摇臂位置做最新调整。所以说数码舵机的反应速度比模拟舵机快,而不是驱动电机转速比模拟舵机快。四、数码舵机的无反应区范围为何比模拟舵机小
根据上述对模拟舵机的分析可知模拟舵机约20ms才能做一次新调整。而数码舵机以更高频率的PWM驱动电机。PWM频率的加快使电机的启动/停止,加/减速更柔和,更平滑,更有效的为电机提供启动所需的转矩。就象是汽车获得了更小的油门控制区间,则启动/停止,加/减速性能更好。所以数码舵机的无反应区比模拟舵机小。五、模拟舵机加装数码舵机驱动板并未提升反应速度
根据以上分析可知,模拟舵机加装数码舵机驱动板,要提升反应速度,PMW外部控制信号(如陀螺仪送来的尾舵机信号)的频率必须加快,如果还是50Hz,那舵机反应速度当然就没提升了。六、舵机控制死区、滞环、定位精度、输入信号分辨率、回中性能的认识
每一个闭环控制系统由于信号的振荡等原因,输入信号和反馈信号不可能完全相等,这就涉及到控制死区和滞环的问题,系统无法辨别输入信号和反馈信号的差异范围就是控制死区范围。舵机自动控制系统由于信号震荡、机械精度等原因造成控制系统在控制死区范围外的小范围老是做调整,为使舵机在小范围内不对震荡做调整,这就需要引入滞环的作用了。滞环比控制死区大,一般控制死区范围为±0.4%,滞环可设置为±2%,输入信号和反馈信号的差值在滞环内电机不动作,输入信号和反馈信号的差值进入滞环,电机开始制动-停止。定位精度取决于舵机系统的整体精度:如控制死区、机械精度、反馈电位器精度、输入信号分辨率。输入信号分辨率指舵机系统对输入信号最小分辨范围,数码舵机输入信号分辨率大大优于模拟舵机。回中性能取决于滞环和定位精度。七、舵机为何会老发出吱吱的响声
舵机老发出吱吱的来回定位调整响声,是由于有的舵机无滞环调节功能,控制死区范围调得小,只要输入信号和反馈信号老是波动,它们的差值超出控制死区,舵机就发出信号驱动电机。另没有滞环调节功能,如果舵机齿轮组机械精度差,齿虚位大,带动反馈电位器的旋转步,步范围就已超出控制死区范围,那舵机必将调整不停,吱吱不停。八、为何有的舵机炸机易烧电路板
有的舵机选用的功率器件电流大同时系统中设计有或芯片自带有过流保护功能,能检测出堵转过流及短路状态迅速停止电机驱动信号。还有可在电机回路接压敏电阻防止瞬间过压及在功率器件前端设计有吸收电容。此类舵机炸机堵转不容易烧电路板和电机。与舵机是金属齿还是塑料齿并无绝对关系。
九、舵机为何抖舵
控制死区敏感,输入信号和反馈信号因各种原因波动,差值超出范围,舵臂动,所以抖舵。十一、舵机为何抖舵控制死区敏感,输入信号和反馈信号因各种原因波动,差值超出范围,舵臂动,所以抖舵。舵机一般故障判断:   1)炸机后舵机电机狂转、舵盘摇臂不受控制、摇臂打滑------------------可以断定:齿轮扫齿了,换齿轮。   2)炸机后舵机一致性锐减,现象是炸坏的舵机反应迟钝,发热严重,但是可以随着控的指令运行,但是舵量很小很慢-------------基本断定:舵机电机过流了,拆下电机后发现电机空载电流很大(&150MA),失去完好的性能(完好电机空载电流≤60-90MA),换舵机电机。   3)炸机后舵机打舵后无任何反应---------------基本确定舵机电子回路断路、接触不良或舵机的电机、电路板的驱动部分烧毁导致的,先检查线路,包括插头,电机引线和舵机引线是否有断路现象,如果没有的话,就进行逐一排除,先将电机卸下测试空载电流,如果空载电流小于90MA,则说明电机是好的,那问题绝对是舵机驱动烧坏了,9-13克微型舵机电路板上面就有2个或四个小贴片三极管,换掉就可以了,有2个三极管的那肯定是用Y2或IY直接代换,也就是SS8550,如果是有四个三极管的H桥电路,则直接用2个Y1(SS8050)和2个(SS8550)直接代换,65MG的UYR ---- 用Y 1(SS8050 IC=1.5A); UXR------用Y2(SS8550,IC=1.5A)直接代换。   4)舵机故障是摇臂只能一边转动,另外一边不动的话-----------判断:舵机电机是好的,主要检查驱动部分,有可能烧了一边的驱动三极管,按照(3)维修即可。   5)维修好舵机后通电,发现舵机向一个方向转动后就卡住不动了,舵机吱吱地响--------------说明舵机电机的正负极或电位器的端线接错了,电机的两个接线倒个方向就可以了。   6)崭新的舵机买回来后,通电发现舵机狂抖,但用一下控的摇臂后,舵机一切正常----------说明舵机在出厂的时候装配不当或齿轮精度不够,这个故障一般发生在金属舵机上面,如果不想退货或者更换的话,自行解决的方法:卸下舵机后盖,将舵机电机与舵机减速齿轮分离后,在齿轮之间挤点牙膏,上好舵机齿轮顶盖,上好减速箱螺丝后,安上舵机摇臂,用手反复旋转摇臂碾磨金属舵机齿轮,直至齿轮运转顺滑、齿轮摩擦噪音减小后,将舵机齿轮卸下汽油清洗后,装齿轮上硅油组装好舵机,即可解决舵机故障。   7)有一种故障舵机表现很古怪:摇动控的遥感,舵机有正常的反应,但是固定控的遥感某一位置后,故障舵机摇臂还在慢慢的运行,或者摇臂动作拖泥带水,并来回动作------------------经过多次维修后发现问题所在:应该紧密卡在舵机末级齿轮中电位器的金属转柄,与舵机摇臂大齿轮(末级)结合不紧,甚至发生打滑现象,导致舵机无法正确寻找控发出的位置指令,反馈不准,不停寻找导致的,解决了电位器与摇臂齿轮的紧密结合后,故障可以排除。按照改方法检修后故障仍旧存在的话,也有可能是舵机电机的问题或电位器的问题,需要综合分析逐一排查!   8)故障舵机不停的抖舵,排除无线电干扰,动控摇臂仍旧抖动的话----------电位器老化,换之,或直接报废掉,当配件!   9)数码斜盘舵机装机过后发现舵机运行不正常,快慢不一,退回厂家,后来换回3个后还是一致性差,最后才知道是什么原因-----有些数码舵机对BEC要求,加装5.V3A 外置 BEC后,故障排除,与舵机质量无关。舵机选购:市场上的舵机有塑料齿、金属齿、小尺寸、标准尺寸、大尺寸,另外还有薄的标准尺寸舵机,及低重心的型号。小舵机一般称为微型舵机,扭力都比较小,市面上2.5g,3.7g,4.4g,7g,9g等舵机指的是舵机的重量分别是多少克,体积和扭力也是逐渐增大。微型舵机内部多数都是塑料齿,9g舵机有金属齿的型号,扭力也比塑料齿的要大些。futaba S3003,辉盛 MG995是标准舵机,体积差不多,但前者是塑料齿,后者金属齿,两者标称的扭力也差很多。春天sr403p,Dynamixel AX-12+是机器人专用舵机,不同的是前者是国产,后者是韩国产,两者都是金属齿标称扭力13kg以上,但前者只是改改样子的模拟舵机,后者则是RS485串口通信,具有位置反馈,而且还具有速度反馈与温度反馈功能的数字舵机,两者在性能和价格上相差很大。除了体积,外形和扭力的不同选择,舵机的反应速度和虚位也要考虑,一般舵机的标称反应速度常见0.22 秒/60°,0.18 秒/60°,好些的舵机有0.12 秒/60°等的,数值小反应就快。舵机虚位产生和舵机的扭力和制造工艺有关,扭力大相应的负载范围也大,虚位就相应小,普通舵机新的时候虚位一般比较小,也就是半个齿的角度,这个应该是机械加工的精度问题,好的舵机就比较小。但使用了一段时间以后,尤其是大扭距的舵机,虚位就越来越大了,这个应该不是齿轮磨损造成的,解剖了几个舵机,发现都是舵机盖的塑料材质不够硬,齿轮的的轴都是直接装在这个塑料盖上的,时间一长,这几个孔都被扩大成椭圆形了。一扳摇臂,齿轮的轴就会左右晃动,虚位就产生了。现在市面上的舵机鱼龙混杂,总体来说仿品不如正品,便宜的不如贵的,塑料齿的不如金属齿的,老的不如新的,国内的不如外国的等等,大家不必过于追求极致,根据自身购买力选择够用的就行。
转自arduinocn
好长。。。顶一个
这个很详细啊,图文并茂,应该加精吧?
不错,是好东西啊
这个真心好详细。。。
感谢分享!我是新手菜鸟,有个别问题望能解答控制死区是不是都是 系统本身决定?滞环应该具体在哪设置呢?
覆盖全国38个城市的服务网点,维修透明看得见!
学习了,还没有用到舵机。
赞个~~~~小手一抖,经验到手,为了升级,到处游走,纯属路过,不要介意,高抬贵手,立马飘走.
好长,看了两遍还是不明白,电位计从哪里反馈信号给控制板
先mark,然后慢慢研究
不顶贴 有点说不过去 了 支持发帖发好贴
又长知识了
买了两个便宜舵机,只有60+-10度。。。。摆动好好玩,不过有点烫。。。试过用 Arduino的标准控件和自己写延迟。好像只需调整正脉冲宽度(0.5ms~2.5ms),负脉冲给最小的0.5ms即可工作。。。
mark一下,果然精华
好详细,谢谢分享!舵机确实是我们的好朋友!
感觉吧里沉寂了几天,终于等来了有营养的好帖!
我本来只想安静的潜潜水,学学知识,不过事情既然这样了,那我不得不水一发了
值得一mark!
25万能在上海买什么?一辆中档车?一块名牌表?
假如你有25万,你会怎么花?
会不会选择买一套精装loft?让自己在上海安个家!
会不会将目光锁定在嘉定?购买一套38—56㎡轨交loft公寓?
4.5米挑高双层2+1房,宜买宜卖宜出租,总价49万起!
上海租房族,也能轻松实现买房梦!圆梦地址:
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或403 Forbidden
403 Forbidden查看: 583|回复: 0
8路舵机PWM控制电路proteus仿真原理图+单片机源程序
舵机的工作原理和控制:
控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度
此电路设计51单片机控制PWM信号,输送到两个按键开关,从而来控制舵机的正转和反转,转动角度范围-90度到90度。
舵机的追随特性:
假设现在舵机稳定在A点,这时候CPU发出一个PWM信号,舵机全速由A点转向B点,在这个过程中需要一段时间,舵机才能运动到B点。
0.png (25.53 KB, 下载次数: 4)
20:37 上传
保持时间为Tw
当Tw≥△T时,舵机能够到达目标,并有剩余时间;
当Tw≤△T时,舵机不能到达目标;
理论上:当Tw=△T时,系统最连贯,而且舵机运动的最快。
实际过程中w不尽相同,连贯运动时的极限△T比较难以计算出来。
假如我们的舵机1DIV =8us,当PWM信号以最小变化量即(1DIV=8us)依次变化时,舵机的分辨率最高,但是速度会减慢。
proteus仿真原理图:
0.png (11.8 KB, 下载次数: 5)
20:29 上传
0.png (582.18 KB, 下载次数: 5)
20:30 上传
0.png (62.08 KB, 下载次数: 5)
20:31 上传
原代码:
#include&reg52.h&
sbit PWM0 = P1^0;
sbit PWM1 = P1^1;
sbit PWM2 = P1^2;
sbit PWM3 = P1^3;
sbit PWM4 = P1^4;
sbit PWM5 = P1^5;
sbit PWM6 = P1^6;
sbit PWM7 = P1^7;
sbit ADD = P3^6;
sbit SUB = P3^7;
#define uchar unsigned char
#define uint unsigned int
uint t_up0 = 1500;& && && && && & //舵机PWM高电平时间 表示1ms到2ms
uint t_up1 = 1500;
uint t_up2 = 1500;
uint t_up3 = 1500;
uint t_up4 = 1500;
uint t_up5 = 1500;
uint t_up6 = 1500;
uint t_up7 = 1500;
uint t0_h;
uint t0_l;
void delayms(uint ms)
{& && &&&
& && &&&unsigned char a,b,c;
& && &&&while(ms--)
& && &&&{& && && && && &
& & for(c=1;c&0;c--)
& && &&&for(b=142;b&0;b--)
& && && && &for(a=2;a&0;a--);
& && &&&}
}
void timer_init()
{
& && &&&EA = 1;
& && &&&ET0 = 1;
& && &&&PT0 = 1;
& && &&&TMOD = 0x11;
& && &&&TH0 = (65536 - t_up0)/256;
& && &&&TL0 = (65536 - t_up0)%256;
}
uchar t0_flag = 0;
uint num_max = 65535;& && &&&//直接用65535 - t_up 不用变量 - t_up 时,误差较大,原因暂时不明 【注:65536不能存到uint类型变量中】
uint t_change = 63036;//换路周期2.5ms& & 8路
uchar error0 = 45;
uchar error1 = 45;
uchar error2 = 52;
uchar error3 = 52;
uchar error4 = 57;
uchar error5 = 57;
uchar error6 = 63;
uchar error7 = 63;
uchar error8 = 70;
uchar error9 = 70;
uchar error10 = 76;
uchar error11 = 76;
uchar error12 = 82;
uchar error13 = 82;
uchar error14 = 88;
uchar error15 = 88;
void timer0() interrupt 1
{
& && &&&
& && &&&if(t0_flag == 0)
& && &&&{
& && && && && & PWM0 = 1;
& && && && && & TH0 = (num_max - t_up0 + error0)/256; //+?是为了抵消执行语句花的时间
& && && && && & TL0 = (num_max - t_up0 + error0)%256;
& && && && && &
& && && && && & t0_flag = 1;
& && &&&}
& && &&&else if(t0_flag == 1)
& && &&&{
& && && && && & PWM0 = 0;
& && && && && & TH0 = (t_change + t_up0 +error1)/256;
& && && && && & TL0 = (t_change + t_up0 +error1)%256;
& && && && && &
& && && && && & t0_flag = 2;
& && &&&}
& && &&&else if(t0_flag == 2)
& && &&&{
& && && && && & PWM1 = 1;
& && && && && & TH0 = (num_max - t_up1 + error2)/256; //+?是为了抵消执行语句花的时间
& && && && && & TL0 = (num_max - t_up1 + error2)%256;
& && && && && &
& && && && && & t0_flag = 3;
& && &&&}
& && &&&else if(t0_flag == 3)
& && &&&{
& && && && && & PWM1 = 0;
& && && && && & TH0 = (t_change + t_up1 +error3)/256;
& && && && && & TL0 = (t_change + t_up1 +error3)%256;
& && && && && &
& && && && && & t0_flag = 4;
& && &&&}
& && &&&else if(t0_flag == 4)
& && &&&{
& && && && && & PWM2 = 1;
& && && && && & TH0 = (num_max - t_up2 + error4)/256; //+?是为了抵消执行语句花的时间
& && && && && & TL0 = (num_max - t_up2 + error4)%256;
& && && && && &
& && && && && & t0_flag = 5;
& && &&&}
& && &&&else if(t0_flag == 5)
& && &&&{
& && && && && & PWM2 = 0;
& && && && && & TH0 = (t_change + t_up2 +error5)/256;
& && && && && & TL0 = (t_change + t_up2 +error5)%256;
& && && && && &
& && && && && & t0_flag = 6;
& && &&&}
& && &&&else if(t0_flag == 6)
& && &&&{
& && && && && & PWM3 = 1;
& && && && && & TH0 = (num_max - t_up3 + error6)/256; //+?是为了抵消执行语句花的时间
& && && && && & TL0 = (num_max - t_up3 + error6)%256;
& && && && && &
& && && && && & t0_flag = 7;
& && &&&}
& && &&&else if(t0_flag == 7)
& && &&&{
& && && && && & PWM3 = 0;
& && && && && & TH0 = (t_change + t_up3 +error7)/256;
& && && && && & TL0 = (t_change + t_up3 +error7)%256;
& && && && && &
& && && && && & t0_flag = 8;
& && &&&}
& && &&&else if(t0_flag == 8)
& && &&&{
& && && && && & PWM4 = 1;
& && && && && & TH0 = (num_max - t_up4 + error8)/256; //+?是为了抵消执行语句花的时间
& && && && && & TL0 = (num_max - t_up4 + error8)%256;
& && && && && &
& && && && && & t0_flag = 9;
& && &&&}
& && &&&else if(t0_flag == 9)
& && &&&{
& && && && && & PWM4 = 0;
& && && && && & TH0 = (t_change + t_up4 +error9)/256;
& && && && && & TL0 = (t_change + t_up4 +error9)%256;
& && && && && &
& && && && && & t0_flag = 10;
& && &&&}
& && &&&else if(t0_flag == 10)
& && &&&{
& && && && && & PWM5 = 1;
& && && && && & TH0 = (num_max - t_up5 + error10)/256; //+?是为了抵消执行语句花的时间
& && && && && & TL0 = (num_max - t_up5 + error10)%256;
& && && && && &
& && && && && & t0_flag = 11;
& && &&&}
& && &&&else if(t0_flag == 11)
& && &&&{
& && && && && & PWM5 = 0;
& && && && && & TH0 = (t_change + t_up5 + error11)/256;
& && && && && & TL0 = (t_change + t_up5 + error11)%256;
& && && && && &
& && && && && & t0_flag = 12;
& && &&&}
& && &&&else if(t0_flag == 12)
& && &&&{
& && && && && & PWM6 = 1;
& && && && && & TH0 = (num_max - t_up6 + error12)/256; //+?是为了抵消执行语句花的时间
& && && && && & TL0 = (num_max - t_up6 + error12)%256;
& && && && && &
& && && && && & t0_flag = 13;
& && &&&}
& && &&&else if(t0_flag == 13)
& && &&&{
& && && && && & PWM6 = 0;
& && && && && & TH0 = (t_change + t_up6 + error13)/256;
& && && && && & TL0 = (t_change + t_up6 + error13)%256;
& && && && && &
& && && && && & t0_flag = 14;
& && &&&}
& && &&&else if(t0_flag == 14)
& && &&&{
& && && && && & PWM7 = 1;
& && && && && & TH0 = (num_max - t_up7 + error14)/256; //+?是为了抵消执行语句花的时间
& && && && && & TL0 = (num_max - t_up7 + error14)%256;
& && && && && &
& && && && && & t0_flag = 15;
& && &&&}
& && &&&else if(t0_flag == 15)
& && &&&{
& && && && && & PWM7 = 0;
& && && && && & TH0 = (t_change + t_up7 + error15)/256;
& && && && && & TL0 = (t_change + t_up7 + error15)%256;
& && && && && &
& && && && && & t0_flag = 0;
& && &&&}
& && &&&
}
void main()
{
& && &&&uint t_
& && &&&timer_init();
& && &&&TR0 = 1;
& && &&&while(1)
& && &&&{
& && && && && &
& && && && && & if(ADD == 0)
& && && && && & {
& && && && && && && && &delayms(2);
& && && && && && && && &if(ADD == 0)
& && && && && && && && &{
& && && && && && && && && && &&&if(t_up0 &= 1950)
& && && && && && && && && && &&&{
& && && && && && && && && && && && && & t_up0 = t_up0 + 50;
& && && && && && && && && && && && && & t_up1 = t_up1 + 50;
& && && && && && && && && && && && && & t_up2 = t_up2 + 50;
& && && && && && && && && && && && && & t_up3 = t_up3 + 50;
& && && && && && && && && && && && && & t_up4 = t_up4 + 50;
& && && && && && && && && && && && && & t_up5 = t_up5 + 50;
& && && && && && && && && && && && && & t_up6 = t_up6 + 50;
& && && && && && && && && && && && && & t_up7 = t_up7 + 50;
& && && && && && && && && && &&&}
& && && && && && && && && && &&&
& && && && && && && && && && &&&t_while = 50000;
& && && && && && && && && && &&&while(t_while--)
& && && && && && && && && && &&&{
& && && && && && && && && && && && && & if(ADD == 1)
& && && && && && && && && && && && && && && && &
& && && && && && && && && && &&&}
& && && && && && && && && && &&&
& && && && && && && && &}
& && && && && & }
& && && && && &
& && && && && & if(SUB == 0)
& && && && && & {
& && && && && && && && &delayms(2);
& && && && && && && && &if(SUB == 0)
& && && && && && && && &{
& && && && && && && && && && &&&if(t_up0 &= 1050)
& && && && && && && && && && &&&{
& && && && && && && && && && && && && & t_up0 = t_up0 - 50;
& && && && && && && && && && && && && & t_up1 = t_up1 - 50;
& && && && && && && && && && && && && & t_up2 = t_up2 - 50;
& && && && && && && && && && && && && & t_up3 = t_up3 - 50;
& && && && && && && && && && && && && & t_up4 = t_up4 - 50;
& && && && && && && && && && && && && & t_up5 = t_up5 - 50;
& && && && && && && && && && && && && & t_up6 = t_up6 - 50;
& && && && && && && && && && && && && & t_up7 = t_up7 - 50;
& && && && && && && && && && &&&}
& && && && && && && && && && &&&
& && && && && && && && && && &&&t_while = 50000;
& && && && && && && && && && &&&while(t_while--)
& && && && && && && && && && &&&{
& && && && && && && && && && && && && & if(SUB == 1)
& && && && && && && && && && && && && && && && &
& && && && && && && && && && &&&}
& && && && && && && && && && &&&
& && && && && && && && &}
& && && && && & }
& && &&&}
& && &&&
}
复制代码全部资料(压缩包)下载:
(197.68 KB, 下载次数: 12)
20:34 上传
点击文件名下载附件
下载积分: 黑币 -5
舵机原理详见:
Powered by

我要回帖

更多关于 数字舵机 的文章

 

随机推荐