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的官网的函数接口资料。
我在程序了则定义了一个5ms的定时器,在回掉函数中利用USB串口打印"hello"作为测试。
在这里附上我的测试代码:
不过在这个过程中也有着小插曲,就是串口下载一直失败,在线下载则经常连接不上,在官方交流群中,通过技术人员的指导,费了不少力气才得以正常下载。在这里也提醒一下大家,Neutron的串口下载需要安装DFU驱动,再通过molocbridge进行下载。如果遇到同样的问题,可以尝试解决。有更多的问题还可以添加intorobot的官方交流群:455913904,常见的问题一般都可以在技术人员的帮助下解决,技术人员还是比较耐心的。
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的官网的函数接口资料。
- Timer(unsigned period, timer_callback_fn callback_, bool one_shot=false)
- // EXAMPLE
- void print_every_second()
- {
- static int count = 0;
- Serial.println(count++);
- }
- Timer timer(1000, print_every_second);
- void setup()
- {
- Serial.begin(115200);
- timer.start();
- }
我在程序了则定义了一个5ms的定时器,在回掉函数中利用USB串口打印"hello"作为测试。
在这里附上我的测试代码:
- Timer timer0(5, timer0_callback);
- void timer0_callback()
- {
- SerialUSB.println("hello");
- }
- void setup()
- {
- //Serial.begin(115200);
- SerialUSB.begin(115200);
- pinMode(A5,OUTPUT);// put your setup code here, to run once.
- pinMode(A6,OUTPUT);
- pinMode(D0,OUTPUT);
- analogWrite(A5, 100, 10000);//占空比0-255
- analogWrite(A6, 0, 10000);//占空比0-255
- timer0.start();
- }
- void loop()
- {
- }
不过在这个过程中也有着小插曲,就是串口下载一直失败,在线下载则经常连接不上,在官方交流群中,通过技术人员的指导,费了不少力气才得以正常下载。在这里也提醒一下大家,Neutron的串口下载需要安装DFU驱动,再通过molocbridge进行下载。如果遇到同样的问题,可以尝试解决。有更多的问题还可以添加intorobot的官方交流群:455913904,常见的问题一般都可以在技术人员的帮助下解决,技术人员还是比较耐心的。