STC PCA应用舵机驱动、

STC12C5A60S2 PCA相关寄存器介绍

STC12C5A60S2有两个PCA模块共用一个16位计数器(对应2个寄存器低8位CL和高8位CH),两个模块有各自的16位捕捉/比较器(对应2个寄存器低8位CCAPnL和高8位CCAPnH)。计数器的技术源可以是1/8系统时钟、1/2系统时钟、定时器0溢出或ECI脚输入。
STC12C5A60S2 PCA相关寄存器

STC12C5A60S2 PWM驱动舵机

PCA做PWM时计数器是8位的,16位的计数器和比较器只用到低8位(比较器的高八位也用到,下面会讲到),硬件将计数器的值和捕捉/比较寄存器比较,匹配时将改变PWM引脚电平。以PWM0为例,计数器为CL,比较器为CCAP0L
计数器CL中的值< 比较器CCAP0L中的值是,相应的引脚输出电平;
计数器CL中的值>=比较器CCAP0L中的值是,相应的引脚输出电平。
当计数器CL的值从0xFF到0X00溢出是,比较器的高八位CCPA0H的值将载入CCPA0L,这样就实现了无干扰的更新PWM。
因为舵机的驱动信号要50HZ,所以PCA计数器时钟频率应该是1/(50*256)=78us,不可能改变单片机的晶振频率,所以只能用定时器0的溢出做计数源,对计数源的设置在PCA模式寄存器CMOD的B3-B2位
STC12C5A60S2 PCA 计数源设置寄存器
22.1184dMHZ的晶振下STC12C5A60S2的定时器初始化函数为:

void Timer0Init(void){      //78微秒@22.1184MHz,8位自动重载模式
    ET0 = 1;
    AUXR &= 0x7F;       //定时器时钟12T模式
    TMOD &= 0xF0;       //设置定时器模式
    TMOD |= 0x02;       //设置定时器模式
    TL0 = 0x70;     //设置定时初值
    TH0 = 0x70;     //设置定时重载值
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
}

注意:PCA用定时器做时钟源0的时候只需要定时器的溢出就行,并不需要开始中断,而且事实上,定时器0的中断还能再用。
通过控制信号PWM中高电平的脉宽来控制舵机的角度,脉宽从5ms到15ms分别对应舵机的角度范围的上下限。详细的舵机控制原理请戳舵机的原理和控制-新浪微博 50HZ的PWM高电平20ms一共被分成256份,取到5ms-15ms的只有26份,也就是说8位PWM驱动舵机只能产出25个档位。现在要做的就是确定比较器值和舵机角度的对应关系,舵机电路的误差为是这个值的范围有一定的偏移。
一下为初始化PWM并驱动舵机到某一角度的函数

    CMOD = 0x84; //1000,0100,PCA脉冲时钟源为定时器0
    CCAP1H = CCAP1L = 0xec;//设置比较器和比较器重载寄存器的值
    CCAPM1 = 0x42;//0100,0010//b6
    CR = 1;//开启PCA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值