[LKS32 软件] 凌鸥MCPWM输出全0全1

[复制链接]
1082|10
 楼主| 小夏天的大西瓜 发表于 2023-3-21 19:54 | 显示全部楼层 |阅读模式


in main.c



  1.     volatile int i;
  2.     SYS_PROT = PSW_PROT;
  3.     SYS_CLK_CFG = 0x01FF;


  4.     SYS_SFT_RST = 0x00FF;
  5.     SYS_SFT_RST = 0x0000;
  6.     SYS_CLK_FEN = 0x0008;

  7.     //mcpwm config
  8.     MCPWM_PRT       = 0x0000DEAD; //enter password to unlock write protection
  9.     MCPWM_TH        = 0x00000BCD;
  10.     //-------

  11.     //all 1
  12.     MCPWM_TH00      = -0x00000BCD;
  13.     MCPWM_TH01      = 0x00000BCD;
  14.     MCPWM_DTH00     = 0;
  15.     MCPWM_DTH01     = 0;
  16.     MCPWM_SDCFG     = 0x1 << 4;   //t0 update
  17.     MCPWM_FAIL     |= 0x00000040; //moe
  18.     MCPWM_IO01     |= 0x00000000; //cmp mode
  19.     //-------
  20.     MCPWM_TCLK      = 0x0000000C; //ton, tclk_en, tclk_div[1:0], no div
  21.     MCPWM_AUEN      = 0x3;        //enable auto update of th00 & th01
  22.     //enable t1 event irq
  23.     MCPWM_IE        = 0x2;
  24.     MCPWM_UPDATE    = 0x0000FFFF; //write corresponding bit to trigger update
  25.     //MCPWM_PRT     = 0x0000CAFE; //write any value other than 0xDEAD to enable write protection

  26.     NVIC_EnableIRQ(MCPWM_IRQn); //enable the adc0 interrupt
  27.     __enable_irq();            //clr PRIMASK
  28.     SCB->SCR &= ~0x00000010;   //clr SEVONPEND
  29.     GPIO1_POE       = 0x1 << 4 | 0x1 << 5;
  30.     GPIO1_F7654     = 0x0033;
  31.     i = 10;

  32.     while(i--){
  33.         while(0x1 != (0x1 & MCPWM_IF)); //wait for MCPWM_IF[0] -TH event
  34.         MCPWM_IF |= 0x1;
  35.     }
  36. PASS;




in interrupt.c

  1. void MCPWM_IRQHandler(void)
  2. {
  3.     MCPWM_IF |= 0xFF;
  4.     GPIO0_PDO = ~GPIO0_PDO;
  5.     if(GPIO0_PDO==0){
  6.         if(MCPWM_TH00 != MCPWM_TH){
  7.             GPIO1_PDO = ~GPIO1_PDO;
  8.             MCPWM_TH00 = MCPWM_TH;
  9.         }
  10.         else{
  11.             MCPWM_TH00 = -MCPWM_TH;
  12.             GPIO2_PDO = ~GPIO2_PDO;
  13.         }
  14.     }
  15. }

综上,

TH00 = TH01 可实现mcpwm输出全0

TH00 = -TH TH01 = TH,可实现mcpwm输出全1
chenqianqian 发表于 2023-3-21 20:01 来自手机 | 显示全部楼层
输出全0或全1的意义是什么?
NIMIJACK 发表于 2023-3-27 11:14 | 显示全部楼层
chenqianqian 发表于 2023-3-21 20:01
输出全0或全1的意义是什么?

电机控制专用,停机需要全0或者全1
鸥芯电驱港港 发表于 2023-3-27 13:35 | 显示全部楼层
chenqianqian 发表于 2023-3-21 20:01
输出全0或全1的意义是什么?

还比如电机刹车的时候也需要输出全0或者全1,是全0还是全1主要看驱动极性啦
tpgf 发表于 2023-4-12 16:21 | 显示全部楼层
我不能理解的就是既然用pwm全输出1或者0,那么用pwm的目的是什么呢
磨砂 发表于 2023-4-12 16:42 | 显示全部楼层
tpgf 发表于 2023-4-12 16:21
我不能理解的就是既然用pwm全输出1或者0,那么用pwm的目的是什么呢

不是全程都是全0或者全1 是说的某一个时间段
晓伍 发表于 2023-4-12 16:56 | 显示全部楼层
NIMIJACK 发表于 2023-3-27 11:14
电机控制专用,停机需要全0或者全1

请问在刹车或者加速的时候我们需要如何配置呢

评论

全0或者全1是在关闭MOS管的时候用到吧,电机会在惯性下继续旋转一会。刹车的话,通过控制放电电路或刹车电路,让电机迅速停下,或者软件控制给定量为0,就会停下。  发表于 2023-4-13 17:17
八层楼 发表于 2023-4-12 17:18 | 显示全部楼层
晓伍 发表于 2023-4-12 16:56
请问在刹车或者加速的时候我们需要如何配置呢

这种是不是得两路pwm配合使用了呢
观海 发表于 2023-4-13 08:26 | 显示全部楼层
从全0或者全1状态退出的话 还需要再次配置吗
guanjiaer 发表于 2023-4-13 09:28 | 显示全部楼层
单片机里边的时序可以写的非常复杂吗 自动的停机啊  刹车啊 加速啊之类的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

273

主题

2368

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部