打印
[C语言]

应广八核单片机PFC886mf520+互补带死区6pwm

[复制链接]
592|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
34af9uc|  楼主 | 2021-3-31 10:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
/******************************************PFC886+互补6pwm*******************************************/
/******************************************QQ:774145445**********************************************/
/******************************************快手:共同学习STM8*****************************************/
/****************************************************************************************************/
//                     __________@__________
//              PWM2L-|1 pa2          pa1 20|-PWM2H
//              PWM1L-|2 pa3          pa0 19|-PWM1H
//              pwm0L-|3 pa4          pa7 18|-pwm0H
//                    |4 pa5          pa6 17|
//                    |5 nc            nc 16|
//                    |6 gnd          vdd 15|
//                 k1-|7 pb0          pb7 14|
//                 k2-|8 pb1          pb6 13|
//                 k3-|9 pb2          pb5 12|
//                 k4-|10_pb3_________pb4_11|
#include        "extern.h"
k1                bit                pb.0;
k2                bit                pb.1
k3                bit                pb.2
k4                bit                pb.3
/****************************************************************************************************/
void                zhengxian();                //正弦
void                yanshi();                        //延时
/****************************************************************************************************/
word                a1,b1,c1;                        //abc相

void        FPPA0 (void)
{
.ADJUST_IC        SYSCLK=IHRC/4                //        SYSCLK=IHRC/4
/****************************************************************************************************/
pmode                31;                        ///8/8/8/8/8/8/8/8带宽共享
fppen        =        0xFF;                //8核全开
//有8个核心可以分时全部运行,可以分别干8件事8核真爽!
/****************************************************************************************************/

$                k1                in,pull;                //输入上拉电阻
$                k2                in,pull;
$                k3                in,pull;
$                k4                in,pull;
/****************************************************************************************************/
//$                pwmgc                enable,updown,reset;
//$                pwmgm                protection_enable,ihrc,/16;
pwmgc                =0b1_0_1_1_0000;                //PWMG控制寄存器
//7,停用启用6,输出状态5,中心排列模式4,PWM计数器清零

//pwmgm                =0b0_0_1_0_10_10;                //PWMG分频寄存器
pwmgm                =0b0_0_1_0_10_11;                //PWMG分频寄存器
//7,上臂反极性6,下臂反极性5,臂保护4,臂保护模式32,PWM时钟源10,PWM分频

pwmgc1                =0b1_11_0_01_10;                //PWMG控制寄存器1
//7,互补发生器65,三相电机4,读零32,PWM5.PWM+|10,PWM4.PWM-

pwmgc2                =0b01_10_01_10;                //PWMG控制寄存器2
//76,PWM3.PWM+|54,PWM2.PWM-|32,PWM1.PWM+|10,PWM0.PWM-

pwmcubl                =0b1111_0000;                //pwm上限寄存器l
pwmcubh                =0b1111_1111;                //pwm上限寄存器h

//pwmdz                =0b1111_0000;                //死区寄存器
pwmdz                =0b1000_0000;                //死区寄存器//*注意死区占上臂时间需要扣除

//pwm0dtl                =0b1111_0000;                //pwm0占空比低位寄存器//先写低位
//pwm0dth                =0b1111_1111;                //pwm0占空比高位寄存器

//pwm1dtl                =0b0000_0000;                //pwm1占空比低位寄存器//先写低位
//pwm1dth                =0b1000_0000;                //pwm1占空比高位寄存器

//pwm2dtl                =0b1111_0000;                //pwm2占空比低位寄存器//先写低位
//pwm2dth                =0b0000_0000;                //pwm2占空比高位寄存器

/****************************************************************************************************/
while (1)
{
//.delay                400000;
//anjian();

}
}
/****************************************************************************************************/
void        FPPA1 (void)
{
a1                        =0x0f;
b1                        =0x0f;
c1                        =0x0f;
pwm0dtl                =0;
//pwm0dth                =a1;

pwm1dtl                =0;
pwm1dth                =b1;

pwm2dtl                =0;
pwm2dth                =c1;
        while (1)
{
zhengxian();

}
}
/****************************************************************************************************/
void        FPPA2 (void)
{
        goto        $;
}
/****************************************************************************************************/
void        FPPA3 (void)
{
        goto        $;
}
/****************************************************************************************************/
void        FPPA4 (void)
{
        goto        $;
}
/****************************************************************************************************/
void        FPPA5 (void)
{
        goto        $;
}
/****************************************************************************************************/
void        FPPA6 (void)
{
        goto        $;
}
/****************************************************************************************************/
void        FPPA7 (void)
{
        goto        $;
}
/****************************************************************************************************/
/*
void        Interrupt (void)
{
        pushaf;

        if (Intrq.T16)
        {        //        T16 Trig
                //        User can add code
                Intrq.T16        =        0;
                //...
        }

        popaf;
}
*/
/****************************************************************************************************/
void                zhengxian()                //正弦
{
bit                zx_a1,zx_b1,zx_c1;                //状态机0减小1增大
a1                        =0x0f;                        //a相
b1                        =0xaaaf;                //b相
c1                        =0xaaaf;                //c相
zx_a1                =1;                                //增大
zx_b1                =1;                                //增大
zx_c1                =0;                                //减小
while(1)
{


if(zx_a1)                //a相增大
        {
        pwm0dtl                =a1        $0;
        pwm0dth                =a1        $1;
        a1                        +=0x1f;
        if(a1>0xf700){zx_a1=0;}                //a相变减小*注意减去死区时间
        }

if(!zx_a1)                //a相减小
        {
        pwm0dtl                =a1        $0;
        pwm0dth                =a1        $1;
        a1                        -=0x1f;
        if(a1<0x00ff){zx_a1=1;}                //a相变增大0x001f0x00ff
        }

if(zx_b1)                //b相增大
        {
        pwm1dtl                =b1        $0;
        pwm1dth                =b1        $1;
        b1                        +=0x1f;
        if(b1>0xf700){zx_b1=0;}                //b相变减小
        }

if(!zx_b1)                //b相减小
        {
        pwm1dtl                =b1        $0;
        pwm1dth                =b1        $1;
        b1                        -=0x1f;
        if(b1<0x00ff){zx_b1=1;}                //b相变增大
        }

if(zx_c1)                //c相增大
        {
        pwm2dtl                =c1        $0;
        pwm2dth                =c1        $1;
        c1                        +=0x1f;
        if(c1>0xf700){zx_c1=0;}                //c相变减小
        }

if(!zx_c1)                        //c相减小
        {
        pwm2dtl                =c1        $0;
        pwm2dth                =c1        $1;
        c1                        -=0x1f;
        if(c1<0x00ff){zx_c1=1;}                //c相变增大
        }

yanshi();
}

}
/****************************************************************************************************/
void                yanshi()                        //延时
{
.delay                6000;
/*if(k1)
{
nop;
nop;
while(k1){.delay 100;}                //定在这
while(!k1){.delay 100;}                //等待松手
}*/
}
/****************************************************************************************************/
/****************************************************************************************************/
/****************************************************************************************************/
/****************************************************************************************************/
/****************************************************************************************************/

pfc88603.rar

1.58 KB

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

301

主题

458

帖子

62

粉丝