3353|5

143

帖子

0

TA的资源

一粒金砂(中级)

【AutoChips AC7801x电机demo板测评】+ 电机控制下的PWM不同配置 [复制链接]

本帖最后由 仙景 于 2020-11-12 22:41 编辑

序言:做电机控制的,都知道高级定时器乃是电机控制下的精髓,其中包括互补PWM,PWM带死区输出,还有移向PWM……目前AC7801都包括这些功能,实属功能强大,真是国产MCU崛起的节奏。就不知道价格美不美丽,要是美丽,那就不得了。不过,那……我们不关心,我们关心PWM不同配置。

特性与结构:PWM 每通道使用一个输入/输出(I / O)引脚、 CHn(PWM 通道(n)),其中 n 是通道编号(0-7)。PWM 的核心部分为 16 位计数器,具有可编程的初始值和最终值,其计数可以是向上或向上-向下。
下图为 PWM 结构图。

PWM结构图.png 这里有几个关键的寄存器:

初始化寄存器(PWM_INIT)

配置时钟,配置分频器,计数模式,还有溢出中断。

计数器寄存器(PWM_CNT)
15:0位:CNT 寄存器包含 PWM 计数器值。 Reset 清除 CNT 寄存器。将任何值写入 COUNT 都会使用其初始值 CNTIN 更新计数器。

最大计数值寄存器(PWM_MCVR)
15:0位:MCVR 寄存器包含 PWM 计数器的模数值。当 PWM 计数值达到 MCVR 值后, 溢出标志 (CNTOF)在下一个时钟置起,计数器的下一个值取决于所选的计数方法。写入 MCVR 寄存器会将值锁存到缓冲区中。根据从写缓冲区更新的寄存器, MCVR 寄存器使用其写缓冲区的值进行更新。在写入MCVR 寄存器之前,通过写入 CNT 来初始化 PWM 计数器。

通道值寄存器(PWM_CHnV)
15:0位:这些寄存器包含输入模式的捕获 PWM 计数器值或输出模式的匹配值。在输入捕获、捕获测试和双边沿捕获模式下,忽略对 CHnV 寄存器的任何写入操作。在输出模式下,写入 CHnV 寄存器会将值锁存在缓冲区中。根据从写缓冲区更新的寄存器,使用其写缓冲区的值更新 CHnV 寄存器。

…………

还有很多寄存器就理出来,大家去看,这里做简单说明。

向上计数组合模式:
    周期=(MCVR-CNTIN+1)*PWM计数器时钟周期,占空比=|CH(n+1)V-CH(n)V|*PWM计数器时钟周期
向上-向下计数组合模式:
    周期=2*(MCVR-CNTIN)*PWM计数器时钟周期,占空比=2*(|CH(n+1)V-CH(n)V|)*PWM计数器时钟周期

PWM发波.jpg 下面我们要配置上图的P0_CH2(PB11),P0_CH3(PB12)。

 

互补输出:1、上下通道,高有效

combineChConfig[0].pairChannel = PWM_CH_2; //PWM通道对数,PWM_CH_0/2/4/6对应PAIR0/1/2/3
combineChConfig[0].ch1stValue = MOD_PWM >> 2;; //通道2n channel值,n为PWM对数编号
combineChConfig[0].ch2ndValue = MOD_PWM >> 1;; //通道2n+1 channel值,n为PWM对数编号
#if 1
combineChConfig[0].levelMode = PWM_HIGH_TRUE; //输出PWM高有效,如果占空比设为25%,是指的高有效电平占比25%
#endif
combineChConfig[0].deadtimeEn = DISABLE;//死区插入去能
combineChConfig[0].complementEn = ENABLE;//互补模式使能,使能后,PWM通道波形互补,DISABLE波形输出同向
combineChConfig[0].ch1stMatchDir = PWM_MATCH_DIR_DOWN;//仅在向上-向下计数(countMode为PWM_UP_DOWN_COUNT)组合模式有效,用于选择匹配生效点方向
combineChConfig[0].ch2ndMatchDir = PWM_MATCH_DIR_DOWN;//仅在向上-向下计数(countMode为PWM_UP_DOWN_COUNT)组合模式有效,用于选择匹配生效点方向
combineChConfig[0].ch1stPolarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH;//输出极性高有效,PWM mask后PWM输出低电平
combineChConfig[0].ch2ndPolarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH;//输出极性高有效,PWM mask后PWM输出低电平

该PWM模式配置出现的波形如下

PWM_1.jpg

2、上下通道,低有效

combineChConfig[0].pairChannel = PWM_CH_2; //PWM通道对数,PWM_CH_0/2/4/6对应PAIR0/1/2/3
combineChConfig[0].ch1stValue = MOD_PWM >> 2;; //通道2n channel值,n为PWM对数编号
combineChConfig[0].ch2ndValue = MOD_PWM >> 1;; //通道2n+1 channel值,n为PWM对数编号
#if 1
combineChConfig[0].levelMode = PWM_LOW_TRUE; //输出PWM低有效,如果占空比设为25%,是指的低有效电平占比25%
#endif
combineChConfig[0].deadtimeEn = DISABLE;//死区插入去能
combineChConfig[0].complementEn = ENABLE;//互补模式使能,使能后,PWM通道波形互补,DISABLE波形输出同向
combineChConfig[0].ch1stMatchDir = PWM_MATCH_DIR_DOWN;//仅在向上-向下计数(countMode为PWM_UP_DOWN_COUNT)组合模式有效,用于选择匹配生效点方向
combineChConfig[0].ch2ndMatchDir = PWM_MATCH_DIR_DOWN;//仅在向上-向下计数(countMode为PWM_UP_DOWN_COUNT)组合模式有效,用于选择匹配生效点方向
combineChConfig[0].ch1stPolarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH;//输出极性高有效,PWM mask后PWM输出低电平
combineChConfig[0].ch2ndPolarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH;//输出极性高有效,PWM mask后PWM输出低电平

该PWM模式配置出现的波形如下

PWM_2.jpg 非互补模式:3、上下通道,高有效(同向输出)

combineChConfig[0].pairChannel = PWM_CH_2; //PWM通道对数,PWM_CH_0/2/4/6对应PAIR0/1/2/3
combineChConfig[0].ch1stValue = MOD_PWM >> 2;; //通道2n channel值,n为PWM对数编号
combineChConfig[0].ch2ndValue = MOD_PWM >> 1;; //通道2n+1 channel值,n为PWM对数编号
#if 1
combineChConfig[0].levelMode = PWM_HIGH_TRUE; //输出PWM高有效,如果占空比设为25%,是指的高有效电平占比25%
#endif
combineChConfig[0].deadtimeEn = DISABLE;//死区插入去能
combineChConfig[0].complementEn = DISABLE;//互补模式去使能,DISABLE波形输出同向
combineChConfig[0].ch1stMatchDir = PWM_MATCH_DIR_DOWN;//仅在向上-向下计数(countMode为PWM_UP_DOWN_COUNT)组合模式有效,用于选择匹配生效点方向
combineChConfig[0].ch2ndMatchDir = PWM_MATCH_DIR_DOWN;//仅在向上-向下计数(countMode为PWM_UP_DOWN_COUNT)组合模式有效,用于选择匹配生效点方向
combineChConfig[0].ch1stPolarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH;//输出极性高有效,PWM mask后PWM输出低电平
combineChConfig[0].ch2ndPolarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH;//输出极性高有效,PWM mask后PWM输出低电平

该PWM模式配置出现的波形如下

PWM_3.jpg

4、上下通道,低有效(同向输出)

combineChConfig[0].pairChannel = PWM_CH_2; //PWM通道对数,PWM_CH_0/2/4/6对应PAIR0/1/2/3
combineChConfig[0].ch1stValue = MOD_PWM >> 2;; //通道2n channel值,n为PWM对数编号
combineChConfig[0].ch2ndValue = MOD_PWM >> 1;; //通道2n+1 channel值,n为PWM对数编号
#if 1
combineChConfig[0].levelMode = PWM_LOW_TRUE; //输出PWM低有效,如果占空比设为25%,是指的低有效电平占比25%
#endif
combineChConfig[0].deadtimeEn = DISABLE;//死区插入去能
combineChConfig[0].complementEn = DISABLE;//互补模式去使能,DISABLE波形输出同向
combineChConfig[0].ch1stMatchDir = PWM_MATCH_DIR_DOWN;//仅在向上-向下计数(countMode为PWM_UP_DOWN_COUNT)组合模式有效,用于选择匹配生效点方向
combineChConfig[0].ch2ndMatchDir = PWM_MATCH_DIR_DOWN;//仅在向上-向下计数(countMode为PWM_UP_DOWN_COUNT)组合模式有效,用于选择匹配生效点方向
combineChConfig[0].ch1stPolarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH;//输出极性高有效,PWM mask后PWM输出低电平
combineChConfig[0].ch2ndPolarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH;//输出极性高有效,PWM mask后PWM输出低电平

该PWM模式配置出现的波形如下

PWM_4.jpg

写了四种模式,究竟要使用那种模式,结合自己的项目,看自己的预驱选型是啥。

最后,附上工程代码 PWM.zip (2.11 MB, 下载次数: 23)

最新回复

加油,谢谢分享!   详情 回复 发表于 2020-11-12 22:31

回复
举报

143

帖子

0

TA的资源

一粒金砂(中级)

沙发


回复

1942

帖子

3

TA的资源

版主

可以啊,示波器都用上了,自己家里买的示波器吗?

点评

没有钱,用公司的  详情 回复 发表于 2020-11-13 08:55

回复

7504

帖子

2

TA的资源

五彩晶圆(高级)

加油,谢谢分享!

点评

请持续关注  详情 回复 发表于 2020-11-13 08:55
个人签名

默认摸鱼,再摸鱼。2022、9、28


回复

143

帖子

0

TA的资源

一粒金砂(中级)

w494143467 发表于 2020-11-12 22:00 可以啊,示波器都用上了,自己家里买的示波器吗?

没有钱,用公司的


回复

143

帖子

0

TA的资源

一粒金砂(中级)

freebsder 发表于 2020-11-12 22:31 加油,谢谢分享!

请持续关注


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表