黄工无刷电机学习
直播中

大红枣

11年用户 630经验值
私信 关注
[问答]

如何用STC12单片机内部PWM产生脉冲方波?

如何用STC12单片机内部PWM产生脉冲方波?

回帖(1)

林剑连

2021-10-18 11:36:26
这个程序是以前比赛时候准备的,方便用来调电机转速,也可作呼吸灯等。





IN1和IN2是控制端(电机A) ,控制高低电平可以来控制正反转。没有调速端口。一个方案是在供电端给不同pwm进行调速,可io供电能力有限,速度可能会慢。所以另一个方案就是一个输入端口给pwm,改变电平;另一端输入口给固定电平就可以进行调速。


stc12c5a60s2内部有2个pwm输出io口。根据芯片手册可知。
具体寄存器配置请多多自行参照手册。学会理解别人代码进行自学。这样才能进步。我记得这个pwm模块程序也是我上网查改的。

#include
#include
#define uint unsigned int
#define uchar unsigned char
void pwm_init() //PWM初始化函数,初始占空比为0
{
        CMOD=0x02;        //0000 0010 空闲时不计数,不产生中断,时钟源为fosc/2,因此输出占用率为fosc/512
        CL=0x00;
        CH=0x00;
        CCAPM0=0x42; //0100 0010, 8位 PWM
        CCAP0L=0x00;
        CCAP0H=0x00; //PWM实现方法,因为是8位,CL基础计数器从0xFF递减到0x00,溢出后将CCAP0H的值加载到CCAP0L,若CL递减过程中,若大于CCAP0L,则输出高电平,否则为低电平
        CCAPM1=0x42;
        CCAP1H=0x00;
        CCAP1L=0x00;
        CR = 1;          //开启PCA计数器
}
void pwm_set(uchar x,uchar y) //占空比设置函数   引脚为P1.3和P1.4
{
                CCAP0H=x*2.55;    //占空比公式D=(256-CCAPnH)/ 256(8位PWM模式)
                CCAP0L=x*2.55;                //乘2.55转换为0-100%
                CCAP1H=y*2.55;
                CCAP1L=y*2.55;
}
void main()
{
        pwm_init();
        while(1)
        {
        pwm_set(0,20);    //数值反放则电机方向反转 (20,0);
        }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分