伺服电机—实验一
零、实验发现的一个问题
在电机的实验中,出现一个问题,如图:
当STM32的TIM外设以10KHz的频率发出PWM波控制伺服电机转动的时候,总会丢失225个脉冲,无论是1圈还是10圈或者是50圈都会一共丢失225个脉冲,即使改变TIM的预分配数和自动重装载数,只要频率是10KHz,丢的脉冲数都是225个。当将频率减小一倍,丢失的脉冲数就会少除以二,如:当为5KHz的时候,丢失脉冲的数量就是225/2个。然而当频率增大一倍,丢失的脉冲数就会乘以二,如当为20KHz的时候,丢失脉冲的数量就是225*2。
当然只要在电机允许的范围内,都可以调试不同的频率去测试,发现手里的这个电机,始终是丢这些个脉冲,亲测增大好多倍,脉冲丢失数也会扩增那么多倍数。
一、电机旋转(延时版本)
概述:该实验主要验证参数的设定是否正确,以及对电路的理解是否正确,开启SRV-ON后,通过延时函数保持电机旋转的状态,延时结束后在改变电机旋转的方向,最后关闭SRV-ON,主要验证以下几点:
<1>对硬件的理解是否正确
<2>参数的设定是否正确
<3>软件上TIM的PWM功能的使用
实现的代码
二、电机旋转(中断版本)
概述:上一个实验,我们是通过软件延时的方式控制,仅仅只能看到电机正反转的现象。然而,我们在使用电机的时候,一般都会是位置控制,所以在软件编写的时候得能控制脉冲数。
程序的编写思想就是 每产生一个脉冲进入一次中断,进入中断记录一回次数,STM32的定时器输出多少个脉冲我们是可控的。
通过上述的思想,实现脉冲数量的控制,配合电机参数的设定,去实现电机的转动。
核心代码:
三、偏差计数器清零输入CL
偏差计数器清零输入是位置控制模式下的一个数字量输入端口,主要的应用按着最近学习的理解就是当SRV-OFF或者急停的时候,我们将整个系统恢复正常的状态,需要通过CL去进行一下偏差计数器的清除,防止继续输入的脉冲导致电机继续转动。
在外部电路和控制器配合的情况下,还需要设定好相关的参数Pr5.17计数器清零输入模式
这个时候就需要了解两种清零模式
等级清零:偏差计数器清零输入为ON的状态继续清除(只要不OFF,输入的脉冲就会被持续清除)
边缘清零:偏差计数器清零输入为OFF-ON的上升沿只清零一次
此功能只能在SI7上面分配,不可在其他端口分配。
想要持续清除偏差脉冲,就需要使用等级清零的模式,当SRV-OFF或者急停的时候,通过使用CL将偏差清除,这个时候只要不OFF掉CL,脉冲就不会作用到电机上面。
需要把握的几点:
<1>CL作为数字量输入端口的时候我们在设置的时候,十进制和十六进制的转换需要搞明白计算和如何设置。
<2>急停按钮COM+ pin输出的是高电平(电路导通的情况下),通过IDR寄存器读取值,确定急停和非急停的状态。
我的理解 一般使用了CL 都会用到retern 也就是说整个功能性的项目结束 返回到上一级 重新进行项目的选择 项目选择的时候,开启CL。
代码略,思路把握住。
四、指令脉冲禁止功能
指令脉冲的禁止输入功能,可以通过数字量端口输入或者参数设定实现,当设定后,脉冲输入就会无效,该种控制方式,是在任何模式下都可以使用的。
五、零速钳位功能
零速钳位功能主要作用就是使电机旋转的速度立刻为0,该功能应用于速度控制模式和扭矩控制模式。感觉等长训练就是应用于扭矩控制模式,通过零速钳位功能,让电机速度为0,停在那里。