--- tags: TI instaspin --- # UART with RPI3 and serial plot ## UART 利用rasperberry pie的uart功能與TI MCU進行通訊,並將資料以開源專案[serialplot](https://github.com/hyOzd/serialplot),將其可視化。 CONTENT * The UART communication protocol * TI MCU F28069 family UART configuration * RPI3 UART configuration * serialplot introduction * Bluetooth communication ### The UART communication protocol 串列傳輸應用於cpu之間的溝通,或是CPU與終端設備(MCU),之間的低速通訊。 #### UART and RS232 UART只是晶片內序列傳輸模組的通稱,第一個字母U的Universal表示是泛用型,你可以config它成為各種形式的序列埠,例如要不要parity check,bit rate要多少之類的。由於UART是通訊協定裡的Layer2,也就是Data Link Layer,它只定義傳送一個byte時,頭尾應該要有那些0與1護送,因此沒有定義接頭形狀,接頭的形狀與訊號準位則是定義在RS232,它是Layer1或說實體層Physical Layer。因此UART底層的實體要接哪種介面,完全看個人需求而定,你可以接RS232也可以直接導線對接。  其中接RS232與直接導線對接最大的差別在於編碼格式,RS232使用polar NRZ,直接對接的方式則使用unipolar NRZ。  這兩者最大的差別在於,當訊號直接對接時,根據兩者功率頻譜密度(PSD)的分析,直接對接時Unipolar NRZ在傳送時會消耗傳送功率,因此無法進行遠距離傳輸,因此發明了Polar NRZ的傳輸格式在功率頻譜密度(PSD)的分析中Polar NRZ省去了功率浪費可進行較長距離的傳輸。   #### RS485 RS485則是RS232的改良版, ### TI DSP F28069M family UART configuration ### RPI3 UART configuration 對於Raspberry Pi 3B+來說,它的UART有三種功能: 1. 供內部藍牙使用 1. 控制終端使用(serial console) 1. 與其他設備進行序列通訊(serial communication) Raspberry Pi 3B+有兩個UART(Universal Asynchronous Receiver/Transmitter,Universal是指可以自定義傳輸格式與baud rate,Asynchronous是指不依賴CPU時鐘),分別為PL011 UART與mini UART,PL011使用獨立的硬體(ARM PrimeCell PL011)去控制傳輸的baud rate,所以傳輸的性能與穩定度都很好,但是mini UART的baud rate是使用系統核心時脈計算出來的,只能算半軟體的URAT,就算設定到115200bps實際上只有72000bps左右而已,相較之下效能與穩定度都不足。 PL011 UART在系統中是/dev/ttyAMA0,mini UART是/dev/ttys0,Raspberry Pi 3B+有兩個序列埠口為serial0與serial1,serial0是GPIO埠口,使用GPIO 14(pin 8)與GPIO 15(pin 15),serial1是藍芽;在系統預設中,serial0是關閉的,serial1是指向/dev/ttyAMA0,所以無論是想用序列埠口作為serial console或者與其他設備做serial communication,首先要做的是啟用serial0這個序列埠口。 ``` sudo raspi-config ``` Interfacing Options並按下Enter鍵。  Serial並按下Enter鍵。  預設啟動serial interface會做為serial console使用,選擇Yes並按下Enter鍵;若要將serial interface作為通訊用則選擇No。  如果進一步希望serial0可以使用PL011(/dev/ttyAMA0)來確保穩定的傳輸,可以編輯/boot/config.txt,加上dtoverlay=pi3-miniuart-bt,若希望進一步停用藍芽可再加上dtoverlay=pi3-disable-bt。 ``` tomtpi@raspberrypi:~ $ sudo vi /boot/config.txt ```  ``` tomtpi@raspberrypi:~ $ sudo reboot tomtpi@raspberrypi:~ $ ls -l /dev ```  接著透過stty指令可對gpio進行baud rate設定 ``` tomtpi@raspberrypi:~ $ stty -F /dev/ttyAMA0 3000000 //max buad rate ``` 透過echo指令可以透過rpi3丟封包 ``` tomtpi@raspberrypi:~ $ echo -n "a"> /dev/ttyAMA0 ``` 一般來說baud rate都會有一定的誤差,這邊寫一個腳本去測試不同baud rate的表現。 ``` #!/bin/bash # Program: # This program test uart in your rpi3. # History: # 2015/07/16 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH stty -F /dev/ttyAMA0 1152000 #SET baud rate at 1M bits/sec for num in $(seq 1 500) do echo -n "a" > /dev/ttyAMA0 echo -n "b" > /dev/ttyAMA0 done exit 0 ``` ### serial plot introduction 待續 ### 專案舒適度 比較neo與Giant #### 實驗波型 CH1 DCBUS電壓 CH2 剎車電阻電流  電流迴路加上Torque observer CH1-開關命令 CH2-馬達相電流 CH3-DC BUS電壓 巨大實驗drv8301evm+f28069+第七顆開關 可觀察到開關命令因為飛線有誤開關的情況,希望未來layout整塊的板子能改善相關情況。 馬達阻力根據腳踩情形有大小變化。 Dcbus電壓利用第七顆開關加上煞車電阻,控制在48V。  #### 觀測8秒紀錄 **TACXNEO**  **GIANT**  兩次實驗踩踏速率均約為60RPM,兩張圖均可看出兩個周期的波型約為腳踩踏一圈(左右腳各半圈)馬達的向電流情形。 TACXNEO中可觀察出在各別左右腳踩踏的兩個週期中,馬達只有半個週期有出力(下圖橘色部份)。 巨大實驗中每個周期,馬達力量從小至大再從大至小。  詳細比較兩者電流波型差異 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up