lidreamer 发表于 2013-9-2 10:44:09

CC2530控制电机舵机,程序源码及分析

在实验室熬了一晚上,现在向大家汇报一下成果:
kwfly的帖子大家可能都看到了,就是关于cc2530的pwm模块控制led的,我不知道大家有没有把他的代码烧进去自己看一下效果,反正我是试了,试的结果是不可以(对事儿不对人)。当然我也不是很清楚他的程序到底出现在什么地方了,毕竟就那几句话!
好的,步入正题:
先贴上代码:


/**********************************************
@工程名:LedControlSystem
@文件名:main.c
@功能:主函数
@作者:月夜之狼
@版权:e梦电子
@QQ:1047145323
@日期:2013-06-04
***********************************************/


void Timer1Pwm_init()
{

PERCFG |= 0x40;//Timer1 I/O Location Alternative 2 location 定时器1 备用位置2 即p1.1

P2DIR = (P2DIR & ~0xC0) | 0x80; // Give priority to Timer 1 第一优先级定时器1通道0-1

P1SEL |= 0x02;//选择P1.1为外设IO


T1CC0L = 0xFF;//溢出值定时器1通道0的比较值
T1CC0H = 0x00;

T1CC1L = 0xff;//比较值 定时器1通道1的比较值
T1CC1H = 0x00;
T1CCTL1 = 0x1c;//比较模式,定时器T1,通道1 模式4比较后切换输出

T1CTL = 0x0f;//128分频 Module比较计数 up-down
}
首先看第一个寄存器PERCFG:(本人英语有些差,所以手册看的时候都是中英文对照,讲解为了容易理解,所以只用中文版的用户指南)
第一句话就是选用备用位置2,这个kwfly已经讲过了,不在多述!
P2DIR这个寄存器的说明如下:


当你的系统配置了多种资源时,你就需要选择一下优先级了,很多引脚都是有第二功能,甚至第三功能的

T1CC0L = 0xFF;//溢出值定时器1通道0的比较值
T1CC0H = 0x00;
这两句话应该比较容易理解,就是你需要的pwm的溢出值!
有一点请注意,就是我选的对齐方式是中心对齐,也就是你的pwm周期为2*T1CC0*1/fosc ,其中fosc是你设置的系统频率
T1CC1L = 0xff;//比较值 定时器1通道1的比较值
T1CC1H = 0x00;
这个应该也不需要再讲,因为这两个寄存器控制的就是你的pwm波的占空比!
重点看一下这个寄存器吧: T1CCTL1= 0x1c:


这里贴英文的吧
意思就是当计数器的值大于T1CC1,io口输出为高电平,否则为低电平(个人理解,如有错误欢迎指出),然后设置为比较模式

关于 T1CTL = 0x0f这个寄存器,分频那一块不用说了吧,现在主要说说那个up-down模式吧


首先up-down模式的含义是这样的

但是有些宅友可能会纳闷哦,这么多模式,为什么你月夜之狼一定要选择up-down模式呢?
不急,听我慢慢解释:

咱的标题是电机、舵机的pwm驱动,所以是需要选择中心对齐的。

就是这样!!!
所以本帖到此完毕!!!希望大家多多关注e梦电子,多多关注月夜之狼!!
另外:英语真的很重要!!!

lidreamer 发表于 2013-9-2 10:44:44

有几个寄存器的图片没有贴上去,望大家海涵
页: [1]
查看完整版本: CC2530控制电机舵机,程序源码及分析