客户开发一个替代传统电位计的项目,特殊的地方在于客户不需要旋转360度,而是希望旋转120度,然后对应输出0到5V的电压。出于成本考虑我选择了一款国产的磁编码器。
SD3012 是一款霍尔原理磁位置传感器,有 12 位模拟或 PWM 输出。SD3012 非接触的特点用于电位计上可以大大延长产品寿命 保证精度,不会受到任何外部同类杂散磁场的影响。模拟量输出可以设置起始位,所以也可以用于小角度的测量。默认情况下是0到360°轨到轨输出。
SD3012内部自带了12bits的DAC,可提供0-Vdd的轨到轨电压输出,当寄存器0x1F<7>=1时,Pin3将不是默认的PWM输出,而是以电压形式输出角度值。
如上图,可以寄存器(OTP)设置起始位置start_angle和对应的电压start_volt,终止位置stop_angle和对应的电压stop_volt,,Zero零位可以由用户编程设定的start_angle和stop_angle位置自动设定在二者中间位置,如上图所示的Zero位置。
如上所述,零点位置根据设定的start_angle和stop_angle位置自动设定在二者中间位置,如上图所示的Zero位置,这是通过2A,2B和2C,2D定义的。
比如
当需要零点位置设置在N时候,则需要配置{2B<3:0>,2A} 等于start_ang=N+1, 配置{2D<3:0>,2C}为stop_ang=N-1。
上述位置和对应电压对应的寄存器表如下表
,其中角度值1LSB = 360°/ 4096,0 为
0
°,
FFF
表示
359.912
,电压1LSB = Vdd/4096,,
0
为
0V,FFF
表示为
VDD
。
配置当角度从
0
到
120
度旋转时候,电压从
0
线性增加到
VDD,首先 配置起始和终止的角度位置寄存器,角度
0
即为初始默认值:
0x2A=0,0x2B=0,
终 止位 120°
角度值
12bits
为
{0x2D<3:0>,0x2C<7:0>},0x2C=56h,0x2D=05h,电压值不 配置代表
start_volt
和
min_volt
为
0V, stop_volt
和
max_volt
为
VDD
。
配置零点位置为
120
度,也就是零点位置等于
0x555h,则需要把 start=zero+1, stop=zero-1,
则
0x2A=56h,0x2B=05h, 0x2C=54h,0x2D=05h
。
或者用他们自带的编程器也很方便。