2013年4月29日 星期一

[STM32F3] Free-RTOS 命名規則



建議看free-RTOS的時候,第一件事先了解他的命名規則,或許可以更快速的了解變數與副程式。通常變數的命名規則為:




PortCHAR: char




PortSHORT: short




PortLONG: long




portBASE_TYPE, 也就是由MCU決定16bitMCU就是16bit 32bit MCU就是32bit)




 




副程式的命名規則:




u: unsigned




l: long




s: short




c: char




p: point


 




pc: return point char




v: return void




x: return variable(這邊通常是return portBASE_TYPE




 




常用mcaco常數:




pdTRUE定義: 1




pdFALSE定義: 0




pdPASS定義: 1




pdFAIL定義: 0




 




通常有些macro會做集中的處理,在定義上也會有些特別:




port (for example, portMAX_DELAY) 定義在portable.h




task (for example, taskENTER_CRITICAL())定義在task.h




pd (for example, pdTRUE) 定義在projdefs.h




config (for example, configUSE_PREEMPTION) 定義在FreeRTOSConfig.h




err (for example, errQUEUE_FULL) 定義在projdefs.h




 




先了解一下命名規則,在看code的速度上,應該可以事半功倍才是。





2013年4月25日 星期四

[工商時間] MPU-9150 九軸感測器






由於近幾年來MEMS(微機電感測器)的快速進步,導致現在的很多感測器都縮小進入一顆小顆的IC裡面。MPU-9150內部包含了三軸陀螺儀,三軸加速規和三軸電子指北針,讓一顆IC就擁有九軸的感測器,讓使用的用途更廣且更好用。













這是我們自行製作的MPU-9150九軸感測器模組。利用I2C通訊,即可取得九軸感測器的訊號。








這是我們的露天賣場:




在你購買後,我們會提供STM32F3的sample code 與相關資料。


2013年4月24日 星期三

[工商時間] Arduino 電子實習板




我們替朋友設計了一套arduino UNO專用的材料包套件,可以給有興趣的人自行焊接,或是買整個焊接好的模組,操作簡單的電子零件控制。









PCB layout














PCB 尺吋:










焊完後的教具成品:










材料包內容:












另含有:





810mm的塑膠六角柱





4M3螺帽





4M 3L 8螺絲





215cm杜邦線





1塊泡棉膠(用來固定馬達)





1條多鈊線(用線焊接馬達正極與負極)


 


 


 





元件介紹:





 





電源/開關:




我們在板子上左上方設計了一個SW按鈕,當電源導通時,會觸發電源LED發亮。










LED


 





我們設計了8LED電路供學員可以做跑馬燈或是其他LED的應用實習。





 










按鈕:





我們設計了三組按鍵電路,供學員可以做一些簡單的按鈕實習。










2位元七段顯示器:





我們設計了一個簡單的2位元七段顯示器,為了能讓GPIO可以節省,所以加裝了NPN電晶體,以做掃描控制。










蜂鳴器:





我們設計了一個簡單的蜂鳴器電路,只要用簡單的ON/OFF就可以讓學員發出聲音。在此我們多加裝了電晶體的射極加裝了限流電阻,以降低電流消耗。






   





馬達:





我們設計了一個簡單的馬達電路,讓學員可以做簡單的馬達控制。在此我們多加裝了電晶體的射極加裝了限流電阻,以降低電流消耗。





 


   





CNY70





我們設計了一個簡單的CNY70電路,讓學員可以利用CNY70偵測不同距離下,有不同的A/D輸出變化。





如果想買Arduino 材料包的話,可以參考我們的賣場:


http://goods.ruten.com.tw/item/show?21304238836640








也有焊好的材料實驗套件:


http://goods.ruten.com.tw/item/show?21304238837089







 


其他相關資料可以在此下載:


https://drive.google.com/?usp=chrome_app#folders/0B2FFxTDyyRQAY19BaEo4alFndWs


 






這個套件除了可以用在Arduino以外,也可以使用在3.3V的控制器上,例如8051/PIC/STM32


 


如果有興趣上Arduino的課程,也可以留言給我。






2013年4月12日 星期五

[STM32F3] Free-RTOS discovery 範例



MCU功能愈來愈複雜的情況下,有些專案慢慢的開始已經不是1~2個人處理的來的時候,或者是慢慢已經無法控制好整個MCUTiming。那麼就可以考慮在MCU裡面植入一個OS,而一般的MCU通常都會植入小型的RTOS(real-time operating
system,
即時作業系統),原因是體積小,執行效率高,而且可以做到即時處理的優點,比較常見的有:uC/OS,
Free-RTOS, RTX(Keil),
初學者可以試學uC/OS,這類的資料會比較多,也比較完整,用在教育上也不需要費用,而筆者考慮需要用到商業上,所以選擇了Free-RTOS當作研究的對象,有興趣的話,也可以參考Free-RTOS的官方網頁介紹。http://www.freertos.org/



 




筆者在https://sites.google.com/site/stm32f3discovery/找到已經有人對STM 32F 3Free-RTOS修改,但因為此作者是使用GCC做為他的compiler/debug環境,筆者習慣的是MDK(Keil)系統,所以就整理了一下MDK的環境,如果有人有興趣的話,可以載回去玩一下。


 




載點:https://docs.google.com/file/d/0B2FFxTDyyRQAajhBNm1uQWFDcEU/edit


 




筆者會試著導入Free-RTOS在自己的專案,但因為一直找不到需要Free-RTOS的範例,如果有人有興趣或是有想要做的題目,也請告訴筆者。




 




另外最近大陸那邊也有自己的一套RTOShttp://www.rt-thread.org/phpBB3/」,聽說也是非常的火熱。



2013年4月10日 星期三

[STM32F3 教學] ST範例程式




一般來說,筆者會去載STM32F3的範例程式來做練習,載點可在此下載





http://www.st.com/web/en/catalog/tools/PF258154









ST很貼心的把所有的檔案都整理好了,你只要操作他的\Project\Peripheral_Examples 下面的範例程式,就可以了。如果在使用上有問題的話,可以下載UM1581:
Description of STM32F30xx/31xx Standard Peripheral Library
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00068049.pdf


 


 


在這一份使用手冊上,就會很清楚的介紹這一包範例程式的組成架構,還有當初ST如何設計這個範例程式的,那麼你就可以很快的抽換你這顆MCU相對應的硬體層/硬體抽象層/應用層。











下圖就是這一包範例程式的資料夾架構了,ST就是照著這樣的架構,在擺放他們家的資料,因為資料很多,所以一開始會覺得漫無目標的,也很難學習,當上手後,就慢慢的會有感覺了。











當你需要做自己的專案時,你只要拿著筆者當初整理好的Sample code




https://docs.google.com/file/d/0B2FFxTDyyRQAMkhQQ3dLZ0VtZk0/edit




把裡面的幾個檔案換掉就可以了,這樣就可以不用帶著又臭又長的source code四處趴趴造了。


 


 


差不多STM32F3的模組介紹就到此告一段落了,之後會盡量設計一些比較有趣的單元來和大家分享,例如:如果利用STM32F3開發板來控制直流馬達/步進馬達……等。如果大家有什麼特別想知道的,或是想做什麼題目的話,可以和我討論。


 


 


 


[STM32F3 教學] TIM 介紹



STM32系列有一個很大的特色,就是這系統的MCU就只會有由一特殊的介面(如:USART/I2C/SPI)和類比周邊(ADC/DAC/OPA……等)然後再加一個Timer來組成,和外面的8051/PIC不太一樣的地方在於,會找不到PWM/Input
capture
相關之類的模組,事實上ST把這類利用Timer可以做到的功能,都整合在一起了,所以在看SPEC的時候,就要格外特別的小心,因為也不是每一個Timer模組都支援了所有的功能。一般來說,要自己注意自己需要模組做挑選,以下是Timer「可以」擁有的功能:








l         16/32bit /下數計數器



l         Input capture 輸入捕捉



l         Output compare 輸出比較器(簡單的PWM功能)



l         PWM(高階的PWM,如六步方波,互補式PWM)



l         One pulse output 脈波產生器



l         PWM可擁有Dead time 與互補式功能



l         Break input – 煞車系統,當觸發時,把PWM的輸出都設為low level



l         QEI – 4倍解析解碼器,用在馬達AB編碼器上



l         /部觸發功能。





其實筆者最常拿TIMER的模組就是產生下面的PWM訊號,除此之外就是計時的功能了。












下一章:如何練習ST所提供的STM32範例程式來做練習。




2013年4月9日 星期二

[STM32F3 教學] DAC 介紹


        STM32F3這個系列的MCU最高支援了212biDAC,具有以下的特色:




l         兩通道同步/非同步訊號。



l         12bit資料向左/向右對齊與8bit 資料向右對齊模式。



l         三角波產生器。



l         隨機雜訊產生器。



l         /外部訊號觸發器。




下圖是一個自動雜訊產生器的示意圖,下次如果需要自己製作一個隨機變數的話,也可以試著自己用軟體的方式寫寫看。







這個DAC的提供自動組生三角波的功能,筆者還不知道這個需要用在什麼地方,如果知道答案的話,再麻煩告知一下。













現在的MCU功能都很強,連DAC也都內部就擁有了,以往筆者是拿DAC來當作一些資料Debug使用(接示波器),還需要額多放上1~2DAC元件,現在都省了,真的是省事不少。








下一章:TIMER





[STM32F3 教學] ADC 介紹




        ST這次在STM32F3所採用的ADC模組變化比起之前幾代來說,功能和彈性都是比較強大且靈活的。




l         最高12bit 的解析度。




l         ADC模組最高可以支援4組,每組最高可以支援10 channel以上的ADC




l         ADC1/ADC2 ADC3/ADC4並可以設計成同步取樣以及同步轉換的功能。




l         12 bits轉換的速度上,最快可以執行在5MSPS








STM32ADC,是我目前用過的MCU裡面,功能真的是最多,也是最強的,



l         2 channel同步取樣,轉換。



l         2 channel 交錯取樣,轉換,以加快取樣轉換速度。



l         在一般(regular
mode)
掃描的情狀下,想額外插入的通道(injection
mode)



l         支援內外部的觸發(trigger)訊號,並提供regularinjection mode



l         內部可以偵測電池電壓模組,溫度模組,ADC 參考電壓,OPA模組訊號。





下圖是STM32F3 ADC模組的架構圖,看圖就知道這是一個非常複雜的架構,通常筆者會比較注意內外部可用的訊號。










至於外部的ADC訊號到底屬於Fast channel 還是slow channel,就必需靠下圖來取得了。











這是一個同步取樣和轉換的示意圖,也就是在同一個時間下,可以同時取樣與轉換不同通訊的ADC









另一個功能就是,當Master ADC 取樣完後,在轉換過程式,利用slave ADC 來做取樣的動作,這樣就可以加快單一通道的資料量,理想上,這樣的速度可以快了2倍。









所謂的插入通道(injection
channel)
就是在一般設定的訊號下,突然插入一個訊號,來做取樣與轉換的動作。 這樣的需求會讓程式的攢寫變的比較簡單,只要一開始設定好需要插入的ADC channel,不管是利用程式上或是硬體上觸發,都可以插入臨時需要轉換的通道。









STM32F3的內建就可以做OPA放大,並引入內部ADC訊號,我想這樣的架構,是一個非常實用,且省成本的架構,把類比訊號引入OPA訊號上,可以由程式調整放大部率,並輸出至A/D訊號上,這樣就可以很有效的增加ADC的有效範圍了。不錯的架構吧,不知道您心動了嗎?











注:因為STM32F3ADC實在是太複雜了,所以只好先簡單介紹一下。










下一篇:DAC 介紹