作者deo2000 (800IM)
看板ASM
标题[问题] PWM 与 UART 的TH1冲突如何解决?
时间Thu Aug 2 20:16:15 2012
我要用 8051 做一个软体的多组 PWM 输出,
方法参照 Worfload
#1BZWffSY 提供的方式,
也就是用 Timer1 中断来做,
而不是像一般书上教的,用 delay(Period-Duty) + delay(Duty)来做
但是我要利用 UART,使 NB 可以动态修改 PWM,
UART 要把 bandrate 设在 TH1(=0xfd;// 9600bps @ 11.059MHz)
Timer1 要把 计时上限 设在 TH1(255-100)
那这样怎麽办? Timer0 又可只用於外部中断
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.13.135
1F:推 WolfLord:T0一样可以内部计时啊,不然用9600做BASE也不是不可以 08/02 20:30
2F:推 WolfLord:利用TX的中断来计时没事就发出NULL送完一个字就是1/9600s 08/02 20:33
3F:→ WolfLord:啊~ 说错了,TX事大约1/960 秒才对 XD 08/02 20:34
4F:→ deo2000:9600做Base对写控制程式的人来说不够直觉 08/02 21:25
5F:→ deo2000:而且用Tx一个字元中断的话,PWM 频率不是会很低? 08/02 21:28
6F:→ deo2000:1/960秒≒1mS,解析度100的话输出只有10Hz,对吗? 08/02 21:30
7F:推 WolfLord:不一定要100啊~ 一般16阶一经很够用了。要精密的话还是 08/02 22:46
8F:→ WolfLord:用T0吧~ T0可以设定趋近200uS,然後衍生一些计时器 08/02 22:47
9F:→ WolfLord:这样就很好用了 ^^;; 08/02 22:47
10F:→ WolfLord:如果希望更快,建议换用22.1184。你得留一些Mcycle给ISR 08/02 22:48
11F:→ deo2000:我照WolfLord的方法写了个应该有100Hz的PWM,可是眼睛还是 08/02 23:37
12F:→ deo2000:能感觉到LED有微微快速闪动耶,到底是哪里拖慢了呢? 08/02 23:37
13F:推 WolfLord:LED要眼睛看不清楚,闪动通常最少要快过於 1/20秒,你改 08/02 23:38
14F:→ WolfLord:八阶看看 08/02 23:39
15F:→ deo2000:刚刚改16阶就ok了,不过最终目的是要控制DC马达,这样不知 08/02 23:41
16F:→ deo2000:到用来做控制够不够细 08/02 23:41
17F:→ deo2000:100Hz 比 (1/20秒)/周 快五倍耶! 08/02 23:43
18F:推 WolfLord:你试看看罗,其实马达反应很慢的。像我在控制CNC规格上是 08/02 23:43
19F:→ WolfLord:256阶,但是操作指令就经常只是255,140,80,20,0这几个 08/02 23:44
20F:→ WolfLord:另外,你也可以在云台上面装检角器,然後只送角度,让 08/02 23:46
21F:→ WolfLord:8051自己控制,这样应该动作会更顺畅。 08/02 23:47
22F:→ deo2000:用encode的话,我题目整个就改掉了(惊) 08/02 23:50
23F:→ WolfLord:那...合十(装死) 08/03 00:15
24F:推 ksmrt0123:你用那一颗51啊? 说不定有 timer2 08/03 09:11
25F:→ deo2000:我是有52可用,但是我没仔细研究过Timer2... 08/03 10:23
26F:→ deo2000:好想直接用W79E82x有硬体PWM,可是没华邦烧录器 08/03 10:25
27F:→ Deltaguita:要不要考虑功能强大的STC 系列? 08/04 00:01
28F:推 WolfLord:其实我觉得deo的需求用4051都太大颗了:P 08/04 00:56
觉得太大颗是因为您功力深厚阿!
我了解对工具熟悉的时候,就可以用很简单的硬体做到相对复杂的事情.
像我这个专题还有CUDA跟物件追踪的部分要克服,很想找个内建2*PWM的MCU直接搞定马达
※ 编辑: deo2000 来自: 118.168.13.135 (08/04 01:05)