打印
[技术问答]

Hc32L130的PWM问题

[复制链接]
1725|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
想问网友或者华大的技术支持,一个Hc32L130的PWM问题。高级定时器adt,如何方便输出%0-100%的PWM波形?
我发现无法通过调节比较寄存器,输出%0和100%也就是一直低电平和一直高电平无法完整输出,总会有一些毛刺!
我之前使用新唐的M031系列,可以很方便强制输出高或者低,只需操作一两个寄存器!

目前我只能通过重新设置TIMx_PCONR的PERC,CMPC,STASTPS,STPC,STAC( 一共5个寄存器位置!!)进行输出0%或者100%的PWM。这样太麻烦。
另外想问TIMx_PCONR的DISVAL,DISSEL怎么使用?文档的说明很难理解。什么无效条件0123?是不是OUTEN=0的时候通过可使用DISVAL,DISSEL强制输出期望电平?

使用特权

评论回复
沙发
martinhu| | 2021-3-30 15:09 | 只看该作者
楼主可以用通用定时器,那个调制输出PWM比较简单
定时器比较值设置0或者大于周期值,就可以输出想要的常高或者常低电平

使用特权

评论回复
板凳
linguanghua|  楼主 | 2021-3-30 16:55 | 只看该作者
martinhu 发表于 2021-3-30 15:09
楼主可以用通用定时器,那个调制输出PWM比较简单
定时器比较值设置0或者大于周期值,就可以输出想要的常高 ...

开始确实是使用通用定时器,但是发现定时器停止后PWM脚位电平不明确,有时高有时低,无法通过寄存器定义。
所以后面采用高级定时器。

使用特权

评论回复
地板
martinhu| | 2021-3-31 13:35 | 只看该作者
linguanghua 发表于 2021-3-30 16:55
开始确实是使用通用定时器,但是发现定时器停止后PWM脚位电平不明确,有时高有时低,无法通过寄存器定义 ...

一般运行之后不会停止timer,通用定时器想要关闭PWM输出,不使能AOE的情况下,可以把MOE设为0,就可以关闭PWM。

使用特权

评论回复
5
martinhu| | 2021-3-31 15:57 | 只看该作者
linguanghua 发表于 2021-3-30 16:55
开始确实是使用通用定时器,但是发现定时器停止后PWM脚位电平不明确,有时高有时低,无法通过寄存器定义 ...

L130,如果要用adt输出独立pwm,想要实现常高常低电平,
可以参考如下做法

使用特权

评论回复
6
linguanghua|  楼主 | 2021-3-31 17:13 | 只看该作者
martinhu 发表于 2021-3-31 15:57
L130,如果要用adt输出独立pwm,想要实现常高常低电平,
可以参考如下做法

是的,需要修改PCONR。但是我发现,需要常常高常低,直接修改相关PWM端口为GPIO更加简单。

使用特权

评论回复
7
linguanghua|  楼主 | 2021-3-31 20:51 | 只看该作者
martinhu 发表于 2021-3-31 13:35
一般运行之后不会停止timer,通用定时器想要关闭PWM输出,不使能AOE的情况下,可以把MOE设为0,就可以关 ...

你好,想问个关于这个单片机的IAP问题,程序跳转到APP后,应该需要偏移中断表吧?好像官方代码里没有这方面的内容。

使用特权

评论回复
评论
linguanghua 2021-3-31 21:22 回复TA
找到了,在startup文件里面。 
8
martinhu| | 2021-4-1 14:34 | 只看该作者
linguanghua 发表于 2021-3-31 17:13
是的,需要修改PCONR。但是我发现,需要常常高常低,直接修改相关PWM端口为GPIO更加简单。 ...

如果直接用GPIO输出电平的话,需要注意,其他GPIO输出电平操作,也需要使用BSET和BCLR寄存器操作,尽量避免使用OUT寄存器,否则在不同优先级函数嵌套操作的时候,容易出现输出电平错误

使用特权

评论回复
9
单片小菜| | 2021-4-1 16:09 | 只看该作者
感谢楼主的分享,不错的代码,不错的方案。

使用特权

评论回复
10
里面有晴雨| | 2021-4-1 17:32 | 只看该作者
持续关注中,看看究竟咋回事。

使用特权

评论回复
11
linguanghua|  楼主 | 2021-4-7 13:49 | 只看该作者
martinhu 发表于 2021-4-1 14:34
如果直接用GPIO输出电平的话,需要注意,其他GPIO输出电平操作,也需要使用BSET和BCLR寄存器操作,尽量避 ...

你好,我想问下,如果想使用外部电平变化触发PWM启动,应该怎么做?我看ADT有
硬件启动事件选择寄存器 TIMx_HSTAR
端口触发控制寄存器 TIMx_TTRIG
貌似跟这些有关。
手册上 TIMx_TTRIG实在看不懂,应该怎么选择触发端口?

使用特权

评论回复
12
martinhu| | 2021-4-7 14:47 | 只看该作者
linguanghua 发表于 2021-4-7 13:49
你好,我想问下,如果想使用外部电平变化触发PWM启动,应该怎么做?我看ADT有
硬件启动事件选择寄存器  ...

TTRIG里面有4个TRIG端口可以选,你只需要选择一个,然后在硬件启动寄存器里面设置对应的电平启动事件。
比如:
设置TTRIG_TRIGAS =1;选择一个IO,对应的GPIO寄存器设置为输入,
设置FCONR的TRIGA的滤波功能
然后HSTAR的bit8或者bit9选择一个使能电平边沿,然后再使能bit31,
这样如果有符合的TRIGA的边沿,所设置的ADT的CNTER就会启动计数

使用特权

评论回复
13
martinhu| | 2021-4-7 15:14 | 只看该作者
linguanghua 发表于 2021-4-7 14:53
也就是,比如 ,TRIGBS=4,代表选择PB4作为触发脚吗?

你问的是哪个型号的MCU?
我看L13x上面,TTRIG的TRIGxS = 4,选择的是PA7……
TRIGxS的x代表A、B、C、D,4个trig端口。

使用特权

评论回复
14
linguanghua|  楼主 | 2021-4-7 15:19 | 只看该作者
martinhu 发表于 2021-4-7 15:14
你问的是哪个型号的MCU?
我看L13x上面,TTRIG的TRIGxS = 4,选择的是PA7……
TRIGxS的x代表A、B、C、D, ...

这个表在哪里能查到?HC32L130F8UA,手册只列出16个,看上去没有规律。我想用PB4触发TIM4

使用特权

评论回复
15
martinhu| | 2021-4-7 17:34 | 只看该作者
linguanghua 发表于 2021-4-7 15:19
这个表在哪里能查到?HC32L130F8UA,手册只列出16个,看上去没有规律。我想用PB4触发TIM4 ...

Trig端口的选择,在TTRIG寄存器的底部就有啊

使用特权

评论回复
评论
linguanghua 2021-4-8 09:16 回复TA
这表格真的莫名其妙,一下子反应不过来。这寄存器的设计也够厉害。 
16
linguanghua|  楼主 | 2021-4-8 09:20 | 只看该作者
还以为可以任意选择触发IO,大意了。只能修改硬件。
本来选择PB4是看到有TIM2_GATE,后来发现这个gate只能启动模式0,不能启动pwm。大意了。

使用特权

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

本版积分规则

25

主题

214

帖子

4

粉丝