单片机/MCU论坛
直播中

挑灯望却

7年用户 13经验值
擅长:529252
私信 关注
[问答]

瑞萨RX23T,如何设置实时改变PWM占空比

瑞萨RX23T的板子
如何设置实时改变PWM占空比呢
自己写了程序进去
但是没有用
最终输出的还是在代码生成器中设置的PWM的值。

  • 2017-07-29_185623.jpg

回帖(13)

沈晨彦

2017-7-27 15:43:29
引用: 挑灯望却 发表于 2017-7-28 16:47
initial output of MTIOC0C pin is 1. toggle output at compare  match.1 at output counter clear,这一句话有是什么意思呢,我之前选择的是是pin is 0.

这句话是说初始值是1即给高电位,当计数器计数达到比较值时降为低电平
举报

沈晨彦

2017-7-27 23:16:58
比如代码是这样的
  1. MTU0.TGRA = _9C40_TGRA_VALUE;
  2.     MTU0.TGRB = _80E8_TGRB_VALUE;
  3.     MTU0.TGRC = _4E20_TGRC_VALUE;

假设你设置的是以TGRA作为一个周期,TGRB设置为initial output of MTIOC0C pin is 1. toggle output at compare  match.1 at output counter clear,那么你改变TGRB的值就可以改变占空比了,比如这里MTU0.TGRA = 9C40,十进制为40000,你改变MTU0.TGRB的值,将80E8(十进制为33000)改为2710(十进制为10000),进行,原理是这样,你可以设个变量等于MTU0.TGRB,当情况改变时按规律(公式)改变他的数值
举报

挑灯望却

2017-7-28 16:47:48
引用: 晨彦 发表于 2017-7-27 23:16
比如代码是这样的
假设你设置的是以TGRA作为一个周期,TGRB设置为initial output of MTIOC0C pin is 1. toggle output at compare  match.1 at output counter clear,那么你改变TGRB的值就可以改变占空比了,比如这里MTU0.TGRA = 9C40,十进制为40000,你改变MTU0.TGRB的值,将80E8(十进制为33000)改为2710(十进制为100 ...

initial output of MTIOC0C pin is 1. toggle output at compare  match.1 at output counter clear,这一句话有是什么意思呢,我之前选择的是是pin is 0.
举报

挑灯望却

2017-7-28 17:02:32
引用: 晨彦 发表于 2017-7-27 23:16
比如代码是这样的
假设你设置的是以TGRA作为一个周期,TGRB设置为initial output of MTIOC0C pin is 1. toggle output at compare  match.1 at output counter clear,那么你改变TGRB的值就可以改变占空比了,比如这里MTU0.TGRA = 9C40,十进制为40000,你改变MTU0.TGRB的值,将80E8(十进制为33000)改为2710(十进制为100 ...

比如,我新建了一个.c文件
代码如下
void PWM_INIT(int pwm1)
{

        PWM_CH1 =pwm1;


}

.h文件代码如下
#define PWM_CH1 MTU0.TGRB
void PWM_INIT(pwm1)

MTU3代码如下
/* Channel 0 is used as PWM2 mode */
    MTU0.TCR.BYTE = _00_MTU_PCLK_1 | _00_MTU_CKEG_RISE | _20_MTU_CKCL_A;
    MTU0.TCR2.BYTE = _00_MTU_PCLK_1;
    MTU.TSYRA.BIT.SYNC0 = 1U;
    MTU0.TMDR1.BYTE = _03_MTU_PWM2;
    MTU0.TIORH.BYTE = _70_MTU_IOB_HT | _00_MTU_IOA_DISABLE;
    MTU0.TIORL.BYTE = _70_MTU_IOD_HT | _07_MTU_IOC_HT;
    MTU0.TGRA = _9C3F_TGRA_VALUE;
   // MTU0.TGRB =_1F40_TGRB_VALUE;
    MTU0.TGRC = _3A98_TGRC_VALUE;
    MTU0.TGRD = _4E20_TGRD_VALUE;
    MTU0.TGRE = _9C40_TGRE_VALUE;
    MTU0.TGRF = _0064_TGRF_VALUE;
    MTU0.TIER2.BYTE = _00_MTU_TGIEE_DISABLE | _00_MTU_TGIEF_DISABLE;
    MTU0.TIER.BYTE = _00_MTU_TGIEA_DISABLE | _00_MTU_TGIEB_DISABLE | _00_MTU_TGIEC_DISABLE | _00_MTU_TGIED_DISABLE |
                     _00_MTU_TCIEU_DISABLE | _00_MTU_TCIEV_DISABLE | _00_MTU_TTGE_DISABLE;


main函数如下
void main(void)
{
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
    PWM_INIT (15000);
    R_MTU3_C0_Start();
    R_MTU3_C1_Start();
    R_MTU3_C2_Start();
    while (1U)
    {
        ;
    }
    /* End user code. Do not edit comment generated here */
}


不知何处问题,导致无法修改占空比值
举报

沈晨彦

2017-7-29 19:00:18
你修改占空比的地方在哪?你要改的话修改图中的MTU0.TGRA = _031F_TGRA_VALUE;    MTU0.TGRB = _0064_TGRB_VALUE;
    MTU0.TGRC = _0064_TGRC_VALUE;
    MTU0.TGRD = _0064_TGRD_VALUE;这些值

举报

沈晨彦

2017-7-29 19:09:20
抱歉,忘了一开始的定义,你试试把PWM_INIT (15000)放到循环里看看
举报

挑灯望却

2017-7-30 16:31:25
引用: 晨彦 发表于 2017-7-29 19:00
你修改占空比的地方在哪?你要改的话修改图中的MTU0.TGRA = _031F_TGRA_VALUE;    MTU0.TGRB = _0064_TGRB_VALUE;
    MTU0.TGRC = _0064_TGRC_VALUE;
    MTU0.TGRD = _0064_TGRD_VALUE;这些值

我有修改哟,我把PWMCH1赋值给MTU0.TGRB
举报

挑灯望却

2017-7-30 16:32:14
引用: 晨彦 发表于 2017-7-29 19:09
抱歉,忘了一开始的定义,你试试把PWM_INIT (15000)放到循环里看看

试了,我把这一句调用放在循环外面,循环里面,都放了,没用。。
举报

hyb765560019

2017-8-2 01:07:11
你好,楼主,请问四路控制无刷电机的pwm信号应该怎么设置?我用e2studio生成代码,用的是mtu0的PWM mode 2,不知道为什么,设置完成之后一直没有输出,引脚电平为0
举报

挑灯望却

2017-8-5 16:43:08
问题解决啦,,谢谢(*/ω\*)
举报

挑灯望却

2017-8-5 16:43:58
引用: hyb765560019 发表于 2017-8-2 01:07
你好,楼主,请问四路控制无刷电机的pwm信号应该怎么设置?我用e2studio生成代码,用的是mtu0的PWM mode 2,不知道为什么,设置完成之后一直没有输出,引脚电平为0

硬件,板子,断开测量,烧录完后单独供电,不要连接仿真器
举报

灰白色

2017-8-7 00:53:23
引用: 挑灯望却 发表于 2017-8-5 16:43
问题解决啦,,谢谢(*/ω\*)

怎么解决的
举报

Mr.张一

2017-8-9 17:17:26
引用: 挑灯望却 发表于 2017-8-5 16:43
问题解决啦,,谢谢(*/ω\*)

怎么解决的啊?
举报

更多回帖

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