200 likes | 349 Views
ASIPP. 基于 ARM-Linux 的电能质量实时监测系统. 报告人:李齐礼 导师:季振山研究员. ASIPP. 总体规划. 第一步:搭建 ARM-Linux 开发环境 第二步: Linux 下 AD 驱动设计与测试(已完成) 第三步:算法设计与数据处理程序编写 第四步: QT 图形界面设计 第五步:系统测试. ASIPP. 电能质量的概念. 电能质量描述的是通过公用电网供给用户端的交流电能的品质。理想状态的公用电网应该以 恒定的频率 , 正弦波型 和 标准电压 对用户供电。在三相交流系统中,还要求各相电压和电流的幅值应大小相等、相位对称且互差 120 度。
E N D
ASIPP 基于ARM-Linux的电能质量实时监测系统 报告人:李齐礼 导师:季振山研究员
ASIPP 总体规划 第一步:搭建ARM-Linux开发环境 第二步:Linux下AD驱动设计与测试(已完成) 第三步:算法设计与数据处理程序编写 第四步:QT图形界面设计 第五步:系统测试
ASIPP 电能质量的概念 电能质量描述的是通过公用电网供给用户端的交流电能的品质。理想状态的公用电网应该以恒定的频率,正弦波型和标准电压对用户供电。在三相交流系统中,还要求各相电压和电流的幅值应大小相等、相位对称且互差120度。 但由于系统中各种设备的非线性和不对称性,以及运行操作、外来干扰和各种故障的原因,这种理想的状态并不存在,因此产生了电网运行、电力设备和供用电环节中的各种问题,也就产生了电能质量的概念。
ASIPP 电能质量的概念 从普遍意义上讲,电能质量是指优质供电。但是由于人们看问题的角度不同,所以迄今为止,对电能质量的技术含义仍有不同的认识,一种普遍接受和采用的定义方法是从工程实用的角度出发,给出实际电能参数与理想参数的偏差,其内容包括频率偏差、电压电流偏差、三相不平衡度、电网谐波、电压波动和闪变,以及电压暂降与短时中断等。
ASIPP 系统方案设计 LCD显示 USB接口 电压互感器 S3C6410XH Ethernet 信号调理电路 ADC 电流互感器 RS232 SDRAM FLASH
ASIPP 系统方案设计 本系统采用飞凌公司的OK6410开发板,该开发板采用Samsung S3C6410XH-66处理器,主频667MHz,配置128MB DDR内存,1G Nand Flash。S3C6410处理器内置一个8通道10/12bit ADC,最大采样率1MSPS,模拟输入范围0~3.3V,基本满足了三相电网数据采集的要求。
ASIPP 该方案的优点 1、ARM11采用哈佛体系结构,数据和程序分开存储在两个存储器中,使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,有效的解决了冯诺依曼结构在大量数据处理时的瓶颈问题。 2、ARM11搭配128MB的内存能稳定运行linux操作系统,linux系统级的管理可使ARM具有高性能的多任务处理能力。 3、体积小,功耗低,接口丰富。可在一个板子上完全实现数据采集、数据处理、图形界面显示、鼠标键盘输入、网络传输等功能。
ASIPP Linux下AD驱动设计 Linux把所有的设备都看成文件,即设备文件,应用程序操作设备就像操作文件一样简单,如:open()、read()、write()、ioctl()来操作设备。而驱动的任务是实现与之对应的函数。这里把AD看成是字符设备,需要实现的函数如下:
ASIPP Linux下AD驱动设计
ASIPP Linux下AD驱动设计
ASIPP Linux下AD驱动设计 驱动程序是内核的一部分,因此需要实现模块初始化函数和模块卸载函数。 static int __init adc_init(void); 该函数依次完成:ADC时钟初始化,设备注册,内存映射(把设备物理地址映射到内核虚拟地址空间) static void __exit adc_exit(void); 该函数完成与初始化函数相反的工作,依次完成:释放虚拟地址映射空间,销毁时钟,注销设备
ASIPP Linux下AD驱动设计 open()函数 对设备文件进行open()系统调用时,将调用驱动程序open()函数: static intadc_open(structinode *inode, struct file *filp) 在该函数中注册AD中断服务 request_irq(IRQ_ADC, adc_irq, IRQF_DISABLED, DEVICE_NAME,NULL);
ASIPP Linux下AD驱动设计 release()函数 对设备文件进行close()系统调用时,将调用驱动程序adc_release()函数: static intadc_release(structinode *inode, struct file *filp) 在该函数中释放AD中断 free_irq(IRQ_ADC,NULL);
ASIPP Linux下AD驱动设计 read()函数 对设备文件进行read()系统调用时,将调用驱动程序read()函数: static ssize_tadc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos) 该函数是驱动程序设计的重点函数之一,主要设置ADCCON寄存器来设置参数并开启AD转换,最后把数据从内核空间拷贝到用户空间。
ASIPP Linux下AD驱动设计 ioctl()函数 该函数是特殊的设备控制函数,可以通过它向设备传递控制信息或从设备取得状态信息: static long adc_ioctl( struct file *filp, unsigned intcmd, unsigned long arg) 该函数是驱动程序设计的重点函数之一,主要用于向设备传递控制参数。Linux规定:cmd是一个全系统唯一的命令号(整数),arg是cmd命令的参数,可以是常数,指针等。Linux提供了一些宏来定义cmd命令号来保证系统全局唯一性。
ASIPP 驱动测试结果 8通道空采数据如下:
ASIPP 驱动测试结果 由于开发板的0通道和一个可调电阻连接,如下图,因此可以利用0通道结合可调电阻来测试ADC
ASIPP 驱动测试结果 旋转可调电阻得到的测试结果(每隔一秒读一次):
ASIPP 谢谢!