注: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
DesignSpark PCB 第3版現已推出! 包括3種全新功能: 1. 模擬介面 Simulation Interface 2. 設計計算機 Design Calculator 3. 零件群組 Component Grouping 第3版新功能介紹 (含資料下載) 另外, 中文版的教學已經準備好了, 備有簡體和繁體版, 趕快下載來看看! 設計PCB產品激活:激活入品 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum。
標簽: DesignSpark PCB 設計工具 免費下載
上傳時間: 2013-10-19
上傳用戶:小眼睛LSL
DesignSpark PCB 第3版現已推出! 包括3種全新功能: 1. 模擬介面 Simulation Interface 2. 設計計算機 Design Calculator 3. 零件群組 Component Grouping 第3版新功能介紹 (含資料下載) 另外, 中文版的教學已經準備好了, 備有簡體和繁體版, 趕快下載來看看! 設計PCB產品激活:激活入品 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum。
標簽: DesignSpark PCB 設計工具 免費下載
上傳時間: 2013-10-07
上傳用戶:a67818601
附件是一款PCB阻抗匹配計算工具,點擊CITS25.exe直接打開使用,無需安裝。附件還帶有PCB連板的一些計算方法,連板的排法和PCB聯板的設計驗驗。 PCB設計的經驗建議: 1.一般連板長寬比率為1:1~2.5:1,同時注意For FuJi Machine:a.最大進板尺寸為:450*350mm, 2.針對有金手指的部分,板邊處需作掏空處理,建議不作為連板的部位. 3.連板方向以同一方向為優先,考量對稱防呆,特殊情況另作處理. 4.連板掏空長度超過板長度的1/2時,需加補強邊. 5.陰陽板的設計需作特殊考量. 6.工藝邊需根據實際需要作設計調整,軌道邊一般不少於6mm,實際中需考量板邊零件的排布,軌道設備正常卡壓距離為不少於3mm,及符合實際要求下的連板經濟性. 7.FIDUCIAL MARK或稱光學定位點,一般設計在對角處,為2個或4個,同時MARK點面需平整,無氧化,脫落現象;定位孔設計在板邊,為對稱設計,一般為4個,直徑為3mm,公差為±0.01inch. 8.V-cut深度需根據連板大小及基板板厚考量,角度建議為不少於45°. 9.連板設計的同時,需基於基板的分板方式考量<人工(治具)還是使用分板設備>. 10.使用針孔(郵票孔)聯接:需請考慮斷裂后的毛刺,及是否影響COB工序的Bonding機上的夾具穩定工作,還應考慮是否有無影響插件過軌道,及是否影響裝配組裝.
上傳時間: 2013-10-15
上傳用戶:3294322651
電子發燒友網核心提示:醫療內窺鏡的市場發展帶來了各種挑戰,例如,要求增強功能,更高的精度,更好的處理性能,以及更小的體積等。本文介紹Altera高級醫療內窺鏡系統解決方案,它使用了1080p視頻設計工作臺、DSP 構建模塊、參考設計,以及 Stratix® V、Cyclone® V 和 Arria® V FPGA 等。通過下文介紹,資深專家向您支招,教你懂得如何通過采用基于FPGA的方法來縮短高級醫療內窺鏡系統的開發時間。 引言 對內窺鏡檢查的需求在不斷增長,同時還需要不斷改進檢查過程,增強醫療設備的功能。全球競爭不斷加劇,導致各種新功能的出現,新市場的變化也非常快,開發周期越來越短,工程團隊必須集中精力提高核心競爭力,加強系統知識。工程師需要靈活的硬件平臺和支持各種平臺的工作臺工具,使他們能夠針對新標準或者標準的變化而對產品進行更新。此外,設計團隊必須更高效的進行開發工作。Altera® 1080p 視頻設計工作臺和28-nm FPGA提供了靈活的系統方法來滿足當前以及不斷發展的功能需求。 不斷增長的全球需求 很多因素導致對內窺鏡檢查的需求越來越強。今后數十年內,世界60歲以上的人口數量將會大幅度增長,對醫療衛生服務的需求也會隨之增長。而且,胃腸道患病人口在不斷增加,需要進行檢查和治療。越來越多的醫生采用內窺鏡檢查方法。很多政府報銷政策鼓勵非置入式治療,這有利于患者更快的恢復,從而降低了治療總成本,患者的體驗會更好。 很多國家增加了在醫療基礎設施上的投入,特別是加大了醫療設備的采購。反過來,這些新市場需求也擴大了對下一代內窺鏡系統的需求。設計團隊體驗到需求的不斷增長,而全球競爭導致他們推遲其產品發布計劃。
上傳時間: 2013-12-19
上傳用戶:xc216
Arduino 是一塊基于開放原始代碼的Simple i/o 平臺,并且具有使用類似java,C 語言的開發環境。讓您可以快速 使用Arduino 語言與Flash 或Processing…等軟件,作出互動作品。Arduino 可以使用開發完成的電子元件例如Switch 或Sensors 或其他控制器、LED、步進電機或其他輸出裝置。Arduino 也可以獨立運作成為一個可以跟軟件溝通的平臺,例如說:flash processing Max/MSP VVVV 或其他互動軟件… Arduino 開發IDE界面基于開放原始碼原則,可以讓您免費下載使用開發出更多令人驚奇的互動作品。 什么是Roboduino? DFRduino 與Arduino 完全兼容,只是在原來的基礎上作了些改進。Arduino 的IO 使用的孔座,做互動作品需要面包板和針線搭配才能進行,而DFRduino 的IO 使用針座,使用我們的杜邦線就可以直接把各種傳感器連接到DFRduino 上。 特色描述 1. 開放原始碼的電路圖設計,程式開發界面免費下載,也可依需求自己修改!! 2. DFRduino 可使用ISP 下載線,自我將新的IC 程序燒入「bootloader」; 3. 可依據官方電路圖,簡化DFRduino 模組,完成獨立云作的微處理控制器; 4. 可簡單地與傳感器、各式各樣的電子元件連接(如:紅外線,超聲波,熱敏電阻,光敏電阻,伺服電機等); 5. 支援多樣的互動程式 如: Flash,Max/Msp,VVVV,PD,C,Processing 等; 6. 使用低價格的微處理控制器(ATMEGA168V-10PI); 7. USB 接口,不需外接電源,另外有提供9VDC 輸入接口; 8. 應用方面,利用DFRduino,突破以往只能使用滑鼠,鍵盤,CCD 等輸入的裝置的互動內容,可以更簡單地達成單人或多人游戲互動。 性能描述 1. Digital I/O 數字輸入/輸出端共 0~13。 2. Analog I/O 模擬輸入/輸出端共 0~5。 3. 支持USB 接口協議及供電(不需外接電源)。 4. 支持ISP 下載功能。 5. 支持單片機TX/RX 端子。 6. 支持USB TX/RX 端子。 7. 支持AREF 端子。 8. 支持六組PWM 端子(Pin11,Pin10,Pin9,Pin6,Pin5,Pin3)。 9. 輸入電壓:接上USB 時無須外部供電或外部5V~9V DC 輸入。 10.輸出電壓:5V DC 輸出和3.3V DC 輸出 和外部電源輸入。 11.采用Atmel Atmega168V-10PI 單片機。 12.DFRduino 大小尺寸:寬70mm X 高54mm。 Arduino開發板圖片
上傳時間: 2013-10-30
上傳用戶:wangzhen1990
伺服舵機作為基本的輸出執行機構廣泛應用于 遙控航模以及人形機器人的控制中。舵機是一種位 置伺服的驅動器,其控制信號是PWM信號.,利 用占空比的變化改變舵機的位置,也可使用FPGA、 模擬電路、單片機來產生舵機的控制信號舊。應 用模擬電路產生PWM信號,應用的元器件較多, 會增加電路的復雜程度;若用單片機產生PWM信 號,當信號路數較少時單片機能滿足要求,但當 PWM信號多于4路時,由于單片機指令是順序執 行的,會產生較大的延遲,從而使PWM信號波形 不穩,導致舵機發生顫振。
上傳時間: 2013-11-20
上傳用戶:cjh1129
電路板故障分析 維修方式介紹 ASA維修技術 ICT維修技術 沒有線路圖,無從修起 電路板太複雜,維修困難 維修經驗及技術不足 無法維修的死板,廢棄可惜 送電中作動態維修,危險性極高 備份板太多,積壓資金 送國外維修費用高,維修時間長 對老化零件無從查起無法預先更換 維修速度及效率無法提升,造成公司負擔,客戶埋怨 投資大量維修設備,操作複雜,績效不彰
上傳時間: 2013-11-09
上傳用戶:chengxin
醫療保健行業的發展趨勢是通過非置入手段來實現早期疾病預測,降低病人開支,這一趨勢促使醫療成像設備在該領域扮演了越來越重要的角色。為滿足這些行業目標需要的功能,設
上傳時間: 2013-10-21
上傳用戶:suoyuan
介紹了外置式USB無損圖像采集卡的設計和實現方案,它用于特殊場合的圖像處理及其相關領域。針對圖像傳輸的特點,結合FPCA/CPLD和USB技術,給出了硬件實現框圖,同時給出了PPGA/CPLD內部時序控制圖和USB程序流程圖,結合框圖和部分程序源代碼,具體講述了課題中遇到的難點和相應的解決方案。
上傳時間: 2013-10-29
上傳用戶:qw12