在线工博会

基于EraSoC-1000C的电脑绣花机解决方案
江涛 梁彦 马俊
为节省流量,手机版未显示文章中的图片,请点击此处浏览网页版
系统简介
EraSoC-1000系列芯片是基于龙芯内核的高性能SoC(System on Chip),凭借其较为强大的CPU处理能力、64位浮点运算能力、高效的总线架构、可实现低功耗的动态变频技术以及丰富的片上设备,已广泛地应用在国内各种嵌入式领域。
基于EraSoC-1000C的电脑绣花机系统主要由三个电机协调工作来实现绣花功能。三个电机的协调原理是:一个主轴电机,采用交流伺服交流来控制针头的上下运动;X、Y轴步进电机各一个,以实现工作面的横向与纵向移动(系统控制流程图参见图1)。

(图片)

硬件设计
根据图1所示的整个系统方案的控制实现原理,我们把此方案的主控制单元分为上、下位机结构,并由一颗EraSoC-1000C芯片来完成上、下位机的协同工作。
上位机结构
上位机主要负责人机交互、文件读取与解析、部分传感器信号的处理;
·STN/TFT LCD显示与触摸控制的实现
此部分作为人机交互的主要平台,通过控制触摸屏来控制电机做出相应的动作就是在此部分实现的。其中液晶部分对东芝T6963CFG LCD驱动芯片的控制是由EraSoC-1000C引出的8位数据线和5个GPIO实现的,本次用的黑白屏,如果需要可以用彩色屏,尺寸也可以任意选择。而触摸屏的控制是由EraSoC-1000C的spi信号线和片选线时钟线经过触摸屏控制器ADV7843实现的。
·传感器通过GPIO与EraSoC-1000C的通讯
该绣花机一共用到了6个传感器分别由EraSoC-1000C提供的6个可以作为中断输入的GPIO控制。这些传感器分别是x轴方向电机的传感器,y轴方向的电机传感器,z轴方向的电机传感器,测试绣花针是不是在上针位(此时针在所有位置的最高点)的传感器,测试绣花针是不是离开布的传感器,和一个用于是否绕线的辅助功能的传感器。
下位机结构
下位机主要负责输出电机控制信号(PWM)、协同工作以及部分传感器信号的处理。
·PWM对交流伺服电机的控制
在EraSoC-1000C芯片中一共有六路脉冲宽度调节/定时/计数控制器(以下简称PWM)。每一路PWM工作和控制方式完全相同,都有两路输入信号(gate_clk_pad_i, capt_pad_i)和一路脉冲宽度输出信号 (pwm_o)。由于系统时钟高达60MHz,计数寄存器和参考寄存器均32位数据宽度,这样开发人员可通过编成让PWM产生各种复杂的近似线性的输出信号,非常适合高档电机的控制。
·步进电机的驱动
主要采用专门的步进电机驱动芯片,有EraSoC-1000C给出控制信号,控制电机按照要求运动。本次设计步进电机的驱动芯片用的是UTC公司的L6219,只需用EraSoC-1000C的4个GPIO控制一个L6219来控制电机的转动速度和所转的角度。
·主轴电机的控制
同步检测:由1个外部中断完成,为了能够控制直流电机转动速度,用了一个时钟作为计数器来计数一个时间段的针数,如果快了或者慢了就做出调整。
电机控制:由1个GPIO完成,此GPIO用来控制电机电源的开通与关闭。
图2和图3分别为系统方案的电路构造图和电路板实图。

(图片)

(图片)

软件设计和系统程序移植
Bootloader
EraSoC-1000C的bootloader使用PMON2000。经过裁剪和增加相关驱动的代码在EraSoC的官方网站可直接下载。用户只需按照EraSoC-1000C的用户手册进行配置和编译即可。
内核移植
EraSoC-1000C使用Linux2.4.17和Linux2.6.18.1内核。经过移植后的源代码可以在EraSoC的官方网站下载。
交叉编译工具链mipsel-linux-gcc也可以在该网站下载。
配置内核使用erasoc_defconfig配置文件,用户可根据自己需要裁剪不用的驱动和文件系统等。
Qtapia编译
QT是目前在linux上使用较广的一个图形系统。在网上下载以下软件的源码包之后,按照EraSoC的QT完全安装手册,编译生成QT的可执行代码。
qt-embedded-2.3.7.tar.gz
qt-x11-2.3.2.tar.gz
qtopia-free-1.7.0.tar.gz
tmake-1.11.tar.gz
e2fsprogs-1.35.tar.gz
驱动及fireware开发
基于EraSoC-1000C的电脑绣花机方案成功将Linux引入缝纫设备的控制是一个业界领先的技术突破。以前普遍认为Linux不适合应用于像缝制设备行业这类对功能集成度和实时性要求高的工控行业,其实是不正确的。正因为凭借EraSoC-1000C芯片处理能力强、总线速度高、设备集成度高的特点,使得系统在运行linux时,处理器可以很好的完成实时性工作,同时把任务调度、协议处理、数据交换、人际交互交由linux来处理,用户会发现整个系统开发过程会变得轻松自如。
X,Y轴步进电机驱动开发
X和Y轴步进电机驱动的原理是:每隔一定的时间间隔通过GPIO发送一个步进信号,电机行走一个相位。而时间间隔的大小通过EraSoC-1000C的实时时钟来控制,时间计数一到,实时时钟产生一个中断,CPU在中断处理并向步进电机发送一个步进命令。X,Y轴电机的速度就通过这些时间间隔的大小调整。当需要加速时,减小每次的时间间隔,反之就是减速。X和Y轴驱动程序里分别注册了一个时钟中断处理程序,并在驱动里提供一个写函数控制实时时钟的计时大小和开始计时。当绣花程序启动,通过该驱动的写函数,启动实时时钟计时。当预定时间到达,中断产生,中断处理程序驱动电机步进一个相位,此时根据一个信号量来确定是否继续要驱动电机,如果需要继续驱动,则再次初始化实时时钟的计时。
void x_timer_start(unsigned int time) //初始化x轴的实时时钟,time的单位9600秒
{
era_writel((time * 32768) / 9600 +
era_readl(ICTRTC_READ0),
ICTRTC_MATCH1);
}
static irqreturn_t x_step_irq(int irq, void *_host, struct pt_regs *regs)
{
struct era_host *host = _host;
x_step_go(); //x轴电机步进一个相位
if(x_go) //如果x轴需要继续运转,该
变量是全局变量,由主函数改变值
{
x_time = x_get_time(host);//计算下次
步进的时间间隔
x_timer_start(x_time);
}
}
Z轴电机的驱动开发:
Z轴电机使用EraSoC-1000C的PWM进行控制。EraSoC-1000C的PWM驱动采用Linux通用的PWM驱动接口,所以我们只要在应用层开发相应的控制程序就可以了。
例如,EraSoC的PWM驱动提供一个write函数给用户层,用户通过该函数的参数可以控制PWM的输出方波:
ssize_t pwm_write (struct file *filp, const char *buf, size_t count,loff_t *f_pos)
{
#define CLK_PER_NS 48 //48Mhz
bus freq
static unsigned char pBuf[3];
/*pBuf[0]高电平时间(ns),
pBuf[1]低电平时间(ns),
pBuf[2]是否使能PWM电平输出*/
copy_from_user(pBuf,buf,3);
era_writel(0, RPTC_CTRL); //停止PWM
if(pBuf[2] & GO) //pBuf[2], 是否使
能PWM输出
{
era_writel(pBuf[0] * CLK_PER_NS, RPTC_HRC);
era_writel(pBuf[1] * CLK_PER_NS, RPTC_LRC);
era_writel(OE, RPTC_CTRL); //使能
PWM方波输出
}
return count;
}
显示屏驱动
EraSoC-1000C的Linux内核包含标准的framebuffer接口的LCD驱动程序,用户也只需按照标准的控制LCD的函数接口编写应用程序。通过open(“/dev/fb0, O_RDWR”)打开LCD显示设备,然后通过mmap函数将显存映射到用户空间,用户现在就可以通过简单的读写来控制显存,以达到控制LCD显示的目的。
触摸屏驱动
EraSoC-1000C的Linux内核也已经包含触摸屏的标准驱动,采用SPI接口。用户只需在编译QT的时候将该触摸屏驱动加入,就可以直接在QT下使用。
U盘驱动
EraSoC-1000C的U盘驱动也是标准的Linux驱动。用户只需简单的使用mount命令将U盘挂载,然后通过open, read, write等标准函数对U盘进行读写。
NAND Flash驱动
EraSoC-1000C采用最新的Yaffs2文件系统管理NAND Flash。用户接口也是十分的简单,如同访问其他文件系统一样,可直接通过读写函数访问。
蜂鸣器,断线,压脚,绕线检测等驱动
这些功能均使用GPIO实现,我们为这些功能分别实现了驱动,在驱动里提供一个读函数来控制。用户只需简单的使用open函数打开设备,就可以使用read函数读取这些传感器的状态。
int erasoc_gpio_read(int signal)
{
if(signal >= 96)
return 0;
if(signal >= 64)
{
return ((1 << (signal-64)) & era_readl(ERASOC_GPIO2_DATRD)) ? 1 : 0;
}
else if(signal >= 32)
{
return ((1 << (signal-32)) & era_readl(ERASOC_GPIO1_DATRD)) ? 1 : 0;
}
else
{
return ((1 << signal) & era_readl(ERASOC_GPIO0_DATRD)) ? 1 : 0;
}
}
ssize_t eragpio_file_read(struct file *filp, char __user *buf, size_t count, loff_t *ppos)
{
char val;
val = erasoc_gpio_read(GPION);
copy_to_user(buf, &val, 1);
return count;
}
GPION是各GPIO的编号。
上层应用
EraSoC-1000C的上层应用建立于基于Linux的软件平台Qtapia上。Qtapia是Linux软件厂商挪威奇趣科技公司(Trolltech)专为手机等移动设备开发的产品,目前国内排名前十的手机生产商有7个已经选择了奇趣作为嵌入式Linux平台的合作伙伴。
也正是因为Qtapia的使用环境已在不知不觉中被消费大众所熟悉,我们特意在此解决方案里采用了类似手机操作的图像化用户界面,就是为了让消费者在使用家用电脑绣花机时增加互动的体验,使得操作缝纫机不再是专业人员才有的技能。
用户可以管理要刺绣的图案文档,系统也通过主窗口显示和触摸屏接收用户输入。当用户通过触摸屏点击窗口上的按钮,应用程序根据这些按钮分别调用底层的驱动程序完成绣花,绕线,读取花样等等功能。
结语
作为第一台使用国产高性能处理器的电脑绣花机解决方案,中科亿芯的研发团队始终把“科技以人为本”的理念放在首位,那就是用业界领先的技术去创造大众可接受的电子产品。事实已证明,一颗EraSoC-1000C芯片可替代两颗基于ARM7内核的国外处理器或者是工控领域的DSP,同时也可节省相当数量的外设芯片。而且EraSoC-1000C的二次开发潜能巨大,其所具备的高速处理能力和丰富的片上设备,将带给缝制设备行业的工程师们无限的创意空间,让国产缝制设备能够真正意义上的国产化,让这些设备都跳动着一颗“中国芯”! 8/7/2008


电脑版 客户端 关于我们
佳工机电网 - 机电行业首选网站