51兼容載波通信單片機(jī)PL3105的通信軟件設(shè)計(jì)
關(guān)鍵詞:PL3105 直接序列擴(kuò)頻 載波通信 軟件設(shè)計(jì)
引言
隨著嵌入式系統(tǒng)及集成電路技術(shù)的飛速發(fā)展,針對(duì)智能儀表應(yīng)用而設(shè)計(jì)的專(zhuān)用芯片獲得了長(zhǎng)足發(fā)展。智能儀表一般要具備CPU單元、顯示單元、標(biāo)準(zhǔn)工業(yè)總線(xiàn)接口、A/D信號(hào)轉(zhuǎn)換、實(shí)時(shí)鐘、看門(mén)狗等功能。傳統(tǒng)的智能儀表設(shè)備在選定了CPU后,需要配置復(fù)雜的功能芯片及接口芯片,完成顯示驅(qū)動(dòng)、外部程序存儲(chǔ)、數(shù)據(jù)存儲(chǔ)及其它要求功能。眾多的接口芯片導(dǎo)致儀表的體積大、成本高、功耗增加、可靠性降低;同時(shí)調(diào)試、維護(hù)困難。
為適應(yīng)智能儀表的應(yīng)用需要,針對(duì)某類(lèi)產(chǎn)品的專(zhuān)用單芯片上系統(tǒng)SoC(System on Chip)解決方案獲得了巨大的發(fā)展機(jī)遇。國(guó)內(nèi)外各IC設(shè)計(jì)公司都針對(duì)不同領(lǐng)域、不同應(yīng)用需求推出了各自的SoC產(chǎn)品。具有8051指令兼容高速微處理器的SoC產(chǎn)品PL3105,采用最新的CMOS數(shù)/?;旌瞎に囍圃?,是針對(duì)智能儀表行業(yè)應(yīng)用而推出的低成本、高性能的解決方案。
1 PL3105的主要特點(diǎn)
采用8051指令兼容的高速微處理器,軟件易于開(kāi)發(fā);具有8/16位雙模式ALU、8倍速于標(biāo)準(zhǔn)51,運(yùn)行速度快,數(shù)據(jù)處理能力強(qiáng)。圖1為PL3105的基本功能結(jié)構(gòu)方框圖。
針對(duì)智能儀表的應(yīng)用,PL3105內(nèi)部集成了2通道16位精度的∑―Δ調(diào)制A/D,LED(88筆劃式)/LCD(244筆劃式)顯示驅(qū)動(dòng)模塊,2個(gè)UART,內(nèi)置1KB的RAM和16KB的E2PROM程序存儲(chǔ)器(采用ISP方式編程);內(nèi)置低功耗實(shí)時(shí)鐘。同時(shí)集成了完善的電壓監(jiān)測(cè),上電、掉電復(fù)位,看門(mén)狗電路,確保了工業(yè)環(huán)境下運(yùn)行時(shí)系統(tǒng)的可靠性。
內(nèi)嵌的載波通信控制單元,使產(chǎn)品具備了在低壓電力線(xiàn)上組網(wǎng)、遠(yuǎn)程通信的強(qiáng)大功能;最低壓電力線(xiàn)載波通信接口專(zhuān)用芯片PL2101的升級(jí),具有強(qiáng)抗帶內(nèi)同頻干擾能力,靈敏度高的優(yōu)點(diǎn)。內(nèi)嵌的CPU通過(guò)配置寄存器來(lái)實(shí)現(xiàn)對(duì)載波通信的控制,比PL2101芯片的接口方便,可靠性更高。
2 載波通信的工作原理
載波通信采用直接序列擴(kuò)頻的BPSK(Bipolar Phase Shift Keying)調(diào)制解調(diào)方式:將要發(fā)送的信息用偽隨機(jī)碼序列擴(kuò)展到較這的頻帶上,在接收端用同樣的偽隨機(jī)碼序列來(lái)進(jìn)行同步接收,恢復(fù)信息。接收的過(guò)程包括載波信號(hào)的捕獲和同步。
捕獲是接收模塊在擴(kuò)頻序列精確同步前,搜索接收信號(hào),使接收信號(hào)的擴(kuò)頻序列與本地?cái)U(kuò)頻序列在相位上進(jìn)入可同步保持的范圍之內(nèi),即二者的相位在一個(gè)擴(kuò)頻序列碼元之內(nèi)。采用每次滑動(dòng)步長(zhǎng)為半個(gè)位的串行積分搜索方式,理論上最大捕獲時(shí)間需要29個(gè)數(shù)據(jù)位(15位PN碼時(shí))。捕獲完成后進(jìn)入跟蹤階段,動(dòng)態(tài)地高速本地偽碼產(chǎn)生器的時(shí)鐘速率,使本地偽碼能夠自動(dòng)地和接收到信號(hào)的偽碼保持精確同步。擴(kuò)頻序列的跟蹤電路采用全數(shù)字基帶延遲鎖定環(huán)(delay locked loop)電路。
解擴(kuò)過(guò)程為保證捕獲和同步均能完成,發(fā)送模塊在每次傳送有效數(shù)據(jù)前至少發(fā)送40個(gè)位全“1”,用作捕獲和同上訓(xùn)練(15位PN碼)。
由于所選用的擴(kuò)頻偽碼具有很強(qiáng)的自相關(guān)性,所以通過(guò)比較本地偽碼和接收序列之間的相關(guān)性與設(shè)定閾值的高低,來(lái)判定是否停止偽碼的滑動(dòng)、完成捕獲。500bps時(shí),默認(rèn)的捕獲門(mén)限值為30H。載波通信的擴(kuò)頻、解擴(kuò)工作完全由SoC內(nèi)部的硬件電路實(shí)現(xiàn),簡(jiǎn)單可靠,解擴(kuò)閾值可以軟件調(diào)節(jié)。
圖2(a)、(b)為PL3105內(nèi)部的載波通信發(fā)送/接收工作時(shí)序圖,收發(fā)數(shù)據(jù)位在芯片內(nèi)部連接到P3.7,芯片未做封裝引出。
載波通信控制器采用幀同步方式的串行移位通信,半雙工方式,速率500bps/250bps可選;中心頻率為120kHz,帶寬為7.5kHz。內(nèi)嵌的CPU使用外部中斷2(INT2),同步收發(fā)中斷,載波通信配置流程如圖3所示。
①使能INT2中斷(EX2=1),且為下降沿觸發(fā)方式(IT2=0)。
②使能載波通信控制位PLM_SSC(EXT_CFG.0=1,INT2作為載波通信同步信號(hào)的中斷。
③載波收發(fā)控制位PLM_RS(EXT_CTRL.0)=1時(shí),載波控制器處于發(fā)送狀態(tài);PLM_RS(EXT_CTRL.0)=0時(shí),載波控制器處于接收狀態(tài)。
④載波發(fā)送復(fù)位寄存器:用于避免載波通信模塊長(zhǎng)時(shí)間處于發(fā)送狀態(tài),使整個(gè)通信系統(tǒng)處于失控狀態(tài)而設(shè)置。它是一個(gè)13位計(jì)數(shù)器,發(fā)送狀態(tài)時(shí),計(jì)數(shù)器速減,遞減到0后,載波發(fā)送模式被強(qiáng)制返回接收態(tài);接收態(tài)時(shí),計(jì)數(shù)器停止工作。長(zhǎng)時(shí)間發(fā)送數(shù)據(jù)時(shí),需要向PLM_RST寄存器寫(xiě)入“A2H”,寫(xiě)入后計(jì)數(shù)器自動(dòng)復(fù)位,保持發(fā)送。
低壓電力線(xiàn)載波通信的原理結(jié)構(gòu)框圖如圖4所示。需要配合外圍的功率放大、接收回路工作,載波通信的距離與外圍電路設(shè)計(jì)優(yōu)劣、功率大小等密切相關(guān)。
3 接收和發(fā)送的軟件設(shè)計(jì)
載波通信為總線(xiàn)方式通信,所以載波模塊的常態(tài)必須設(shè)置為接收態(tài)、不同的載波模塊必須分配不同的通信地址。模塊接收到校驗(yàn)正確的命令后,只有地址相同的模塊才允許按規(guī)約進(jìn)行應(yīng)答。由于載波通信速率相對(duì)主頻低很多,為提高CPU效率,接收和發(fā)送一般均設(shè)計(jì)為外部中斷方式處理;每次進(jìn)入中斷,完成對(duì)1位數(shù)據(jù)的接收或發(fā)送處理。
按圖3所示流程對(duì)模塊進(jìn)行配置、選擇速率為500bps后,內(nèi)部自動(dòng)選擇為15位PN碼。載波通信控制器即進(jìn)入接收態(tài),進(jìn)行載波信號(hào)的捕獲和同步。
接收時(shí),捕獲和同步過(guò)程由載波通信控制單元的硬件電路自動(dòng)完成,不需要軟件部分參與。由于電力線(xiàn)的哭聲一直存在,所以有效數(shù)據(jù)前必須增加同步幀頭,依據(jù)相關(guān)性標(biāo)準(zhǔn)選擇為0x09、0xAF,后續(xù)為通信的有效數(shù)據(jù)體及校驗(yàn)字節(jié)。
圖5為載波通信接收過(guò)程框圖。載波通信控制單元解擴(kuò)出1位數(shù)據(jù)后,產(chǎn)生一次中斷。接收時(shí),首先采用16位接收窗口、1位滑動(dòng)方式來(lái)接收通信的同步幀頭0x09、0xAF。幀頭接收成功后,后續(xù)數(shù)據(jù)按每8位一個(gè)字節(jié)的方式進(jìn)行截取,得到傳送的有效數(shù)據(jù)。接收過(guò)程中,按有關(guān)的通信協(xié)議進(jìn)行地址判別、長(zhǎng)度接收、校驗(yàn)計(jì)算。地址相同的模塊對(duì)符合通信協(xié)議的數(shù)據(jù)進(jìn)行應(yīng)答,轉(zhuǎn)入發(fā)送態(tài)。
圖6為載波通信發(fā)送過(guò)程框圖。用于載波通信的主叫方發(fā)出命令或接收方的應(yīng)答。置為載波發(fā)送態(tài)時(shí),載波通信控制單元發(fā)送完1位的擴(kuò)頻數(shù)據(jù),自動(dòng)產(chǎn)生一次中斷,允許下一次數(shù)據(jù)發(fā)送。根據(jù)捕獲和同步過(guò)程需要,首先發(fā)送至少40位的全“1”;然后按位發(fā)送同步幀頭0x09、0xAF;之后根據(jù)用戶(hù)的有關(guān)通信協(xié)議按位發(fā)送通信地址、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)體、校驗(yàn)等字節(jié)。
數(shù)據(jù)全部發(fā)送完成后,載波模塊即可轉(zhuǎn)入接收態(tài)。但為確保待發(fā)送數(shù)據(jù)的最后一個(gè)位發(fā)送成功,必須在發(fā)送完最后一位數(shù)據(jù)后等到下一次發(fā)送中斷到來(lái)后,才可以轉(zhuǎn)換載波發(fā)送態(tài)到接收態(tài)。
載波發(fā)送未,將全部數(shù)據(jù)發(fā)送完成前,CPU必須及時(shí)向PLM_RST寄存器寫(xiě)入“A2H”,使計(jì)數(shù)器復(fù)位,避免自動(dòng)復(fù)位提前進(jìn)入載波接收態(tài)。發(fā)送中斷程序如下:
void PLM_int(void)interrupt 7//載波收發(fā)中斷
{if(PLM_RS==1)zb_tx();//載波發(fā)送中斷服務(wù)程序
else zb_rx();//載波接收程序服務(wù)程序,略
}
void zb_tx(void)//載波發(fā)送程序
{if(len8==0)s_byte=buf_send[zbs_count];//取待發(fā)送字節(jié)到位發(fā)送緩沖
ACC=s_byte;
P3.7=ACC^7;//位發(fā)送,最高位在前
s_byte=s_byte1; //左移
len8++; //移位計(jì)數(shù)計(jì)算
if(len8>7) //8位發(fā)送完畢
{zbs_count++; //下一字節(jié)
len8=0; //移位計(jì)數(shù)清零
}
PLM_RS=1; //載波發(fā)送允許
PLM_RST=0xA2; //載波發(fā)送復(fù)位寄存器清空
}
結(jié)語(yǔ)
由SoC芯片PL3105設(shè)計(jì)的具有載波通信功能的智能儀表,在智能電表行業(yè)中得到了應(yīng)用和推廣。其簡(jiǎn)單的接收、發(fā)射處理方式使應(yīng)用程序設(shè)計(jì)十分方便。同時(shí)靈活的ISP編程方式,使產(chǎn)品升級(jí)換代和功能擴(kuò)展靈活;達(dá)到了低成本、高性能的設(shè)計(jì)指標(biāo)。
評(píng)論