<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      RN8302b調試筆記

      RN8302b調試筆記

      艱難調試完畢,吐槽的話就不說了,只有個手冊,官方應用筆記還不給,想想太窩火

      無奈才某處花錢買了個官方應用筆記。。。。。

      忽然發(fā)現(xiàn),現(xiàn)在啥都要錢了,希望博客園的分享可以堅持下去!

       

      1. 通訊接口

             別的不說了,既然PCB都做了,那就一個坑一個坑的來吧,這里不再贅述SPI的的接口以及通訊協(xié)議問題,這部分還都是靠譜的,按要求做就可以了。只要你讀到IC的ID=0x830200,那就說明通訊接口調試完畢!

      這里需要注意的是:RSTN引腳,必須處理!否則你會發(fā)現(xiàn)意想不到的驚喜!

      通訊完成之后,我們可以讀取寄存器了,這里強調一點,寄存器地址是分區(qū)的,通用的數(shù)據(jù)寄存器是BANK0,一些配置寄存器在BANK1,所以我們定義寄存器地址的時候,要有所區(qū)別。我習慣把他定義成十六位的,在寫寄存器的函數(shù)里面,在處理一下,代碼如下。

      至于SPI的讀寫操作函數(shù),不同的MCU不盡相同,不過大致都差不多,這里不再贅述了。

       1 static uint32_t
       2 bsp_rn8302_read_register(uint16_t Addr, uint8_t Length)
       3 {
       4     uint32_t Value = 0;
       5     uint8_t checksum = 0;
       6     uint8_t ucTemp;
       7 
       8     if (Length > 4) {
       9         Value = 0;
      10     } else {
      11         BSP_SPI_RN8302B_CS(0);
      12         // AD[7:0]
      13         bsp_spi_write_read((uint8_t)(Addr));
      14         checksum += (uint8_t)(Addr);
      15         // CMD[R/W-AD[10:8] BL[1:0] 00]
      16         uint8_t cmd = (uint8_t)(((Addr>>8u)&0x07) << 4);
      17         bsp_spi_write_read(cmd);
      18         checksum += cmd;
      19         // Read
      20         for (uint8_t i=0u; i<Length; i++) {
      21             ucTemp = bsp_spi_write_read(BSP_SPI_DUMMY_BYTE);
      22             Value |= (uint32_t)ucTemp << (8*(Length-1u-i));
      23             checksum += ucTemp;
      24         }
      25         // checksum
      26         ucTemp = bsp_spi_write_read(BSP_SPI_DUMMY_BYTE);
      27         if ((checksum|ucTemp) != 0xFF) {
      28             Value = 0;
      29             print("RN8302N<%s>: response checksum error\n", __FUNCTION__);
      30         }
      31         BSP_SPI_RN8302B_CS(1);
      32     }
      33     return Value;
      34 }
       1 static void
       2 bsp_rn8302_write_register(uint16_t Addr, uint8_t Length, uint32_t Value)
       3 {
       4     uint8_t checksum = 0;
       5     uint8_t ucTemp;
       6     if (Length > 4) {
       7         return;
       8     }
       9 
      10     BSP_SPI_RN8302B_CS(0);
      11     // AD[7:0]
      12     bsp_spi_write_read((uint8_t)(Addr));
      13     checksum += (uint8_t)(Addr);
      14     // CMD[R/W-AD[10:8] BL[1:0] 00]
      15     uint8_t cmd = (uint8_t)((((Addr>>8u)&0x07) << 4) | 0x80);
      16     bsp_spi_write_read(cmd);
      17     checksum += cmd;
      18     // DAT
      19     for (uint8_t i=0u; i<Length; i++) {
      20         ucTemp = (uint8_t)(Value >> (8u*(Length-1u-i)));
      21         bsp_spi_write_read(ucTemp);
      22         checksum += ucTemp;
      23     }
      24     // CHECKSUM
      25     bsp_spi_write_read(~checksum);
      26 
      27     BSP_SPI_RN8302B_CS(1);
      28 }

      2. 電壓、電流的轉換

             可以讀到寄存器的數(shù)值之后,我們要做的就是數(shù)據(jù)的處理,比如你讀到了UA UB UC,你得轉化為輸入信號值啊,這個怎么轉呢?也很頭疼,因為手冊他就沒咋說!

             其實我們要先根據(jù)電路計算出電流、電壓的轉換系數(shù),之后用碼值來計算即可。先看一下基本的電壓的輸入電路:

       

      如圖,Un是我們輸入的電壓(比如:220V),Uv是ADC測量通道的輸入值,根據(jù)已知電路,我們可以確定的是:

      Uv = Un / 220K * (49.9*2),即:Un/Uv = 220000/99.8

      電流的計算方式類似,電流的輸入電路:

             如圖,Ib是我們輸入的測量電流(比如:2A),Ui是ADC測量通道(電流通道)的輸入值,我們同樣可以確定:

           Ui = Ib / 2000 * (49.9*2):Ib/Ui = 2000/99.8

      根據(jù)官方應用筆記的描述,我們先計算電壓轉換系數(shù)Kv:

        Kv = Un / (Uv / 0.8 * 227)

      將上式轉換:

        Kv = Un/Uv * 0.8/227

      注:227是RMS寄存器的滿碼值,Un/Uv=220000/99.8是電路參數(shù),使用時需要針對實際電路修改!

      帶入當前電路參數(shù)計算:Kv= 220000/99.8 * 0.8 / 227= 1.31393E-05

       

      繼續(xù)計算電流轉換系數(shù):

        Ki = Ib / (Ui / 0.8 * 227)

      將上式轉換:

        Ki = Ib/Ui * 0.8/227

      注:227是RMS寄存器的滿碼值,Ib/Ui=2000/99.8是電路參數(shù),使用時需要針對實際電路修改!

      帶入當前電路參數(shù)計算:Ki = 2000/99.8 * 0.8 / 227= 1.19448E-07

      有了轉換系數(shù)Kv、Ki,我們就可以計算出測量電流的實際值了,不過說實話,常溫下讀取的精度還是不錯的。

      3. 功率的轉換

      RN8302可以直接讀取有功、無功、視在功率,三者的關系這里不再贅述,讀取功率之前,我們先確認一下功率因數(shù)是否正常,功率因數(shù)的計算公式,手冊中有明確給出,所以不是很麻煩。這里需要注意的是,采樣通道的相位校準寄存器的默認值是: 0x80!有時候由于代碼的移植問題,我們習慣性把該值設為0,這樣會導致功率因數(shù)出錯,此處需要注意!

      功率的轉換中,我們使用一個電表常數(shù)EC,通過他來計算HFConst,該值要寫到HFCONST1、HFCONST2寄存器中。官方給的HFConst的計算公式:

      HFConst = (Uv/0.8) * (Ui/0.8) * 3.6*106 * Fosc / (32*EC*Un*Ib)

      轉換一下:

      HFConst = [3.6*106 * Fosc / (0.8*0.8*32)] * (Uv/Un) * (Ui/Ib) * (1/EC)

            此處暫時不計算該值,僅保留公式。

       

            下面轉入正題,開始計算功率轉換系數(shù)Kp,同樣根據(jù)官方的公式:

            Kp = 3.6*106 * Fosc / (231 * 32 * HFConst * EC)

      把HFConst帶入,我們得到一個和EC無關的計算公式:

      Kp = 3.6*106*Fosc/(231*32)*1/{[3.6*106*Fosc/(0.8*0.8*32)] * (Uv/Un) * (Ui/Ib) }

      簡化公式:

            Kp = (0.8 * 0.8 / 231) * Un/Uv * Ib/Ui

      其中: 231為功率寄存器的滿碼值,Un/Uv=220000/99.8Ib/Ui=2000/99.8是電路參數(shù)。

      帶入當前電路的參數(shù):

             Kp = 0.8 * 0.8 / 231 * (220000/99.8) * (2000/99.8) = 1.31656E-05

      這樣我們就得到了Kp的轉換系數(shù),功率寄存器的更新周期是250ms。

      4. 電能的計算

      在第3部分,我們提到了電表常數(shù)EC,以及通過電表常數(shù)計算的HFConst,用以設置HFCONST1、HFCONST2寄存器,不過我們之前的計算都和這個無關。在計算電能的時候,我們就要用到這個參數(shù)了。

      HFConst = [3.6*106 * Fosc / (0.8*0.8*32)] * (Uv/Un) * (Ui/Ib) * (1/EC)

      關于電能的計算,手冊有說明,這里不再贅述。說明的是,我們要給定一個EC(比如:3200),以此來計算出HFConst的值,這里的EC選取要注意大小,太小了可能會導致HFConst的計算值超限,因為HFCONST寄存器是16bits的。

      RN8302可以方便的讀取各項電能累計,常用的比如:

      • 合相有功電能累計、合相正向有功電能累計、合相反向有功電能累計
      • 合相無功電能累計、合相正向無功電能累計、合相反向無功電能累計
      • RMS合相視在電能累計

      有個上述寄存器的數(shù)值,除以EC值,就是我們要讀取的電表度數(shù)了。

      5. 電參的校準

      RN8302的校準相對比較簡單,在其數(shù)據(jù)手冊和應用筆記上都給出了計算方法,利用功率校表,總結起來就是:

      •  設定標準源輸入的電壓、電流,PF=1.0
      •  根據(jù)輸入值校準各相電壓、電流的增益
      •  校準有功功率增益(無功、視在增益等于有功增益)
      •  設定PF0.5
      •  根據(jù)有功功率的誤差,校正功率相位。

      設定標準源輸入為Ui、Ii,寄存器讀到的碼值Ux_REG、Ix_REG:

      各相電壓增益的計算如下,GSUx(x=A、B、C):

      GSUx = Ui / (Ux_REG * Kv) – 1

      •  如果GSUx≥0,     GSUx = GSUx * 215
      •  如果GSUx<0,     GSUx = GSUx * 215 + 216

      各相電流增益的計算如下,GSIx(x=A、B、C):

      •  GSIx = Ii / (Ix_REG * Ki) – 1
      •  如果GSIx≥0, GSIx = GSIx * 215
      •  如果GSIx<0, GSIx = GSIx * 215 + 216

      各相功率增益的計算如下,GPx(x=A、B、C):

      ErrP = (Px_REG * Kp) / (Ui * Ii * 1.0) – 1

      GPx = ErrP / (1 + ErrP) * (-1)

      •  如果GPx≥0,  GPx = GPx * 215
      •  如果GPx<0,  GPx = GPx * 215 + 216

      設定PF=0.5,各相功率相位,Px_PHSL(x=A、B、C):

      ErrP = (Px_REG * Kp) / (Ui * Ii * 0.5) – 1

      Px_PHSL = ErrP / √3   * (-1)

      •  如果Px_PHSL≥0,Px_PHSL = Px_PHSL * 215
      •  如果Px_PHSL<0, Px_PHSL = Px_PHSL * 215 + 216

       

      后記:

      簡單測了一下 ,電能計量和基本測量都不錯,價格也便宜,還是值得使用的。

      有需要官方應用筆記的可以留下郵箱,我看到的話會發(fā)給您。

      posted @ 2021-11-04 14:22  linux_farmer  閱讀(10404)  評論(33)    收藏  舉報
      主站蜘蛛池模板: 日韩精品一区二区三区激情视频 | 美女黄18以下禁止观看| 亚洲人午夜精品射精日韩| 亚洲精品美女久久久久9999| 少妇被粗大的猛烈xx动态图| 欧洲码亚洲码的区别入口| 色视频不卡一区二区三区| 亚洲综合小说另类图片五月天| 一区二区三区精品视频免费播放| 起碰免费公开97在线视频| 午夜在线观看成人av| 久久久无码精品午夜| 中文国产日韩欧美二视频| 变态另类视频一区二区三区 | 麻豆一区二区三区蜜桃免费| 做暖暖视频在线看片免费| 亚洲国产成人无码电影| 国产mv在线天堂mv免费观看| 国产毛1卡2卡3卡4卡免费观看| 热re99久久精品国产99热| 四虎国产精品成人免费久久| 午夜高清福利在线观看| 国产内射性高湖| 无码人妻斩一区二区三区| 精品国产美女av久久久久| 国产中文字幕精品在线| 一区二区三区鲁丝不卡| 起碰免费公开97在线视频| 亚洲成在人线AV品善网好看| 天堂…中文在线最新版在线| 高清中文字幕国产精品| 亚洲精品无码久久千人斩| 国产精品一区二区香蕉| 老熟女重囗味hdxx69| 日本韩国日韩少妇熟女少妇| 亚洲精品视频免费| 亚洲国产性夜夜综合| 亚洲国产精品成人综合色| 亚洲一区二区三级av| 国产日产亚洲系列av| 亚洲一区二区av观看|