MindMotion MM32 单片机上的MicroPython移植-PWM

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MindMotion MM32 单片机上的MicroPython移植-PWM相关的知识,希望对你有一定的参考价值。

简 介: 对于MindMotion在11月22日发送过来的移植有PWM功能的MicroPython的软件进行了测试。首先,在两个PWM的通道(PA6,PA7)上可以测试到输出的波形,但信号参数与设置之间还存在着差异: 输出频率比设置频率小; 输出的占空比正好与设置的相反。

关键词 MM32PWMMicroPython

MM32 MicroPython
文章目录
背景介绍
PWM功能
下载MicroPython
测试PWM
基本测试
测试总结
问题溯源
问题修复

 

§01 MM32 MicroPython


一、背景介绍

  在过去的周末,MindMotion SuYong对于移植的MicroPython中的带有PWM版本进行了修正,发送过来了最新的版本:

  MicroPython/MindMotion/firmware-2021-11-22.bin · 卓晴/编程技术 - Gitee.com

  这个版本时对于 测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本 所存在的问题进行修复。但程序的主要框架没有改变。即仍然借助于两个Timer完成八个PWM通道的功能。

▲ 图1.1.1 测试实验电路板

二、PWM功能

  根据前天的测试,可以知道PWM的主要管脚与内部定时器资源如下:

【表1-1 PWM资源配置】

PWM定时器GPIO
PWM0TIM3PA6
PWM1TIM3PA7
PWM2TIM3PB0
PWM3TIM3PB1
PWM4TIM4PB6
PWM5TIM4PB7
PWM6TIM4PB8
PWM7TIM4PB9

三、下载MicroPython

1、下载MicroPython

  将下载的MicroPython下载到 设计带有SD卡的 MM32F3277 MicroPython 实验板 ,然后使用STM32BOOTLOADER进行REPL测试。

▲ 图1.3.1 将新版的MicroPython下载到测试版中

2、上电测试

  上电后,在REPL界面显示:


>> Open COM8, baud : 115200

[Y] sdcard ready.
[Y] file system on sdcard ready.
[Y] run the main.py on disk ...
[Y] done. 1
MicroPython v1.16 on 2021-11-22; MB_F3270 with MM32F3277G7P
>>> 

 

§02 试PWM


一、基本测试

1、测试基本波形

  初始化PWM通道0,1,分别占用PA6,PA7输出对应的PWM波形。

(1) 测试代码

from machine                import Pin,PWM
import utime

pwm0 = PWM(0, freq=10000, duty=200)
pwm1 = PWM(1, freq=10000, duty=500)

print("Test PWM.")

(2) 输出波形

  测量输出波形,如下图所示:

▲ 图2.1.1 PWM输出波形

  可以看到这个波形与设置参数之间存在误差:

  • 频率误差: 实际的PWM输出频率为9.589kHz,使用FLUKE45数字万用表的频率档测量的信号的频率为9.5914kHz。
  • 占空比误差: 设置的duty=200。实际输出则为800。输出波形反向了。

  下面是PWM0的duty分别设置为 1, 999对应的波形。

▲ 图2.1.2 PWM0设置duty=1对应的波形

▲ 图2.1.3 PWM0设置duty=999对应的波形

2、动态改变duty

(1)测试代码

from machine                import Pin,PWM
import utime

pwm0 = PWM(0, freq=10000, duty=500)
pwm1 = PWM(1, freq=10000, duty=1)

print("Test PWM.")

duty = 1
dutyinc = 20
dir = 0

while True:

    if dir == 0:
        duty += dutyinc
        if duty >= 1000:
            duty = 999
            dir = 1
    else:
        if duty < dutyinc:
            duty = 1
            dir = 0
        else:
            duty -= dutyinc

    pwm1.duty(duty)

    utime.sleep_ms(100)

▲ 图2.1.4 动态改变PWM1的占空比

 

试总结 ※


  于MindMotion在11月22日发送过来的移植有PWM功能的MicroPython的软件进行了测试。首先,在两个PWM的通道(PA6,PA7)上可以测试到输出的波形,但信号参数与设置之间还存在着差异:

  • 输出频率比设置频率小;
  • 输出的占空比正好与设置的相反。

▲ 图3.1 设置PWM品味100kHz对应的输出波形

■ 问题溯源

  后来经过测试,只初始化PWM0, 而不初始化PWM1,则输出波形的极性正常了。

▲ 图3.1.1 只是初始化PWM0, 输出duty=100对应的波形

  如果同时初始化PWM0,PWM1,则输出波形中PWM0 的波形不正常。

  下面是初始化PWM0,duty=200, PWM1,duty=100对应的波形:

▲ 图3.1.2 初始化PWM0,duty=200, PWM1,duty=100对应的波形

■ 问题修复

1、信号极性

经过修改,SuYong 修改完底层的BUG之后,极性正常了。

▲ 图3.2.1 底层的HAL存在问题

2、频率误差

频率误差仍然存在问题。尚无法达到准确输出频率。主要是因为分频整除对应的问题。SuYong在这个环节并没有能够进行进一步的 优化。


■ 相关文献链接:

● 相关图表链接:

以上是关于MindMotion MM32 单片机上的MicroPython移植-PWM的主要内容,如果未能解决你的问题,请参考以下文章

测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本

MindMotion MM32F3277 SoftI2C功能测试

测试MindMotion 的 ISP功能 - 无法进入ISP功能

制作灵动单片机MM32F3277 测试版

灵动微代理电机电源专用国产32位单片机MM32SPIN05PF

灵动微M3内核32位单片机LQFP100封装MM32F3277G8P