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

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本相关的知识,希望对你有一定的参考价值。

简 介: 对于初步实现的MicroPython的版本进行了测试。可以看到这个版本在MCU的硬件层面还存在BUG,在实际管脚上尚无法输出对应的PWM波形。

关键词 MM32MicroPythonPWM

MM32 Micropython
文章目录
版本介绍
下载测试
编程测试
基本测试
相关文件
machine_pwm
machine管脚配置
测试总结

 

§01 MM32 Micropython


  今天早上(2021-11-20)MindMotion SuYong发送过来新一版本,增加了PWM的功能。

一、版本介绍

  下面是Suyong对于该版本的微信说明。

微蓝[SY]:
这个PWM跟micropython官网上的不一样。官网上用的是rp2的实现, 但micropython代码仓库里还有esp32和esp8266的实现。我选择了后者, 看起来更符合正常的使用习惯

1、SuYong测试结果

▲ 图1.1.1 测试版本的结果

  缺少信息: SunYong并没有发送过来的关于PWM的管脚分配信息

  后来SuYong将machine_pwm的声明发送过来,如下:


/* for PWM. */
machine_pwm_port_conf_t machine_pwm_port_conf[2];
machine_pwm_ch_conf_t  machine_pwm_ch_conf[8];

const machine_pwm_obj_t pwm_0 = .base =  &machine_pwm_type , .pwm_pin_obj = &pin_PA6, 
            .pwm_pin_af = GPIO_AF_2, .tim_port = TIM3, 
            .port_conf = &machine_pwm_port_conf[0], 
            .tim_ch = 0u, .ch_conf = &machine_pwm_ch_conf[0], .pwm_id = 0u;
const machine_pwm_obj_t pwm_1 = .base =  &machine_pwm_type , .pwm_pin_obj = &pin_PA7, 
			.pwm_pin_af = GPIO_AF_2, .tim_port = TIM3, 
			.port_conf = &machine_pwm_port_conf[0], 
			.tim_ch = 1u, .ch_conf = &machine_pwm_ch_conf[1], .pwm_id = 1u;
const machine_pwm_obj_t pwm_2 = .base =  &machine_pwm_type , 
			.pwm_pin_obj = &pin_PB0, .pwm_pin_af = GPIO_AF_2, 
			.tim_port = TIM3, .port_conf = &machine_pwm_port_conf[0], 
			.tim_ch = 2u, .ch_conf = &machine_pwm_ch_conf[2], .pwm_id = 2u;
const machine_pwm_obj_t pwm_3 = .base =  &machine_pwm_type , 
			.pwm_pin_obj = &pin_PB1, .pwm_pin_af = GPIO_AF_2, 
			.tim_port = TIM3, .port_conf = &machine_pwm_port_conf[0], 
			.tim_ch = 3u, .ch_conf = &machine_pwm_ch_conf[3], .pwm_id = 3u;
const machine_pwm_obj_t pwm_4 = .base =  &machine_pwm_type , 
			.pwm_pin_obj = &pin_PB6, .pwm_pin_af = GPIO_AF_2, 
			.tim_port = TIM4, .port_conf = &machine_pwm_port_conf[1], 
			.tim_ch = 0u, .ch_conf = &machine_pwm_ch_conf[4], .pwm_id = 4u;
const machine_pwm_obj_t pwm_5 = .base =  &machine_pwm_type , 
			.pwm_pin_obj = &pin_PB7, .pwm_pin_af = GPIO_AF_2, 
			.tim_port = TIM4, .port_conf = &machine_pwm_port_conf[1], 
			.tim_ch = 1u, .ch_conf = &machine_pwm_ch_conf[5], .pwm_id = 5u;
const machine_pwm_obj_t pwm_6 = .base =  &machine_pwm_type , 
			.pwm_pin_obj = &pin_PB8, .pwm_pin_af = GPIO_AF_2, 
			.tim_port = TIM4, .port_conf = &machine_pwm_port_conf[1], 
			.tim_ch = 2u, .ch_conf = &machine_pwm_ch_conf[6], .pwm_id = 6u;
const machine_pwm_obj_t pwm_7 = .base =  &machine_pwm_type , 
			.pwm_pin_obj = &pin_PB9, .pwm_pin_af = GPIO_AF_2, 
			.tim_port = TIM4, .port_conf = &machine_pwm_port_conf[1], 
			.tim_ch = 3u, .ch_conf = &machine_pwm_ch_conf[7], .pwm_id = 7u;

const machine_pwm_obj_t * machine_pwm_

  可以看到八个PWM通道的Timer和GPIO的定义如下:

【表1-1 PWM资源配置】

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

2、下载链接

  下载MicroPython for MM32的测试版本:

https://gitee.com/tsinghuajoking/programming-technology/commit/fd9764d913661c216c5b98587994e4a6b73b08c5

二、下载测试

1、下载MicroPython过程

  利用 设计带有SD卡的 MM32F3277 MicroPython 实验板 对于 MicroPython进行测试。使用 MM32-Link 将MicroPython的BIN文件下载到测试板上。

▲ 图1.2.1 下载MM32F3277 MicroPython

2、上电MicroPython

  利用 STM32 Bootloader 软件作为MicroPython REPL的操作界面。调试MicroPython。

(1)上电显示

  上电后,在STM32 Bootloader显示信息窗口显示:

>> 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-19; MB_F3270 with MM32F3277G7P
>>> 

(2)REPL初步操作

  在STM32 Bootloader 进行REPL 交互式操作。

>>> import machine
>>> dir(machine)
['__name__', 'ADC', 'DAC', 'PWM', 'Pin', 'SDCard', 'SPI', 'SoftSPI', 'UART', 'freq', 'mem16', 'mem32', 'mem8']
>>> 

  可以看到其中已经包括了 PWM 模块。

 

§02 程测试


  面对于PWM功能通过编程来实现它的的功能初步测试。

一、基本测试

1、声明与信息

(1)测试代码

from machine                import PWM,Pin
import utime

pwm0 = PWM(0, freq=10000, duty=20)

print(pwm0)
pwm0.duty(50)
print(pwm0)

pwm0.init(freq=12000)
print(pwm0)

pwm0.deinit()
pwm0.init(freq=12000)
print(pwm0)

(2)输出结果

>> Download MicroPython : 29 lines/619 characters.
>> -------------------------------------------------------------------------

PMW(0, freq=10000, duty=20)
PMW(0, freq=10000, duty=50)
PMW(0, freq=10000, duty=0)
PMW(0, freq=12000, duty=0)
>>> 

(3)结果解释

  通过上述过程,可以看到如果修改PWM的frequency,需要:

  • 首先进行 deinit()
  • 然后进行 init(freq=…)

  直接通过init(freq…)是无法进行修改频率的。

2、测试PWM波形

(1)测试代码

from machine                import PWM,Pin
import utime

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

dir(pwm0)

print(pwm0, pwm1)

  REPL 输出结果:

>> Download MicroPython : 24 lines/563 characters.
>> -------------------------------------------------------------------------

['deinit', 'duty', 'freq', 'init']
PMW(0, freq=12000, duty=20) PMW(1, freq=12000, duty=100)
>>> 

(2)测试结果

使用示波器在PA6,PA7上只观察到了低电平,并没有观察到输出的PWM波形。

  感觉, 现在这个版本只是将MCU的PA6,PA7进行了初始化,但没有开始启动对应的TIM3!

3、其它问题

  实际上在【2.1.1.1:测试代码】中最后将PWM的频率初始化为12000之后,然后在【2.1.2.1:测试代码】中本来是声明的时候,为10000。

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

  但执行结果为:12000。这是因为在两次MicroPython下载

以上是关于测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本的主要内容,如果未能解决你的问题,请参考以下文章

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

制作灵动单片机MM32F3277 测试版

MM32F3277 MicroPython 实验板设计和软件测试

测试MM32F3277基本模块功能

测试MM32F3277中的MicroPython的Signal功能

测试MM32F3277 MicroPython 的定时器功能