作者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
1F:推 WolfLord:就MEMORY MAP而已啊~ 还有,他的ISR如果配合C动作会出错 08/13 04:21
2F:→ WolfLord:以及ISR的周期数露算了INT发生时还会产生两周期的跳跃 08/13 04:22
3F:推 WolfLord:你这个C的ISR最少要20周,因为>=要算两次 08/13 04:26
4F:推 lion21:你的方向正确但是方法要摸索.主要在架构要正确.能验证 08/13 09:10
5F:→ odahawk:太巧了,连结内文章作者目前离我三公尺远 08/13 15:05
6F:→ cortex1234:快! 拿橡皮筋射他! (你是小学生啊?) 08/13 15:10
7F:→ WolfLord:丢看看(顺手丢出正在切牛排的刀) :P 08/13 18:47
8F:→ MasterChang:这个玩玩可以。真的要做东西的还是用有硬体PWM吧!! 08/13 22:49
9F:→ MasterChang:而且价格便宜到不值得花心力用soft pwm. 08/13 22:50
10F:推 WolfLord:我倒是觉得求学阶段多多去用软体模拟东西,把基础逻辑能 08/13 23:21
11F:→ WolfLord:力打好,打扎实。纯硬派的作法在实做商业产品时时间成本 08/13 23:22
12F:→ WolfLord:相比之下才会便宜。而且我们业界工程师买ic的价格跟学生 08/13 23:23
13F:→ WolfLord:的取得成本差异很大,我是真的不怎鼓励求学练功阶段就有 08/13 23:23
14F:→ WolfLord:什麽功能只要买什麽ic来用就好这种想法,因为什麽都学不 08/13 23:24
15F:→ WolfLord:到,只是占占酱油对於未来要用这些技能求职很不利。 08/13 23:25
16F:→ MasterChang:原PO先把UART接收封包搞定再说吧~~^_^b 08/14 00:13
17F:→ Deltaguita:我都先用软体模拟验证 再改硬体@@" 08/14 20:47