ppm訊號就是將多個pwm訊號放在一起傳輸,乙個ppm的週期為20ms,其中乙個通道訊號的範圍為1~2ms,所以乙個ppm訊號,最多可以傳輸10個通道的pwm訊號。
ppm訊號以0.5ms的低電平訊號代表乙個通道的起始訊號,其後的高電平訊號,範圍在0.5~1.5ms,代表該通道的pwm占空比。
在所有的通道訊號結束之後,用乙個0.5ms的低電平訊號,代表結束。此時,時間未滿20ms的,剩下時間用高電平填充。
明白了原理,我們就思考一下,用微控制器怎麼模擬輸出?
首先採用定時器,在定時中斷時去改變ppm輸出引腳的電平狀態。且在中斷發生時,改變定時器的重裝載值,也就是改變這個電平訊號的持續時間。下面,我以gd32f130微控制器來模擬輸出四通道的ppm訊號。
//定時器初始化與ppm輸出引腳初始化
void ppm_init(void)
gd32f130的定時器2時鐘是72mhz的 ,所以將其72分頻,獲得1mhz的時鐘,即每記乙個數,就是1us。
timer_baseinitparastructure.timer_prescaler = 72-1; /* 1mhz */
前面,我們說過,通道起始是乙個0.5ms的低電平訊號,所以,首先輸出乙個低電平,在定時500u中斷發生後去改變它的狀態。
下面是定時中斷函式
//輸出ppm訊號
u8 ppm_count=1; //步驟計數
u16 toal_time=0;//總的通道高電平時間
extern u16 ppm_data[4];//通道搖桿的ad取樣資料
void tim2_irqhandler(void)
}
第一通道的起始訊號0.5ms低電平結束,根據搖桿通道的ad取樣值去計算第一通的高電平時間,gd32f130的adc是12位的,若搖桿打到最高,取樣值為4095,根據前面所說的ppm對應高電平應該為1.5ms,所以time=(取樣值/4095)*1000+499,程式裡化簡了。累加通道高電平時間,便於最後計算剩下的高電平時間。呼叫timer_setautoreload(timer2,(u32)time)改變定時器重裝載值,步驟計數加一。
第一通道結束,開始0.5ms的第二通道起始訊號
同1,計算通道二的高電平時間。
四個通道都結束了,以乙個0.5ms的低電平時間結束。
計算剩下的高電平時間,因為一共四通道,所以四個0.5ms的通道起始訊號,加上最後乙個0.5ms的結束訊號,20ms還剩下17.5ms,減去四個通道的高電平累加時間,就是最後的高電平時間
乙個ppm訊號結束了,重新開始下乙個新的ppm訊號。
以上僅為個人理解,實踐使用該程式,可以玩鳳凰模擬器。如有錯誤,請指正。
微控制器筆記 PWM訊號與PPM訊號簡單理解
ppm訊號是航模遙控器輸出的一種標準訊號,從ppm訊號中可以獲取7 9個通道的遙控指令資料。ppm看起來很像pwm,很多模型愛好者對於它們產生了誤解,有些朋友認為ppm和pwm就是一回事,其實不然,下面我們先說明一下它們之間的區別和關係。pwm,是英文pulse width modulation的縮...
stm32模擬輸出PPM訊號
ppm訊號週期為20ms,分成10分代表10個通道訊號,也就是2ms代表乙個訊號。0.5ms代表乙個通道訊號的開始,所以0.5ms 2ms為通道範圍控制。led p1 a 8 io口初始化,這裡就不介紹了,推挽輸出 u16 count 0 u16 pwm count 1000 總計數 週期20ms,...
微控制器如何輸出4 20ma電流訊號?
如上圖所示,是乙個壓控恆流源 vccs vs1來自微控制器dac引腳的模擬電壓訊號。經過r1,c1組成的低通濾波器進行濾波後送往運放,從伯德圖中可以看出該濾波器在 3db增益處對應的截止頻率為1.59k,足以用來濾除高頻數字干擾訊號。運放在深度負反饋條件下具有虛短的特性,dac訊號進入運放的同相輸入...