fisholive 发表于 2023-5-6 17:26:49

梁工 发表于 2023-5-6 16:29
初始化程序,是移植(拷贝)过来的,初始化时,随便选一个通道都可以,因为这时候并没有启动ADC,所以选 ...

好的,谢谢梁工,
好像这个片子后续改成 SPWM控制无刷电机, PWMA 中断26 进行赋值模拟SPWM正玄波?

梁工 发表于 2023-5-6 20:50:13

fisholive 发表于 2023-5-6 17:26
好的,谢谢梁工,
好像这个片子后续改成 SPWM控制无刷电机, PWMA 中断26 进行赋值模拟SPWM正玄波?
...

例程是普通PWM驱动,不是SPWM。

fisholive 发表于 2023-5-9 15:26:31



梁工,以前项目是用STC 408as做的,现在想换成这个STC8H,408as PCA 模块 CL 发生溢出时候,CH高八位会自动重装到低八位,
STC8H好像只给低八位赋值,没有看到给高八位赋值?STC8H PWM模块的确复杂,看的不太懂

                                        PWMA_CCR1L = PWM_Value;
                                        PWMA_CCR2L = PWM_Value;
                                        PWMA_CCR3L = PWM_Value;

梁工 发表于 2023-5-9 16:03:59

fisholive 发表于 2023-5-9 15:26
梁工,以前项目是用STC 408as做的,现在想换成这个STC8H,408as PCA 模块 CL 发生溢出时候,CH高八位会自 ...

我用的是8位的PWM,所以只需要重装低8位,如果超过8位,则两个字节都要重装,先装高字节,再装低字节。

fisholive 发表于 2023-5-10 10:50:24

梁工,我昨天把我以前 STC 408as 双Nmos控制电路搬过来,开机软件一直重启,不知道P54口设置的问题,还是啥问题,结果一会就把双Nmos管烧了(ID电流最大11A),我无刷线圈内阻有5欧姆,按道理就是短路也烧不了mos管,双Nmos控制电路不能用这套软件?

void        IO_Config(void)
{
   P0n_pure_input(0x0f);        //0000 1111 为高阻       
   P1n_push_pull(0xff);//1111 1111 为推挽输出
   P2n_push_pull(0x03);   //0000 0011 为推挽输出
   P2n_pure_input(0x0c);//0000 1100 为高阻       
   P3n_pure_input(0x40);//0100 0000 高阻
   P3n_push_pull(0x80);   //1000 0000 推挽输出
   P5n_push_pull(0x10);   //0001 0000推挽输出       
        RSTCFG=0X40;//P54 IO 口
}

梁工 发表于 2023-5-10 12:08:45

fisholive 发表于 2023-5-10 10:50
梁工,我昨天把我以前 STC 408as 双Nmos控制电路搬过来,开机软件一直重启,不知道P54口设置的问题,还是啥 ...

不改程序,驱动电路必须跟我的电路一致。我用的是N+P管,你用的是双N管,则PWM要反相,直接下载是不行的,2个N管会同时导通。

18340262113 发表于 2023-5-11 09:27:49

梁工您好 ,这个PWMA输出引脚切换搞不懂了,能在给个切换到PWM2P的例子吗

梁工 发表于 2023-5-11 13:43:06

18340262113 发表于 2023-5-11 09:27
梁工您好 ,这个PWMA输出引脚切换搞不懂了,能在给个切换到PWM2P的例子吗

到下面连接的帖子下载,里面有例程,修改切换即可。

STC8H系列-高级PWM范例程序下载
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1779
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)

fisholive 发表于 2023-5-11 16:52:31


梁工,给30度相位的地方,我感觉赋值应该是PhaseTime = 65536 - PhaseTime
//        PhaseTime = 20;        //只给20us, 则无滞后修正, 用于检测滤波电容引起的滞后时间
                T4T3M &= ~(1<<7);                                //Timer4停止运行
                PhaseTime= PhaseTime<< 1;        //2个计数1us
                PhaseTime = 0 - PhaseTime; 我理解应该是PhaseTime = 65536 - PhaseTime,赋值给我T4定时器,我源程序PhaseTime =0-PhaseTime
                T4H = (u8)(PhaseTime >> 8);                //装载30度角延时
                T4L = (u8)PhaseTime;
                T4T3M |=(1<<7);        //Timer4开始运行
                XiaoCiCnt = 1;                //1:需要消磁, 2:正在消磁, 0已经消磁

梁工 发表于 2023-5-11 17:04:53

fisholive 发表于 2023-5-11 16:52
梁工,给30度相位的地方,我感觉赋值应该是PhaseTime = 65536 - PhaseTime
//        PhaseTime = 20;        //只给20us ...

无符号16位变量,0 - PhaseTime与65536 - PhaseTime是一样的,你给16位无符号变量赋值65536,就是0.
页: 1 2 3 [4] 5 6 7 8 9 10 11 12 13
查看完整版本: BLDC三相无刷直流电机驱动-8H系列/32G系列-无HALL, 12万转, 视频讲解,改进启动算法