微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > PWM的产生和定时器测试

PWM的产生和定时器测试

时间:10-02 整理:3721RD 点击:
PWM作为当前直流电机及其他常用小型应用的主要控制方式之一,PWM可以说是一款开发板必须支持及测试的功能。


IntoRobot Neutron共有11个IO口可以输出PWM波,输出频率范围很广,达到20-100Khz,而且使用也很简单,只需要一句函数。
analogWrite(A5, 100, 10000);//占空比0-255
在这里我生成了一个10Khz的PWM波,占空比100/255=39%
在用这个函数之前首先要对IO口进行初始化,将其初始化为输出。
pinMode(A5,OUTPUT);
连接示波器,察看PWM的输出效果。


可以看到频率,占空比都是比较准确的。
接下来是Neutron的定时器部分,Neutron支持最多10个定时器,最小分度1ms,正常是肯定够用了。
底层是由FreeRTOS接管的。定时器的使用官网给了例子,具体可以见intorobot的官网的函数接口资料。

  1. Timer(unsigned period, timer_callback_fn callback_, bool one_shot=false)
  2. // EXAMPLE
  3. void print_every_second()
  4. {
  5.     static int count = 0;
  6.     Serial.println(count++);
  7. }
  8. Timer timer(1000, print_every_second);
  9. void setup()
  10. {
  11.     Serial.begin(115200);
  12.     timer.start();
  13. }

复制代码

定时器的函数可以设定时间和自行定义中断回掉函数名,非常的方便。
我在程序了则定义了一个5ms的定时器,在回掉函数中利用USB串口打印"hello"作为测试。
在这里附上我的测试代码:

  1. Timer timer0(5, timer0_callback);
  2. void timer0_callback()
  3. {
  4.      SerialUSB.println("hello");
  5. }
  6. void setup()
  7. {
  8.     //Serial.begin(115200);
  9.     SerialUSB.begin(115200);
  10.     pinMode(A5,OUTPUT);// put your setup code here, to run once.
  11.     pinMode(A6,OUTPUT);
  12.     pinMode(D0,OUTPUT);
  13.     analogWrite(A5, 100, 10000);//占空比0-255
  14.     analogWrite(A6, 0, 10000);//占空比0-255
  15.     timer0.start();
  16. }
  17. void loop()
  18. {

  19. }

复制代码

下载程序成功后,串口成功显示数据,定时器成功运行。
不过在这个过程中也有着小插曲,就是串口下载一直失败,在线下载则经常连接不上,在官方交流群中,通过技术人员的指导,费了不少力气才得以正常下载。在这里也提醒一下大家,Neutron的串口下载需要安装DFU驱动,再通过molocbridge进行下载。如果遇到同样的问题,可以尝试解决。有更多的问题还可以添加intorobot的官方交流群:455913904,常见的问题一般都可以在技术人员的帮助下解决,技术人员还是比较耐心的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top