术语和定义
参考文献
有关文件及软件,请浏览:
https://www.dialog-seminile.com/configurable-mixed-signal.
下载我们的免费GreenPak Designer软件以打开.gp文件并查看所提出的电路设计。在几分钟内使用GreenPak开发工具将设计冻结到您自己的定制IC中。yabo国际娱乐对话框半导体提供一个完整的应用程序注释库,其中包含了设计示例,以及对话框IC中的功能和块的说明。
- GreenPak设计师软件,软件下载和用户指南,对话框半导体yabo国际娱乐
- AN-CM-280伺服拆卸器.GP,GreenPak设计文件,对话半导体yabo国际娱乐
- GreenPak开发工具,GreenPak开发工具网页,对话半导体yabo国际娱乐
- GreenPak应用笔记,绿派克应用笔记网页,对话半导体yabo国际娱乐
介绍
伺服电机广泛应用于商业和工业应用的线性或旋转驱动器。亚博国际官网平台网址本例采用SG90型号,成本低,耗电少,重量轻。这使这些类型的伺服理想的消费设备遥控玩具,如rf控制赛车,飞机,和其他。
然而,为了正确地控制伺服电机,电子驱动器必须对伺服电机数据引脚产生适当的电压模式。波形应该是小于2毫秒的脉冲,每个伺服电机每20毫秒重复一次。
本申请说明将使用SLG46537V GreenPak™IC提供1至8个伺服电机信号解复用器的设计。设计的信号多路分解器将在8个输出引脚上驱动8个伺服电机,其中多路复用信号进入1个输入引脚。根据系统要求,SLG46537V还可以集成附加功能,例如附加逻辑或电压监控。
以下部分将展示:
- 伺服电机1 RF通道信号多路复用;
- 详细设计了SLG46537V GreenPAK伺服解复用器;
- 如何使用1 GreenPak设备驱动8个伺服电机。
伺服电机1 RF通道复用
小型9g伺服电机的标准是运行0.5 ms ~ 1.5 ms HIGH脉冲,周期为20毫秒。0.5 ms与0°相关,1 ms与90°相关,1.5 ms与180°相关。
这样,如果我们为每个电机脉冲保留一个2毫秒的窗口,8毫秒x 2毫秒可以用于8个电机脉冲窗口,其余的4毫秒沉默用于同步。图2显示了8个电机20毫秒的时间多路周期,均在90°位置(1毫秒脉冲)。图3显示了8个电机20毫秒的时间多路周期,除5号电机在0°位置(0.5毫秒脉冲)外,其余均在90°位置(1毫秒脉冲)。
图2和图3是由Python脚本生成的符号数字样本的波形,以实现50,000 Hz的采样率。
GreenPak设计原理图
GreenPak设计的原理图如图4所示。设计的基本块是内部振荡器,2x计数器,2倍过滤器,8倍触发器,带有复位的ASM,带有OE和下拉的8倍引脚,输入引脚和供应销。
GreenPAK计时模块
采用OSC0内部振荡器。驱动CNT2计数器2mhz /8/64≈3.9 kHz和CNT4计数器2mhz /8/4≈62.5 kHz。设置如图5所示。CNT2设置为在所有下降边(延迟模式)上重复触发,并在4.096 ms后给予非倒向OUT。这是在20毫秒时间多路复用周期结束时的4毫秒静音检测,它将ASM重置为状态0。CNT4被设置为在96 μs后每个下降沿触发一次(一次触发模式),给所有触发器时钟输入一个短脉冲。只有当前状态的触发器有一个高输入,将触发ASM过渡到以下状态。
GreenPak ASM
GreenPak设计中的触发器用于将异步状态机更改为同步机。如上一节所述,CNT / DLY4将短脉冲传递到所有触发器时钟输入,但只有当前状态的触发器具有高输入,并将触发到状态+1的过渡。由于所有其他折叠都刚刚加载了低输入,因此阻止了ASM失控,因为所有其他折叠刚加载,因此ASM必须等到下一个转换的下一个脉冲。这是必要的,因为所有州过渡条件都是相同的1条件。设置如图6所示。
GreenPAK设计引出线
信号输入IO0配置为无施密特触发器的数字输入。ServoX DATA输出配置为在OE = 1时的1x推挽,在OE = 0时,它们是带有10k下拉电阻的输入。Pinout如图1和图7所示。
|
|
测试结果
信号输入由由Python脚本(附录a)生成的音频输出信号(0 ~ 5v)放大驱动。图8显示信号输入(黄色)和Servo1数据输出(蓝色)。生成的。wav文件包含20秒精心设计的伺服动作,GreenPAK设计据此解码所有8个伺服电机动作所看到的ServoX DATA信号。
结论与结果
提出了模型伺服电机解复用器的设计。通过使用SLG46537V的GreenPak设计,我们已成功实现了轻量级,低功耗,经济高效的解决方案。图9显示了SLG46537V的资源使用。该设计成功地解码了所有8个伺服电源数据信号,从一个时间复用信号输入 - 图10。
附录A源代码
#servomux.py ###############################################################开始#
进口波
将numpy导入为np
导入matplotlib.pyplot作为plt
def repeat48x(系列):
返回np。系列,系列,系列,系列,系列,系列,系列,系列,系列,系列series, series, series, series, series, series, series),轴=None)
Silence = -NP.ONES(200)
pulse10 = np.concatenate((np.ones(50),-np.ones(50)),轴=无)
plt.plot (pulse10)
plt。ylabel(脉冲1.0毫秒)
plt.show ()
pulse05 = np.concatenate ((np.ones (25), -np.ones(75)),轴=没有)
plt.plot(pulse05)
Plt.ylabel('脉冲0.5ms')
plt.show ()
pulse15 = np.concatenate ((np.ones (75), -np.ones(25),轴=没有)
plt.plot(pulse15)
plt.ylabel('脉冲1.5ms')
plt.show ()
# second10
系列= np。concatenate((pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, si- lence), axis=None)
plt.plot(系列)
plt。Ylabel ('20ms系列8x 1.0ms +沉默')
plt.show ()
second10 = repeat48x(系列)
plt.plot (second10)
plt。Ylabel ('1s- 20ms系列8x 1.0ms +沉默')
plt.show ()
# second1L
系列= NP.CONCATENATE((PUSSOR05,PULSE10,PULSE10,PULSE10,PULSE10,PULSE10,PULSE10,PULSE10,SI- LENCE),轴=无)
plt.plot(系列)
Plt.ylabel('1L- 20ms系列8x 1.0ms +沉默')
plt.show ()
second1L = repeat48x(系列)
plt.plot(stign1l)
Plt.ylabel('1L-1S-20ms系列8x 1.0ms +沉默')
plt.show ()
# second2L
系列= np。concatenate((pulse10, pulse05, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, si- lence), axis=None)
plt.plot(系列)
plt。ylabel('2L- 20ms系列8x 1.0ms +沉默')
plt.show ()
second2L = repeat48x(系列)
plt.plot (second2L)
plt。ylabel('2L-1s- 20ms系列8x 1.0ms +silence')
plt.show ()
#second3l.
系列= np。concatenate((pulse10, pulse10, pulse05, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, si- lence), axis=None)
plt.plot(系列)
Plt.ylabel('3L- 20ms系列8x 1.0ms +沉默')
plt.show ()
second3L = repeat48x(系列)
plt.plot(second3l)
plt。ylabel('3L-1s- 20ms系列8x 1.0ms +silence')
plt.show ()
#exply4l.
系列= NP.CONCATENATE((PULSE10,PULSE10,PULSE10,PULSE05,PULSE10,PULSE10,PULSE10,PULSE10,SI-LENCE),轴=无)
plt.plot(系列)
Plt.ylabel('4L- 20ms系列8x 1.0ms + Silence')
plt.show ()
second4L = repeat48x(系列)
plt.plot (second4L)
Plt.ylabel('4L-1S-20ms系列8x 1.0ms +沉默')
plt.show ()
#exply5l.
系列= NP.CONCATENATE((PULSE10,PULSE10,PULSE10,PULSE10,PULSE05,PULSE10,PULSE10,PULSE10,SI-LENCE),轴=无)
plt.plot(系列)
Plt.ylabel('5L- 20ms系列8x 1.0ms +沉默')
plt.show ()
second5L = repeat48x(系列)
plt.plot (second5L)
plt。ylabel('5L-1s- 20ms系列8x 1.0ms +silence')
plt.show ()
# second6L
系列= np。concatenate((pulse10, pulse10, pulse10, pulse10, pulse05, pulse10, pulse10, si- lence), axis=None)
plt.plot(系列)
plt。ylabel('6L- 20ms系列8x 1.0ms +沉默')
plt.show ()
second6L = repeat48x(系列)
plt.plot (second6L)
plt。ylabel('6L-1s- 20ms系列8x 1.0ms +silence')
plt.show ()
#exper7l.
系列= np。concatenate((pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse05, pulse10, silence), axis=None)
plt.plot(系列)
Plt.ylabel('7L- 20ms系列8x 1.0ms +沉默')
plt.show ()
second7l =重复48x(系列)
plt.plot (second7L)
plt。ylabel('7L-1s- 20ms系列8x 1.0ms +silence')
plt.show ()
#yemp8L.
系列= np。concatenate((pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse10, pulse05, silence), axis=None)
plt.plot(系列)
plt。ylabel('8L- 20ms系列8x 1.0ms +沉默')
plt.show ()
second8L = repeat48x(系列)
plt.plot(second8l)
plt。ylabel('8L-1s- 20ms系列8x 1.0ms +silence')
plt.show ()
w = wave.open(“servo.wav”,“世界银行”)
W.SetNchannels(1)
W.setsampwidth(1)
W.SetFramerate(48000)
# w.setnframes (24000)
# w。setcomptype('没有',' 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.close ()
# servoMUX.py ##################################################################### #结束