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