P.S.如果你要实现的任务不复杂,用arduino IDE进行编程、汇编是可以的,如果对时效要求较高,譬如想达到1Mbps的串口传输速率或者400kHz的I2C通信或者10KHz以上的方波输出或者尽可能短的程序执行周期,建议在Atmel Studio用gcc直接对avr进行编程。效率很轻松的能达到arduino IDE编译的程序的5到10倍强。
P.P.S.你的电脑上位机程序编写看你个人爱好,如果你之前学过编程有基础,可以用VB,C++,DELPHI.如果你的基础不是太牢并且想短时间内看到成果,推荐matlab或者labview。内部集成强大的数学分析工具,可以直接使用,譬如离散卡尔曼,FFT,等等等等。
有以下疑问:1. SoftPWMSet 这是什么鬼? arduino的pwm输出,可以直接使用analogwrite函数。若是你自己写的,;源文件丢出来给人看看是啥。
2. 还有"pins_arduino.h"也是,如果是自己写的,都把它贴出来。
3. arduino的中断,不是这样用的。直接使用<avr/interrupt.h>,会造成冲突.
4. 对你这个程序,你遇到的困难是?想跟网友求助那个问题?看了10多分钟,还是一头雾水。你这个我大概看了下,目测你的程序是这样的:3,5,10,9,这四个引脚来控制两个直流电机,直接扩流来驱动电机,引脚8接的是一个LeD,用于显示状态,还有个11引脚,从注释的字面上理解,应该是超声波的相关引脚,但是一个引脚,超声波,我愚钝,看不出来的是干嘛。
看了10多分钟,还没搞懂你想要干嘛,根据超声波测得的距离,来控制小车前进后退?还是前进过程中,超声波检测到障碍来做避障?
根据前面的分析,你这段代码,肯定是不通过编译的,错误提示呢?
你要网友帮你修正程序,但是又不知道你的需求,怎么改?
总之,分给我吧~~~
脉冲宽度调制或PWM是用于改变脉冲串中的脉冲宽度的常用技术。PWM有许多应用,如控制伺服和速度控制器,限制电机和LED的有效功率。PWM的基本原理
脉冲宽度调制基本上是一个随时间变化而变化的方波。基本的PWM信号如下图所示。
有很多术语与PWM相关:
第 1 页
∙ On-Time(导通时间) - 时间信号的持续时间较长。
∙ Off-Time(关断时间) - 时间信号的持续时间较短。
∙ Period(周期) - 表示为PWM信号的导通时间和关断时间的总和。
∙ Duty Cycle(占空比) - 它表示为在PWM信号周期内保持导通的时间信号的百分比。
周期
如图所示,Ton表示导通时间,Toff表示信号的关断时间。周期是导通和关断时间的总和,并按照以下公式计算:
第 2 页
占空比
占空比用于计算为一段时间的导通时间。使用上面计算的周期,占空比计算为:
analogWrite()函数
analogWrite()函数将模拟值(PWM波)写入引脚。它可用于以不同的亮度点亮LED或以各种速度驱动电机。在调用analogWrite()函数之后,引脚将产生指
第 3 页
定占空比的稳定方波,直到下一次调用analogWrite()或在相同引脚上调用digitalRead()或digitalWrite()。大多数引脚上的PWM信号频率约为490 Hz。在Uno和类似的板上,引脚5和6的频率约为980Hz。Leonardo上的引脚3和11也以980Hz运行。
在大多数Arduino板上(ATmega168或ATmega328),此功能在引脚3,5,6,9,10和11上工作。在Arduino Mega上,它在引脚2-13和44-46上工作。旧的Arduino ATmega8板仅支持引脚9,10和11上的 analogWrite()。
第 4 页
Arduino Due支持引脚2至13以及引脚DAC0和DAC1上的 analogWrite()。与PWM引脚不同,DAC0和DAC1是数模转换器,用作真正的模拟输出。
在调用analogWrite()之前,不需要调用pinMode()将引脚设置为输出。
analogWrite()函数语法
analogWrite ( pin , value )
value − the duty cycle: between 0 (always off) and 255 (always on).
第 5 页
value - 占空比:0(始终导通)到255(始终关断)之间。
示例
int ledPin = 9// LED connected to digital pin 9
int analogPin = 3// potentiometer connected to analog pin 3
int val = 0// variable to store the read value
void setup() {
pinMode(ledPin, OUTPUT)// sets the pin as output
第 6 页
}
void loop() {
val = analogRead(analogPin)// read the input pin
analogWrite(ledPin, (val / 4))// analogRead values go from 0 to 1023,
// analogWrite values from 0 to 255
}
第 7 页
百度文库
搜索
arduinonano怎么输出脉冲宽度
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)