arduino适合高频应用吗?

时间:2015-06-01 07:44:58

标签: arduino

我可以将arduino用于频率为4 MHz的应用程序吗?

我需要创建一个具有此频率的clk,并在上升沿和下降沿发送和接收数据。它不是一个普通的SPI接口,我有自己的条件,所以我需要手动完成。

如果不合适,技术上是否可行?

2 个答案:

答案 0 :(得分:1)

使用arduino Mega 2560可以产生的最大PWM为62500 Hz。我不认为你可以超越这个。 Method

您可以使用内部SPI,因此使用16MHz振荡器可以达到16MHz至(16/128)MHz的某些频率。 Method

答案 1 :(得分:0)

您可以使用Timer1(ATMega328和ATmega32U4)以4MHz的PWM输出,这是UNO / NANO(ATMega328)的示例:

    pinMode(10, OUTPUT); // Output pin
    // Set Timer1 to phase and frequency correct mode. NON-inverted mode
    TCCR1A = _BV(COM1A1) | _BV(COM1B1); 

    // Set prescaler to clk/1 (outputs from 122,072Hz to 4MHz
    TCCR1B = _BV(WGM13) | _BV(CS10);

    //ICR Register, which controls the PWM total pulse length
    ICR1 = 2; // value 2 makes pulse width = 2 clock cycles (with clk/1 prescaler)
    //OCR Registers, which control the PWM duty cycle.
    // OCR1A + OCR1B must be = IRC1.
    OCR1A = 1; // 1 pulse of the IRC1 total pulse length will be HIGH
    OCR1B = 1; // 1 pulse of the IRC1 total pulse length will be HIGH
  

提示:您可以将其他IRC1和OCR1值用于其他频率和占空比。频率= 8000000 / IRC1。

     

实施例:IRC1 = 4,OCR1A = 1,OCR1B = 3

     

将输出如下的PWM:

     

频率8000000 / IRC1 = 8000000/4 = 2000000Hz = 2MHz

     

1个时钟周期为高电平(OCRA1 = 1),3个时钟周期为低电平(OCR1B = 3)

     

OCR1A / IRC1的占空比= 1/4 = 25%

注意: 任何使用TIMER1的Arduino代码都不会在此之后工作(或者会不正常地工作)。 Arduino将TIMER1用于伺服库。