物聯網系統整合應用 (二) IOT (Internet Of Things)
物聯網(IOT)系統整合應用 課程安排 Part 1, 物聯網系統架構介紹 實作: 各裝置硬體實體之熟悉, 以及Beaglebone WebServer基本操作
Part 2, 3 Arminno 軟硬體環境介紹及藍芽應用, 與ZigBee Coordinator 流程介紹 實作: Arminno 開發環境使用熟悉及 Arminno+ZigBee 程式練習
Part 3,4 Arduino 軟硬體及相關Ozone模組介紹, 及ZigBee End Devices 流程介紹 實作: Arminno 開發環境使用與ZigBee End, 以及其他感測器相關模組程 式練習
Part 5,6 Beaglebone WebServer 流程, 及 Phthon Script 程式 介紹 實作: 修改Beaglebone程式, 與其他Linux指令操作練習
課程主題 (Part 2) 32 位元微處理器(MCU)概述 Arminno™平台軟硬體功能與 GPIO 介紹 Keil-C 軟體開發環境介紹 ZigBee 通訊協定(Protocol)介紹 Arminno™主程式流程解說 - (1) 實作 Keil-C Project 的建立與程式修改 GPIO 程式控制練習
Why 32 bits (位元) MCU ? 三高 ?
1. 位元高 2. 價格高 3. 耗電高
滿足更多功能的應用需求 ... 物聯網 IOT (Internet of Things)
車載控制與 人機介面 工業智能控制
I/O 的大量需求 (Hundreads I/O) 不同的 I/O 介面 (Variant Interfaces: Uart, I2C, SPI, PWM, Pulse)
智慧連網 (Cloud Processing)
穿戴式裝置 (眼鏡, 手錶)
Arminno™開發平台 ?
平台 = 硬體 +軟體
硬體 I/O 控制 (HW I/O control) 軟體程式庫的提供 (SW Librarys Support) → 以達到快速整合的目的 (Fast Integration)
ArminnoTM(HT32F1755)主要功能介紹(1) ▀ 系統核心單元 ● 32位元ARM Cortex™-M3處理器核心 ● 高達72MHz工作 ● 1.25DMIPS/MHz (Dhrystone 2.1) ● 單週期乘法及硬體除法 ▀ 記憶體單元 ● 128KB Flash 記憶體用作指令/ 資料存儲 ● 64KB SRAM 記憶體用作動態資料儲存 ▀ 時間控制單元 ● 可選擇外部8MHz主振盪晶體 ● 可選擇外部32,768Hz副振盪晶體 ● 內部8MHz RC振盪器精度可調整至1% ● 內部32kHz RC振盪器 ▀ 類比數位轉換單元(ADC) ● 12-bit解析度 ● 1Msps資料轉換速度 ● 8個外部獨立類比輸入通道 ● 轉換電壓範圍: 0V~3.3V ▀ 類比運算放大器及比較器 ● 2個運算放大器或2個比較器(由軟體設定配置) ● 比較電壓範圍: 0V~3.3V ▀ I/O功能 ● 80個通用輸入/出腳位(GPIOs) ● Port A到Port E共有16個IO外部輸入中斷(EXTI)可供使用 ● 除了與類比輸入共用的腳位外(3.3V),幾乎所有的I/O 腳位都是5V容許
ArminnoTM(HT32F1755)主要功能介紹(2) ▀ PWM產生及捕捉定時器(Timer) ● 3個15位元通用計時器(GPTM) ● 每個GPTM有4通道PWM比較輸出和輸入捕捉 ● 可外部觸發輸入 ▀ 基本功能定時器(Timer) ● 2個32位基本計時器(BTM) ▀ 真實時鐘(RTC) ● 帶可程式設計預分頻器的32 位向上計數器 ● 可產生中斷溢位事件(overflow event) ▀ I2C介面 ● 支援100Kbps(Normal mode)和400Kbps(Fast mode)工作速度 ● 支援Master or Slave模式 ● 支援7bit and 10bit Address模式 ● 支援General Call模式 ▀ SPI介面 ● 最高可達18MHz工作速度 ● 支援Master or Slave模式 ● 8bytes資料暫存區(FIFO Buffer) ▀ UART介面 ● 最高可達1Mbps工作速度 ● 16bytes資料暫存區(FIFO Buffer) ● 全雙工(Full Duplex, 2 wires)及半雙工(Half duplex, 1wire)支援 ▀支援除錯功能(Debug support) ● Serial Wire Debug Port - SW-DP
Holtek HT32F17x5 32bits MCU (ARM Cortex M3 Kernel)
CMOS Sensor Interface
Arminno 提供多功能可程式規劃的 GPIO (5 ports/ 80 channels) - "I/O muxing"
了解各Channel驅動 能力與耐壓流的程度
Note: PB11,PB12 dedicated for X'tal
Note: PC3 dedicated for RESET
Note: PE11~PE13 dedicated for SWD
Why Multi-Functions GPIO ? 俗稱 "Muxing I/O" 1. 節省晶片腳位數 2. 可以彈性切換為不同功能 : Digital, Analog, UR, SPI, Timer, PWM,.. 3. 程式可動態調整,調整的空間更大
使用GPIO注意!!! 5v/3v, 1ma/8ma/12ma 的規定
三種常用的傳輸介面 UART 通用非同步接收/傳送器UART0(Universal Asynchronous Receiver/Transmitter) 為一種非同步串列通信口的總稱,它包括了 RS232、RS422、RS423、RS449和RS485等介面標準規範和匯流 排標準規範。
I2C 為一串列通訊匯流排,使用主從架構(Master and Slave),於1980年 代由飛利浦公司發展而來,其使用2 pin 實體資料傳輸線(SDA、SCL) ,並採用open drain + 電阻上拉模式交換串列資訊,可進行一對一及 一對多模組資料傳輸,Arminno™上允許I2C工作於3.3V及5V、主從 模式切換以及100kbps、400kbps及1Mbps的傳輸速度模式設定。
SPI 序列周邊介面SPI0(Serial Peripheral Interface Bus),使用主從架構 (Master/Slave),其使用4條實體資料傳輸線(SEL、SCK、MISO及 MOSI)。系統時脈決定速度
Keil uVersion4 發展環境 ANSI C
美國國家標準協會(ANSI)對C語言發布的標準 幾乎被所有廣泛使用的編譯器支持
支援 ANSI C 的編譯器 GCC Microsoft Visual C++ ARM RealView
Keil uVersion4 多專案開發概念 Concepts of "Mulitple Projects" & "Multiple Targets" Multi-Projects
Multi-Targets
Project-1 ( 專案-1)
Project-2 (專案-2)
: Project-N (專案-N)
:
專案開發流程 (Project Build) 專案檔 project.uvproj **.h **.inc **.cpp
編譯器 (Complier)
**.o Debug環境 e-Link32
**.o
連結器 (Linker)
編輯器 (Editor) **.s
組輯器 (Assembler)
project.axf project.hex
**.lib 程式庫 (Libraries)
程式燒錄 (Flash)
Keil uVersion4 專案環境建立步驟 Step1: Create A Project or Creat A "Multiple" project 建立一個專案 (可以從建立好的專案目錄複製)
Step2: If Step1, then add Projects to the "Mutliple project" 建立多專案環境 (如果需要多專案一起進行)
Step3: Select Target for project 選擇要加入專案中編譯的程式
Suggest: Select files in "Source Group" and "Common" Source Group ( .c , .cpp ) - 這理放主要要撰寫的程式 Common ( .obj, .lib, .s ) - 這理放要使用的外部程式庫
Step4: Select Output and List folder 選擇輸出檔的目錄 Step5: Debug environment setting 除錯環境設定 Step6: Flash download setting 燒錄環境設定
Arminno 開機流程 開機
startup_ht32f175x_ 275x.s - 異常中段處理 - 記憶體管理 - 進入main()
main.cpp
Arminno.h holtek_retarget.c ArminnoLib.lib hardfault.s semihosting.s
h32f175x_275x.h innoXXXX.h ht32XXXX.h ...... (Build 會加入)
Arminno 專案開發必要的程式庫
1. startup_ht32f175x_275x.s 2. holtek_retarget.c 3. hardfault.s 4. semihosting.s 5. ArminnoLib.lib
Include header (.h) files
Provided by Innovota Provided by Holtek
- Startup_ht32f17x_275x.s - Arminnolib.lib - Hardfault.s - Semihosting.s - Retarget.c
Keil-C 開發環境視窗
程式開發視窗
輸出訊息視窗
即時通訊終端視窗 (Only for Debug Mode !)
Arminno 程式編譯環境設定-1
Arminno 程式編譯環境設定-2
1. USE_HT32_DRIVER, USE_HT32F1755_DVB 2. 加入所有的 inc
實作練習: 以Arminno GPIO產生PWM信號控制LED亮度
硬體
軟體 PWM控制 腳位 - B0
參考 "Arminno_V10a程式庫手冊 .pdf",第79頁
220 Ohm
Arminno
GND
使用 SetTm2Pwm (); 指令選擇 Timer2 SetTm2PwmCh(0, 1, 0, 100); 指令 選擇 Duty Cycle
使用Arminno程式庫: Step1 State = SetTm2Pwm(Prescaler, Resolution); Prescaler 常數或變數值(0~65535),可將輸入之時鐘頻率 做除頻動作,進而調整PWM每單位時間速度,公式如下:速 度=72MHz/(Prescaler+1),預設值為71,因為 72MHz為內 部時鐘輸入,除頻之輸入時鐘單位預設1Mhz, 也就是週期為 1/1,000,000秒 Resolution 常數或變數值(0~65535),為直接設定PWM可 用解析度範圍數值。預設值為1000,配合預設Prescaler則為 產生解析度為1000單位之1KHz PWM
Step2 State = SetTm2PwmCh(Channel, Enable, Mode, Duty); Channel 常數或變數值(0~3),選擇PWM Channel。 Enable 常數或變數值(0~3),0: 關閉輸出,1:開啟輸出1 Channel+Enable 合併選擇 GPIO的Port及Channel Mode 常數或變數值(0~1),0:push pull,1:open drain。 預設值為0 Duty 常數或變數值(0~65535),設定PWM Channel之比 例輸出值。預設值為0
程式說明 // // To generate PWM pulse from Timer2 to control LED // #include "arminno.h" int main(void) { // 選擇Timer2, Default PreScale為72, Resolution為1000 // Timer2 將產生1KHz(1ms cycle)的PWM波形 SetTm2Pwm (); while(1) { // Mode=0; Channel=0; Enable=1, duty = 100us,表示選擇以 PB0 為 控制 LED 的輸出 SetTm2PwmCh(0, 1, 0, 0); // duty cycle = 0 (表示0%輸出的波形) Pause(10000); // 10000, 表示系統延遲1秒 SetTm2PwmCh(0, 1, 0, 65535); //duty cycle = 65535(表示100%輸出 的波形) Pause(10000); // 延遲1秒 } }
各位學習到的是 ... 1. 熟練Keil-C 專案環境 (很重要!) 2. Arminno 程式庫運用 3. Armino GPIO 控制
物聯網系統架構示意圖(回顧...) WebServer (Beaglebone)
ZigBee Coordinator (Arminno)
ZigBee Protocol ZigBee End Devices (Ozone) + Sonar
ZigBee End Devices (Ozone) + Acc
ZigBee End Devices (Ozone) + Servo
ZigBee End Devices (Ozone) + MP3
ZigBee End Devices (Ozone) + Temp
系統流程 - Arminno + ZigBee
BeagleBone
控制指令 (Command)
感測器資料 (Sensor Data)
Arminno
Ozone
Ozone Ozone …
Arminno與ZigBee之間的通訊協定 Armninno 找出所有相同網路的 End-Devices, 並記錄 Short Address (于Arminno 程式中呼 叫 GetAccoList() )
Arminno 程式中將 ShortAddress與Type 作出對應, 以利後續 資料傳送
ZigBee Module
開機時, 自動尋找相同 的Pan ID, 與Channel
ZigBee Module
預先燒錄node type ( 即決定Coordinator或 End-Device)
Ozone
Ozone程式於資料中 中回覆各End-Devices 的Type, 如 Sonar, Compass, MP3等
ZigBee 通訊協定格式內容 1. 選擇 PanID 與 Channel Pan ID = FFFF (default) Channel = 25 (default)
2. Message Format SOP
CMD
LEN
DATA
FCS
SOP (Start of Packet) - 0xFE CMD (Command ID): This is a two byte field (MSByte transmitted first) LEN (Length): This one byte field is the number of bytes in the Data field Data:This is a field which varies in size according to the command FCS (Frame check sequence): This is a one byte computed as an XOR of all the bytes
常用的ZigBee通訊協定指令 CMD_SET_PAN_ID Command CMD 0x00F2
Len
Data(0x0000~0xFFFF)
CMD_SET_Channel Command CMD 0x00F3
Len(0x04)
Channel List
MSG_Send Command Command CMD 0x0043(P2P), 0x0042(Broadcast)
Len
Data
Assoc_List Command & Output CMD 0x0013 CMD 0x1013
Len 0x00 Len
Number of devices
(SA SA) (SA SA)…
Get Short Address Command & Output CMD 0x0005
Len 0x00
CMD 0x1005
02
Short address(HI LO)
參考 "Catcan ZigBee API.doc"
舉例而言,Arminno由ZigBee Coordinator下 "Get Assoc_List"指令 >> FE 00 13 00 13
則將會由ZigBee End-Devices得到以下訊息 << FE 10 13 11 08 93 6D 15 89 2F 25 3C 1B F4 56 BD B2 5A E3 E7 71 D1
17 Bytes Length
8 EndDevices
Check-Sum
End-Device's Short Address
Arminno 程式解說 1. Main.cpp 2. ZigBee.cpp