Arduino 軟件定時輸出PWM或舵機控制信號
????????在使用Arduino開發(fā)硬件程序時往往會碰到PWM輸出引腳與串口或其他硬件擴展的定時器沖突問題,導致PWM信號輸出不穩(wěn)定或不能正常工作。
????????下面使用軟件方式解決PWM定時器沖突問題并且擴展更多的引腳輸出PWM信號。
????????在學習如何編程之前先了解Arduino中的兩個設備運行時間函數(shù)。
????????millis() 獲取程序啟動到當前的毫秒數(shù)
????????micros() 獲取程序啟動到當前的微妙數(shù)
????????先以一個定時LED為例,LED每隔500ms閃爍一次
????????上述程序的核心就是判斷當前mcu是否到達指定時間標志點到達就執(zhí)行對應語句。
????????如果想輸出PWM那么像LED閃爍一樣使用ms為單位的系統(tǒng)時間進行時間標定就不合適了,所以就需要用到micros()函數(shù)達到微秒級控制才能輸出可用的PWM信號。
????????那么使用微妙的系統(tǒng)時間能夠最大輸出多少HZ的pwm信號呢?
????????計算過程也相對簡單以輸出8位PWM為例,8位PWM可輸出0-255強度,那么一分鐘就能輸出1000000/255=3921hz的PWM。10位PWM則為1000000/1023=977可以勉強當1KHZ pwm使用勉強夠用。
????????下面就是程序實現(xiàn)了例如2路PWM輸出8位pwm。
? ? ? ? 注意該程序主要為原理描述,應用過程中還需要加IO初始化等操作,直接使用不輸出任何PWM。
????????上述程序并不是一個相對完美的程序還包含死區(qū)時間設置等問題沒有處理,但是基本原理已經闡述完畢,可以在此基礎上擴展出更多的PWM輸出,或者使用數(shù)組等方式構建更加容易擴展的PWM輸出函數(shù)。