色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于OpenHarmony+小凌派RK2206開發板制作的簡易示波器

電子發燒友開源社區 ? 來源:HarmonyOS官方合作社區 ? 作者:HarmonyOS官方合作社 ? 2022-05-10 09:02 ? 次閱讀

基于OpenHarmony + 小凌派RK2206開發板制作的簡易示波器,實時采集波形,實時計算并實時顯示對應的波形。OpenHarmony實時性較高,穩定性好,瑞芯微RK2206芯片接口豐富,OpenHarmony芯片適配穩定性好,做出來的簡易示波器效果還不錯。本文先做第一期的技術文檔,后續將持續完善功能和技術文檔更新。

1

項目簡介

本文基于OpenHarmony操作系統 + 小凌派RK2206開發板而做的簡易示波器開發。

本開發以瑞芯微RK2206芯片 + OpenHarmony 3.0LTS操作系統 + 小凌派-RK2206開發板為基礎,以模數轉換芯片ADS1256為采集數據芯片實時采集,然后通過峰值檢測和fft變換算法處理采集數據,最后將處理完成的數據輸送到LCD液晶屏上實時顯示。

項目實驗視頻如下所示:

2

模塊介紹

1.ADS1256模塊
ADS1256是一款 24bit ADC轉換模塊。ADS1256可以通過SPI進行訪問 的高精度轉換器

a9a6f664-cffa-11ec-bce3-dac502259ad0.png

上圖為ADS1256芯片結構和引腳圖,從圖可以看出ADS1256的通道資源比較豐富,可以配置成8個單端ADC通道,也可以配置成4個差分通道。ADS1256的通信接口為串行接口,同時還有4個通用的IO口,不過這四個IO口不經常用到。

ADS1256內部有許多寄存器需要配置,相較于ADS1232用起來要復雜的多。

下面介紹一下ADS1256的初始化。

通過SPI通信配置ADS1256的參數,增益以及轉換速率。

void ADS1256_CfgADC(uint8_t gain,uint8_t drate)  // 初始化設置,設置增益以及轉換速率{  uint8_t buf[4];  ADS1256_WriteCmd(CMD_RESET);        // 寫復位指令  ADS1256_WriteReg(REG_STATUS,0XF4);     // 寫狀態,數據傳輸默認高位在前,啟動矯正,禁止使用緩沖  ADS1256_WriteCmd(CMD_SELFCAL);       // 自校準  ToyUdelay(20);  {    buf[0] = (0 << 3) | (1 << 2) | (0 << 1);    buf[1] = 0x08;           //通道設置選擇    buf[2] = (0 << 5) | (0 << 3) | (gain << 0);    buf[3] = drate; // DRATE_10SPS; /* 選擇數據輸出速率 */    CS_L;    ADS1256_Send8Bit(CMD_WREG|0);     // 寫寄存器    ADS1256_Send8Bit(0x03);        // 連續寫入4個數據    ADS1256_Send8Bit(buf[0]);       // 設置狀態寄存器    ADS1256_Send8Bit(buf[1]);       // 設置輸入通道參數    ADS1256_Send8Bit(buf[2]);       // 設置ADCON控制寄存器,增益    ADS1256_Send8Bit(buf[3]);        // 設置數據速率    CS_H;  }  ToyUdelay(50);}

(左右移動查看全部內容)

然后選擇通道0,等待數據轉換完成后獲取他采集的AD值

uint32_t ADS1256_GetAdc(uint8_t channel){  uint32_t read;  uint16_t val = 0;  read = 0;// while(DRDY);      //當DRDY變為低電平時,數據開始傳輸  ADS1256_WriteReg(REG_MUX,channel);    // 寫入讀取的通道  ADS1256_WriteCmd(CMD_SYNC);       //同步A/D轉換命令// Delay_1us(1);  ADS1256_WriteCmd(CMD_WAKEUP);      //完成SYNC并退出待機模式  GpioGetVal(DRDY, &val);  while(val==1)               // 等待數據轉換完成  {    GpioGetVal(DRDY, &val);  }  CS_L;                  //片選拉低  ADS1256_Send8Bit(CMD_RDATA);       //讀取數據命令  //連續接收3個數據,高字節在前  read = ((uint32_t)ADS1256_Recive8Bit() << 16);       read +=( (uint32_t)ADS1256_Recive8Bit() << 8);  read += ADS1256_Recive8Bit() ;  CS_H;  return read;  }

(左右移動查看全部內容)

2.LCD液晶屏模塊

本項目使用的是ST7789V, 用于單片驅動262K色圖像TFT-LCD, 包含 720(240*3色) x 320 線輸出, 可以直接以SPI協議, 或者8位/9位/16位/18位并行連接外部控制器。ST7789V顯示數據存儲在片內240x320x18 bits內存中, 顯示內存的讀寫不需要外部時鐘驅動。

具體接線如下圖所示:

a9c688e4-cffa-11ec-bce3-dac502259ad0.png

其中,LCD液晶屏引腳功能描述,如下表5.3.1所示。

表5.3.1 LCD液晶屏引腳功能表:

a9e64b48-cffa-11ec-bce3-dac502259ad0.png

其中,LCD液晶屏與小凌派-RK2206開發板連接如下圖所示:

a9f95332-cffa-11ec-bce3-dac502259ad0.png

3

簡易示波器功能的實現

1.峰值檢測

通過查找ad采集的數據內的最大值和最小值,然后相減即得峰峰值。

float Get_Vpp(float arr[]){    uint16_t i;    float MAX=0,MIN=3500,Vpp=0;    for(i=0;i""  ="" 掃描adc數組,獲取最大值和最小值    {      if(arr[i]>MAX)             MAX=arr[i];      if(arr[i]        MIN=arr[i];    }    Vpp=MAX-MIN;    return Vpp;}

(左右移動查看全部內容)

2.頻率檢測

通過fft變換,FFT變換的數據需要兩部分,實部和虛部,由于變換的是數據是AD采集的實數據,所以只需將采集的值存入實部,虛部存入零即可。通過變換將時域信號轉換到頻域,然后通過取模排序,然后計算即可得到頻率。他的基本思想是把原始的 N 點序列,依次分解成一系列的短序列。充分利用 DFT 計算式中指數因子所具有的對稱性質和周期性質,進而求出這些短序列相應的 DFT 并進行適當組合,達到刪除重復計算,減少乘法運算和簡化結構的目的。當N是素數時,可以將 DFT算轉化為求循環卷積,從而更進一步減少乘法次數,提高速度。

(1)FFT變換函數

oid fft(const float real_in[], const float imag_in[], float real_out[], float imag_out[], const int n, int isign) {  if (isign != 1 && isign != -1) {//isign=1,正變換;isign=-1,逆變換    return;  }  const int Lv = mylog(n, 2);//蝶形級數  int L;//蝶形運算級數,用于循環  int N;//蝶形運算數據量,用于循環  int distance;//蝶形運算兩節點間的距離,用于循環(distance=N/2)  int group;//蝶形運算的組數  float tmpr1, tmpi1, tmpr2, tmpi2;//臨時變量  int i, j, k;  for (i = 0; i < n; i++) {//數位倒讀    j = rev(i, Lv);    real_out[j] = real_in[i];    imag_out[j] = imag_in[i];  }  L = 1;  distance = 1;  N = 2;  group = n >> 1;  for (; L <= Lv; L++) {//蝶形循環    for (i = 0; i < group; i++) {//每級蝶形各組循環      for (k = 0; k < distance; k++) {//每組蝶形運算        float theta = -2 * PI * k / N * isign;//旋轉因子,逆變換的角度與正變換相反        tmpr1 = real_out[N * i + k];        tmpi1 = imag_out[N * i + k];//X(k)        tmpr2 = mycos(theta) * real_out[N * i + k + distance] - mysin(theta) * imag_out[N * i + k + distance];        tmpi2 = mycos(theta) * imag_out[N * i + k + distance] + mysin(theta) * real_out[N * i + k + distance];//WN(k)*X(k+N/2)        real_out[N * i + k] = tmpr1 + tmpr2;        imag_out[N * i + k] = tmpi1 + tmpi2;//X(k)=X(k)+WN(K)*X(k+N/2)        real_out[N * i + k + distance] = tmpr1 - tmpr2;        imag_out[N * i + k + distance] = tmpi1 - tmpi2;//X(k+N/2)=X(k)-WN(K)*X(k+N/2)        if (isign == -1) {//逆變換結果需除以N,即除以Lv次2          real_out[N * i + k] *= 0.5;          imag_out[N * i + k] *= 0.5;          real_out[N * i + k + distance] *= 0.5;          imag_out[N * i + k + distance] *= 0.5;        }      }    }    N <<= 1;    distance <<= 1;    group >>= 1;  }}

(左右移動查看全部內容)

(2)取模運算函數

void PowerMag(void){  uint16_t i=0;  float Y,X,Mag; for (i=0; i < Ns/2; i++) {
    X =((float)y2r[i])/32768* Ns;    Y = ((float)y2i[i])/32768* Ns;    Mag = sqrt(X*X+ Y*Y)/Ns;     // 先平方和,再開方    y2[i] = (uint32_t)(Mag*65536);      
 } y2[0] = y2[0]/2;   //直流}

(左右移動查看全部內容)

(3)然后將FFT變換的幅值進行排序,同時也對他們的下標進行了排序,以便后續的計算,即除了直流信號的第一個頻率點即為改信號的頻率。

void sorting (void){  uint16_t i,j;  uint32_t temp1;    for(i=0;i2;i++) =""  ="" ="" 下標賦初值  {    xb[i]=i;  }  for(j=0;j<(Ns/2-1);j++)         // 冒泡排序   {    for(i=1;i<(Ns/2-j-1);i++)    //直流項不參與排序 從第二項開始           {      if(y2[i]1])      {                temp1=y2[i];        //交換數據        y2[i]=y2[i+1];        y2[i+1]=temp1;
        temp1=xb[i];              //交換下標        xb[i]=xb[i+1];        xb[i+1]=temp1;      }        }                                   }}

(左右移動查看全部內容)

(4)通過計算即可得到頻率,采樣點數將采樣頻率進行平分,通過排序取得的幅值最大的那個點的下標進行相乘即為頻率,1.47為補償系數,因為ADS1256采集數據后有延時,導致進行FFT變換后所對應的幅值最大點的下標前移,導致計算頻率時候會偏小。

fre=Fs*xb[1]*1.47/Ns;

(左右移動查看全部內容)

3.波形顯示
通過將采集的幅值進行計算,使最后的值在屏幕大小的范圍內,進行描點畫圖。

void drawCurve( float rawValue,uint16_t color) {  uint16_t x;  int y;  y = (int) rawValue/30+30;  //data processing code  if(y<0 || y > 240)  y = lastY;  //這里之所以是120-rawValue/280,與屏幕的掃描方向有關,如果出現上下顛倒的情況,可以改成120 +  if(firstPoint)//如果是第一次畫點,則無需連線,直接描點即可  {    LCD_DrawPoint(0,y,color);    lastX=0;    lastY=y;    firstPoint=0;  }  else  {    x=lastX+2;    if(x<320) //不超過屏幕寬度    {      LCD_DrawLine(lastX,lastY,x,y,color);      lastX=x;      lastY=y;    }    else //超出屏幕寬度,清屏,從第一個點開始繪制,實現動態更新效果    {      //LCD_Fill(0, 0, LCD_W, LCD_H, LCD_WHITE);//清屏//清屏,白色背景      LCD_DrawPoint(0,y,color);      lastX=0;      lastY=y;    } }}

(左右移動查看全部內容)

4.LCD顯示
Gitee社區已有這部分源代碼和說明文檔,感興趣的讀者可以參考:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/tree/master/vendor/lockzhiner/rk2206/samples/b4_lcd

4

心得體會

通過OpenHarmony操作系統 + 小凌派-RK2206開發板進行項目開發,OpenHarmony的實時性好,穩定性高,瑞芯微RK2206芯片接口比較豐富,移植適配穩定性較好,整體開發進度比較順利,開發的難度都集中在數據處理算法上。通過這一次的應用開發,整體上對OpenHarmony和國產芯片開發還是蠻認可的,是一次不錯的學習體驗,特此記錄!

原文標題:基于OpenHarmony操作系統的簡易示波器開發心得

文章出處:【微信公眾號:HarmonyOS官方合作社區】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 示波器
    +關注

    關注

    113

    文章

    6279

    瀏覽量

    185601
  • 操作系統
    +關注

    關注

    37

    文章

    6875

    瀏覽量

    123576
  • 開發板
    +關注

    關注

    25

    文章

    5119

    瀏覽量

    97941
  • OpenHarmony
    +關注

    關注

    25

    文章

    3744

    瀏覽量

    16473
  • RK2206
    +關注

    關注

    0

    文章

    34

    瀏覽量

    1812

原文標題:基于OpenHarmony操作系統的簡易示波器開發心得

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RK2206鴻蒙開發板新品首發試用

    鴻蒙開發板 瑞芯微RK2206 OpenHarmony系統 E53 loT物聯網了解更多&amp;gt;&amp;g
    發表于 03-28 17:12

    輕量系統開發套件介紹:睿智捷 | 小-RK2206 開發板套件

    睿智捷 | 小-RK2206 開發板套件是由福州市睿智捷電子有限公司出品,主控器為瑞芯微
    發表于 04-21 13:39

    【小RK2206開發板試用體驗】安裝編譯環境的分享

    : hb build -f 然后就OK了。[OHOS INFO] lockzhiner-rk2206 build success到這里編譯環境就可以。【思考】對于這個ubuntu下的編譯環境的建立,還得花點心思才行。要幾個視頻、文檔結合來看。最后希望大家上手小
    發表于 05-01 14:39

    【小RK2206開發板試用體驗】2、開箱及hello

    \lockzhiner-rk2206\images5、下載固件:6、下載成功后就可以看到串口打印了:總結:今天第一次拿開發板,對于
    發表于 05-02 14:54

    【小RK2206開發板試用體驗】第2章 源碼編譯與固件下載

    開發環境:開發系統:Ubuntu 20.04開發板:小-RK2206
    發表于 05-08 14:02

    【小RK2206開發板試用體驗】第3章 應用開發

    開發環境:開發系統:Ubuntu 20.04開發板:小-RK2206
    發表于 05-08 14:07

    【小RK2206開發板試用體驗】二運行

    入手后,我申請的是人體感應套件,所以首先 查詢資料docsoard硬件原理圖小開發板原理圖只提供底板的原理圖,核心原理圖可在開發板
    發表于 06-02 10:23

    【小RK2206開發板試用體驗】OpenHarmony華為云IoT應用開發-智慧井蓋

    本帖最后由 周安平 于 2022-6-4 10:07 編輯 【小RK2206開發板試用體驗】OpenHarmony華為云IoT應用
    發表于 06-03 20:48

    RK2206開發板搭載OpenHarmony操作系統簡介

    1、小-RK2206開發板簡介小-RK2206
    發表于 07-28 17:28

    首發!成功移植鴻蒙到瑞芯微RK2206開發板,代碼即將開源~

    的移植工作,2022年2月份上傳至SIG倉,分享給全體OpenHarmony開發者。 RK2206開發板簡介 ? ?
    發表于 12-15 18:21 ?4105次閱讀
    首發!成功移植鴻蒙到瑞芯微<b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>,代碼即將開源~

    RK2206開發板順利通過開放原子開源基金會XTS認證

    -RK2206開發板OpenHarmony 良好兼容、系統互通,符合 OpenHarmony 兼容性設計要求及認證標準。 未來,智電子
    的頭像 發表于 03-23 16:18 ?5053次閱讀
    小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>順利通過開放原子開源基金會XTS認證

    基于OpenHarmony系統和小RK2206開發板的避障小車

    這是一款基于OpenHarmony系統和小-RK2206開發板的避障小車。同時,小車上搭載了超聲波測距模塊、舵機模塊、紅外尋跡模塊、直流
    的頭像 發表于 04-21 07:58 ?5257次閱讀

    基于小RK2206開發板制作簡易示波器

    基于OpenHarmony + 小RK2206開發板制作
    的頭像 發表于 05-06 17:09 ?1841次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>所<b class='flag-5'>制作</b>的<b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>

    智電子:小-RK2206開發板順利通過開放原子開源基金會兼容性測評

    3月18日,智電子小-RK2206開發套件順利完成OpenAtomOpenHarmony
    的頭像 發表于 04-13 09:56 ?1047次閱讀
    <b class='flag-5'>凌</b>智電子:小<b class='flag-5'>凌</b><b class='flag-5'>派</b>-<b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>順利通過開放原子開源基金會兼容性測評

    -RK2206開發板:UART控制案例

    -RK2206開發板:UART控制案例一、簡介通用異步收發傳輸器(UniversalAsynchronousReceiver/Transmitter),通常稱作UART。它將要傳
    的頭像 發表于 06-14 11:12 ?1073次閱讀
    小<b class='flag-5'>凌</b><b class='flag-5'>派</b>-<b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:UART控制案例
    主站蜘蛛池模板: 国产精品1区在线播放| 国产精品嫩草免费视频| 国产日韩精品SUV| 忘忧草日本在线社区WWW电影| gogogo免费视频观看| 欧美日本韩国一二区视频| 97精品国产高清在线看入口| 蜜臀亚洲AV永久无码精品老司机| 91久久精品国产亚洲| 男女一边摸一边做羞羞的事情免费| 18videosex性欧美黑色| 蜜桃成人在线| my pico未删减在线观看| 日本xxx在线观看免费播放| 国产福利不卡在线视频| 亚洲国产在线综合018| 久草在线草a免费线看| 岳扒开让我添| 噜噜噜狠狠夜夜躁精品| 9久高清在线不卡免费无吗视频| 日本漂亮妈妈7观整有限中| 国产欧美一区二区精品性色tv | 麻婆豆腐传媒视频免费| 99久久蜜臀AV免费看蛮| 日韩欧美中文字幕在线| 国产精品女主播主要上线| 亚洲性爱城| 牛牛精品专区在线| 疯狂小护士| 伊人电院网| 人妻 中文无码 中出| 国产亚洲精品久久77777| 中文字幕亚洲无线码高清不卡| 秋霞电影网午夜鲁丝片| 国产午夜精品理论片| 综合色中色| 爽a中文字幕一区| 久草精品在线| 电影 qvod| 一久久| 日本久久久|