注:1.這篇文章斷斷續續寫了很久,畫圖技術也不精,難免錯漏,大家湊合看.有問題可以留言. 2.論壇排版把我的代碼縮進全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調制波,通過調整輸出信號占空比,從而達到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過調整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。 如圖所示,假設PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環可以看出,完成一個PWM 周期,共循環255 次。 假設bright=100 時候,在第0~100 次循環中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。 那么說,如果bright=100 的話,就有100 次循環是高電平,155 次循環是低電平。 如果忽略指令執行時間的話,這次的PWM 波形占空比為100/255,如果調整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設置了每次for 循環之后,將bright 加一,并且當bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應該是大家想的比較多的想法。 然后介紹一個簡單一點的。思維風格完全不同。不過對于驅動一個LED 來說,效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個For 循環。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數字IO 口變成PWM 引腳。 當一片Arduino 要同時控制多個PWM,并且沒有其他重任務的時候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設置 int StartPWMPin = 0, EndPWMPin = 13; //設置D0~D13為PWM 引腳 int PWMResolution = 255; //設置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環是為14盞燈做漸亮的。每次Arduino loop()循環, //brights 自增一次。直到brights=255時候,將brights 置零重新計數。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計數一個PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳 { if(i < brights[j])\ 所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
上傳時間: 2013-10-08
上傳用戶:dingdingcandy
色環電阻識別小程序V1.0--功能說明: 1、能直接根據色環電阻的顏色計算出電阻值和偏差; 2、能根據電阻值,反標電阻顏色; 3、支持四環、五環電阻計算; 4、帶萬用表直讀數; 色環電阻識別小程序--使用說明: 1、選擇電阻環數;(四環電阻或五環電阻) 2、如果是“色環轉阻值”則:鼠標點擊對應環的顏色,然后點按鈕“色環→阻值” 3、如果是“阻值轉色環”則:輸入相應阻值、單位、精度,點按鈕“阻值→色環” 國家標稱電阻值說明: ★E6±20%系列:1.0、1.5、2.2、3.3、4.7、6.8 E12±10%系列:1.0、1.2、1.5、1.8、2.2、2.7、3.3、3.9、4.7、5.6、6.8、8.2、9.1 E24 I級±5%:1.0、1.1、1.2、1.3、1.5、1.6、1.8、2.0、2.2、2.4、2.7、3.0、3.3、3.6、3.9、4.3、4.7、5.1、5.6、6.2、6.8、7.5、8.2、9.1 使用注意事項: 1、請不要帶電和在路測試電阻,這樣操作既不安全也不能測出正確阻值; 2、請不要用手接觸到電阻引腳,因為人體也有電阻,會使測試值產生誤差; 3、請正確選擇萬用表的檔位(電阻檔)和量程(200、20K、2M量程)
上傳時間: 2013-11-24
上傳用戶:tou15837271233
工程資源管理器 如何創建和使用 LabVIEW 中的 LLB 文件 如何使用 VI 的重入屬性(Reentrant) 用戶自定義控件中 Control, Type Def. 和 Strict Type Def. 的區別 調整控件和函數面板的首選項 在文件夾下直接創建新的 VI 圖標編輯器上的鼠標雙擊技巧 第二章:簡單程序結構 順序結構 選擇結構 事件結構 循環結構 定時結構 緩存重用結構 LabVIEW 中的泛型容器 第三章:控件、常量和運算 LabVIEW 中的數字型數據 1 - 控件和常量 LabVIEW 中的數字型數據 2 - 運算 LabVIEW 中的數字型數據 3 - 數值的單位 第四章:常用的程序結構 幾種簡單的測試程序流程模型 用 LabVIEW 編寫 Wizard 類型的應用程序 1 (LabVIEW 6.1 之前) 用 LabVIEW 編寫 Wizard 類型的應用程序 2 (LabVIEW 6.1 ~ 7.1) 用 LabVIEW 編寫 Wizard 類型的應用程序 3 (LabVIEW 8.0) 用 LabVIEW 編寫 Wizard 類型的應用程序 4 (LabVIEW 8.2 之后) 在 LabVIEW 中使用常量定義 多態 VI 全局變量 傳引用 第五章:調試 LabVIEW 的調試環境 斷點和探針 其它常用調試工具和方法 LabVIEW 代碼中常見的錯誤 查看一段代碼的運行時間 如何調試 LabVIEW 調用的 DLL 第六章:深入理解 LabVIEW G 語言 LabVIEW 是編譯型語言還是解釋型語言 數據流驅動的編程語言 傳值和傳引用 VI 中的數據空間 第七章:編寫優美的代碼 用戶界面設計 1 用戶界面設計 2 - 界面的一致性 用戶界面設計 3 - 界面元素的關聯 用戶界面設計 4 - 幫助和反饋信息 Caption 和 Label 的書寫規范 隱藏程序框圖上的大個 Cluster 制作不規則圖形的子VI圖標 第八章:編寫高效率的代碼 LabVIEW 程序的內存優化 1 LabVIEW 程序的內存優化 2 - 子 VI 的優化 LabVIEW 程序中的線程 1 - LabVIEW 是自動多線程語言 LabVIEW 程序中的線程 2 - LabVIEW 的執行系統 LabVIEW 程序中的線程 3 - 線程的優先級 LabVIEW 程序中的線程 4 - 動態連接庫函數的線程 LabVIEW 的運行效率 1 - 找到程序運行速度的瓶頸 LabVIEW 的運行效率 2 - 程序慢在哪里 LabVIEW 對多核 CPU 的支持 第九章:VI 服務 VI Server (VI 服務) 后臺任務 在 LabVIEW 中實現 VI 的遞歸調用 VB script 打開一個VI 第十章:調用動態鏈接庫 動態鏈接庫導入工具 CLN 的配置選項 簡單數據類型參數的設置 結構型參數的設置 作為函數返回值的字符串為什么不用在 VI 中先分配內存 LabVIEW 中對 C 語言指針的處理 調試 LabVIEW 調用的 DLL 第十一章:面向對象編程(LVOOP) 利用 LabVIEW 工程庫實現面向對象編程 模塊接口 API 的兩種設計方案 LabVIEW 對面向對象的支持 面向對象與數據流驅動的結合 LabVIEW 中的類 第十二章:XControl 一個 XControl 的實例 用 XControl 實現面向組件的編程 第十三章:項目管理
標簽: LabVIEW
上傳時間: 2013-11-01
上傳用戶:ruixue198909
檢測系統的基本特性 2.1 檢測系統的靜態特性及指標2.1.1檢測系統的靜態特性 一、靜態測量和靜態特性靜態測量:測量過程中被測量保持恒定不變(即dx/dt=0系統處于穩定狀態)時的測量。靜態特性(標度特性):在靜態測量中,檢測系統的輸出-輸入特性。 例如:理想的線性檢測系統: 如圖2-1-1(a)所示帶有零位值的線性檢測系統: 如圖2-1-1(b)所示 二、靜態特性的校準(標定)條件――靜態標準條件。 2.1.2檢測系統的靜態性能指標一、 測量范圍和量程1、 測量范圍:(xmin,xmax)xmin――檢測系統所能測量到的最小被測輸入量(下限)xmax――檢測系統所能測量到的最大被測輸入量(上限)。2、量程: 二、靈敏度S 串接系統的總靈敏度為各組成環節靈敏度的連乘積 三、 分辨力與分辨率1、分辨力:能引起輸出量發生變化時輸入量的最小變化量 。2、分辨率:全量程中最大的 即 與滿量程L之比的百分數。四、精度(見第三章)
上傳時間: 2013-11-15
上傳用戶:yy_cn
注:1.這篇文章斷斷續續寫了很久,畫圖技術也不精,難免錯漏,大家湊合看.有問題可以留言. 2.論壇排版把我的代碼縮進全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調制波,通過調整輸出信號占空比,從而達到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過調整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。 如圖所示,假設PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環可以看出,完成一個PWM 周期,共循環255 次。 假設bright=100 時候,在第0~100 次循環中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。 那么說,如果bright=100 的話,就有100 次循環是高電平,155 次循環是低電平。 如果忽略指令執行時間的話,這次的PWM 波形占空比為100/255,如果調整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設置了每次for 循環之后,將bright 加一,并且當bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應該是大家想的比較多的想法。 然后介紹一個簡單一點的。思維風格完全不同。不過對于驅動一個LED 來說,效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個For 循環。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數字IO 口變成PWM 引腳。 當一片Arduino 要同時控制多個PWM,并且沒有其他重任務的時候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設置 int StartPWMPin = 0, EndPWMPin = 13; //設置D0~D13為PWM 引腳 int PWMResolution = 255; //設置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環是為14盞燈做漸亮的。每次Arduino loop()循環, //brights 自增一次。直到brights=255時候,將brights 置零重新計數。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計數一個PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳 { if(i < brights[j])\ 所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
上傳時間: 2013-10-23
上傳用戶:mqien
該類有以下特點: 1.支持字符串中含有各種常用函數,如"7.5+sin(6*ln(8))/exp(5)" 2.具有很好的糾錯能力,能檢查出表達式中括號是否配對、庫函數是否正確 3.運算過程中能檢查并判斷出各種異常,如除數為0、開方函數sqrt(x)中x<0,反余弦函數acos(x)中的x<-1或x>1等 4.支持積分、求方程,算術表達式中可含有x,計算時將用類中的成員變量xx代替
上傳時間: 2015-01-07
上傳用戶:410805624
該類有以下特點: 1.支持字符串中含有各種常用函數,如"7.5+sin(6*ln(8))/exp(5)" 2.具有很好的糾錯能力,能檢查出表達式中括號是否配對、庫函數是否正確 3.運算過程中能檢查并判斷出各種異常,如除數為0、開方函數sqrt(x)中x<0,反余弦函數acos(x)中的x<-1或x>1等 4.支持積分、求方程,算術表達式中可含有x,計算時將用類中的成員變量xx代替
上傳時間: 2015-01-11
上傳用戶:aix008
M個人排成一排,一次報數,報到N的人出列。剩下的人繼續報數,并以出列的人的編號作為新的N值,知道所有的人都依次出列。給出每一輪出列的人和剩下的隊列信息。 人數:10 出列數:3 1 2 3 4 5 6 7 8 9 10 3/4 5 6 7 8 9 10 1 2 9/10 1 2 4 5 6 7 8
標簽:
上傳時間: 2015-02-15
上傳用戶:sunjet
RSA算法 :首先, 找出三個數, p, q, r, 其中 p, q 是兩個相異的質數, r 是與 (p-1)(q-1) 互質的數...... p, q, r 這三個數便是 person_key,接著, 找出 m, 使得 r^m == 1 mod (p-1)(q-1)..... 這個 m 一定存在, 因為 r 與 (p-1)(q-1) 互質, 用輾轉相除法就可以得到了..... 再來, 計算 n = pq....... m, n 這兩個數便是 public_key ,編碼過程是, 若資料為 a, 將其看成是一個大整數, 假設 a < n.... 如果 a >= n 的話, 就將 a 表成 s 進位 (s
標簽: person_key RSA 算法
上傳時間: 2013-12-14
上傳用戶:zhuyibin
人工智能上機實驗題目:自動求解八數碼難題。 八數碼難題:在3×3的方格棋盤上,分別放置了標有數字1,2,3,4,5,6,7,8的八張牌,初始狀態S0,目標狀態如下圖所示,可以使用的操作有:空格左移,空格上移,空格右移,空格下移。
上傳時間: 2013-12-24
上傳用戶:redmoons