打印
[MM32软件]

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

[复制链接]
1977|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wowu|  楼主 | 2023-2-14 13:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wowu 于 2023-2-14 13:32 编辑

所有插图均不正常显示 所以在文末插入原文链接

§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
PWM0        TIM3        PA6
PWM1        TIM3        PA7
PWM2        TIM3        PB0
PWM3        TIM3        PB1
PWM4        TIM4        PB6
PWM5        TIM4        PB7
PWM6        TIM4        PB8
PWM7        TIM4        PB9
三、下载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在这个环节并没有能够进行进一步的 优化。


————————————————
版权声明:本文为CSDN博主「卓晴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhuoqingjoking97298/article/details/121470771

使用特权

评论回复
沙发
iyoum| | 2023-4-15 19:45 | 只看该作者
python可以写固件吗               

使用特权

评论回复
板凳
vivilyly| | 2023-4-15 20:02 | 只看该作者
这个怎么烧录响应的固件呢?              

使用特权

评论回复
地板
wilhelmina2| | 2023-4-16 22:13 | 只看该作者
MicroPython又进一步降低了门槛。

使用特权

评论回复
5
jimmhu| | 2023-4-16 22:16 | 只看该作者
MicroPython到底值不值得学

使用特权

评论回复
6
youtome| | 2023-4-16 22:22 | 只看该作者
感觉开发单片机的方法越来越多了。

使用特权

评论回复
7
beacherblack| | 2023-4-16 22:29 | 只看该作者
MicroPython:只是对官方自己的开发板支持的非常良好

使用特权

评论回复
8
gygp| | 2023-4-16 22:44 | 只看该作者
MicroPython支持MM32 吗

使用特权

评论回复
9
alvpeg| | 2023-4-16 22:52 | 只看该作者
MicroPython都支持哪些单片机的设计?

使用特权

评论回复
10
vivilyly| | 2023-4-18 10:17 | 只看该作者

如何使用MicroPython控制单片机

使用特权

评论回复
11
pl202| | 2023-4-18 10:26 | 只看该作者
以在低性能的单片机上运行吗
              

使用特权

评论回复
12
minzisc| | 2023-4-18 11:31 | 只看该作者
MicroPython开发板入门实战篇  

使用特权

评论回复
13
wilhelmina2| | 2023-4-18 11:38 | 只看该作者
对应的引脚怎么分配              

使用特权

评论回复
14
earlmax| | 2023-4-18 15:50 | 只看该作者
一款容易上手的脚本语言,同时具有强大的功能,语法优雅简单。

使用特权

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

本版积分规则

91

主题

4082

帖子

1

粉丝