跳过主要内容

AN-CM-280伺服解复用器

目录

术语和定义

ASIC专用集成电路
ASM异步状态机
CPLD复杂的可编程逻辑设备
ICs集成电路
微控制器单片机

参考

有关文件和软件,请访问:

//www.wsdof.com/configurable-mixed-signal

下载我们的免费GreenPAK Designer软件,打开。gp文件并查看建议的电路设计。使用GreenPAK开发工具在几分钟内将设计冻结到您自己的定制IC中。雷竞技电竞平台Dialog Semiconductor提供了一个完整的图书馆的应用笔记具有设计示例,以及在Dialog IC内的功能和块的解释。

  1. GreenPAK设计软件,软件下载和用户指南,Dialog半导体雷竞技电竞平台
  2. 一个- cm - 280伺服Demultiplexer.gp,绿派克设计文件,Dialog半导体雷竞技电竞平台
  3. GreenPAK开发工具,对话半导体GreenPAK开发工具网页雷竞技电竞平台
  4. GreenPAK应用笔记,GreenPAK应用说明网页,对话框雷竞技电竞平台

介绍

伺服电机广泛应用于商业和工业应用,如线性或旋转驱动器。在本例中,使用了SG90型号,该型号成本低、功耗小、重量轻。这使雷竞技安卓下载得这些类型的伺服非常适合消费设备RC玩具,如RF控制的赛车、飞机等。

但是,为了正确控制伺服电机,电子驱动器必须为伺服电机数据引脚生成适当的电压模式。波形应为小于2毫秒的脉冲,每20毫秒对一个伺服电机重复一次。

本应用说明将介绍一个1至8伺服电机信号解复用器的设计,该信号解复用器将驱动8个输出引脚上的8个伺服电机,1个输入引脚上的多路信号进入。SLG46537V还可以集成其他功能,如额外的逻辑或电压监测,取决于系统需求。

以下各节将说明:

  • 一伺服电机1 RF通道信号多路复用;
  • 详细介绍了SLG46537V GreenPAK伺服解复用器的设计;
  • 如何用1个GreenPAK装置驱动8个伺服电机。
图1:SG90型号伺服电机

伺服电机1射频通道多路复用

小型9g伺服电机的标准是在0.5 ms~1.5 ms的高脉冲下运行,周期为20毫秒。0.5 ms与0°相关,1 ms与90°相关,1.5 ms与180°相关。

通过这种方式,如果我们为每个电机脉冲保留2毫秒的窗口,则8 Ms x 2 ms可用于8个电机脉冲窗口,其剩余4毫秒静音用于同步。图2显示了8个电动机的20 ms的时间多路复用时段,全部在90°位置(1 ms脉冲)。图3示出了除了在0°位置(0.5ms脉冲0.5ms)处的电动机#5之外的80°电机(1ms脉冲)的20ms的时间多路复用时段。

图2和图3是由Python脚本生成的采样率为50,000 Hz的签名数字样本的波形。

图2:时间复用- 8x 90°@ 50kS/s
图3:时间多路传输–7x90°,#5=0°@50kS/s

GreenPAK设计示意图

图4显示了GreenPAK设计的原理图。该设计的基本模块是内部振荡器,2x计数器,2x滤波器,8倍触发器,带复位的ASM,带OE和下拉的8倍引脚,输入引脚和供应引脚。

图4:GreenPAK设计示意图的俯视图

格林帕克计时块

使用OSC0内部振荡器。它以2 MHz/8/64的频率驱动CNT2计数器≈ 3.9 kHz和2 MHz/8/4的CNT4计数器≈ 62.5千赫。设置如图5所示。CNT2设置为在所有下降沿上重复触发(延迟模式),并在4.096 ms后发出非反转输出。这是在20 ms时间复用周期结束时的4 ms静默检测,将ASM重置为状态0。CNT4设置为在96μs后每下降沿(单触发模式)触发一次,以向所有触发器时钟输入提供短脉冲。只有当前状态的触发器具有高输入,并将触发ASM转换到以下状态。

图5:计时块设置的特写

GreenPAK ASM

GreenPAK设计中的Flip-Flops用于将异步状态机转换为同步状态机。如前一节所述,CNT/DLY4向所有触发器时钟输入端提供短脉冲,但只有当前状态的触发器具有高输入,并将触发到状态+1的过渡。ASM越过一个以上的状态被阻止,因为所有其他的Flip- Flops只是加载低输入,所以ASM必须等待下一个脉冲为下一个过渡。这是必要的,因为所有的状态转换条件都是相同的1个条件。设置如图6所示。

图6:ASM设置的关闭视图

GreenPak设计引脚向前

信号输入IO0配置为无需施密特触发的数字。伺服仪数据输出配置为OE = 1的1x推挽,在OE = 0上,它们是具有10 k下拉电阻的输入。引脚放入表1和图7中。

表1:设计引脚
图7:引脚配置- STQFN20L

测试结果

信号输入由Python脚本生成的放大音频输出信号(0~5V)驱动(附录a)。图8以黄色显示信号输入,以蓝色显示Servo1数据输出。生成的.wav文件有20秒的编排伺服运动,GreenPAK设计对伺服电机运动看到的所有8个伺服数据信号进行相应解码。

图8:输入/输出-测量

结论和结果讨论

介绍了一种新型伺服电机解复用器的设计。通过GreenPAK的SLG46537V设计,我们成功实现了一种轻量化、低功耗、低成本的解决方案。图9显示了SLG46537V的资源使用情况。该设计成功解码所有8个ServoX数据信号从一个时间多路信号输入-图10。

图9:使用的SLG46537V资源
图10:逻辑分析仪-所有信号

附录源代码

# servoMUX.py ################################################################### 开始#

进口波

将numpy导入np

进口matplotlib。pyplot作为plt

def重复48x(系列):

返回np.concatenate((系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列,系列ies,系列,系列,系列,系列),轴=无)

沉默= -np.ones (200)

pulse10 = np.concatenate ((np.ones (50), -np.ones(50)),轴=没有)

plt.绘图(脉冲10)

plt.ylabel('脉冲1.0ms')

plt.show()

脉冲05=np.连接((np.一(25),-np.一(75)),轴=无)

plt.plot (pulse05)

plt。ylabel(脉冲0.5毫秒)

plt.show()

pulse15 = np.concatenate((np.ones(75),-np.one(25)),轴=无)

plt.plot (pulse15)

plt。ylabel(脉冲1.5毫秒)

plt.show()

#第二个10

系列= NP.CONCATENATE((PULSE10,PULSE10,PULSE10,PULSE10,PULSE10,PULSE10,PULSE10,PULSE10,SI- LENCE),轴=无)

plt.绘图(系列)

plt.ylabel('20ms系列8x 1.0ms+静音')

plt.show()

second10=repeat48x(系列)

plt.绘图(第二个10)

plt.ylabel('1s-20ms系列8x1.0ms+静音')

plt.show()

#第二个1L

系列= np。concatenate((pulse05, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, si- lence), axis=None)

plt.绘图(系列)

plt。ylabel('1L- 20ms系列8x 1.0ms +沉默')

plt.show()

second1L=repeat48x(系列)

plt.plot (second1L)

plt。ylabel('1L-1s- 20ms系列8x 1.0ms +silence')

plt.show()

#第二个2L

串联=np。串联(脉冲10、脉冲05、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、透镜),轴=无)

plt.绘图(系列)

plt.ylabel('2L-20ms系列8x 1.0ms+静音')

plt.show()

第二个2L =重复48x(系列)

plt.绘图(第二个2L)

plt.ylabel('2L-1s-20ms系列8x 1.0ms+静音')

plt.show()

# second3L

系列=np。串联(脉冲10、脉冲10、脉冲05、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、透镜),轴=无)

plt.绘图(系列)

plt。ylabel('3L- 20ms系列8x 1.0ms +沉默')

plt.show()

second3L=repeat48x(系列)

plt.plot (second3L)

plt.ylabel('3L-1s-20ms系列8x 1.0ms+静音')

plt.show()

# second4L

系列= np。concatenate((pulse10, pulse10, pulse10, pulse05, pulse10, pulse10, pulse10, pulse10, pulse10, si- lence), axis=None)

plt.绘图(系列)

plt。ylabel('4L- 20ms系列8x 1.0ms +沉默')

plt.show()

second4l =重复48x(系列)

plt.绘图(第二个4L)

plt。ylabel('4L-1s- 20ms系列8x 1.0ms +silence')

plt.show()

# second5L

系列= np。concatenate((pulse10, pulse10, pulse10, pulse10, pulse05, pulse10, pulse10, pulse10, si- lence), axis=None)

plt.绘图(系列)

plt。ylabel('5L- 20ms系列8x 1.0ms +沉默')

plt.show()

second5L=repeat48x(系列)

plt.绘图(第二个5L)

plt.ylabel('5L-1s-20ms系列8x 1.0ms+静音')

plt.show()

#第二个6L

系列= NP.CONCATENATE((PULSE10,PULSE10,PULSE10,PULSE10,PULSE10,PULSE05,PULSE10,PULSE10,SI-LENCE),轴=无)

plt.绘图(系列)

plt.ylabel('6L-20ms系列8x 1.0ms+静音')

plt.show()

second6l =重复48x(系列)

plt.plot(switch6l)

plt.ylabel('6L-1s-20ms系列8x 1.0ms+静音')

plt.show()

# second7L

系列=np.串联(脉冲10,脉冲10,脉冲10,脉冲10,脉冲10,脉冲10,脉冲10,脉冲05,脉冲10,静音),轴=无)

plt.绘图(系列)

plt。ylabel('7L- 20ms系列8x 1.0ms +沉默')

plt.show()

second7L = repeat48x(系列)

plt.绘图(第二个7L)

Plt.ylabel('7L-1S-20ms系列8x 1.0ms +沉默')

plt.show()

# second8L

系列=np.串联(脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲10、脉冲05、静音),轴=无)

plt.绘图(系列)

plt.ylabel('8L-20ms系列8x 1.0ms+静音')

plt.show()

second8l =重复48x(系列)

plt.plot (second8L)

Plt.ylabel('8L-1S-20ms系列8x 1.0ms + Silence')

plt.show()

w=wave.open(“伺服.wav”,“wb”)
w.setnchannels (1)
w.setsampwidth (1)
w.setframerate (48000)
#w、 设置帧(24000)
#w、 setcomptype('NONE','wav')
w.writeframesraw (100 * second10.astype (np.int8))
w.writeframesraw (100 * second10.astype (np.int8))
w.writeframesraw (100 * second10.astype (np.int8))
w.writeframesraw (100 * second10.astype (np.int8))
w、 writeframesraw(100*second1L.astype(np.int8))
w、 writeframesraw(100*second2L.astype(np.int8))
w.writeframesraw (100 * second3L.astype (np.int8))
w.writeframesraw(100 * second4l.astype(np.int8))
w.writeframesraw (100 * second5L.astype (np.int8))
w.writeframesraw (100 * second6L.astype (np.int8))
w.writeframesraw (100 * second7L.astype (np.int8))
w.writeframesraw (100 * second8L.astype (np.int8))
w.writeframesraw (100 * second10.astype (np.int8))
w.writeframesraw (100 * second10.astype (np.int8))
w.writeframesraw (100 * second10.astype (np.int8))
w.writeframesraw (100 * second10.astype (np.int8))
w、 关闭()

#3月5日日的现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方#######################################