打印
[活动专区]

【AutoChips 7801x MCU评测报告】PWM之“模式极性”分析+报告问题

[复制链接]
816|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
《PWMout实验、“模式极性”分析、AutoGen问题报告、参考手册文本错误报告》


在AC7801x的参考手册(ver 0.3)里,PWM一章有65页之多,是篇幅最大的一章。在下打算,不要仅仅照抄官方例程、编译烧写跑一跑了事;打算认真研究杰发MCU的细节,把心得逐步分享出来。
本贴主要包含以下内容:
一、实验资源准备
二、AutoGen Studio初识、小错误报告、新建工程生成代码的基本步骤(PWM out)
三、输出16路独立PWM的效果展示
四、关于PWM模式极性的分析(与STM32对比)及参考手册错误报告


一、资源准备
1、开发板:焊接排针、引出管脚。焊接后的效果如下,图中的小工具是通开孔里堵塞焊锡的功臣(此处省略30分钟)


2、《AC7801x 技术参考手册》(版本0.3)
3、AutoGen Studio 1.3.0
4、示波器、逻辑分析仪等

二、AutoGen Studio初识、小错误报告、新建工程生成代码的基本步骤(PWM out)

杰发出品的AutoGen Studio,从操作界面来看,神似STM32CubeMX,这体现了杰发“不务虚名,一心方便用户”的思路。
为什么这么说呢?对于PC软件来说,换一个UI风格、换一个功能布局,做得和STM32CubeMX很不一样,其实是很容易的一件事,然而如果这样,这种“标新立异”的虚名,给开发者带来的却是重新熟悉了解所需的大量时间成本。所以在下觉得杰发做得很英明。
本人比较熟悉STM32CubeMX,运行AutoGen Studio后,感觉熟悉亲切,可以快速进入状态。
相比STM32CubeMX而言,AutoGen Studio变得更加友好,比如中文标识、中文解释等。

但是也有缺点。目前已发现2处:
1、鼠标移动到配置项上,会显示中文说明(如下图),本意是好的(STM32CubeMX则需要点一个叹号按钮才能显示)。但可能是开发者为了编程方便,直接用了列表项的Hint属性,而用Hint就有一个天然的缺点:显示时间太短了,一段注释还没看完,几秒就消失了。能否改为只要鼠标在列表项上,就一直显示中文说明。


2、PWM的ChannelValeu项,无法输入大于255的数字,后面会有图片说明。


OK,现在用图片把AutoGen Studio新建工程生成代码的基本步骤记录一下(以配置PWMout为例):


上图:新建工程并选中MCU型号


上图:参数配置
1、下拉CKGEN项,启用MCU时钟源为外部晶振
2、展开PWM0项,选择模式为PWM模式
3、勾选PWM0的8个通道
4、PWM0的时钟源为APB Clock
5、预分频设置为479(实为479+1=480分频)
6、设置最大计数值为999
7、设置计数模式为向上计数
8、PWM1照此配置,计数方式改为向上向下计数(中间对齐)


上图:PWM的ChannelValeu项,无法输入大于255的数字
这可能是AutoGen Studio的一个小错误,因此通道值就先不设置了,稍后在生成的代码中改


上图:时钟配置
选择使用HSE,并沿路线配置分频倍频,直到最终P_Clock为48MHz


上图:在保存工程前,设置工程名称及一些选项
这些项基本和STM32CubeMX是一致的。


上图:可以点击“工程设定”按钮,再次修改选项。
最终,点击“生成代码”按钮,生成C工程。


上图:生成完毕,可以直接点击按钮打开C工程。


上图:在打开的C工程里,修改各通道的比较寄存器值(因为前述BUG只能手工配置大数值)
要注意,对自动生成的代码所做的修改,下次自动生成时会被改写。
只有添加在USER CODE标志内的代码,才是不会被覆写的(需AutoGen工程设定里配置)。
    /* USER CODE BEGIN */

    //手工添加的代码

    /* USER CODE END */


三、输出16路独立PWM的效果展示

上述生成工程编译烧录后,用逻辑分析仪可观察16路PWM波形如下图:


图中上8个通道是PWM1(中心对齐),下8个通道是PWM0(边沿对齐)
PS:为让PWM1.Ch4输出正常波形,我焊掉了板子上的R57。

用示波器观察波型,挺完美的:



四、关于PWM模式极性的分析(与STM32对比)及参考手册错误报告

论坛里看到的测评贴,有几贴是关于PWM的,但有的是直接复制官方代码(及注释)测试了一下效果,有的贴子则对一些关键点语焉不详,一笔带过。
在此专门对AC78xxx的PWM里重要且易混淆的通道模式、极性概念,对比STM32做一下分析。

我们知道,意法的STM32,有一个PWM1/PWM2的说法。意思是:
1、在向上计数的初始阶段,PWM1的初始电平为有效电平,PWM2的初始电平为无效电平;
2、向上计数到比较值(参考值)时,PWM1翻转为无效电平,PWM2翻转为有效电平;
3、在向下计数的初始阶段,PWM1的初始电平为无效电平,PWM2的初始电平为有效电平;
4、向下计数到比较值(参考值)时,PWM1翻转为有效电平,PWM2翻转为无效电平。
而何为有效电平、何为无效电平,却又要取决于“极性”这个寄存器。
所以,STM32的PWM模式和极性,其实是要组合在一起用的。

一句话,在PWM模式极性上,STM32搞得很绕,很绕,很绕。(说良心话,一定有很多人学STM32时在这里花了时间进了坑)
绕来绕去,最终不就是高或低初始的两种脉冲吗?

杰发的AC78xxx(包含目前的AC781x和AC780x),就聪明简洁多了:
他们把两种脉冲定义为“High-true脉冲”和“Low-true脉冲”:

typedef enum
{
    PWM_HIGH_TRUE = 2,     /*!< High true */
    PWM_LOW_TRUE,          /*!< Low true */
} PWM_OutputLevelModeType;

注意,这两个枚举值分别是0x02和0x03,也就是二进制的10b和11b,下面的表格和图片里会遇到它们。

High-true脉冲,就是初始状态为高电平、向上计数匹配比较值后翻转为低电平的PWM模式;
Low-true脉冲,就是初始状态为低电平、向上计数匹配比较值后翻转为高电平的PWM模式;
两个模式,用一个枚举直接设定,也就是对应着AutoGen Studio里的levelMode属性(图中红框):


levelMode=High即High-true脉冲
levelMode=Low 即 Low-true脉冲

就这么简单,一个“模式”搞定,没有“极性”什么事。
(那么,上图中蓝框内的“格性”又是有什么作用呢?后面会说;反正,它不再是和“模式”紧紧组合在一起使用的了)

下表红色框里,ELSR1和ELSR0两个位值,就对应着levelMode:


ELSR1:ELSR0==10b,即0x02,即枚举值PWM_HIGH_TRUE,即Hith-true模式
ELSR1:ELSR0==11b,即0x03,即枚举值PWM_LOW_TRUE,即Low-true模式

追踪PWM_Init代码也可以找到,用levelMode给ELSR1:ELSR0两位赋值的语句:

PWM_SetChannelELSR(PWMx, channel, (uint8_t)config->independentChConfig[i].levelMode);

__STATIC_INLINE void PWM_SetChannelELSR(PWM_Type *PWMx, PWM_ChannelType channel, uint8_t edgeLevel)
{
    MODIFY_REG32(PWMx->CHANNELS[channel].CHSCR, PWM_CHSCR_ELSR0_Msk | PWM_CHSCR_ELSR1_Msk, PWM_CHSCR_ELSR0_Pos, edgeLevel & 0x3UL);
}

  #define MODIFY_REG32(reg, mask, pos, value)  (WRITE_REG32((reg), (((reg) & (~((uint32_t)mask))) | (((uint32_t)value) << pos))))

下面2张截图,是参考手册中,对边沿对齐、中间对齐的High-true\Low-true脉冲的形象描绘,可以加深理解。
不过,里面有两处文本错误,在下已经在图里用箭头标出来了。



参考手册另有一处文本错误如下:

再有发现,随时来发贴。

实验+认真写文字+处理图片,要花一天的时间,真心觉得不易。但想到厂家免费送板子、免费寄到家,够真诚的了,作为申请体验者,还是要真心对待的,真心换真心。何况,研究的过程中能学到知识,开拓视野,未来有机会使用这款芯片做产品,能够快速上手,何乐而不为?


PWMout_16_ch.rar (1.01 MB)

使用特权

评论回复

相关帖子

沙发
dengyonglei| | 2020-6-22 21:07 | 只看该作者
非常感谢对AutoGen Studio的使用反馈, 反馈的两个问题将在下一个版本中得到修正,如果使用中还遇到其他问题或者有更好的建议,还请帮忙提出来,我们这边更好的完善。

使用特权

评论回复
板凳
JasonLee27| | 2020-6-23 09:50 | 只看该作者
楼主真的很细致了。

使用特权

评论回复
地板
AutochipsMCU| | 2020-6-23 10:17 | 只看该作者
感谢建议,非常专业,我辈楷模,点赞

使用特权

评论回复
评论
lihuasoft 2020-6-23 11:52 回复TA
情意收下,但夸奖真的言重了,让我心里很虚... 
5
marginer| | 2020-6-23 14:03 | 只看该作者
非常认真,非常专业,非常细致,不禁让我泪牛满面
PS:反馈的问题,已经请相关人员处理

使用特权

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

本版积分规则

19

主题

268

帖子

3

粉丝