MindMotion MM32 单片机上的MicroPython移植-PWM
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MindMotion MM32 单片机上的MicroPython移植-PWM相关的知识,希望对你有一定的参考价值。
简 介: 对于MindMotion在11月22日发送过来的移植有PWM功能的MicroPython的软件进行了测试。首先,在两个PWM的通道(PA6,PA7)上可以测试到输出的波形,但信号参数与设置之间还存在着差异: 输出频率比设置频率小; 输出的占空比正好与设置的相反。
关键词
: MM32,PWM,MicroPython
§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的主要管脚与内部定时器资源如下:
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在这个环节并没有能够进行进一步的 优化。
■ 相关文献链接:
- MicroPython/MindMotion/firmware-2021-11-22.bin · 卓晴/编程技术 - Gitee.com
- 测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本
- 设计带有SD卡的 MM32F3277 MicroPython 实验板
● 相关图表链接:
以上是关于MindMotion MM32 单片机上的MicroPython移植-PWM的主要内容,如果未能解决你的问题,请参考以下文章
测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本
MindMotion MM32F3277 SoftI2C功能测试
测试MindMotion 的 ISP功能 - 无法进入ISP功能