QEI编程笔记
- 格式:pdf
- 大小:521.29 KB
- 文档页数:6
1.界面变化时间设定,需要把变化的时间定义成一个“变量”或一个“数组”,界面的呈现时间通过调用“变量”或“数组”得以实现变化。
2.界面设置的呈现时间设置成无限时间,设置为“-1”或“infinite”,同时还必须有呈现方式的配合设置,还需把该界面的呈现方式设置成按键消失或反应消失。
3.呈现方式4.一个刺激在核心实验过程运行完成即完成一次trial,一个block的全过程就等于“指导语”、“核心实验过程”和“结语”之和。
5.四种实验程序设计模式6.指导语时间设置成“无限时间”,呈现方式设置成“按键消失”(Q),图片格式。
要交代清楚实验流程,先出现什么,后出现什么,被试应该怎样反应及注意事项。
例子:7.注视点呈现时间一般设置成500-800ms.呈现方式:自动消失。
呈现格式:“+”(或“*”)、红色、30号字号以上。
8.刺激界面呈现时间:固定时间(阈下知觉研究,固定30ms);变化时间(注意线索技术实验范式,500ms\1000ms\1500ms)呈现方式:自动消失(信号检测实验);按键消失(篇章阅读实验)同一block中,不同trial的实验材料,其呈现格式保持一致。
数据收集:一般情况下,刺激界面不需要被试进行反应,因此数据收集无需设置。
但在某些实验中,如篇章阅读,被试每按一次空格键阅读一个句子,研究者可能需要某一句或某两句的时间。
9.探测界面数据收集:RT\ACC\RESP10.探测线索形式:3种文字型探测线索设置成无限时间,符号型和声音型通常设置为500-800ms; “?”、“*”符号型探测线索设置成红色格式。
无需被试反应,无需收集数据。
11.反馈反馈内容:正确与错误;反应时间;累计正确率;其他内容信息(如反应太快或太慢)。
呈现时间:1000-2000ms;呈现方式:自动消失;呈现格式:正确信息用蓝色显示,错误或起警示作用的信息用红色显示。
《用MQL4编程》读书笔记(4)MQL4的程序结构·程序结构MQL4 程序由以下几大部分组成:1.头部2.特别函数 init()3.特别函数 start()4.特别函数 deinit()5.外建函数(用户自定义函数)代码执行顺序在主窗(货币对K线窗)中开启程序,最先执行的是头部代码。
接着执行特别函数 init(),并且只执行这一次。
程序的主要操作,是运行特别函数 start()。
start() 完成操作任务后,把控制交还MT4。
在新的报价(tick)到来时,MT4再次把控制交给 start(),由其运行。
启动后的程序,可以这样循环运行几个星期至几个月。
如果汇客把在主窗中的程序移除,MT4会一次性执行特别函数deinit()。
这对于正确终止操盘手的操作,是必要的。
·特别函数 init(), start()和deinit()它们是由MT4内部调用的,程序中没有对其调用的语句。
函数 init()操盘手的init() 调用执行,是在MT4启动并装入历史数据之后;或者,更换货币对之后;或者,更换K线图时间周期之后;或者,程序重新编译之后;或者,改变操盘手设置参数之后;以及,变更用户帐号之后。
脚本的 init() 调用执行,是在脚本置入主窗口之际。
外建指标的init() 调用执行,是在MT4启动之后;或者,更换货币对之后;或者,更换K线图时间周期之后;或者,程序重新编译之后;或者,改变外建函数设置参数之后。
函数 start()操盘手的start() 调用执行,是在新报价(tick)到来之际。
如果在start()执行时,有新报价到来,则其被忽略,不予处理。
脚本的 start() 一次性调用执行,是在脚本由init()初始化之后。
外建指标的start() 调用执行,是在其被置入主窗之后,新报价到来之际;或者,改变了主窗大小;或者,更换币种、更换K线图时间周期之后。
函数 deinit()可译为“善后函数”,处理程序结束时的事务。
AB—PLC自学笔记一以前断断续续的学了一点,但大多是三天打鱼两天晒网;也参加了一次培训,但是短短的课程、大量的产品介绍和难得的上机实验,很快就忘记了学了点啥。
翻开以前的学习记录,零散而杂乱,不少要点看上去是那么陌生。
也罢,再来一次打鱼又如何?第一步,安装软件。
手上有去年培训的时候从老师那里搞来的16版本的logix5000,以前也安装过,里面有很好的英文语音教学,当时老师开玩笑说,可以锻炼下听力。
安装完logix5000V16,再安装一个模拟器软件:Emulate,安装过程中告诉我需要rslinx,昏,看来安装次序错鸟。
其实在安装logix5000的过程中,最后一些小工具的安装也提示我需要rslinx的,被我忽略了。
于是安装rslinx,再安装emulate。
最后一步,把网上找来的授权导入。
发现用老版授权的话,软件第一次运行会提示你,现在16版本采用所谓的factorytalk管理授权了云云,我不管,反正能用就行。
接下来的问题就是,怎么用这个模拟器?以前用过,但是忘鸟。
只记得要选择一个特殊的硬件,还好有份模拟器的使用手册,简单看了下几个插图就回忆起来了,试了下,ok。
个人觉得ab的emulate有点别扭,因为用惯了西门子的plcsim,那个不需要选择什么特殊的硬件,原工程就可以很仿真的download下去去模拟运行。
而ab的东东,却不能用真正的硬件配置,那么一个实际个工程文件必须修改下controller才能去仿真了???万事具备,就开始学习软件吧,从何入手呢?先找几个自己感兴趣的问题研究研究吧。
先看看变量的定义,ab的独特之处就包括tag是以名称作为关键“索引”,没有西门子那种地址的概念,这样当然简化了开发。
那么如何批量的导入/导出变量呢?我用s7的编程习惯是在excel里面编辑好变量表,再导入到程序里面。
在logix5k软件里面找了下,果然可以,tools菜单下有import和export,试了下,跟西门子的symbol table一样,都是以csv文件保存的,不过也发现了中文注释偶尔会变“乱码”。
尼恩架构笔记全文共四篇示例,供读者参考第一篇示例:尼恩(Nien)是一种新颖的架构风格,它与传统的架构设计有着明显的不同。
尼恩架构的核心理念是简单、灵活、可扩展和易维护。
它旨在帮助开发团队更有效地实现软件开发过程,并降低系统维护的成本。
在尼恩架构笔记中,我们将介绍尼恩架构的基本原则、特点和应用场景,帮助读者更好地了解和应用这种新颖的架构风格。
一、尼恩架构的基本原则1. 简单性:尼恩架构倡导简洁的设计和实现方式,避免不必要的复杂性。
简单性可以提高代码的可读性和可维护性,降低系统开发和维护的成本。
2. 灵活性:尼恩架构注重灵活性,允许根据需求变化和业务演变进行快速调整和扩展。
架构的灵活性能够帮助开发团队更好地应对需求的变化,提高系统的适应性和可定制性。
3. 可扩展性:尼恩架构考虑到系统的扩展性,支持在不改变整体架构的情况下实现系统的水平扩展和垂直扩展。
可扩展的架构能够满足系统不断增长的需求,保证系统性能和可靠性。
4. 易维护性:尼恩架构倡导模块化和高内聚低耦合的设计,使得系统的各个模块易于单独测试和维护。
设计良好的架构能够降低系统维护的成本,提高开发团队的工作效率。
二、尼恩架构的特点1. 微服务架构:尼恩架构采用微服务架构模式,将系统拆分为独立的微服务,每个微服务专注于特定的业务功能,并通过轻量级的通信机制实现服务间的协作。
微服务架构能够提高系统的灵活性和可扩展性,降低系统的耦合度和复杂性。
2. 事件驱动架构:尼恩架构采用事件驱动架构模式,通过事件和消息的传递实现系统各个组件之间的解耦。
事件驱动架构能够提高系统的响应速度和实时性,降低系统的依赖性和耦合度。
3. 容器化部署:尼恩架构倡导容器化部署,利用容器技术实现应用的标准化打包、交付和运行。
容器化部署能够简化应用的部署和运维过程,提高系统的可移植性和可重用性。
4. 自动化测试:尼恩架构倡导自动化测试,采用持续集成和持续交付的方式验证系统的功能和性能。
LM3S 系列单片机休眠与深度休眠应用笔记(一)LM3S 系列单片机休眠与深度休眠应用笔记1处理器的3 种模式Contex-M3 处理器除支持正常运行模式外,还支持睡眠模式和深度睡眠模式,用来实现低功耗。
处理器在运行模式中控制器积极执行代码;睡眠模式中器件的时钟不变,但控制器不再执行代码(并且也不再需要时钟);在深度睡眠模式中,器件的时钟可以改变,并且控制器不再执行代码(也不需要时钟)。
z 运行模式运行模式下,处理器和所有当前被RCGCn 寄存器使能的外设均可以正常运行。
系统时钟可以由包括PLL 在内的所有可用时钟源提供。
z 睡眠模式睡眠模式下,Cortex-M3 处理器内核和存储器子系统都不使用时钟。
外设仅在相应的时钟门控在SCGCn 寄存器中使能且Auto Clock Gating (见RCC 寄存器)使能时,或者在相应的时钟门控在RCGCn 寄存器中使能且Auto Clock Gating 被禁能时,才使用时钟。
睡眠模式下,系统时钟源和频率均与运行模式下相同。
z 深度睡眠模式深度睡眠模式下,Cortex-M3 处理器内核和存储器子系统都不使用时钟。
外设仅在相应的时钟门控在DCGCn 寄存器中使能且Auto Clock Gating (见RCC 寄存器)使能时,或者在相应的时钟门控在RCGCn 寄存器中使能且Auto Clock Gating 被禁能时,才使用时钟。
在睡眠模式下,系统时钟源默认为主振荡器。
但如果DSLPCLKCFG 寄存器中的IOSC 位被置位,那么系统时钟源也可以是内部振荡器。
在使用DSLPCLKCFG 寄存器时,如有必要,可以让内部振荡器上电,同时让主振荡器开始断电。
如果PLL 在执行WFI 指令时工作,硬件将会让主振荡器断电,并将激活的RCC 寄存器中的SYSDIV 字段变为1/16 。
当发生深度睡眠退出事件时,在使能深度睡眠期间被停止的时钟前,硬件先将系统时钟的时钟源和频率变回到开始进入深度睡眠模式时的值。
QEI编程笔记2010年8月23日14:35:01
1.正交编码器
下面是几张工业上常用的正交编码器图
正交编码器(又名增量式编码器或光电式编码器),用于检测旋转运动系统的位置和速
度。
正交编码器可以对多种电机控制应用实现闭环控制,诸如开关磁阻(SR)电机和交流感应电机(ACIM)。
典型的增量式编码器包括一个放置在电机传动轴上的开槽的轮子和一个用于检测该轮上槽口的发射器/检测器模块。
通常,有三个输出,分别为:A相、B相和索引(INDEX),所提供的信息可被解码,用以提供有关电机轴的运动信息,包括距离和方向。
A相(QEA)和B相(QEB)这两个通道间的关系是惟一的。
如果A相超前B相,那么电机的旋转方向被认为是正向的。
如果A相落后B相,那么电机的旋转方向则被认为是反向的。
第三个通道称为索引脉冲,每转一圈产生一个脉冲,作为基准用来确定绝对位置。
编码器产生的正交信号可以有四种各不相同的状态(00,01,10,11)。
请注意,当旋转的方向改变时,这些状态的顺序与此相反(11,10,01,00)。
正交解码器捕捉相位信号和索引脉冲,并将信息转换为位置脉冲的数字计数值。
通常,当传动轴向某一个方向旋转时,该计数值将递增计数;而当传动轴向另一个方向旋转时,则递减计数。
选择“x4”测量模式,QEI逻辑在A相和B相输入信号的上升沿和下降沿都使位置计数器计数,可以为确定编码器位置提供更高精度的数据(更多位置计数)。
正交编码器接口(QEI)模块提供了与增量式编码器的接口。
QEI由对A相和B相信号进行解码的正交解码器逻辑以及用于累计计数值的递增/递减计数器组成。
QEI模块包括:
•三个输入引脚,即两个相位信号和一个索引脉冲
•提供计数器脉冲和计数方向的正交解码器
•16位递增/递减位置计数器
•计数方向状态
•X2和X4计数分辨率
•两种位置计数器复位模式
•通用16位定时器/计数器模式
•由QEI或计数器事件产生的中断
QEI功能概述
2.2.QEI
QEI模块对正交编码器转轮所产生的两位格雷码进行解码,从而通过位置计数器累计值计算位置,以及确定旋转的方向。
另外,该接口还能够捕获编码转轮运行时的速率。
位置积分器和速度捕获功能可以单独使用,但是在使能速度捕获前必须先使能位置积分器才可以。
phA和phB这两个相位信号在被QEI模块解码前可以进行交换,以改变正向和反向的意义和纠正系统的错误接线。
QEI模块支持两种信号操作模式:正交相位模式和时钟/方向模式。
在正交相位模式中,编码器产生两个相位差为90度的时钟信号,它们的边沿关系被用来确定旋转的方向。
在时钟/方向模式中,编码器产生一个时钟信号和一个方向信号来分别表示步长和旋转方向。
QEI模块配置为何种模式主要依赖于所选用的码盘是何种类型。
群星系列单片机自带的QEI模块,在控制方面提供了极大的方便,在许多电机控制领域都可以胜任其职能。
1.位置捕获
当在正交模式时,phA的边沿超前与phB的边沿时,位置计数器在每检测到一个边沿就加1,phA的边沿落后与phB的边沿时,位置计数器在每检测到一个边沿就减1。
当一对上升沿和下降沿出现在其中一个相位上,而在另一个相位上没有任何边沿时,旋转方向已经发生了改变。
在时钟和方式模式下,当方向信号为高电平时,位置计数器在每检测到一个边沿就加1;当方向信号为低电平时,位置计数器在每检测到一个边沿就减1。
位置计数器的值在感测到索引脉冲或者达到最大位置时会复位。
2.速度检测
QEI模块里面自带一个定时器,设置定时器的定时时间,在预设的时间周期内,获取捕获到的pha和phB的边沿数目,此数目与编码器的速率成正比例。
软件初始化QEI时,设置好捕获的模式和捕获的边沿对象,并设置好定时器的时间,即可读取在预设时间内的边沿数,就可以换算出编码器的速率。
3.中断控制
QEI模块可以在以下4种情况下产生中断:
检测到相位错误时
方向改变时
速率定时器定时时间到时
检测到索引脉冲时
QEI的中断,可以灵活配置,对编码器的状态进行监测,实现方便的控制,也可以配合定时器外设的CCP,对编码器进行精确的控制。
也可以利用QEI去扩展其他外设的不足,比如把速率定时器当作一个普通定时器用。
2010年8月23日18:19:31
三大主要功能:
在QEI的使用中,实际上是一个定时器进行计数和定时,从而测试出输入PHa和PHb
的脉冲个数,进而测出转速,由PHa和PHb的相位前后判断旋转方向。
通过设定一圈有多少脉冲,在计数的作用下进行脉冲计数,可以确定出绝对位置。
由于index信号的作用是每转一圈产生一个脉冲,也可以作为基准用来确定绝对位置。
绝对位置捕捉
而当前时间周期的边沿计数在QEICOUNT寄存器中进行累加。
当前时间周期一结束,这时QEICOUNT复位为0,并在一个新的时间周期开始计数。
在给定时间周期内所计得的边沿数目与编码器的速度成正比例。
通过设定每圈的脉冲个数可以确定绝对位置。
测速
速度捕获包含一个可配置的定时器和一个计数寄存器。
定时器在给定时间周期内对相位边沿进行计数(使用与位置积分器相同的配置)。
控制器通过QEISPEED寄存器来获得上一个时间周期内的边沿计数值,而当前时间周期的边沿计数在QEICOUNT寄存器中进行累加。
当前时间周期一结束,在该段时间内计得的边沿总数便可以从QEISPEED寄存器中获得(上一个值丢失)。
这时QEICOUNT复位为0,并在一个新的时间周期开始计数。
在给定时间周期内所计得的边沿数目与编码器的速度成正比例。
可以使用下面的等式将速率计数器的值转换为rpm(每分钟的转数):
rpm=(clock*(2^VelDiv)*Speed*60)÷(Load*ppr*edges)
此处:
clock表示定时器的时钟频率
ppr表示实际编码器旋转一圈的脉冲数
edge为2或4,根据QEICTL寄存器中设置的捕获模式来决定(CapMode设为0时,edge为2,CapMode为1时edge为4)。
注意:使用库函数时是记录的Speed。
由于某些立即数可能会超过32位整数,因此,在计算这个等式时要特别注意。
在上例中,时钟为10,000,除法器为2,500,我们可以将这两个值预先除以100(如果它们在编译时是常数),因此这两个值就变为100和25。
事实上,如果它们在编译时是常数,则可将它们简化为只简单地乘以4,而又由于边沿计数因子为4,因此两个值刚好抵消。
QEIVelocityConfigure()的第三个参数为:ulPeriod。
所以:rpm=(2^VelDiv*Speed*60)*(Sysclk/ulPeriod)÷(ppr*edges)
获取方向
A相(QEA)和B相(QEB)这两个通道间的关系是惟一的。
如果A相超前B相,那么电机的旋转方向被认为是正向的。
如果A相落后B相,那么电机的旋转方向则被认为是
反向的。
库函数编程:
编程步骤:
1、使能QEI
2、使能QEI所在PORT
3、设置QEI所在PIN的Type
4、EQI配置(基本配置和速度模式配置)
5、使能QEI功能模块和速度模块。
6、根据自己实际需要获取方向速度绝对位置。
注意:
QEI基本配置函数QEIConfigure()和速度模式配置函数使用QEIVelocityConfigure().
QEI具有以下特殊特点:
1、可以配置获取脉冲的方式:PhA信号的上升和下降沿或是在PhA和PhB的上
升和下降沿对位置计数器进行更新。
QEI_CONFIG_CAPTURE_A//仅使用PhA边沿进行计数
QEI_CONFIG_CAPTURE_A_B//使用PhA和PhB边沿进行计数
2、QEI模块支持两种信号操作模式:正交相位模式和时钟/方向模式。
QEI_CONFIG_QUADRATURE//使用正交相位信号
QEI_CONFIG_CLOCK_DIR//使用时钟方向信号
3、INDEX使用可选择:
QEI_CONFIG_NO_RESET//忽略索引信号,不复位位置计数
QEI_CONFIG_RESET_IDX//有索引信号则复位位置计数
4、PhA、PhB信号在使用前交换线路,可以让硬件错误在软件上纠正,也可以实
现硬件加密(设置明显的“错误”,通过软件更正)。
QEI_CONFIG_NO_SWAP//不交换两相的信号
QEI_CONFIG_SWAP//交换两相的信号
在PhA和PhB的上升和下降沿上更新位置计数器提供更高精度的数据(更多位置计数),但位置计数器的计数范围却相对变少了。
工业上常用高精度的数据,所以在配置时选择这个参数QEI_CONFIG_CAPTURE_A_B。
By paul!。