onKeyUp = NULL; //初始化指针 onKeyDown = NULL;
uchar ReadKey(void); //读按键值 void KeyEvent(void); //键盘扫描执行事件
人机交互设计的重点在于界面的显示、滚屏、光标的管理及参数的显示、修改和保存。系统在内存中特定区域开辟了 1个 LCD 显示缓冲区,将要显示的整个窗口的点阵数据存放在此区间。LCD 的显示程序从此区间中读取数据到 LCD 点阵数据存储区,借此,LCD 显示程序可管理用户交互界面。用户可以用 8 个按键(向上、向下、向左、向右、确定、返回、加、减)在菜单方式下实现人机交互。
程序器开始前对各参数进行初始化,存储在二维数组Para_tab [4][5]中,每个参数一行,参数每一位的值都对应存储在数组中的相应位置。定义一个指针 P 指向 Para_tab,表示光标的位置,当然,进入“参数设置”菜单时 P=Para_tab [0][0],光标在首行的第一个 X 的位置,表示选中该参数位。按下“向上”、“向下”“、向左”“、向右”四个方向键来移动光标到待修改的那一位数字上时,P=Para_tab [i][j]则根据按下的键不同而作相应的修改,一般如下:向上,i-1;向下,i +1;向左,j-1;向右,j+1。当然,首先要对原来的 i,进行判断。遇到特殊情况要特殊处理。如光标原在某行的第一个参数位上,j= 0,按下向左的键则不改变光标。
选定待修改的那一位参数后,按“修改”键进行参数值的修改。过程如下:读取光标所在的那一位数字的值,每按一次加键,该值加 1(在 0—9 之间循环),每按一次减键,该值减 1(在0—9 之间循环)。修改完一位后,把改值写入 Para_tab [i][j],移动光标继续修改其他的参数。一行参数修改完,经核对无误后按“确定”键(每按一次“确定”确认一行),新的参数值被修改存入机内对应的 EEPROM 地址中。参数全部修改完后需要重新开机,否则修改无效.
字符或数字在点阵液晶中的显示是通过写相应的内码(1点亮,0 灭)实现的,结合整个菜单设计,需要显示的文字并不多,可以先做好码表,把用到的汉字对应的内码保存在一个名为 HZ_TAB 的表中,每个 16xl6 点阵的字符需要 32 个 byte 表示;把要用到的数字 0~9 和字母对应的 16x8 点阵内码保存在一个名 NUM_JAB 的表中,每个需要 16 个 byte 表示;把图片保存在 PIC_TAB 表中,需要 byte 数根据大小而定。16x16 点阵汉字和 16x8 点阵数字、字母和任意大小黑白图片字模数据库可由专门的字模提取软件提取字模建立。
3、S曲线算法和实现
为了实现以上各种运动情况,需要对步进电机进行实时运动控制。假设电机启动频率为 fstatr,停止频率为 fend,目标运行频率为 fmov,需要发送的脉冲总数为pall,从 fstatr加速至 fmov的累计脉冲数为 pacc,从 fmov减速至 fend的累计脉冲数为 pdec,则运动实时控制流程如图6 所示。控制系统首先判断 fmov与 fstart和 fend之间的大小关系。若 fstart和 fend均小于 fmov,则分别以 fstart和 fend为起始频率,fmov为目标频率建立加减速频段表,然后判断加减速累计脉冲之和是否超过运动指定的总脉冲数,若没有超过,说明在指定距离内可以达到指定运行频率,则将各频段频率对应寄存器值依次加载至AT91SAM9261 的 RC 寄存器,执行运动,与图 5( a) 对应; 若超过总脉冲数,说明在指定距离内电机不能达到运行频率,则将拐点频段( 0 ~ t1 时间段内最后一个频段) 的前一频段作为新的拐点频段,并将此频段频率的两倍作为新的运行频率重新建立频段表,再次判断累计脉冲数,重复此操作,直到调整至加减速累计脉冲之和不再超过总脉冲数为止,然后加载频段,完成运动,与图5( b) 对应; 当 fmov在 fstart和 fend之间时,只需建立加速段或减速段,控制过程类似,分别对应图 5( c) 和( d)
w(t)?0?wd?
???(t)??tn??01?2w(?)d??wt?n?
2?2n?w
2?w?cntp?tn?1?tn?1tp1tp2?w2?w??(n?1?n)
cn?(n?1?n)
c0?
cn?c0(n?1?n) 1?1111?1??2??(3) n2n8nncnn?1?n4n?1 ??cn?1n?n?14n?1cn?cn?1?2cn?1 4n?1
na na w w w w3 w5 w4 sp ns a1 nd a2sp a1 t t 0 NN0 X轴步进电机 Y轴步进电机 B+ B- A+ A- B+ B- A+ A- 驱动器#X 驱动器#Y 方向信号 指令信号 方向信号 指令信号 铺布机两轴步进电机结构图
直线型加减速曲线实时控制
基本参数设置与计算 t ns nd a2w2 w1 t 0 c0tp c1tp c2tp C0 与Cmin计算 max_s_lim/accel_lim计算 max_s_lim>accel_lim decel_val=#表达式1 decel_val=#表达式2 C0
更新定时器等待中断 C0
步数n 精确值 0.4142 0.7673 0.8430 0.9950 0.9995
近似值 0.6000 0.7778 0.8462 0.9950 0.9995
相对误差 0.4485 0.0136 0.0370 9.38E-8 9.37E-11
1 2 3 100 1000
步长数2000,正常运行速度800rad/s
加减速度200rad/s^2,目标800 rad/s