自学开发同步并车装置(此贴为一个记录贴)

2019-07-25 14:54发布

   本人从小语文就不好,中间可定很多错误语句。

从大学毕业到工作已经5年了。从最初的现场实习到PLC程序设计,到现场调试,一直在与自动电站,监控系统打交道,所用的器件只要是重要部分的器件几乎全都是进口器件,从开关到上层监控系统,深感国内的船舶配套公司只有核心技术,却没有技术核心,单纯的从PMS功率管理系统(自动电站)这一块来讲,所有的核心器件如:PPU(发电机保护与并车单元)与控制器(PLC)+HMI,都是一直在使用国外生产的产品,然后在进行二次程序开发(其实只是对PLC进行相应的程序编写),而相某些国际大的船舶配套公司比如伯瑞斯、康士伯都是采用自行研发的模块来进行PMS的操控,而这些设备的购买成本是相当的高昂,我在想如果哪一天,这些大公司,推出一个买他们的配电板就送对应的PMS系统的话,我们这些使用对外采购设备的公司该如何生存。于是我萌生了自行开发PMS系统的想法。
   PPU的核心功能是并车功能,开发是一步一步进行的,所以我决定先开发同步并车装置。
   说到开发,我自从工作以后除了有时需要,我会用51做一些简单的东西,其他的已经忘记的差不多了,大学我的专业是电气工程自动化专业,不怕大家笑话,我大学除了大1,后面各种课几乎都是靠补考才过的,时间都拿来玩游戏了。不过也和电站系统打了这些年的交道,对其的原理功能还是稍微有点了解,对其中的工作方式是完全七窍通了六窍,感谢现在的网络时代,各种资料网上都有,于是我开始恶补。为后面的开发做准备。
   同步并车装置(船上几乎全是同步发电机)是用来将一台柴油机发电机并到电网上去的装置,其通过调整柴油机的转速来控制柴油机的频率,来达到使柴油发电机的相位与电网相位相等,在相等时发出同步合闸命令,将主开关合上,即完成了并车。
   同步并车的要求有,电压幅值接近,频率相差不能超过0.5HZ,相位差不能超过27度。
   为了后面的PPU功能开发,PPU带功率检测,谐波计算,有功无功功率计算,功率因数计算等等。所以我决定使用FFT算法来进行对相位的计算(这里的并车条件中的相位是指基波相位),于是我选择了DSP芯片来作为我的主控芯片。
   
   我选择的核心控制芯片是28346,为什么选他呢,因为他RAM大,速度快。采集芯片AD7606+ADR441(基准源),外挂一个SST的FLASH,启动从外部FLASH启动。目前项目刚进入到程序测试,下面来分别讲述我的每一步设计(只是大概)。
   
  第一步:信号基础采集层。
  为了保证采集精度,我本来是想联系一个变压器厂家请其帮我设计一个变压器的,这个变压器是由要求的,其线性度要求很高,并且频率响应要足够,60HZ的基波的50次谐波是3KHZ,那其频率响应至少要在4KHZ之内不能失真,如果将高次信号抑制掉了,那么我测量的信号也就不准确了。结果变压器厂家一听是打样,没一个肯帮忙设计的,结果只能选择电流型电压互感器,但是这里问题就来了,如下图
电压输入电路 电压输入电路
这里相当于一个L与一个大电阻与一个L与一个小电阻,这样频率越高那么相位差就月大,所以这种方案只能测量10几次的谐波,离IEC电能质量分析仪的50次谐波标准相差大了,不过我用来测量基波的相位是可行的,如果想要测量50次谐波那么一定要用一个变压器来实现,变压器我自己已经设计好了,但是还没打样,不知道可行不可行,就不发上来丢人现眼了。
后面的4.7K的电阻和22NF的电容是一个低通滤波。好像是滤除1.5KHZ以上的信号,本来想设计一个2阶的,后面想想有相移,就作罢了。

电压量采集进去了 我还要测量频率,我决定频率的捕捉用DSP的ECAP这个功能来实现,怎么使ECAP采集到这个输入点呢,我设计了如下的电路:
QQ图片2.png QQ图片1.png
交流电输入经过光耦和电压比较器转换成为一个方波在进行测量,电容是用来滤除毛刺的,我试过了,如果不加这个电容,在0点的时候方波信号有许多毛刺,到时CAP信号就捕捉不准了。
以上就是同步器的基础信号采集部分。

下面的部分,会慢慢传上来。

在写这个的同时,也是我一个学习的过程,如果其中有什么错误,请大家指正。




   



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
yanhuazhe
1楼-- · 2019-07-25 19:48
由于柴油发电机的频率是不稳定的(正常时都是稳定的,如果不稳定,如果我安装固有的频率去测量的话,会造成频谱泄露),这里我设计了一个锁相环频率跟随电路如下: QQ图4.png

通过电压比较器后的CAP1信号通过该电路倍频128倍(Q7=2的7次方),通过这个信号VCOUT来进行AD采集,该电路的原理我就不细说了,网上都有。


yanhuazhe
2楼-- · 2019-07-25 22:05
上面的4046, 我一开始买了一块芯片CD4046发现不起震,换成了74HC4046后OK了,不知道什么原因。如果有人知道,请解惑。谢谢
21ic小喇叭
3楼-- · 2019-07-26 02:54
 精彩回答 2  元偷偷看……
sunmeat
4楼-- · 2019-07-26 06:04
yanhuazhe 发表于 2015-10-16 13:11
上面的4046, 我一开始买了一块芯片CD4046发现不起震,换成了74HC4046后OK了,不知道什么原因。如果有人知 ...

应该是可以通用的,你买到假货了吧?
yanhuazhe
5楼-- · 2019-07-26 06:04
AD芯片选择的是AD7606芯片。
目前市面上常见的同步器只有2个输入端口,一个是发电机侧的电压,一个是汇流排侧的电压。
如果接入的相序接错的话,比如发电机侧我接入的是RS相,汇流排侧接入的是ST相,那么如果当这两个相位相等发出合闸命令时,直接会跳开关,爆保险丝。目前只能通过接线人员的仔细确认后通电。
我的想法是读取发电机侧以及汇流排侧分别读取R,S,T相的电压,进行FFT运算后,判定相序是否正确,就是领先120度,240度,如果不是这样那么判定接线相序错误,不发出合闸命令。报警指示(可以做成一个继电器触点形式输出。)。

下面来说下AD芯片的读取时序问题,我将AD7606放在了28346的XINTF ZONE0这个区域(0X004000到0X005000)。
#define AD_ASTART      ((Uint16 *)0x004000)      //片外AD的数据读取首地址

配置锁相环系统时钟
InitSysCtrl();
IO初始化
InitGpio();
关闭看门狗
DisableDog();
关闭中断
DINT;
初始化中断 将AD7606的芯片的BUSY接到DSP 28346的管脚配置为中断。这里要注意将中断配置为下降沿引发中断,这是因为AD7606BUSY管脚在转换时是高电平,转换成功后可读取状态为低电平。
InitPieCtrl();
清中断标志
IER = 0x0000;
IFR = 0x0000;
中断向量表的内存映射
InitPieVectTable();
以上的配置系统时钟以及中断向量的内存地址映射除了51芯片外几乎所有的芯片都需要进行配置。这是一个固定的流程。

外部设备初始化。
InitPeripherals()

中断向量表
EALLOW;
PieVectTable.XINT1 = &xint1_isr;
EDIS;

开启全局中断
EINT;

确保配置下连接AD7606BUSY管脚的管脚
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO? = 0;         
GpioCtrlRegs.GPADIR.bit.GPIO? = 0;         
GpioCtrlRegs.GPAQSEL2.bit.GPIO? = 0;         
EDIS;
将这个管脚配置为XINT1的中断管脚
EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = ?;   // XNMI is GPIO16
EDIS;
配置为下降沿中断
XIntruptRegs.XINT1CR.bit.POLARITY =0;
使能
XIntruptRegs.XINT1CR.bit.ENABLE=1;


复位AD芯片,在上电时都需要的   101
GpioDataRegs.GPBSET.bit.GPIO? = 1;
DELAY_US(0.5L);
GpioDataRegs.GPBCLEAR.bit.GPIO? = 1;
DELAY_US(0.5L);
GpioDataRegs.GPBSET.bit.GPIO? = 1;

定义一个数组用来存放读取到的AD数据。
U16 DATE[8];

主循环 没有程序
WHILE(1)
{
这里其实是外部直接的锁相环后的信号对AD7606进行转换控制的,在开发板测试时可以模拟控制下,程序如下
GpioDataRegs.GPASET.bit.GPIO? = 1;
DELAY_US(0.5L);
GpioDataRegs.GPACLEAR.bit.GPIO? = 1;
DELAY_US(0.5L);
GpioDataRegs.GPASET.bit.GPIO?= 1;
DELAY_US(5L);
}
中断程序 直接读取AD芯片的数据
XINTF 的配置:CLK为1/2SYSCLK 引导3 激活7 追踪3
interrupt void xint1_isr(void)
{
DATE[0] = *(AD_ASTART);      
DATE[1] = *(AD_ASTART);     
DATE[2] = *(AD_ASTART);     
DATE[3] = *(AD_ASTART);     
DATE[4] = *(AD_ASTART);     
DATE[5] = *(AD_ASTART);     
DATE[6] = *(AD_ASTART);   
DATE[7] = *(AD_ASTART);     
}



yanhuazhe
6楼-- · 2019-07-26 07:54
选择28346其实也蛮蛋疼的。画板子要画6层板。在这里吐槽下。

一周热门 更多>