作者deo2000 (800IM)
看板ASM
標題Re: [問題] PC經UART傳4組PWM數值給51
時間Mon Aug 13 04:14:24 2012
※ 引述《deo2000 (800IM)》之銘言:
: 如標題
: 之前的控制,我一次都只傳一個字元,所以沒什麼問題。
: 但是現在控制目標不僅僅只於馬達運動方向了,還多了 PWM。
不知報版上有沒有人研究過這篇文章
以單晶微電腦製作之多通道波寬調變信號產生器 劉漢平
http://cc.cust.edu.tw/~hoppertw/34-13.pdf
這篇文章有幾個特色:
˙平行輸出 8 通道 PWM,resolution:100,921Hz
˙用標準型 8051 實現, crystal 也是標準的 11.059MHz
˙CPU 尚有足夠時間讓 UART 修改 8 通道 PWM 的數值
剛好完完全全就是我需要的東西,但是 PDF 中的每張圖片都有缺字,
尤其最重要的流程圖,一個字也沒有,全都只剩下框框,
所有期刊資料庫下載的檔案都一樣。
在只有這些少量訊息狀況下我就先實作無UART的,方法如下
#define SIZE_OF_BIT 8 //通道數
#define RESOLUTION 100 //解析度
unsigned char PWM_PinSequnce[RESOLUTION]={0}; //8*RESOLUTION 的陣列,長 = 解析度
unsigned char PWM_Pin[SIZE_OF_BIT]={100,50,25,13,7,4,2,1}; //各通道 Duty cycle
void SetPWM_PinSequnce(void)
{
1.陣列全部 set 0
2.在通道 i 填入 PWM_Pin[i] 個 1
}
main()
{
SetPWM_PinSequnce();
while(1)
P0=~PWM_PinSequnce[k];
}
1/100週期定時ISR
{
if(k>=99)k=0;
k++;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.167.217
推 WolfLord:就MEMORY MAP而已啊~ 還有,他的ISR如果配合C動作會出錯 08/13 04:21
→ WolfLord:以及ISR的週期數露算了INT發生時還會產生兩週期的跳躍 08/13 04:22
推 WolfLord:你這個C的ISR最少要20周,因為>=要算兩次 08/13 04:26
推 lion21:你的方向正確但是方法要摸索.主要在架構要正確.能驗證 08/13 09:10
→ odahawk:太巧了,連結內文章作者目前離我三公尺遠 08/13 15:05
→ cortex1234:快! 拿橡皮筋射他! (你是小學生啊?) 08/13 15:10
→ WolfLord:丟看看(順手丟出正在切牛排的刀) :P 08/13 18:47
→ MasterChang:這個玩玩可以。真的要做東西的還是用有硬體PWM吧!! 08/13 22:49
→ MasterChang:而且價格便宜到不值得花心力用soft pwm. 08/13 22:50
推 WolfLord:我倒是覺得求學階段多多去用軟體模擬東西,把基礎邏輯能 08/13 23:21
→ WolfLord:力打好,打扎實。純硬派的作法在實做商業產品時時間成本 08/13 23:22
→ WolfLord:相比之下才會便宜。而且我們業界工程師買ic的價格跟學生 08/13 23:23
→ WolfLord:的取得成本差異很大,我是真的不怎鼓勵求學練功階段就有 08/13 23:23
→ WolfLord:什麼功能只要買什麼ic來用就好這種想法,因為什麼都學不 08/13 23:24
→ WolfLord:到,只是占占醬油對於未來要用這些技能求職很不利。 08/13 23:25
→ MasterChang:原PO先把UART接收封包搞定再說吧~~^_^b 08/14 00:13
→ Deltaguita:我都先用軟體模擬驗證 再改硬體@@" 08/14 20:47