發表文章

目前顯示的是 7月, 2017的文章

STM32 ADC 溫溼度計

圖片
溫溼度計 我的第二個專案溫溼度計,還是 ADC 的應用。為什麼還是 ADC 的應用呢?先看看這個溫溼度感應器的腳位定義如下表 Pin Function 1 Ground 2   Vcc – Voltage supply 3   NTC - 溫度 4   Vout - 溼度 腳位 3 的 NTC 是什麼? NTC 是熱敏電阻的一種,是常用的溫度感測器,其原理是量測會隨溫度變化的電阻,再通過溫度係數從而得知溫度讀數。熱敏電阻一般分為 PTC 電阻 (Posistor) 和 NTC 電阻。在網路找了一些資料正規的做法是提供定電流,然後量電壓的值,再計算電阻值求得溫度。 但這次硬體為了方更設計,而此次對於溫度的精度也只有 ± 1 ℃ 的要求,所以硬體採用了分壓原理來計算溫度值,如下圖所示 V 2 就是我們要量的電壓。 由公式可以求得 Vout=(R2/(R1+R2))x Vin ,其中 R1 、 Vin 己知,因此可計算出 R2 值,而 R2 值可根據溫溼度感應器的規格書中 Temp( ℃ ) 對阻值 ( Resistance) 來得到現在的 溫度值。若要推論到小數點下一位,可以插值法的內插法來求得。 腳位 4 讀出的電壓值,要根據溫溼度感應器的規格書的 RH (%) 對 Vout (mV) 的表格 來取出溼度值。

STM32 F10xx 系統時鐘關連圖

圖片
STM32 F10xx 系統時鐘關連圖 當您對 Datasheet 規格書中 STM32 F103xx的系統時鐘中的英文看不懂,又找不到簡中的說明上面的圖可以給您參考,簡體中文改來的。這是敝人用PowerPoint改來的,若有需要可mail來向向我索取ppt檔,但是修改完後需寄給我一份。敝人日後作其它RCC文件說明,還會有其它圖檔應用時才會再分享給大家。

ADC的校正方法

         之前在 " 如何提高STM32 ADC的精度" 一文 中有提及 ADC模組自身相關的誤差,而這個問題可以用校正技術來克服,校正不是用二點來決定一條直線,而是建議大家用最小平方法來決定這條直線。 最小平方法 ,又稱 最小二乘法 ,是一種 數學 優化建模 方法。它通過最小化 誤差 的平方和尋找數據的最佳 函數 匹配。其數學原理可以在高中數學查到,或者在 維基百科 查到 https://zh.wikipedia.org/zh-tw/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95 在EXCEL也可以找到公式來求解。但若要量化的程式,可以在網路上找到程式碼, 同時可用 相關係數來判定校正是否成功。

過採樣技術

前面提過可以用數位濾波方式來減少雜訊對ADC的干擾,其實若加上 利用過採樣增加 ADC 精度,效果是會更好。   過採樣技術提高 ADC 解析度 1 基本原理 ADC 轉換時可能引入很多種雜訊,例如熱雜訊、F雜訊、電源電壓變化、參考電壓變化、.....等各種雜訊 。有很多技術可用於減小雜訊,例如在硬體上在參考電壓 信號線上加旁路電容、或各式濾波器...等,但是 ADC 總是存在量化雜訊的,過採樣其實和數位濾波技術算術平均數是差不多的原理的,那己經有用 數位濾波為何還要討論 過採樣技術,其實如果之前在 數位濾波上採用了中值法再加上 過採樣技術絶對可以提升ADC取樣的重覆性。

數位濾波

數位濾波 1 、限幅濾波法(又稱程式判斷濾波法) 2 、中位值濾波法 3 、算術平均濾波法 4 、遞推平均濾波法(又稱滑動平均濾波法) 5 、中位值平均濾波法(又稱防脈衝干擾平均濾波法) 6 、限幅平均濾波法 7 、一階滯後濾波法 8 、加權遞推平均濾波法 9 、消抖濾波法 10 、限幅消抖濾波法

如何提高STM32 ADC的精度

在 ST 所提供的技術手冊 "How to get the best ADC accuracy in STM32 devicse" 一文中提出造成 ADC 誤差的一些困素,如下述的重點: • 1. ADC 模組自身相關的誤差 – 1.1  偏移誤差   Offset error – 1.2  增益誤差   Gain error – 1.3  微分線性誤差   Differential linearity error – 1.4  積分線性誤差   Integral linearity error – 1.5  總不可調校誤差  Total unadjusted error •   • 2.   與環境相關的 ADC 誤差   – 2.1  電源雜訊  Power supply noise – 2.2  電源穩壓   Power supply regulation – 2.3  類比輸入信號的雜訊   Analog input signal noise – 2.4 ADC 的動態範圍與最大輸入信號幅度嚴重不匹配   ADC dynamic range badly matching the maximum input signal amplitude – 2.5  類比信號源阻抗的影響   Effect of the analog signal source resistance – 2.6  信號源的容抗與 PCB 分佈電容的影響   Effect of the source capacitance and parasitic capacitance of the PCB – 2.7  注入電流的影響   Injection current effect – 2.8  溫度的影響    Temperature influence – 2.9 I/O 接腳間的串擾   I/O pin cross...

STM32 USART 的通訊

STM32 USART 的通訊 剛開紿的第一道功課就是如何和PC的RS232溝通,其實一開始是十分的不順利,因為我們硬體設計的外部振盪器是12M,結果可想而知在PC上看到的是一堆亂碼。在經過一陣研究後發現要做部份修正: 1. 打開你已經建立的 STM32 工程,選擇 Projects- 〉 Options for target *** ,找到 Target 標籤,你會發現,外接的頻率內定還是 8MHz ,我們將外接的振盪器參數修改為 12MHz ,確定保存 Target -> Xtal(Mhz) 處的值 ( 改為 12MHz) 。 2. 在  stm32f10x.h 中 #define HSE_Value    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz*/ 將 ((uint32_t)8000000) 改為  ((uint32_t)12000000) 3. 在 system_stm32f10x.c   中  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);    因此把 RCC_CFGR_PLLMULL9 改為 RCC_CFGR_PLLMULL6 。因12x6=72  或者是 6以下也可以。 在USART 正式通訊成功後,我也迎來我STM32F103xx的第一個應用專案--->ADC,這個案子是要做電壓及電流的量測。

STM32F系統週邊應用

圖片
  緣起 在2010年11月的時候在工作的需求下接解到STM32F103,當時正在寫8051的我被要求去了解這顆 MCU,從不知所措到可以自由應用如今也快應用了七年了, 個人建議要去下載下列三份文件,好好的研究一下,當然也有中文版的只不過是簡中的。 Datasheet 規格書 www.st.com/resource/en/datasheet/stm32f103ze.pdf Firmware library functions, UM0427 13475.pdf https://www.mikrocontroller.net/attachment/65136/13475.pdf how to use the SSTM32F103xx, DocID13902 Rev 16 http://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf CD00171190 eng rm0008.pdf 簡中的網站 http://www.stmcu.org/document/list/index/sort-new/category-147?p=1 http://www.stmcu.org/document/list/index/category-148 (How to get the best ADC accuracy in STM32Fx Series and STM32L1 Series devices) 上圖是STM32 的架構圖,這張圖中在RCC中時脈的宣告是有相當的幫助的。 個人工作上最需要及 急切的是看上 ST STM32F103xx的系統週邊,尤其是ADC,詳列如下。 STM32F 系統週邊應用   USART UART SPI I2C TIM USB  CAN GPIO ADC     ADC...