注:1.這篇文章斷斷續(xù)續(xù)寫了很久,畫圖技術(shù)也不精,難免錯漏,大家湊合看.有問題可以留言. 2.論壇排版把我的代碼縮進(jìn)全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調(diào)制波,通過調(diào)整輸出信號占空比,從而達(dá)到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調(diào)制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調(diào)光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數(shù)字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調(diào)壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現(xiàn)難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過調(diào)整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。 如圖所示,假設(shè)PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現(xiàn)難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的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 循環(huán)可以看出,完成一個PWM 周期,共循環(huán)255 次。 假設(shè)bright=100 時候,在第0~100 次循環(huán)中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環(huán)里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。 那么說,如果bright=100 的話,就有100 次循環(huán)是高電平,155 次循環(huán)是低電平。 如果忽略指令執(zhí)行時間的話,這次的PWM 波形占空比為100/255,如果調(diào)整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設(shè)置了每次for 循環(huán)之后,將bright 加一,并且當(dāng)bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應(yīng)該是大家想的比較多的想法。 然后介紹一個簡單一點的。思維風(fēng)格完全不同。不過對于驅(qū)動一個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 循環(huán)。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數(shù)字IO 口變成PWM 引腳。 當(dāng)一片Arduino 要同時控制多個PWM,并且沒有其他重任務(wù)的時候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設(shè)置 int StartPWMPin = 0, EndPWMPin = 13; //設(shè)置D0~D13為PWM 引腳 int PWMResolution = 255; //設(shè)置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環(huán)是為14盞燈做漸亮的。每次Arduino loop()循環(huán), //brights 自增一次。直到brights=255時候,將brights 置零重新計數(shù)。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計數(shù)一個PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳 { if(i < brights[j])\ 所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調(diào)整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
上傳時間: 2013-10-23
上傳用戶:mqien
交通燈控制器實驗報告--- SOC課程設(shè)計 一.實驗功能 該交通燈控制器,能完成以下功能: ⒈ 顯示交通燈的紅、黃、綠的指示狀態(tài) 用L1、L2、L3作為綠、黃、紅燈; ⒉ 能實現(xiàn)正常的倒計時功能: 用M2、M1作為南北方向的倒計時顯示器,顯示時間為紅燈55秒,綠燈30秒,黃燈15秒。 ⒊ 能實現(xiàn)特殊狀態(tài)的功能 (1) 按S1后,能實現(xiàn)特殊狀態(tài)功能; (2) 顯示器M2M1閃爍; (3) 計數(shù)器停止計數(shù)并保持在原來的狀態(tài); (4) 顯示紅燈狀態(tài); (5) 特殊狀態(tài)解除后能繼續(xù)計數(shù); ⒋ 能實現(xiàn)總體清零功能 按S2后,系統(tǒng)實現(xiàn)總清零,計數(shù)器由初始狀態(tài)計數(shù),對應(yīng)狀態(tài)的指示燈亮。
上傳時間: 2013-12-21
上傳用戶:leehom61
VC源代碼管理軟件之 CodeHelp(無源碼)作者姓名:祝小斌郵件地址:thinkry@263.net開發(fā)環(huán)境:VC6.0 Windows 2000測試環(huán)境:Windows 2000 功能介紹:========== 概 述========== 程序員可能常有這樣的煩惱:編程中經(jīng)常需要去查閱以前寫過的代碼片斷,而每次打開代碼所在的工程既費時又費力。 知識管理越來越被大家所重視,源代碼也應(yīng)該做為一種知識資源,納入知識管理體系中去。CodeHelp 是為了方便程序員更好的管理自己的源代碼而寫的一款免費軟件。 利用 CodeHelp,可以方便的管理你的各種技術(shù)資料和源代碼。 CodeHelp 以目錄樹來管理代碼文件,你可以自由定義目錄,并能夠自由移動修改,支持無限分支延伸。采用分段讀入方式,能支持超大的目錄樹。 CodeHelp 支持“語法突出”方式顯示代碼(目前僅支持C/C++)。能高亮顯示源代碼中的“注釋”、“關(guān)鍵字”和“字符串”,和在 VC6.0 看起來完全一樣。 CodeHelp 采用 TabView 來顯示多個源代碼文件,查看起來非常方便。
標(biāo)簽: Windows 2000 CodeHelp thinkry
上傳時間: 2015-01-28
上傳用戶:huql11633
這里以開始定義的PASCAL語言子集的源程序作為詞法分析程序的輸入數(shù)據(jù)。在詞法分析中,自文 件頭開始掃描源程序字符,一旦發(fā)現(xiàn)符合“單詞”定義的源程序字符串時,將它翻譯成固定長度的單 詞內(nèi)部表示,并查填適當(dāng)?shù)男畔⒈怼=?jīng)過詞法分析后,源程序字符串(源程序的外部表示)被翻譯成 具有等長信息的單詞串(源程序的內(nèi)部表示),并產(chǎn)生兩個表格:常數(shù)表和標(biāo)識符表,它們分別包含 了源程序中的所有常數(shù)和所有標(biāo)識符。
上傳時間: 2013-12-28
上傳用戶:英雄
系統(tǒng)設(shè)計原則 根據(jù)業(yè)務(wù)特點和系統(tǒng)目標(biāo),確定以下的系統(tǒng)設(shè)計原則: 1. 建立大會計的框架結(jié)構(gòu)。所有相關(guān)業(yè)務(wù)的帳務(wù)均按照國家會計制度的原則來處理。整個 財政局的主要業(yè)務(wù)可以認(rèn)為是一個大的財務(wù)體系。 2.實現(xiàn)業(yè)務(wù)與帳務(wù)有機結(jié)合。 3.以業(yè)務(wù)為基礎(chǔ),管理貫穿其中。通過預(yù)算及計劃控制收入及支出。 4.通過業(yè)務(wù)數(shù)據(jù)的采集、統(tǒng)計和分析,指導(dǎo)業(yè)務(wù),輔助領(lǐng)導(dǎo)決策。 5.實現(xiàn)業(yè)務(wù)處理,再考慮優(yōu)化管理。 6.考慮財政體制的變更對業(yè)務(wù)處理所帶來的影響,系統(tǒng)有足夠的適應(yīng)性。 7.實現(xiàn)對各級財務(wù)的監(jiān)督和管理(下級財政、行政事業(yè)單位的財務(wù)計劃與監(jiān)督)。 8.實現(xiàn)收入和支出的計劃控制。收入的對帳、支出的核準(zhǔn)、使用的監(jiān)督。 9.實現(xiàn)業(yè)務(wù)處理與政府辦公的有機結(jié)合。
標(biāo)簽: 設(shè)計原則
上傳時間: 2013-12-18
上傳用戶:zhouchang199
本書以X86系列微機為背景,從簡單的Hello程序開始,系統(tǒng)而詳細(xì)地闡述了X86微機匯編語言編程的各種基礎(chǔ)知識和編程技巧,內(nèi)容涉及到數(shù)據(jù)表示、存儲器管理、各種數(shù)據(jù)類型、過程、與匯編語言相關(guān)的體系結(jié)構(gòu)、控制結(jié)構(gòu)、文件、宏指令、位處理指令、字符串指令、MMX指令、類和對象,以及混合語言編程等,尤其是在高級匯編語言(HLA)方面,該書給予了細(xì)致深入的講解。對于有意學(xué)習(xí)X86匯編語言編程的程序員來說,這是一本難得的好書。 本書的作者Randall Hyde在大學(xué)中教授匯編語言十多年,并且開發(fā)了好幾個商用軟件,具有豐富的匯編語言開發(fā)經(jīng)驗。該書的英文電子版受到了成千上萬的網(wǎng)站和高級程序員的高度評價,已經(jīng)成為了高級匯編語言編程方面的一本經(jīng)典之作。雖然該書的出版時間不長,但在Amazon上為該書作出評價的人很多,而且?guī)缀跛械娜硕冀o予5星的評價,可見其內(nèi)容之好。筆者相信,隨著時間的推移,它在程序員中的影響回越來越大
上傳時間: 2015-02-25
上傳用戶:xuanjie
系統(tǒng)的設(shè)計重點 本章主要介紹了使用PowerBuilder 9.0開發(fā)小型客房管理系統(tǒng)的過程,通過本章的學(xué)習(xí),讀者應(yīng)該熟悉PowerBuilder 9.0中TreeView控件和鼠標(biāo)右鍵菜單的使用方法,掌握GroupBox、SingleLineEdit、CommandButton、RadioButton、PictureButton等控件的異同,進(jìn)一步了解數(shù)據(jù)窗對象各種顯示風(fēng)格的適用場合。 系統(tǒng)要完成的任務(wù) ¯ 系統(tǒng)維護(hù):包括公司信息、操作員管理、修改密碼、交接班管理、字典管理。 ¯ 基本信息:對客房管理系統(tǒng)所需的各項基本信息進(jìn)行管理(包括新增、修改、刪除),這些基本信息是系統(tǒng)必需的,錄入業(yè)務(wù)單據(jù)前必須先錄入基本信息,包括客房信息、其他服務(wù)等。 ¯ 業(yè)務(wù)管理:包括客房預(yù)訂、入住登記、續(xù)住、換房、轉(zhuǎn)賬、其他服務(wù)提供、留言板、意見簿、走客結(jié)賬、欠費結(jié)算。 ¯ 查詢統(tǒng)計:包括歷史單據(jù)、預(yù)訂表、在住客人表、換房查詢、轉(zhuǎn)賬查詢、日經(jīng)營狀況、月收入狀況、客房利用率、實時房態(tài)。
標(biāo)簽: PowerBuilder 9.0 管理系統(tǒng)
上傳時間: 2015-03-06
上傳用戶:zuozuo1215
實例有關(guān)說明: 數(shù)據(jù)源:本實例使用的數(shù)據(jù)源在本章實例MyOdbcSmpl目錄中,數(shù)據(jù)源為ACCESS數(shù)據(jù)源,數(shù) 據(jù)文件為Mydb.mdb。請根據(jù)本章2.4.1創(chuàng)建ODBC數(shù)據(jù)源中所指示的ODBC數(shù)據(jù)源管 理器(ODBC32.exe)來創(chuàng)建和配置數(shù)據(jù)源MyDB(也可以命名為其他名稱)。 執(zhí)行結(jié)果:本章實例的執(zhí)行結(jié)果MyOdbcSmpl目錄中的可執(zhí)行文件MyOdbcSmpl.exe。在數(shù)據(jù) 源中選擇剛配置的MyDB,在數(shù)據(jù)表或視圖中選擇要查詢的表或視圖,選擇查詢的 列,如果有查詢條件,請在查詢條件中輸入,最后確定是否輸出顯示查詢結(jié)果, 缺省為顯示,單擊“執(zhí)行”按鈕,執(zhí)行查詢并顯示查詢結(jié)果,在SQL語句框中顯 示執(zhí)行的查詢。
標(biāo)簽: MyOdbcSmpl 數(shù)據(jù)源 目錄
上傳時間: 2015-03-08
上傳用戶:lunshaomo
本ppt介紹了多層C/S型數(shù)據(jù)庫應(yīng)用,多層數(shù)據(jù)庫應(yīng)用的結(jié)構(gòu),典型的三層C/S結(jié)構(gòu),B/S型數(shù)據(jù)庫應(yīng)用,典型的B/S結(jié)構(gòu)(三層),結(jié)合三層C/S的B/S結(jié)構(gòu)(四層),使用多層分布式應(yīng)用結(jié)構(gòu)的優(yōu)勢,高可靠性的多層分布式結(jié)構(gòu)等方面的內(nèi)容
標(biāo)簽: 多層 數(shù)據(jù)庫
上傳時間: 2015-03-15
上傳用戶:songnanhua
Hopfield 網(wǎng)——擅長于聯(lián)想記憶與解迷路 實現(xiàn)H網(wǎng)聯(lián)想記憶的關(guān)鍵,是使被記憶的模式樣本對應(yīng)網(wǎng)絡(luò)能量函數(shù)的極小值。 設(shè)有M個N維記憶模式,通過對網(wǎng)絡(luò)N個神經(jīng)元之間連接權(quán) wij 和N個輸出閾值θj的設(shè)計,使得: 這M個記憶模式所對應(yīng)的網(wǎng)絡(luò)狀態(tài)正好是網(wǎng)絡(luò)能量函數(shù)的M個極小值。 比較困難,目前還沒有一個適應(yīng)任意形式的記憶模式的有效、通用的設(shè)計方法。 H網(wǎng)的算法 1)學(xué)習(xí)模式——決定權(quán)重 想要記憶的模式,用-1和1的2值表示 模式:-1,-1,1,-1,1,1,... 一般表示: 則任意兩個神經(jīng)元j、i間的權(quán)重: wij=∑ap(i)ap(j),p=1…p; P:模式的總數(shù) ap(s):第p個模式的第s個要素(-1或1) wij:第j個神經(jīng)元與第i個神經(jīng)元間的權(quán)重 i = j時,wij=0,即各神經(jīng)元的輸出不直接返回自身。 2)想起模式: 神經(jīng)元輸出值的初始化 想起時,一般是未知的輸入。設(shè)xi(0)為未知模式的第i個要素(-1或1) 將xi(0)作為相對應(yīng)的神經(jīng)元的初始值,其中,0意味t=0。 反復(fù)部分:對各神經(jīng)元,計算: xi (t+1) = f (∑wijxj(t)-θi), j=1…n, j≠i n—神經(jīng)元總數(shù) f()--Sgn() θi—神經(jīng)元i發(fā)火閾值 反復(fù)進(jìn)行,直到各個神經(jīng)元的輸出不再變化。
上傳時間: 2015-03-16
上傳用戶:JasonC
蟲蟲下載站版權(quán)所有 京ICP備2021023401號-1